WAF防火墙部署配置:从零搭好Nginx+ModSecurity防护

WAF防火墙部署配置:从零搭好Nginx+ModSecurity防护

WAF(Web应用防火墙)部署在Web服务器前面或集成进服务器,用来识别和拦截SQL注入、XSS、恶意扫描这类应用层攻击。
如果你用的是Nginx,最直接的方案是接入ModSecurity模块,再加载OWASP核心规则集。
下面按零基础可照做的顺序,讲清准备、安装、配置和验证。

先确认环境与前提条件

这套流程适用于常见的Linux发行版,本文命令以CentOS 7/8或Rocky Linux、Ubuntu 20.04以上为例,Nginx建议用源码编译方式以便加载第三方模块。
操作前请确认:

  • 你拥有服务器的root权限或sudo权限。
  • 服务器已安装编译工具链,如gcc、make、pcre-devel、zlib-devel、openssl-devel。
  • 已备份现有Nginx配置,避免修改后无法回滚。
  • 若服务器已有业务运行,建议先在测试环境验证,再上生产。

检查编译依赖是否齐全:

# CentOS/Rocky
rpm -q gcc make pcre-devel zlib-devel openssl-devel

# Ubuntu/Debian
dpkg -l | grep -E 'build-essential|libpcre3-dev|zlib1g-dev|libssl-dev'

缺失的包用yum install或apt install补上即可。

编译安装ModSecurity与Nginx连接器

ModSecurity本身是引擎,Nginx还需要一个连接器模块才能通信。
分两步走:先装引擎,再编译Nginx模块。

安装ModSecurity引擎

yum install -y git automake libtool curl-devel

git clone https://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
git submodule init
git submodule update
./build.sh
./configure
make && make install

安装完成后,确认/usr/local/modsecurity目录存在。

编译Nginx连接器

git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

# 查看当前Nginx编译参数
nginx -V 2>&1 | grep configure

拿到原有参数后,加上ModSecurity模块重新编译:

./configure --add-module=/path/to/ModSecurity-nginx --with-http_stub_status_module ...
make
make install

注意:--add-module路径要替换成你实际克隆的位置,其他参数沿用nginx -V输出,不要漏掉。

配置Nginx加载WAF并启用规则

准备规则文件

从官方仓库拉取OWASP核心规则集:

git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsec/coreruleset
cp /etc/nginx/modsec/coreruleset/crs-setup.conf.example /etc/nginx/modsec/crs-setup.conf

编写ModSecurity主配置

新建/etc/nginx/modsec/main.conf,内容示例如下:

Include /etc/nginx/modsec/modsecurity.conf
Include /etc/nginx/modsec/crs-setup.conf
Include /etc/nginx/modsec/coreruleset/rules/*.conf

把官方默认配置复制过来并调整关键项:

cp /usr/local/modsecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

编辑modsecurity.conf,重点确认:

SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecAuditLog /var/log/modsec_audit.log

SecRuleEngine On表示开启拦截,调试阶段可以先设为DetectionOnly只记录不拦截。

在Nginx站点中启用

在http或server块中加入:

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

检查语法并重载:

nginx -t && nginx -s reload

验证拦截是否真正生效

配置完成不代表生效,必须做一次模拟攻击验证。
用curl发一条带典型注入特征的请求:

curl -I "http://你的域名/?id=1%20and%201=1"

如果返回403 Forbidden,说明WAF已拦截。
同时查看审计日志:

tail -f /var/log/modsec_audit.log

日志中能看到触发的规则ID和请求内容,说明WAF防火墙部署配置已经跑通。
如果返回200正常页面,检查SecRuleEngine是否为On、规则路径是否正确、Nginx是否真的重载成功。

容易踩的坑与排查方向

规则误拦正常业务:新上线时建议先用DetectionOnly跑几天,观察日志里哪些规则频繁命中,再针对业务路径加白名单,不要一上来就全量拦截。

Nginx启动失败:多半是编译时漏了原有模块参数,可用nginx -V对比,或查看error.log里的模块加载报错。

日志文件无写入:确认/var/log/modsec_audit.log的目录存在且Nginx运行用户有写权限,否则日志会静默失败。

性能影响:开启响应体检查会增加CPU开销,流量大的站点可以按需关闭SecResponseBodyAccess,只检查请求方向。

常见疑问

WAF和系统防火墙有什么区别?
系统防火墙管网络层端口,WAF管HTTP应用层攻击,两者互补,不能互相替代。

必须用ModSecurity吗?
不是。
也可以用云WAF或反向代理层的商业方案,但自建ModSecurity成本低、可控性强,适合中小站点。

规则集会拖慢网站吗?
会有一定开销,建议先在测试环境压测,再决定开启哪些规则组。

配置完成后,建议定期更新OWASP规则集,并保留一份可回滚的配置备份。
WAF防火墙部署配置不是一次性的活,规则维护和误报调优同样重要。

分享到:
上一篇
Linux服务器被入侵排查:从异常进程到后门清理的完整实操
下一篇
DDoS攻击防护配置:从零搭建可落地的服务器防护方案
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意