Ubuntu 16.04下为apt-get安装的Nginx配置ModSecurity方法
没问题,我刚好有适配你这种场景的方案——不用重新编译Nginx,全程用apt包管理器就能搞定,步骤如下:
1. 安装带ModSecurity模块的Nginx扩展包
Ubuntu 16.04官方源里的标准nginx包不带ModSecurity,但nginx-extras集成了这个模块。如果你已经装了标准Nginx,安装这个包会平滑替换原有版本,而且不会丢失你的现有配置:
sudo apt-get update sudo apt-get install nginx-extras
顺便装上ModSecurity的核心工具包:
sudo apt-get install modsecurity
2. 初始化ModSecurity基础配置
先把官方推荐的配置模板复制成正式配置文件:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
然后编辑这个配置,把默认的“仅检测”模式改成“拦截”模式——毕竟我们要实际防护:
sudo nano /etc/modsecurity/modsecurity.conf
找到SecRuleEngine DetectionOnly这一行,改成:
SecRuleEngine On
保存退出就行(按Ctrl+O回车,再Ctrl+X)。
3. 部署OWASP核心规则集(CRS)
光有ModSecurity引擎还不够,得配上成熟的防护规则。OWASP CRS是业界常用的免费规则集,直接用apt装:
sudo apt-get install modsecurity-crs
同样复制规则集的配置模板:
sudo cp /usr/share/modsecurity-crs/crs-setup.conf.example /usr/share/modsecurity-crs/crs-setup.conf
4. 在Nginx里启用ModSecurity
你可以选择全局启用(所有站点都生效)或者只给特定站点开防护:
全局启用(所有站点)
编辑Nginx的全局配置文件:
sudo nano /etc/nginx/nginx.conf
在http大括号里加上这些配置:
modsecurity on; modsecurity_rules_file /etc/modsecurity/modsecurity.conf; modsecurity_rules_file /usr/share/modsecurity-crs/crs-setup.conf; modsecurity_rules_file /usr/share/modsecurity-crs/rules/*.conf;
仅给特定站点启用
找到你要防护的站点配置文件(比如/etc/nginx/sites-available/your-site.conf),在server大括号里加上面那几行就行。
5. 验证配置并重启Nginx
先检查配置有没有语法错误:
sudo nginx -t
如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,就没问题,重启Nginx让配置生效:
sudo systemctl restart nginx
6. 测试防护是否生效
可以用curl发个带恶意参数的请求试试,比如:
curl http://你的域名或IP/?id='<script>alert(1)</script>'
如果收到403 Forbidden的响应,说明ModSecurity已经在拦截恶意请求了。也可以看日志确认:
tail -f /var/log/modsecurity/modsecurity.log
日志里会出现对应的拦截记录,证明规则在正常工作。
内容的提问来源于stack exchange,提问作者TrickyExplorer

