在 WordPress 中安装和配置 Nginx 防火墙(通常指的是基于 Nginx 的 Web 应用防火墙,WAF),可以增强网站的安全性,防止恶意请求、SQL 注入、XSS 攻击等。常见的解决方案包括使用 Nginx + ModSecurity 或者一些轻量级的 WAF 模块如 naxsi。
下面是详细的步骤指南,帮助你在 WordPress 环境中配置基于 Nginx 的防火墙:
一、准备环境
确保你已经安装了以下组件:
- WordPress
- Nginx
- PHP(建议使用 PHP-FPM)
- 可选:MySQL / MariaDB
二、安装 Nginx 并启用 WAF(以 ModSecurity 为例)
方法一:使用 ModSecurity(功能强大,适合高安全性需求)
1. 安装 Nginx 和 ModSecurity
ModSecurity 是一个开源的 WAF 引擎,支持与 Nginx 配合使用(通过动态模块)。
# Debian/Ubuntu 安装命令示例:
sudo apt update
sudo apt install nginx libnginx-mod-http-modsecurity -y
注意:Debian/Ubuntu 默认仓库中的 Nginx 可能没有包含 ModSecurity 模块,可能需要从官方源或编译安装。
2. 启用 ModSecurity 模块
编辑 Nginx 配置文件(通常是 /etc/nginx/conf.d/modsecurity.conf 或 /etc/nginx/modules-enabled/50-mod-security.conf):
sudo nano /etc/nginx/conf.d/modsecurity.conf
添加如下内容:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec_main.conf;
3. 下载并配置 ModSecurity 规则集
推荐使用 OWASP ModSecurity Core Rule Set (CRS)
sudo mkdir -p /etc/nginx/modsec
cd /etc/nginx/modsec
sudo wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.4.tar.gz
sudo tar -zxvf v3.3.4.tar.gz
sudo cp coreruleset-3.3.4/crs-setup.conf.example crs-setup.conf
sudo cp coreruleset-3.3.4/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf .
创建主规则文件:
sudo nano /etc/nginx/modsec/modsec_main.conf
添加如下内容:
Include /etc/nginx/modsec/crs-setup.conf
Include /etc/nginx/modsec/rules/*.conf
4. 修改 WordPress 的 Nginx 配置以启用 ModSecurity
编辑你的 WordPress 站点配置文件(例如 /etc/nginx/sites-available/example.com):
sudo nano /etc/nginx/sites-available/example.com
在 server 或 location / 块中添加:
modsecurity on;
5. 测试并重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
方法二:使用 naxsi(轻量级 WAF)
如果你不需要像 ModSecurity 这样复杂的规则系统,可以考虑使用 naxsi,它是 Nginx 的一个轻量级 WAF 模块。
1. 安装带有 naxsi 的 Nginx
由于大多数 Linux 发行版不自带带 naxsi 的 Nginx,你需要从源码编译:
# 安装依赖
sudo apt install build-essential libpcre3-dev zlib1g-dev libssl-dev git -y
# 克隆 naxsi 源码
git clone https://github.com/nbs-system/naxsi.git
# 下载 Nginx 源码
NGINX_VERSION=1.24.0
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -zxvf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}
# 编译 Nginx + naxsi 模块
./configure --add-module=../naxsi/naxsi_src/ --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf ...
make
sudo make install
2. 配置 naxsi
复制 naxsi 核心规则:
sudo cp ../naxsi/naxsi_config/naxsi_core.rules /etc/nginx/
在站点配置中启用:
location / {
include /etc/nginx/naxsi_core.rules;
# deny all if not allowed
proxy_pass http://unix:/run/php/php8.1-fpm.sock:/;
}
三、测试 WAF 是否生效
你可以尝试发送一个模拟攻击请求来测试是否被拦截:
curl "http://your-wordpress-site.com/?q=../../etc/passwd"
如果返回 403 或 406 错误,则说明 WAF 正常工作。
四、可选:配合插件使用(如 Wordfence 不是 Nginx WAF)
注意:Wordfence 是 WordPress 插件级别的防火墙,并非 Nginx 层面的 WAF,两者可以同时使用。
总结
| 方案 | 特点 | 推荐场景 |
|---|---|---|
| ModSecurity | 功能强大,规则丰富 | 高安全性要求,专业部署 |
| naxsi | 轻量快速,配置简单 | 小型项目、资源有限服务器 |
| Wordfence | 插件级别 WAF,易用性强 | 无需修改服务器配置 |
如需进一步帮助(比如具体配置文件、调试日志、白名单设置等),欢迎继续提问!
CLOUD技术博