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/
浏览器访问:
服务器日志:
禁止SQL注入
https://www.exploit-db.com/exploits/37560/
浏览器访问:
服务器日志:
Nginx和ModSecurity成功。
结论
ModSecurity是由Trustwave的SpiderLabs开发的开源WAF(Web应用程序防火墙),用于保护您的Web应用程序。 有超过16.000个规则可用于检测攻击,如SQL注入,XSS,LFI,RFI等.ModSecurity易于安装,可用作Apache,Nginx和IIS for Windows的模块。