前言
刚刚我们只是完成了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页面可以打开
