Nginx ModSecurity部署教程
ModSecurity是一套开源Web应用防火墙引擎,OWASP Core Rule Set简称CRS,提供针对SQL注入、跨站脚本和协议异常等常见攻击的检测规则。
ModSecurity不能代替程序漏洞修复。规则启用不当还可能拦截正常请求,因此应先在测试环境或检测模式运行。
一、安装ModSecurity组件
Ubuntu或Debian的软件包名称可能为:
apt update
apt install libnginx-mod-http-modsecurity modsecurity-crs -y
不同系统仓库提供的Nginx模块和配置路径可能不同。安装后检查模块是否加载:
nginx -V 2>&1 | grep -i modsecurity
如果系统仓库没有兼容模块,应使用发行版支持的动态模块或重新编译方案,不要混装不同版本的Nginx组件。
二、创建主规则配置
常见做法是复制推荐配置:
mkdir -p /etc/nginx/modsec
cp /etc/modsecurity/modsecurity.conf-recommended \
/etc/nginx/modsec/modsecurity.conf
先使用检测模式:
SecRuleEngine DetectionOnly
然后创建:
vim /etc/nginx/modsec/main.conf
根据实际安装路径加入:
Include /etc/nginx/modsec/modsecurity.conf
Include /usr/share/modsecurity-crs/crs-setup.conf
Include /usr/share/modsecurity-crs/rules/*.conf
CRS目录会因发行版而不同,应先使用软件包文件列表确认真实路径。
三、在Nginx站点启用
在对应的server或location区域中加入:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
检查并重新加载:
nginx -t
systemctl reload nginx
四、观察误报后再拦截
先查看检测日志,重点测试:
- 登录和注册
- 搜索及评论
- 文件上传
- API接口
- WordPress后台
- WooCommerce结账
- 支付及回调接口
确认必要请求未被错误匹配后,再考虑将:
SecRuleEngine DetectionOnly
改为:
SecRuleEngine On
不要为了消除误报直接关闭整套规则。应针对具体规则编号、URL和参数设置最小范围例外。
常见问题
ModSecurity开启后网站返回403怎么办?
先恢复DetectionOnly,查看审计日志中的规则编号和触发参数,再针对实际误报调整规则。
OWASP CRS能阻止所有网站攻击吗?
不能。它主要检测常见攻击模式,网站仍需及时更新程序、限制权限、保护账号并修复代码漏洞。