WordPress 默认没有登录失败锁定机制,最直接有效的办法是安装安全插件或在服务器层配置失败重试限制。配置后务必测试,避免把自己锁在外面。
先说结论:优先使用插件方案止血,服务器层配置更适合有运维能力的场景。
- 先判断:确认主机环境是否支持安装插件或修改服务器配置
- 优先做:安装限制登录次数的插件或配置 fail2ban 规则
- 再验证:用错误密码尝试登录,确认触发锁定机制
- 留后路:配置前备份,并记录紧急解锁命令
为什么需要限制
WordPress 核心程序出于兼容性考虑,默认并没有内置登录失败锁定机制。这意味着攻击者可以使用脚本无限次尝试密码,直到猜中为止。这种攻击被称为暴力破解(Brute Force Attack)。
一旦密码被猜中,攻击者就能获得后台权限,上传恶意文件、篡改内容或利用服务器资源。因此,必须在应用层或网络层增加一道“尝试次数”的门槛。
方案一:插件配置(适合大多数站长)
如果你能访问 WordPress 后台,直接安装插件最快。推荐使用"Limit Login Attempts Reloaded"。
1. 安装与启用
登录 WordPress 后台,进入“插件”->“安装插件”,搜索"Limit Login Attempts Reloaded"。安装并启用后,左侧菜单会出现"Limit Login Attempts"选项。
2. 关键参数设置
进入"Settings"->"Limit Login Attempts",重点配置以下参数:
- Max login retries(最大重试次数):建议设置为 3-5 次。
- Lockout time(锁定时间):建议设置为 20-30 分钟。
- Long lockout time(长期锁定时间):当多次触发锁定后,建议设置为 24 小时。
- Allow IP whitelist(IP 白名单):务必将你当前的管理 IP 加入白名单,防止误锁。
保存设置即可生效。插件会自动记录尝试登录的 IP 列表。
方案二:服务器层配置(适合有 SSH 权限)
如果后台无法访问或希望更底层防护,使用 fail2ban 监控日志。此方案不依赖 WordPress 插件,性能更好。
1. 安装 fail2ban
根据系统类型执行安装命令:
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban
# CentOS/RHEL
sudo yum install epel-release
sudo yum install fail2ban2. 备份配置文件
修改前务必备份,防止配置错误导致服务启动失败:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak3. 创建过滤规则(Filter)
创建文件/etc/fail2ban/filter.d/wordpress.conf,添加以下内容。该规则匹配访问日志中针对 wp-login.php 的频繁 POST 请求:
[Definition]
failregex = ^<HOST> -.*"POST /wp-login.php
ignoreregex = 4. 创建监狱配置(Jail)
创建文件/etc/fail2ban/jail.d/wordpress.conf,添加针对 WordPress 的防护策略:
[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
findtime = 600注意:请根据实际日志路径修改logpath,Apache 通常为/var/log/apache2/access.log。
5. 重启服务
使配置生效并检查状态:
sudo systemctl restart fail2ban
sudo systemctl status fail2banCDN 场景下的真实 IP 配置
如果网站接入了 Cloudflare 等 CDN,服务器看到的可能是 CDN 的 IP。需要在服务器配置中启用真实 IP 透传,否则限制可能针对 CDN 节点生效,影响所有用户。
Nginx 配置示例:
在nginx.conf的http块中添加:
set_real_ip_from 103.21.24.0/22;
set_real_ip_from 172.64.0.0/13;
real_ip_header CF-Connecting-IP;具体 IP 段需参考 CDN 服务商文档。配置后重载 Nginx:sudo nginx -s reload。
验证方法
1. 插件验证
打开一个无痕浏览器窗口,访问后台登录页。故意输入错误密码达到设定次数(例如 5 次)。第 6 次尝试时,系统应提示“尝试次数过多”或暂时无法登录。
2. 服务器验证
查看 fail2ban 日志/var/log/fail2ban.log,确认是否有针对 WordPress 的 ban 动作记录:
sudo grep wordpress /var/log/fail2ban.log常见坑与紧急处理
1. 把自己锁在外面
配置过于严格或测试时未排除当前 IP,导致管理员无法登录。
- 插件锁住:通过 FTP 或文件管理器,进入
/wp-content/plugins/,将"limit-login-attempts-reloaded"文件夹重命名(如加个.bak 后缀),插件会自动禁用,即可登录。 - Fail2ban 锁住:使用以下命令手动解锁 IP:
sudo fail2ban-client set wordpress unbanip <你的 IP 地址>2. 插件冲突
同时安装多个安全插件可能导致登录逻辑冲突,建议只保留一个主要的安全插件负责登录限制。
3. 日志路径错误
Fail2ban 配置中logpath必须与实际 Web 服务器日志路径一致,否则无法匹配规则。使用ls /var/log/确认路径。
参考来源
- WordPress.org - Limit Login Attempts Reloaded 插件页面 https://wordpress.org/plugins/limit-login-attempts-reloaded/
- Fail2ban.org - 官方文档 https://fail2ban.org/wiki/index.php/Main_Page
- WordPress.org - Hardening WordPress 官方指南 https://wordpress.org/documentation/article/hardening-wordpress/