如何在Ubuntu 15.04上安装Nginx with ModSecurity

在本教程中,我将向您展示如何在Ubuntu 15.04上为快速Nginx Web服务器安装mod_security。我将配置ModSecurity作为独立...

ModSecurity是Apache Nginx和IIS Web服务器的开源Web应用程序防火墙(WAF)。 该应用层防火墙由Trustwave的SpiderLabs开发,并在Apache License 2.0下发布。 ModSecurity通过使用一组正则表达式规则来过滤常见的漏洞,从而保护网站免受黑客攻击,它允许HTTP流量监控,日志记录,实时分析和攻击检测。 有超过16.000条规则可用于检测诸如SQL注入,跨站脚本(XSS),本地文件包含,远程文件包含以及许多Web应用程序(如Wordpress,Joomla,Drupal等)的应用程序特定规则之类的攻击。

在本教程中,我将向您展示如何为快速Nginx Web服务器安装mod_security。 我将ModSecurity配置为独立模块,然后从源代码构建Nginx以包含ModSecurity。

先决条件

  • 一个Ubuntu 15.04服务器,我将使用IP 192.168.1.106。
  • 根特权

我们将在本教程中做什么:

  • 更新Ubuntu 15.04系统和存储库。
  • 安装所需的依赖关系来构建Nginx和ModSecurity。
  • 下载ModSecurity和Nginx。
  • 安装ModSecurity和Nginx。
  • 配置Nginx。
  • 配置ModSecurity。
  • 配置OWASP核心规则集(CRS)。
  • 测试。

以下所有命令都必须以root身份执行。 跑:

sudo -i

在您的服务器上成为root用户。

更新系统和存储库

在开始安装所有依赖项之前,请更新系统:

apt-get update
apt-get upgrade

2.安装构建依赖项

安装使用apt命令编译Nginx和ModSecurity所需的所有软件包:

apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev

3.下载ModSecurity和Nginx

转到目录“/ usr / src /” ,然后从Github克隆ModSecurity存储库:

cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity

使用wget命令下载Nginx,我将在这里使用Nginx稳定版本1.8。 如果您想使用其他版本,请访问Nginx 下载页面以获取所有可用版本的列表。

wget http://nginx.org/download/nginx-1.8.0.tar.gz

4.安装ModSecurity和Nginx

现在是安装ModSecurity的时候了,请访问/ usr / src / modsecurity目录:

cd /usr/src/modsecurity/

并将ModSecurity作为独立模块在您的服务器上编译,因此我们可以将其包含在Nginx中:

./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

现在去nginx目录,编译Nginx并加入ModSecurity模块:

cd ../nginx-1.8.0
./configure \
  --user=www-data \
  --group=www-data \
  --with-debug \
  --with-ipv6 \
  --with-http_ssl_module \
  --add-module=/usr/src/modsecurity/nginx/modsecurity

configure命令说明:

Nginx将运行在用户和组“www-data”下,我们激活了debug,ipv6和ssl模块。 最后我们将ModSecurity模块包含在Nginx中。

现在安装Nginx:

make
make install

当make install命令完成后,您可以看到Nginx安装在“/ usr / local / nginx”目录中:

cd /usr/local/nginx/

ll
drwxr-xr-x  2 root root 4096 Oct  3 07:21 conf/
drwxr-xr-x  2 root root 4096 Oct  3 07:21 html/
drwxr-xr-x  2 root root 4096 Oct  3 07:21 logs/
drwxr-xr-x  2 root root 4096 Oct  3 07:21 sbin/

配置Nginx

使用vi / vim编辑nginx配置文件,并配置nginx在用户“www-data”下运行。

cd /usr/local/nginx/
vi conf/nginx.conf

在第一行,取消注释“用户”行,并将用户更改为www-data:

user  www-data;

保存并退出。

为nginx二进制创建一个符号链接,所以我们可以直接使用命令“nginx”

ln -s /usr/local/nginx/sbin/nginx /bin/nginx

接下来,我们将为Nginx创建一个用于启动/停止Nginx守护程序的系统脚本。 请访问目录“/ lib / systemd / system /”并创建一个新的文件“nginx.service”与vi:

cd /lib/systemd/system/
vi nginx.service

粘贴下面的脚本:

[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillStop=/usr/local/nginx/sbin/nginx -s stop

KillMode=process
Restart=on-failure
RestartSec=42s

PrivateTmp=true
LimitNOFILE=200000

[Install]
WantedBy=multi-user.target

保存并退出。

现在重新加载systemd-daemon,以便systemd加载我们新的Nginx服务文件。

systemctl daemon-reload

测试nginx配置并使用systemctl命令启动nginx:

nginx -t
systemctl start nginx

6.配置ModSecurity

将ModSecurity配置文件复制到nginx目录,并将其命名为“modsecurity.conf”

cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/

使用vi编辑器打开modsecurity.conf文件:

cd /usr/Local/nginx/conf/
vi modsecurity.conf

在第7行中,将“DetectionOnly”更改为“on”

SecRuleEngine On

在第38行中,将“ SecRequestBodyLimit ”的值增加到“100000000”。

SecRequestBodyLimit 100000000

在第192行中,将“ SecAuditLogType ”的值更改为“ 并发 ”,并注释掉SecAuditLog行和取消注释行196。

SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log

# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/

保存并退出。

现在为ModSecurity审核日志创建新目录,并将所有者更改为www-data。

mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/

7.配置OWASP核心规则集(CRS)

从github下载OWASP核心规则集。

cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

转到目录“ owasp-modsecurity-crs ”并将目录“base_rules”复制到nginx目录。

cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/

编辑modsecurity.conf并添加OWASP CRS。

cd /usr/Local/nginx/conf/
vi modsecurity.conf

请转到文件的末尾并添加以下配置:

#DefaultAction
SecDefaultAction "log,deny,phase:1"

#If you want to load single rule /usr/loca/nginx/conf
#Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf

#Load all Rule
Include base_rules/*.conf

#Disable rule by ID from error message (for my wordpress)
SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015

保存并退出。

最后一步,通过编辑“ nginx.conf ”文件将modsecurity.conf文件添加到Nginx配置。

vi conf/nginx.conf

添加modsecurity.conf:

[.....]

#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;

[.....]

保存并退出。

重新启动Nginx以应用配置更改:

systemctl restart nginx

8.测试

我有一个WordPress网站运行在Nginx和ModSecurity,它是正常工作。 对于测试,我将安装一个易受XSS和SQL注入攻击的新插件。

结果如下:

XSS被禁止
https://www.exploit-db.com/exploits/37107/

浏览器访问:

服务器日志:

XSS检测。

禁止SQL注入
https://www.exploit-db.com/exploits/37560/

浏览器访问:

SQL注入动作。

服务器日志:

SQL注入日志。

Nginx和ModSecurity成功。

结论

ModSecurity是由Trustwave的SpiderLabs开发的开源WAF(Web应用程序防火墙),用于保护您的Web应用程序。 有超过16.000个规则可用于检测攻击,如SQL注入,XSS,LFI,RFI等.ModSecurity易于安装,可用作Apache,Nginx和IIS for Windows的模块。

参考