如何在 Ubuntu 15.04 上使用 ModSecurity 安装 Nginx
本教程适用于这些操作系统版本
- Ubuntu 16.04(Xenial Xerus)
- Ubuntu 15.04(Vivid Vervet)
在此页
- 先决条件
- 2。安装构建依赖项
- 3。下载 ModSecurity 和 Nginx
- 4。安装 ModSecurity 和 Nginx
- 5。配置 Nginx
- 6。配置 ModSecurity
- 7.配置 OWASP 核心规则集 (CRS)
- 8.测试
- 结论
- 参考资料
ModSecurity 是用于 Apache Nginx 和 IIS Web 服务器的开源 Web 应用程序防火墙 (WAF)。此应用层防火墙由 Trustwaves 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
成为您服务器上的根用户。
1.更新系统和存储库
在开始安装所有依赖项之前,请更新您的系统:
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
配置命令说明:
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/
5.配置Nginx
用vi/vim编辑nginx配置文件,配置nginx在\www-data\用户下运行。
cd /usr/local/nginx/
vi conf/nginx.conf
在第一行,取消注释 \user\ 行并将用户更改为 www-data:
user www-data;
保存并退出。
为 nginx 二进制文件创建一个符号链接,以便我们可以直接使用命令 \nginx\。
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
接下来我们将为 Nginx 创建一个 systemd 脚本,用于启动/停止 Nginx 守护进程。请转到目录\/lib/systemd/system/\ 并使用 vi 创建一个新文件 \nginx.service\:
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\ 的值更改为 \Concurrent\ 并注释掉 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. 测试
我有一个在 Nginx 和 ModSecurity 上运行的 WordPress 网站,它工作正常。为了进行测试,我将安装一个易受 XSS 和 SQL 注入攻击的新插件。
以下是结果:
禁止 XSS
https://www.exploit-db.com/exploits/37107/
浏览器访问:

服务器日志:

禁止 SQL 注入
https://www.exploit-db.com/exploits/37560/
浏览器访问:

服务器日志:

Nginx 和 ModSecurity 成功。
结论
ModSecurity 是由 Trustwaves SpiderLabs 开发的开源 WAF(Web 应用程序防火墙),用于保护您的 Web 应用程序。有超过 16.000 条规则可用于检测 SQL 注入、XSS、LFI、RFI 等攻击。ModSecurity 易于安装,可作为适用于 Windows 的 Apache、Nginx 和 IIS 的模块使用。
参考
- https://www.modsecurity.org/documentation.html
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual