保护 WordPress 远离 XML-RPC 攻击

  WordPress 使用 XML-RPC 进行远程过程调用,XML-RPC 攻击通过在短时间内大量发出请求,导致服务器宕机,在 WordPress 上的一个典型症状就是显示“Error connecting to database”。本文介绍 Apache + WordPress 环境下阻止 XML-RPC 攻击的方法。

1. 判断是否受到 XML-RPC 攻击

  登录服务器后检查log,搜索 xmlrpc 关键字:

如果能看到某个 IP 在短时间内连续发出请求:

就基本可以断定遇到了 XML-RPC 攻击。

2. 修改

  WordPress 的 Jetpack 插件自带保护功能,可以在一定程度上阻止 XML-RPC 攻击,但实测并不能完全防护,且该插件本身也比较重。通过修改 VHOST 直接阻止一切 XML-RPC 访问,可以一劳永逸地解决 XMP-RPC 攻击的问题。

  首先进入如下路径:

  在里面找到自己站点的配置文件,比如 XXX.conf,使用编辑器打开:

在里面的 <VirtualHost> 下,加入:

  保存后,重启 Apache:

就设置完毕了。

3. 验证

  为了验证上面的修改已经生效,可以在 WordPress 里安装并启用一个使用了 XML-RPC 的插件,如前面提到的 Jetpack,启用插件时应该会失败,出现诸如“The Jetpack server was unable to communicate with your site XXX [HTTP 403]…” 的报错。再次查看log,

应该可以看到 Jetpack 的请求被拒绝了:

由此说明修改生效,所有 XML-RPC 都会被阻止。

4. 副作用

  由于阻止了所有的 XML-RPC,一些依赖 XML-RPC 的插件和功能也会无法正常工作,如上面的 Jetpack,但至少可以一劳永逸地远离 XML-RPC 攻击了。