系统: centos 7.x
nginx : nginx-1.1 7 . 3 .tar.gz
modsecurity : modsecurity-3.0.0.tar.gz
nginx-modsecurity: ModSecurity-nginx-master.zip (nginx 和 modsecurity 的连接器 )
Owasp: owasp-modsecurity-crs-3.2-dev (ModSecurity 官方免费规则 )
(一 modsecurity 安装)
系统依赖:
yum -y install libtool libtool-ltdl-devel gcc gcc-c++ pcre-devel zlib-devel libxml2-devel libxslt-devel gd-devel perl perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data libatomic_ops-devel openssl openssl-devel autoconf automake 。
Modsecurity : 安装
[root@localhost ~]# tar xf modsecurity-v3.0.0.tar.gz
[root@localhost ~]# cd modsecurity-v3.0.0
# 如果 GeoIP 是自己下载的 tar.gz 包就执行
[root@localhost modsecurity-v3.0.0]# ./configure --with-geoip=/usr/local/GeoIP && make && make install
# 如果 GeoIP 是 yum 安装就执行 ./configure && make && make install
make 编译时,如果 gcc 4.8 以下版本,会报错如图所示:

解决办法:将gcc 升级到 4.8 以上版本。
ModSecurity-nginx : 安装
Cd /opt/apps
unzip ModSecurity-nginx-master.zip
mv ModSecurity-nginx-master /usr/local/modsecurity-nginx
Nginx : 安装
cd /opt/apps
tar -zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
./configure --add-module=/usr/local/modsecurity-nginx
make && make install
nginx + ModSecurity-nginx : 配置
在/usr/local/nginx 的 conf 下创建文件夹 modsecurity
cd /usr/local/modsecurity/
cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity/modsecurity.conf
cp unicode.mapping /usr/local/nginx/conf/modsecurity
nginx.conf : 配置
在http 或 server 节点中添加以下内容(在 http 节点添加表示全局配置,在 server 节点添加表示为指定网站配置)
vim /usr/local/nginx/conf/nginx.conf
....
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
http {
#access_log logs/access.log main;
............
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
modsecurity on; # 开启 modsecurity
location / {
# 加载 modsecurity 配置文件路径
modsecurity_rules_file /usr/local/nginx/modsecurity.conf;
root html;
index index.html index.htm;
}
.........
}
}
配置owasp 规则文件 :
cd /opt/apps
unzip owasp-modsecurity-crs-3.3-dev.zip
cd owasp-modsecurity-crs-3.3-dev
# 复制 crs-setup.conf.example 到 /usr/local/nginx/conf/modsecurity/ 下并重命名为 crs-setup.conf.
cp crs-setup.conf.example /usr/local/nginx/conf/modsecurity/crs-setup.conf
# 复制 rules 文件夹到 /usr/local/nginx/conf/modsecurity/
cp -r rules /usr/local/nginx/conf/modsecurity/
# 然后 cd /usr/local/nginx/conf/modsecurity/rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
modsecurity.conf : 配置
Vim /usr/local/nginx/conf/modsecurity/modsecurity.conf
# 默认只是检测,不拦截,可以修改配置,将
SecRuleEngine DetectionOnly 改为 => SecRuleEngine On
# 确保 ModSecurity 在记录审计日志时保存请求体 IJ 改为 C
SecAuditLogParts ABIJDEFHZ 改为 = 》 SecAuditLogParts ABCDEFHZ
# modsecurity.conf 的文件末尾添加以下内容:
Include /usr/local/nginx/conf/modsecurity/crs-setup.conf
Include /usr/local/nginx/conf/modsecurity/rules/*.conf
最后重启nginx 即可:
./nginx