🪐前言
你的网站日志里是不是每天都有几十上百次来自未知IP的登录尝试?用的是 admin、test、root 这些用户名在撞库。/wp-admin/ 路径被各种工具疯狂扫描,XML-RPC被利用做DDoS放大攻击。你以为做了SSL就安全了——SSL只加密传输,不防攻击。
安全问题不是出了事才处理的事。一旦被黑了,清理恶意代码、恢复数据、处理客户投诉的成本远高于提前防护。这篇文章给你一套可即时落地的安全配置方案,覆盖防火墙、登录保护和文件权限三个核心战场。
一、Wordfence 防火墙规则逐项配置
Wordfence是WordPress安全领域的事实标准插件。免费版已经覆盖了90%的安全需求。装好配好,立刻生效。
🛡️ 安装与基础激活
- 插件 → 安装插件 → 搜 "Wordfence Security"
- 安装激活(作者:Wordfence,确认是官方出品)
- 激活后自动弹出引导 → 填入你的邮箱获取安全警报 → 输入License(留空用免费版)→ 完成
- 首次激活后,Wordfence会花几分钟对全站文件做一次基线扫描
🔥 防火墙规则配置(核心操作)
进入 Wordfence → Firewall → All Firewall Options,按以下顺序逐项配置:
第1步:确定防火墙模式
Web Application Firewall Status(WAF状态):
推荐模式:Extended Protection(扩展保护)
原理:防火墙代码在所有WordPress代码之前加载,能拦截PHP执行之前的恶意请求
如何启用:
// 1. Wordfence → Firewall → Manage WAF
// 2. 点击 "Optimize the Wordfence Web Application Firewall"
// 3. 按指引下载 .user.ini 或 wordfence-waf.php 文件
// 4. 手动上传到网站根目录(Wordfence会给出具体路径和指引)
// 5. 上传后回来点击确认 → WAF状态变为 "Enabled"
如果你的主机不支持这种方式(部分共享主机),Wordfence会自动退回到PHP模式,保护效果弱一些,但仍然有效。
第2步:Rate Limiting(请求频率限制)——防暴力破解/爬虫/DDoS
Rate Limiting 配置:
✅ Enable Rate Limiting
Crawler(爬虫):
→ Limit crawlers to: 480 requests per minute
→ 理由:Googlebot正常速度<300/分钟,480足够了
Human(普通用户):
→ Limit humans to: 10 requests per second
→ 理由:真人不可能1秒点击超过10次
404页面:
→ Limit 404s to: 30 per minute
→ 理由:超过这个速度就是扫描器在跑
→ 超过的IP:Block for 30 minutes
第3步:Basic Firewall Rules(基础防火墙规则)
基础防火墙规则逐项配置:
✅ Block IPs who send POST requests with blank UA and Referer
→ 解释:正常浏览器一定会发送User-Agent和Referer
→ 这就是拦截自动化攻击工具的核心规则
✅ Block fake Google crawlers
→ 解释:拦截伪造Googlebot UA的恶意爬虫
→ Wordfence会验证请求是否真的来自Google IP段
✅ Immediately block fake crawlers
→ 无需计时,立刻封
✅ Block unauthorized REST API access
→ 解释:WordPress REST API被滥用做用户枚举和暴力攻击
→ 仅允许已登录用户访问用户相关端点
第4步:Advanced Firewall Options(高级防火墙选项)
高级规则:
🚫 XSS攻击防护:
→ 默认开启,不需调整
🚫 SQL注入防护:
→ 默认开启,不需调整
🚫 恶意文件上传:
→ 默认开启
不做手动干预:Wordfence的默认XSS/SQL注入规则由安全团队维护
更新频率约每周一次,比你自己配的规则要专业
第5步:Brute Force Protection(暴力破解防护)
Brute Force Protection 配置:
✅ Enable login security
Lock out after: 3 login failures(3次失败就锁)
Lock out time frame: 5 minutes(5分钟内的失败尝试算一次攻击)
Lock out duration: 1 hour(锁1小时)
✅ Immediately lock out invalid usernames(无效用户名立刻封)
→ 比如有人试 admin、root、test这种,秒封不用等3次
✅ Prevent the use of 'admin' username(防止使用admin注册)
📊 扫描计划与扫描内容设置
Wordfence → Scan → Scan Options and Scheduling
扫描内容:
✅ 扫描插件文件与WordPress官方仓库版本对比(检测篡改)
✅ 扫描主题文件对比
✅ 扫描核心文件完整性(WordPress核心被篡改是最危险的信号)
✅ 检查插件是否已知漏洞
✅ 检查网站是否已被列入恶意站列表
✅ 扫描文件内容(查找恶意代码、base64_encode、eval注入)
扫描频率:
推荐:每天凌晨(Scheduled scanning → Daily → 选择凌晨2:00)
流量大的站(>5万/月):选每周2次足够
扫描灵敏度:
Type: Standard(标准模式,不会误杀)

