前言
刚刚我们只是完成了WAF的组装和简单测试,接下来,我们针对网站做相应的防护策略。
日志
日志存放位置:/var/log/modsec_audit.log
修改日志存储格式为json:修改配置文件/etc/nginx/modsec/modsecurity.conf
防护策略
下载规则库
1 | root@vultr:~# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git |
设置防护策略
1 | root@vultr:~# cd /etc/nginx/modsec/owasp-modsecurity-crs |
修改配置文件/etc/nginx/modsec/owasp-modsecurity-crs/crs-setup.conf
,将WAF改为拦截模式。参考
修改规则配置文件/etc/nginx/modsec/main.conf
,注释掉测试的规则,将crs规则加载进去:
1 | # From https://github.com/SpiderLabs/ModSecurity/blob/master/ |
nginx -t
检查nginx配置文件成功之后,重启Nginx服务:
1 | nginx -s relaod |
测试一下,v2ray能不能正常使用
测试发现,v2ray无法使用了。检查modsecurity的日志,发现v2ray的websocket请求被拦截了(匹配到的规则编号是901001)。
于是我们要对v2ray的websocket请求设置白名单,不匹配901001这条规则。设置白名单的方法参考和官方文档
解释一下:
- 以下的
id:1001
是我自定义的规则编号 pass
指的是对满足这个条件的请求放行ctl:ruleRemoveById=901001
是取消匹配901001这条规则
1 | SecRule REQUEST_URI "@beginsWith /我的websocket路径" "id:1001,phase:1,pass,nolog,ctl:ruleRemoveById=901001" |
WAF效果测试
拦截SQL注入
payload:
1 | root@vultr:/var/log# curl --request POST --url https://*.com:*/ --header 'content-type: application/x-www-form-urlencoded' --cookie dtCookie=36%24946B53A8A942C3A95C28C4CA0FD72AD2 --data 'item1=a'\'';DROP TABLE users; SELECT * FROM userinfo WHERE '\''t'\'' ' |
拦截命令注入攻击
payload:
1 | root@vultr:/var/log# curl https://*.com:*?exec=/bin/bash |
拦截XSS
payload:
1 | https://*.com:*/?q=flowers+%3Cscript%3Eevil_script()%3C/script%3E |
总结
现在我是开启了所有的规则,因为我不管web的细节功能,只要大概能打开就行,这个自制的WAF,目前我只在乎两点:1. v2ray的使用不能受影响;2. web页面可以打开