内层WAF(modsec)搭建
如果对本文环境不了解的,可以先去看看我的这篇文章
waf的原理与搭建
安装命令(如果没有nginx,要先安装nginx)
sudo apt install -y libnginx-mod-http-modsecurity modsecurity-crs安装成功后会在/etc/nginx目录下残生这两个文件
我们可以创建一个目录把这两个文件放进去,这样好区分
sudo mkdir modsecurity
sudo mv modsecurity.conf modsecurity_includes.conf modsecurity成功迁移,现在我们要修改配置文件modsecurity.conf
sudo nano /etc/nginx/modsecurity/modsecurity.conf << 'EOF'
# 全局开关:On=开启拦截,DetectionOnly=仅日志不拦截
SecRuleEngine On
# 开启请求体检测,覆盖 POST 参数
SecRequestBodyAccess On
SecResponseBodyAccess Off
# 日志配置
SecAuditEngine RelevantOnly
SecAuditLog /var/log/nginx/modsec_audit.log
SecDebugLog /var/log/nginx/modsec_debug.log
SecDebugLogLevel 0
# 临时目录配置
SecTmpDir /tmp/
SecDataDir /tmp/
# CRS 核心必需变量(修复 901001 自检 500 报错)
# 版本号对应 OWASP CRS 3.3.5
SecAction "id:900000,phase:1,pass,nolog,\
setvar:tx.crs_setup_version=3033500,\
setvar:tx.anomaly_score=5,\
setvar:tx.paranoia_level=1,\
setvar:tx.sql_injection_score=5,\
setvar:tx.XSS_score=5"
# 按依赖顺序加载 CRS 核心规则
Include /usr/share/modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
Include /usr/share/modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf
Include /usr/share/modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf
Include /usr/share/modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
EOF完成之后还要在站点文件中配置,我们直接修改sites-enabled下面的站点文件,或者修改sites-available目录下的文件,创建一个软连接就行了。
sudo nano /etc/nginx/sites-enabled/default加上这两个配置
# 启用 ModSecurity WAF
modsecurity on;
modsecurity_rules_file /etc/modsecurity/modsecurity.conf;像我这样
注意我的图中listen 127.0.0.1:8080这代表nginx正在监听本地的8080端口,且只允许本地访问,因为我这个外层还装了一个waf,想要测试新装的modsec的话可以改成listen 8080,向外网开放这个端口,这样方便你测试
好,现在我们配置完成,重启服务
sudo nginx -t #用来检查你的nginx配置是否有语法错误
sudo systemctl restart nginx #重启nginx服务
OK,现在我们来测试防火墙是否已经在工作
sql注入测试
日志分析
tail -f /var/log/nginx/modsec_audit.log

防火墙已经在运行了,现在我们成功安装两层waf加上nginx反向代理,防护拉满。