本文约 3,074 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:默认安装的 Wordfence,只发挥了三成功力
Wordfence 是国内站长用得最多的 WordPress 安全插件之一,安装量巨大。但大多数人装完就再没打开过设置页——防火墙停在「学习模式」,扫描计划用默认的每天凌晨,暴力破解阈值是出厂值,告警邮件堆在管理员邮箱里没人看。结果就是:真被扫库时毫无察觉,或者反过来,正常客户被误封,订单掉了才发现问题。
Wordfence 的配置核心其实只有四块:防火墙运行在什么模式、扫描跑什么内容什么时候跑、什么样的行为会被封、出事了通知谁。这四块配对了,插件才从「装了个图标」变成「一道真能挡东西的墙」。
原理分析:防火墙靠 auto_prepend_file 生效
Wordfence 的 Web 应用防火墙(WAF)与传统插件不同,它不是等 WordPress 加载完再工作,而是在 PHP 启动时就介入。启用后,插件会在站点根目录生成 wordfence-waf.php,并通过 .user.ini、.htaccess 或 php.ini 写入 auto_prepend_file 指令,让这个文件在每个 PHP 请求之前自动执行。正因为如此,它才能在 WordPress 还没初始化时就拦截恶意请求。
这个机制带来两个必须知道的后果:
| 机制 | 带来的能力 | 带来的麻烦 |
|---|---|---|
auto_prepend_file 前置加载 |
请求早期即可拦截,性能开销小 | 主机不支持或目录不可写时,WAF 无法生效 |
| 规则缓存在本地文件 | 命中快 | 更新插件后需确认缓存重建 |
| 数据库记录日志 | 可追溯 | 表体积增长快,需要定期清理 |
在后台「Wordfence → Firewall」页可以看到防火墙的当前状态。刚安装时通常处于「Learning Mode(学习模式)」——它只记录不拦截,用来观察站点的正常流量特征。学习模式不是最终状态,观察一两周后应切到「Enabled and Protecting(启用并防护)」,否则 WAF 形同虚设。
保姆级实操:四块配置逐一对齐
步骤1:确认 WAF 已真正生效。 打开「Wordfence → Firewall」,若看到提示需要手动配置 auto_prepend_file,按页面给出的路径写入。Nginx 站点通常要在 PHP-FPM 的 pool 配置或 .user.ini 里加指令:
; 站点根目录的 .user.ini(具体路径以后台提示为准)
auto_prepend_file = "/绝对路径/public_html/wordfence-waf.php"
步骤2:结束学习模式并启用防护。 观察期结束后把防火墙切到「Enabled and Protecting」。同一页里的「Basic Firewall Options」建议保持开启,规则缓存保持默认即可。
步骤3:配置暴力破解防护阈值。 在「Wordfence → All Options → Brute Force Protection」下,可以设置登录失败的判定次数、统计时间窗口以及达到阈值后的处理方式(立即封禁或要求验证码)。面向国内的站点,建议把时间窗口放宽、次数略微提高,避免客户在共用出口 IP(公司、校园网)下被连带封禁。同时把客服与自己的固定 IP 加入允许列表(All Options 里的白名单设置)。
步骤4:定制扫描内容与计划。 在「Wordfence → Scan」页选择扫描项:核心文件完整性、主题与插件完整性、已知恶意文件、可疑代码等。扫描计划建议设在业务低峰,并把频率从「每天」降到「每周两到三次」——每天全量扫描对中小型站点意义不大,却持续消耗 IO。
步骤5:配置告警收件人。 在「All Options → Email Alert Preferences」里设置接收邮箱,并对告警分级:核心文件被修改、管理员账号异常登录这类高级别事件立即发信;插件更新提醒之类的低级别事件可以关掉,避免邮件疲劳。
步骤6:关掉用不上的攻击面。 安全插件之外,站点本身也该收紧。把下面几行放进 wp-config.php,能直接砍掉一大类攻击入口。
<?php
// wp-config.php:关闭后台文件编辑与文件安装
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true ); // 启用后后台无法更新插件/主题,按需开启
define( 'FORCE_SSL_ADMIN', true );
步骤7:若站点不用 XML-RPC,直接关掉。 这是被爆破最频繁的入口之一,也可以交给 Wordfence 的防火墙规则处理,两者选其一即可。
<?php
// mu-plugin 中关闭 XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );
步骤8:做一次恢复演练。 修改告警邮箱与阈值后,用另一网络环境故意输错密码触发封禁,确认能收到邮件、且自己没有把自己彻底锁死(务必保留允许列表入口)。
常见踩坑
- 防火墙一直停在「Learning Mode」。装了半年还在学习,等于没开。观察期一到就切到防护模式。
- 提示
wordfence-waf.php路径未配置。多见于 Nginx + PHP-FPM 环境,插件没有权限写.user.ini或.htaccess,需要手工写入并重启 PHP-FPM。 - 误封真实客户。公司、园区共用出口 IP 时,一个人的失败登录会连累全公司。放宽阈值、提高时间窗口,并把常用 IP 加入允许列表。
- 告警邮件太多导致麻木。默认配置下,插件更新、扫描完成都会发信,最终结果是管理员把所有告警丢进垃圾箱。只保留高级别告警。
- 扫描期间站点变慢。扫描是 CPU 与 IO 密集型任务,和备份任务撞在一起会雪上加霜。把扫描与备份错开时段。更详细的开销分析见Wordfence 性能开销与优化设置。
- 案例:某商城站在大促当天,用户集中登录触发 Wordfence 的暴力破解阈值,出口 IP 被整体封禁,前台登录页直接拒绝访问,订单中断近 40 分钟。事后复盘:阈值用了默认的「较严格」档,且没有把公司办公网 IP 加入允许列表。整改方案是把阈值放宽、白名单补齐,并在防火墙里对
/wp-login.php之外的路径不做速率限制。 - 与缓存插件冲突。页面缓存插件可能把登录页或含 nonce 的页面缓存下来,导致登录异常,需要在缓存插件中排除相关页面。
- 数据库表膨胀。开启访问日志类功能后,Wordfence 的日志表(如
wp_wfHits、wp_wfLogins等)会快速增长,几个月就可能上 G,需要定期清理。
总结
Wordfence 的配置可以压缩成一张检查表:防火墙切出学习模式、auto_prepend_file 确认生效、暴力破解阈值按真实用户场景放宽、扫描计划避开业务高峰、告警只留高级别、后台文件编辑关闭。这六项做完,剩下的才是「用法」问题——定期看一次告警、每月清一次日志表、版本更新后确认 WAF 规则重建。安全插件的价值不在拦截了多少次攻击,而在于真出事时你能第一时间知道并回滚。需要更强的登录保护,可继续看用插件做双因素认证(2FA);若更偏好轻量方案,也可以对比Sucuri Security 插件的硬化功能。