二、登录页保护三重措施
WordPress后台登录页 wp-login.php 和 /wp-admin/ 是全世界黑客的第一攻击目标。三重防护才是完备方案。
🔑 第一重:修改登录页URL
直接用Wordfence内置功能改掉 wp-login.php 的默认路径,这是阻挡自动化扫描最有效的手段:
Wordfence → Login Security → Settings → General Wordfence Login Security Options
修改登录URL步骤:
// 1. 定位到 "Change the Login URL" 区域
// 2. 填入自定义的登录路径,如:my-secure-panel
// 3. 保存生效
效果:
原路径:yoursite.com/wp-login.php → 显示404
新路径:yoursite.com/my-secure-panel → 登录页
注意事项:
⚠️ 不要用 admin、login、panel、backend 等常见词做路径名
⚠️ 路径名加随机后缀最安全,如:portal-k9x2m7
⚠️ 如果用了页面缓存插件(WP Rocket等),把这个新URL加入缓存排除列表
⚠️ 如果你用第三方登录页面构建器(如Elementor登录模板),URL改名后需要额外配置
如果你没装Wordfence,也可以用独立插件 WPS Hide Login 实现相同效果。但Wordfence内建版本不需要额外装插件,推荐。
🔐 第二重:双重身份验证(2FA)
Wordfence → Login Security → Settings → Two-Factor Authentication
2FA配置步骤:
// 1. 选择 Authentication method: Authenticator App(推荐)
// 2. 下载 Google Authenticator / Authy / Microsoft Authenticator
// 3. 在Wordfence设置页,扫描生成的QR码
// 4. 输入验证码验证绑定成功
// 5. 强制要求的环境:
// → ✅ 管理员角色必须使用2FA
// → ✅ 编辑角色必须使用2FA
// → 其他角色按需设置
2FA后备方案:
✅ 生成备份码(Backup Codes),下载并存到安全位置
→ 每个备份码只能用一次
→ 手机丢了就用备份码登录
备份码非常重要——手机丢了、坏了、重置了,没有备份码你就被自己锁在外面了。建议打印出来放在安全的地方。
🚫 第三重:限制登录尝试次数 + 封锁方式
在Wordfence设置中,登录保护还有几个深度配置:
额外登录保护设置:
✅ Block IPs after: 3 failed attempts within 5 minutes → Lock for 1 hour
✅ Count failures over: 5 minutes(同一计时窗口)
✅ Amount of time a user is locked out: 1 hour(封锁时长)
✅ Immediately block the IP of users who try to sign in as these usernames:
填入:admin, administrator, test, root, user, demo, manager
→ 这些用户名是自动扫描器最爱试的,碰了就秒封
✅ Option to hide WordPress version:
→ 不在前端输出WordPress版本号(减少攻击面的信息泄露)
→ 攻击者不知道你用的具体版本就很难针对已知漏洞攻击
✅ Disable XML-RPC authentication:
→ XML-RPC是暴力攻击的重灾区
→ 除非你用Jetpack或WordPress手机App远程发文章
→ 外贸站基本不需要XML-RPC,直接禁掉

三、文件权限最佳设置值
文件权限是安全最底层的一道防线。权限设错了,等于给了攻击者写入能力。
📁 WordPress 目录与文件权限标准值
# WordPress文件权限最佳实践
# 以下值适用于Linux/Nginx服务器(Apache同理)
# 所有目录:755
find /path/to/wordpress -type d -exec chmod 755 {} \;
# 所有文件:644
find /path/to/wordpress -type f -exec chmod 644 {} \;
# wp-config.php 单独收紧:600 或 640
chmod 600 /path/to/wordpress/wp-config.php
# .htaccess 保护:644(可读,不可写)
chmod 644 /path/to/wordpress/.htaccess
# /wp-content/uploads/ 目录:755(需要可写以支持上传)
chmod 755 /path/to/wordpress/wp-content/uploads/
理解权限含义:
755 = 所有者可读写执行(rwx) + 组可读执行(r-x) + 其他人可读执行(r-x)
644 = 所有者可读写(rw-) + 组可读(r--) + 其他人可读(r--)
600 = 所有者可读写(rw-) + 其他人无权限(---)
为什么 wp-config.php 要设为 600:
// wp-config.php 包含数据库密码、盐值(salts)、API密钥
// 这个文件只需要WordPress和服务器读取
// 任何其他用户或进程都不该看到它的内容
// 600 = 只有文件所有者能读
🚫 关键安全加固措施
在 wp-config.php 中禁用文件编辑器
// 禁用WordPress后台自带的主题/插件文件编辑器
// 防止攻击者获得管理员权限后直接写入恶意代码到主题文件
define('DISALLOW_FILE_EDIT', true);
// 额外加固:禁止插件和主题的安装/更新(如果你已用Composer管理依赖)
// define('DISALLOW_FILE_MODS', true);
// ⚠️ 会禁止所有插件/主题的安装、更新和删除,非高手慎用
在 .htaccess 中保护 wp-config.php
# 在网站根目录的 .htaccess 中添加以下内容
# 防止 wp-config.php 被直接访问
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
# 同理保护 XML-RPC(如果不需要的话)
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
在 .htaccess 中禁止目录浏览
# 禁止服务器列出没有index文件的目录内容
# 默认WordPress会暴露 /wp-content/uploads/ 的目录结构
Options -Indexes
在 .htaccess 中保护 wp-content 敏感目录
# 禁止直接访问 wp-content/uploads/ 中的PHP文件
# 防止攻击者上传PHP文件到uploads目录后直接执行
<Directory "/path/to/wordpress/wp-content/uploads">
<FilesMatch "\.php
quot;> Deny from all </FilesMatch> </Directory>
🔑 修改 WordPress Security Keys(安全密钥)
WordPress 的安全密钥用于加密Cookie和密码哈希。如果你怀疑网站已被入侵,第一件事就是刷新这些密钥。刷新后所有用户会被强制登出,包括攻击者。
// wp-config.php 中的安全密钥
// 去 https://api.wordpress.org/secret-key/1.1/salt/ 获取一组全新的
// 把下面8行全部替换掉
define('AUTH_KEY', '生成的全新随机字符串');
define('SECURE_AUTH_KEY', '生成的全新随机字符串');
define('LOGGED_IN_KEY', '生成的全新随机字符串');
define('NONCE_KEY', '生成的全新随机字符串');
define('AUTH_SALT', '生成的全新随机字符串');
define('SECURE_AUTH_SALT', '生成的全新随机字符串');
define('LOGGED_IN_SALT', '生成的全新随机字符串');
define('NONCE_SALT', '生成的全新随机字符串');

