1、安装ModSecurity
cd /usr/local
git clone https://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
git submodule init
git submodule update
sh build.sh
./configure
make
make install
2、安装ModSecurity-nginx
cd /usr/local
git clone https://github.com/SpiderLabs/ModSecurity-nginx
3、进入nginx源码目录
./configure --user=www \
--group=www --with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_slice_module \
--add-module=/usr/local/ModSecurity-nginx
make
make install
4、添加常用的OWASP规则
OWASP(开放式Web应用程序安全项目)是一个开放的社区,由非营利组织 OWASP基金会支持的项目。对所有致力于改进应用程序安全的人士开放,旨在提高对应用程序安全性的认识。其最具权威的就是“10项最严重的Web 应用程序安全风险列表” ,总结并更新Web应用程序中最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。
拷贝modsecurity基础配置文件
mkdir -p /usr/local/nginx/modsecurity/rules
cp /usr/local/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/modsecurity/modsecurity.conf
下载OWASP规则包,并拷贝配置文件
cd /usr/local
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs
cp crs-setup.conf.example /usr/local/nginx/modsecurity/crs-setup.conf
cp -r rules/ /usr/local/nginx/modsecurity/
进入规则目录,启用自定义规则文件
cd /usr/local/nginx/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
这2个文件就是自定义规则文件
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
5、编辑nginx.conf,启用ModSecurity
在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置)这里看具体需要,实际生产业务推荐写在server,这样方便控制
modsecurity on;
modsecurity_rules_file /usr/local/nginx/modsecurity/modsecurity.conf;
nginx -t
如果提示:
nginx: [emerg] "modsecurity_rules_file" directive Rules error. File: /usr/local/nginx/modsecurity/modsecurity.conf. Line: 258. Column: 17. Failed to locate the unicode map file from: unicode.mapping Looking at: 'unicode.mapping', 'unicode.mapping', '/usr/local/nginx/modsecurity/unicode.mapping', '/usr/local/nginx/modsecurity/unicode.mapping'.
拷贝缺失文件
cp /usr/local/ModSecurity/unicode.mapping /usr/local/nginx/modsecurity/unicode.mapping
nginx -t
如果提示:
nginx: [emerg] "modsecurity_rules_file" directive Rules error. File: /usr/local/nginx/modsecurity/rules/REQUEST-910-IP-REPUTATION.conf. Line: 75. Column: 22. This version of ModSecurity was not compiled with GeoIP or MaxMind support.
因为nginx没有添加ngx_http_geoip_module模块,这个模块用于对IP地址进行地域信息的读取。客户端在访问时,通过ip地址能够知道客户端所在的国家,城市。常用于处理不同国家的客户访问。不需要的话可以去掉该规则
mv /usr/local/nginx/modsecurity/rules/REQUEST-910-IP-REPUTATION.conf /usr/local/nginx/modsecurity/rules/REQUEST-910-IP-REPUTATION.conf.bak
修改ModSecurity配置文件
vi /usr/local/nginx/modsecurity/modsecurity.conf
启用引擎
SecRuleEngine DetectionOnly 改为 SecRuleEngine On
生产环境应禁用审计,否则审计日志会非常大
SecAuditEngine RelevantOnly 改为 SecAuditEngine Off
设置审计级别,启用对POST数据审计
SecAuditLogParts ABIJDEFHZ 改为 SecAuditLogParts ABCDEFHZ
I参数不审计通过 multipart/form-data 提交的数据,J参数会审计multipart/form-data 上传的文件的数据,C参数审计所有POST数据,包括通过 multipart/form-data 提交的数据,具体参考:https://wiki.atomicorp.com/wiki/index.php/SecAuditLogParts
SecAuditLog /var/log/modsec_audit.log 审计日志应当保存到磁盘空间充足的目录
添加
Include /usr/local/nginx/modsecurity/crs-setup.conf
Include /usr/local/nginx/modsecurity/rules/*.conf
最后再检查一次配置
nginx -t
6、重启nginx,检查规则是否生效
systemctl restart nginx
测试访问:http://xxx.com/?id=2%27or%201-3
如果返回403拒绝访问则说明配置成果