WordPress xmlrpc暴力攻击防护
WordPress 的 xmlrpc.xml 文件是早期的远程调用接口,允许外部程序通过 XML-RPC 协议操作文章、评论等功能。
这个接口没有严格的频率限制,经常被黑客用来批量猜测密码或发起 DDoS 放大攻击。
如果你在 Nginx 下运行 WordPress 站点,最简单有效的防护方式就是直接关闭 xmlrpc 接口,让所有访问它的请求返回 403 或 444。
本文会从判断攻击、添加规则、验证效果讲清楚整个过程,按步骤操作即可完成防护。
先确认你的站点是否正被 xmlrpc 暴力攻击
在修改配置前,先判断攻击是否真实存在。
用 SSH 登录服务器,执行下面命令查看 Nginx 访问日志中 xmlrpc.php 的请求数量:
grep 'xmlrpc.php' /var/log/nginx/access.log | wc -l
如果数量在短时间内暴涨,比如一小时内就有几百条甚至上千条,基本可以确认有人在扫描或暴力攻击。
也可以通过浏览器访问 https://你的域名/xmlrpc.php,如果能正常打开一个空白的 XML 页面,说明接口处于开启状态。
在 Nginx 配置中关闭 xmlrpc 接口
准备条件:你的 WordPress 站点已经运行在 Nginx 环境下,并且有权限修改站点配置文件。
如果你用的是宝塔面板,不需要直接编辑 nginx.conf,在站点设置里操作即可。
方式一:纯 Nginx 环境手动添加规则
找到你的站点配置文件,通常位于 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 下,文件名一般是域名或站点名。
打开配置文件,在 server {} 块内、location ~ \.php$ 规则之前加入下面这段:
# 禁用 xmlrpc.php,防止暴力攻击
location = /xmlrpc.php {
deny all;
return 403;
}
如果希望直接断开连接、更省资源,可以把 return 403 换成 return 444,Nginx 会直接关闭请求而不发送任何响应。
改完后保存文件,测试配置并重载 Nginx:
nginx -t
nginx -s reload
方式二:宝塔面板操作路径
打开宝塔面板,依次进入「网站」-> 找到你的站点 -> 点击「设置」-> 选择「配置文件」。
在配置文件的 server 块内,同样加入上面那段规则,保存后点击「重载配置」或「重启 Nginx」即可。
验证关闭是否生效
关闭后,用 curl 模拟一次 POST 请求,看是否返回 403:
curl -I -X POST https://你的域名/xmlrpc.php
预期结果:状态码为 403 Forbidden,或者返回空响应(如果用了 444)。
再访问一个普通文章页面,比如 https://你的域名/文章别名/,状态码应为 200,说明站点正常访问未受影响。
如果执行 curl 后仍然返回 200,说明规则没有正确加载,检查是否把 location 写在了 server 块内且位于其他冲突规则之前,或者 Nginx 缓存未完全重载。
关闭前一定要确认的两件事
第一,你的站点是否依赖 xmlrpc 功能。 比如 Jetpack 插件、微信小程序、部分移动 App 的远程发布、Trackback/Pingback 功能,都依赖 xmlrpc 接口。
如果你正在使用这些服务,直接关闭会导致功能失效。
这种情况下可以只禁用 Pingback 方法,但防护效果会弱一些。
第二,安全和易用之间的取舍。 如果你明确不需要远程发布、离线写作或第三方客户端管理,关闭 xmlrpc 是最干净的做法。
即使日后需要,也可以随时删除那段 Nginx 规则来恢复。
常见疑问:关闭 xmlrpc 后会影响 WordPress 自动更新吗?
不会。
WordPress 自动更新和后台正常操作不依赖 xmlrpc 接口,关闭后后台管理、文章编辑、插件安装均不受影响。
如果你用的是经典编辑器并通过后台发布文章,完全没问题。
如果你的站点之前在攻击日志里已经积累了大量请求,建议关闭后继续监控一两天,确认日志中的 xmlrpc.php 请求不再增加。
有些攻击者会改路径或混淆请求,如果发现类似现象,可以再结合服务器防火墙(如 fail2ban)做更严格的封禁。
总之,WordPress xmlrpc 暴力攻击防护用 Nginx 规则关闭是最快速的方式,只要注意依赖项和规则位置,普通站长也能轻松完成配置。