本文约 3,015 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:改名之后,很多教程里的菜单已经对不上了
iThemes Security 是被广泛使用的老牌安全插件,后来品牌调整为 Solid Security(SolidWP),界面与模块名称随之变化。这让不少老教程失效:照着截图找菜单,发现位置全变了。但插件的核心能力没变,依然是那一套:登录保护、404 检测、文件变更监控、系统微调。
这些功能里最容易出问题的是404 检测和文件变更监控,因为它们的阈值设置直接决定「误伤」程度。404 检测太敏感,搜索引擎爬虫和正常的图片缺失都会被当成攻击;文件变更监控不设排除项,每次更新插件都会收到几十封邮件,最后管理员彻底不看邮件——监控等于白做。
原理分析:两个检测机制在看什么
404 检测的逻辑是:短时间内,来自同一 IP 的 404 请求超过设定次数,就判定为扫描行为并封禁。攻击者探测漏洞时,会成百上千次地请求不存在的路径(比如各种插件的可疑文件),特征非常明显。但问题是,爬虫、RSS 阅读器、以及站点自身的死链也会产生 404。
| 参数 | 含义 | 设小了 | 设大了 |
|---|---|---|---|
| 观察时长 | 统计窗口(分钟) | 正常爬虫易被封 | 慢速扫描漏网 |
| 错误阈值 | 窗口内允许的 404 次数 | 误封搜索引擎 | 抓不到扫描器 |
| 白名单 | 豁免的 IP / UA | — | — |
| 锁定时长 | 封禁持续时间 | 客户被长时间挡住 | 攻击者很快回来 |
文件变更监控的逻辑是:定期对站点文件做哈希快照,与上次比对,发现增删改就告警。它的价值在于发现「非预期的文件变化」——后门落地、核心文件被替换,都会体现为文件变更。但 WordPress 本身就是一个频繁改文件的系统:插件更新、主题更新、缓存生成、甚至翻译文件更新,都会触发告警。因此排除列表是这项功能能否用的关键。
保姆级实操:从登录保护到文件监控
步骤1:先做登录保护。 在插件的 Security Checks 里启用暴力破解防护(本地防护必开;网络防护需要绑定 API 密钥,可按需开启)。设置封禁阈值时,把客服与办公网 IP 加入白名单。
步骤2:配置 404 检测。 找到 404 Detection 模块,设置「观察时长」与「错误阈值」。面向国内的站点建议阈值放宽到 20 次以上,观察时长设为 10–15 分钟,避免搜索引擎与移动端预取被误判。同时把公司出口 IP 加入白名单。
步骤3:为文件变更监控配置排除项。 这一步最花时间但最有价值。把以下目录加入排除:缓存目录(如 wp-content/cache/)、备份目录(如 wp-content/updraft/)、上传目录中的临时文件、日志文件。排除后再开启监控,告警量会下降一个数量级。
步骤4:确认文件监控的执行周期。 检查插件的计划任务是否正常触发。若站点关闭了 WP-Cron 又没配系统 Cron,监控根本不会跑——这是最常见的「装了却没用」。
# 查看当前登记的 WordPress 计划任务
wp cron event list
# 立即执行一次与文件监控相关的任务(hook 名以插件实际登记为准)
wp cron event run --due-now
步骤5:配置隐藏登录地址与 Away Mode。 隐藏登录地址(Hide Login)可以把 /wp-login.php 换成一个自定义路径,挡掉绝大多数针对登录页的自动化扫描。Away Mode 则是限定后台只能在指定时间段登录,适合更新频率低的展示型站点。启用前先记下新地址,并确认自己能正常登录。
步骤6:系统微调(Tweaks)。 按优先级启用:禁止后台文件编辑、隐藏登录错误提示、关闭 XML-RPC(若不用)、强制后台 SSL。隐藏登录错误提示能防止攻击者通过错误文案判断用户名是否存在。
<?php
// 兜底:统一登录失败提示,不泄露用户名是否存在
add_filter( 'login_errors', function () {
return '用户名或密码不正确。';
} );
add_action( 'wp_login_failed', function ( $username ) {
error_log( sprintf( '登录失败:%s @ %s', $username, $_SERVER['REMOTE_ADDR'] ?? 'unknown' ) );
} );
步骤7:设置告警接收人并做一次演练。 用非白名单网络连续访问几个不存在的路径,确认能触发 404 封禁并收到邮件;再手动改一个核心文件(改完立刻还原),确认文件监控能告警。
步骤8:核对日志存储。 插件会把日志写入数据库,长时间运行后体积会增长。定期查看并清理,避免影响备份速度。
-- 查看与安全插件相关的日志表体积(表名以实际安装为准)
SELECT table_name, ROUND((data_length+index_length)/1024/1024,2) AS size_mb
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name LIKE '%itsec%'
ORDER BY size_mb DESC;
常见踩坑
- 404 检测封掉了搜索引擎。百度、Google 抓取死链时被判定为扫描,导致收录下降。放宽阈值并把搜索引擎 IP 段加入白名单。
- 文件监控邮件轰炸。没配排除项,每次插件更新几十封邮件,最终管理员把所有告警过滤掉。先排除再开启。
- 隐藏登录地址后自己进不去。启用后没记下新地址,或主题/插件里硬编码了
wp-login.php导致跳转异常。启用前先备份地址,并测试一次退出登录再进入。 - Away Mode 把客户锁在门外。忘记设置时区,或把维护时段设反了,导致管理员自己在工作时段无法登录。
- WP-Cron 被禁用导致监控形同虚设。这类问题在Wordfence 性能开销与优化设置里也提到过:关掉 WP-Cron 必须配套系统 Cron。
- 案例:某站点开启文件变更监控后未设排除项,一周收到 4000 多封告警邮件,最终邮件服务商把发信域名列入限流,连正常的订单通知邮件都发不出去了。整改时先清空排除列表之外的高频目录(缓存、备份、日志),再把告警改为「按天汇总」,问题才解决。
- 与缓存插件冲突导致登录跳转循环。隐藏登录地址后,页面缓存把登录页缓存下来,出现无限重定向。在缓存插件中排除登录页与后台路径。
- 误以为插件能替代备份。文件监控只告诉你「变了」,不会帮你还原。真正能兜底的依然是异地备份。
总结
Solid Security 的配置顺序建议是:登录保护 → 404 检测(放宽阈值 + 白名单)→ 文件变更监控(必须先配排除项)→ 隐藏登录地址 → 系统微调。其中排除项和白名单这两件事做不好,插件就会从「助手」变成「噪音源」。判断配置是否合理的标准很简单:连续运行一周,告警邮件应该是「偶尔几封、每封都值得看」,而不是每天几十封。如果还在被轰炸,就继续调阈值和排除项,而不是关掉监控。想要更强的登录环节防护,可配合用插件做双因素认证(2FA);若你更习惯 Sucuri 的思路,也可以对照Sucuri Security 插件的硬化功能一起看。
