如何部署 Modsecurity Nginx 在 Ubuntu 20.04 长期支持

ModSecurity 是一个免费的开源 Web 应用程序防火墙,由不同的 Web 服务器支持,例如 Apache、IIS 和 Nginx. 它被部署为外部安全层以保护 Web 服务器。

在本教程中,您将学习如何安装预装的 ModSecurity 防火墙 Nginx. 我们用过 Ubuntu 20.04服务器演示程序。

先决条件

Ubuntu 20.04 LTS 服务器

Nginx 安装在 Ubuntu 服务器

安装指南

如果你没有 Nginx 安装在您的服务器上,请按照本指南来满足 Modsecurity 安装要求:

How to Install Nginx on Ubuntu 20.04 LTS Using Source Code

现在你已经安装了 Nginx让我们开始安装 ModSecurity。

第 1 步:安装 libmodsecurity3

首先,在您的机器上安装 git,以便您可以克隆 ModSecurity git 存储库。 我们可以通过运行以下命令来完成:

sudo apt install git -y

现在已经安装了 git,通过运行以下命令克隆存储库:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

第 2 步:转到 Modsecurity 目录

现在您已经克隆了 modsecurity git 存储库,请按照以下路径进入 modsecurity 目录:

cd /usr/local/src/ModSecurity/

第 3 步:安装 libmodsecurity3 依赖项

现在我们位于 Modsecurity 目录中,我们将在此步骤中安装 libmodsecurity3 依赖项。 运行此命令:

sudo apt install gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libpcre3 libpcre3-dev libxml2 libxml2-dev libcurl4 libgeoip-dev libyajl-dev doxygen -y

第 4 步:安装 Git 模块

现在,借助此命令安装 git 子模块:

git submodule init

接下来,我们将更新子模块:

git submodule update

第五步:搭建modsecurity环境

是时候构建 modsecurity 环境了。 为此,请运行以下命令:

./build.sh

现在使用此命令进行配置:

./configure

在此之后,您将收到此错误:

可以忽略这一点并继续前进。

第六步:编译modsecurity源码

现在我们将使用以下命令编译 libmodsecurity3 的环境:

make

如果想提高编译速度,可以指定-j 。 我有 4 个 CPU,我将使用全部 4 个进行编译,如下所示:

make -j 4

接下来,我们将运行安装命令:

sudo make install

安装是在 /usr/本地/modsecurity/.

Step 7: Install modsecurity-nginx connector

在此步骤中,我们将安装 Modsecurity-nginx 连接器。 它是人与人之间的连接点和沟通点 Nginx 和 ModSecurity。

首先,我们需要克隆连接器存储库。 通过运行以下命令来做到这一点:

sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
/usr/local/src/ModSecurity-nginx/

第 8 步:安装 modsecurity-nginx 依赖项

首先,去 Nginx 源目录如下:

cd /usr/local/src/nginx/nginx-1.21.1

确保更换 Nginx 命令中的版本与您当前的版本 Nginx 版本否则你会得到一个错误。

要安装必要的依赖项,请运行以下命令:

sudo apt build-dep nginx && sudo apt install uuid-dev -y

接下来,我们将通过运行以下命令使用 –with-compat 标志编译 Modsecurity-nginx 连接器模块:

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

现在运行此命令来创建动态模块:

sudo make modules

现在,借助此命令将您刚刚在 objs/ngx_http_modsecurity_module.so 中创建的动态模块复制到 /usr/share/nginx/modules:

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

第 9 步:启用 Modsecurity Nginx 配置文件

启用 Modsecurity Nginx,您需要首先在配置中指定加载模块和您的 modsecurity 模块的路径。

打开 Nginx 使用 nano 编辑器的配置文件如下所示:

sudo nano /etc/nginx/nginx.conf

在文件中,将这一行添加到顶部:

load_module modules/ngx_http_modsecurity_module.so;

在 HTTP {} 部分下,添加以下代码行:

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;

第 10 步:为 modsecurity 配置目录和文件

创建一个名为 modsec 的目录。 命令中提到了目录的路径:

sudo mkdir /etc/nginx/modsec/

您以后将需要此目录来存储配置文件和规则。

现在,使用以下命令从克隆的 git 目录中复制示例 Modsecurity 配置文件:

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

现在打开modsecurity配置文件:

sudo nano /etc/nginx/modsec/modsecurity.conf

在第 7 行的文件中找到 SecRuleEngine 指令并将其更改为 DetectionOnly,如下所示:

secruleEngine仅检测

要启用 Modsecurity,请将以下指令更改为 On,如下所示:

secRuleEngine on

现在在第 224 行找到以下指令:

secAuditLogParts ABIJDEFHZ

将其更改为:

secAuditLogParts ABCDEFHJKZ

现在创建 modsec-config.conf 文件。 在这里,您将添加 modsecurity.conf 和 modsecurity 的其他规则:

sudo nano /etc/nginx/modsec/modsec-config.conf

在您刚刚创建的文件中,添加以下行:

Include /etc/nginx/modsec/modsecurity.conf

保存文件并退出。

第 11 步:复制 unicode.mapping 文件

最后,像这样复制 Modsecurity 的 unicode.mapping 文件:

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

第 12 步:检查 Nginx 配置

重启前 Nginx,通过运行以下命令检查配置是否正常:

sudo nginx -t

如果你得到以下输出,你就可以开始了:

第 13 步:重新加载 Nginx

现在重启 Nginx 使用此命令:

sudo systemctl restart nginx

在本指南中,我们看到了如何在已经预装的 ubuntu 服务器上安装 Modsecurity Nginx 在上面。 我们还看到了如何配置 ModSecurity 和 Nginx 借助一些易于遵循的命令将它们连接起来。