wordpress安装nginx防火墙?

在 WordPress 站点中安装并配置 Nginx 防火墙,可以有效增强网站的安全性,防止恶意请求、SQL 注入、XSS 攻击等。常见的做法是使用 Nginx + ModSecurity 或者使用开源的防火墙规则集如 NAXSI 来实现。

下面是一个完整的指南,教你如何在 Nginx 上为 WordPress 安装和配置防火墙。


✅ 一、选择 Nginx 防火墙方案

1. ModSecurity(推荐)

  • 功能强大,支持 OWASP CRS 规则
  • 可检测并阻止 SQLi、XSS、RFI、LFI 等攻击
  • 配置复杂度较高

2. NAXSI

  • 更轻量级,基于黑名单机制
  • 性能好,但规则编写较为麻烦
  • 适合有一定经验的用户

推荐使用 ModSecurity + OWASP CRS,因为其规则完善,社区活跃。


✅ 二、安装 ModSecurity for Nginx

以下步骤适用于 Ubuntu/Debian 系统。

步骤 1:安装依赖

sudo apt update
sudo apt install libmodsecurity3 modsecurity-crs nginx

如果你使用的是从源码编译的 Nginx,你需要重新编译 Nginx 并添加 --add-module=../ModSecurity-nginx/connect 模块。


步骤 2:启用 ModSecurity

编辑 /etc/nginx/modsec/modsec_includes.conf 文件:

sudo nano /etc/nginx/modsec/modsec_includes.conf

确保内容如下:

include /etc/nginx/modsec/modsecurity.conf
include /etc/nginx/modsec/owasp-crs/crs-setup.conf
include /etc/nginx/modsec/owasp-crs/rules/*.conf

步骤 3:配置站点启用 ModSecurity

编辑你的 WordPress 站点配置文件,比如:

sudo nano /etc/nginx/sites-available/example.com

server 块中加入:

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

创建 /etc/nginx/modsec/main.conf 文件:

sudo nano /etc/nginx/modsec/main.conf

写入基本规则加载语句:

Include /etc/nginx/modsec/owasp-crs/crs-setup.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-901-INITIALIZATION.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-903.9001-DRUPAL-EXCLUSIONS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSIONS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-910-IP-REPUTATION.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-912-DOWNLOADABLE-CONTENTS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-913-SCANNER-DETECTION.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-922-MULTIPART-FORENSICS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-PHP.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-933-APPLICATION-ATTACK-PERL.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
Include /etc/nginx/modsec/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf
Include /etc/nginx/modsec/owasp-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf
Include /etc/nginx/modsec/owasp-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
Include /etc/nginx/modsec/owasp-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
Include /etc/nginx/modsec/owasp-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
Include /etc/nginx/modsec/owasp-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
Include /etc/nginx/modsec/owasp-crs/rules/RESPONSE-999-BLOCKING-EVALUATION.conf

步骤 4:重启 Nginx

sudo systemctl restart nginx

✅ 三、测试与调试

你可以用下面的方法测试防火墙是否生效:

测试 XSS 攻击:

curl -A "Test" "http://your-wordpress-site.com/?x=<script>alert(1)</script>"

查看日志是否有拦截记录:

tail -f /var/log/modsec_audit.log

✅ 四、可选:自定义规则或白名单

如果你发现某些插件被误拦截,可以在 /etc/nginx/modsec/main.conf 中添加白名单规则:

例如:

SecRule REQUEST_URI "/wp-admin/post.php" "id:1001,phase:1,nolog,allow,ctl:ruleEngine=DetectionOnly"

✅ 五、其他建议

  • 使用 Fail2Ban 配合 ModSecurity 日志进行 IP 封禁。
  • 定期更新 OWASP CRS 规则。
  • 启用 HTTPS(配合 Let’s Encrypt)。
  • 使用 WAF 插件(如 Wordfence)作为补充防护。

🧾 总结

组件 作用
Nginx Web 服务器
ModSecurity 应用层防火墙
OWASP CRS 提供现成安全规则
WordPress 被保护的目标

如果你需要我为你生成一个完整的 Nginx 配置示例或者帮助你排除误拦截问题,请告诉我你的系统环境和具体需求。