四、安全审计月度检查清单
安全不是一次性配置。每个月花30分钟跑一遍检查清单,这是你网站能在出事前发现问题的保险。
📋 月度安全检查 SOP
第1步:Wordfence扫描(5分钟)
// 1. Wordfence → Scan → Start New Scan
// 2. 查看扫描结果:
// ✅ 所有绿色(Critical/High问题为0)→ 通过
// ⚠️ 出现黄色(Medium级别)→ 当天修复
// 🚨 出现红色(Critical/High级别)→ 立刻处理
// 3. 如发现恶意文件 → 在Wordfence中点击 "Repair" 替换为原始干净版本
// 4. 如果出现"File appears to be malicious" →
// 用原版WordPress安装包中的对应文件手动覆盖
第2步:插件和主题更新(10分钟)
// 1. Dashboard → Updates
// 2. 先更新所有安全相关插件(Wordfence, 备份插件)
// 3. 再更新WordPress核心(如有新版本)
// 4. 最后更新普通插件和主题
// 5. 每次更新后刷新首页、登录页、核心功能页 → 确认正常
// 6. 删除所有不用的插件和主题(不用的代码 = 不用的攻击面)
第3步:用户和权限审计(5分钟)
// 1. Users → All Users
// 2. 检查是否有不认识的用户
// 3. 检查每个用户的角色是否正确
// ⚠️ 特别注意:不应该有多个Administrator
// 4. 删除或降级不需要的用户
// 5. 重置所有用户的应用密码(Application Passwords)→ 如果不用REST API的
第4步:登录记录检查(5分钟)
// 1. Wordfence → Tools → Live Traffic
// 2. Filter by: Login attempts
// 3. 查看过去一周是否有异常的登录成功(非你操作的登录)
// 4. 查看被封锁的IP数量和尝试的常见用户名
// 5. 关注来源国家:如果大量登录尝试来自你不放广告、不发货的国家
// → 那些就是纯恶意流量
第5步:备份验证(5分钟)
// 1. 确认最新备份日期在48小时内
// 2. 检查备份文件大小是否正常(不是0KB,不是异常小)
// 3. 如有条件,在测试站恢复一份备份验证完整性
// (下一篇41讲详细还原步骤)
总结
WordPress安全防护的核心是三个战场:防火墙在入口拦截、登录页在认证端加固、文件权限在服务器层兜底。缺一环都不算安全。

- 🛡️ Wordfence免费版够用:Extended Protection模式 + Rate Limiting + Block Fake Crawlers,三层防火墙覆盖90%的攻击。
- 🔑 登录三重保护:改URL + 2FA + 限次锁IP,自动化扫描工具基本无计可施。
- 📁 文件权限设 755/644/600:wp-config.php 一定要600,禁止文件编辑器。
- 📋 每月跑一次安全检查清单:扫描、更新、查用户、看日志、验备份,半小时换一年安心。
如果遇到问题,优先参考:
- Wordfence官方文档:https://www.wordfence.com/help/
- WordPress安全指南:https://wordpress.org/support/article/hardening-wordpress/
- 被入侵后的紧急处理:https://wordpress.org/support/article/faq-my-site-was-hacked/



我看后台登录日志真的血压上来,全是admin乱撞
2FA备份码放哪比较稳,存在密码管理器行不行?
uploads禁PHP执行这个我第一时间去补了,太怕被塞马
共享主机权限老是改不动,问客服还装傻,烦