如何保护WordPress免受Ubuntu14.04上的XML-RPC攻击
介绍
WordPress 是一个流行且功能强大的 CMS(内容管理系统)平台。 它的流行可能会以专门针对 WordPress 网站的恶意流量的形式引起不必要的关注。
在许多情况下,未经保护或优化的服务器在收到少量恶意流量后可能会遇到问题或错误。 这些攻击会导致系统资源耗尽,从而导致 MySQL 等服务无响应。 最常见的视觉提示是 Error connecting to database
消息。 Web 控制台也可能显示 Out of Memory
错误。
本指南将向您展示如何保护 WordPress 免受 Ubuntu 14.04 系统上的 XML-RPC 攻击。
先决条件
对于本指南,您需要以下内容:
- Ubuntu 14.04 液滴
- 具有 sudo 权限的非 root 用户(Initial Server Setup with Ubuntu 14.04 解释了如何设置。)
我们假设您已经在 Ubuntu 14.04 Droplet 上安装了 WordPress。 安装 WordPress 的方法有很多,但这里有两种常用的方法:
本教程中的所有命令都应以非 root 用户身份运行。 如果该命令需要 root 访问权限,它将在前面加上 sudo
。 Ubuntu 14.04 的初始服务器设置 解释了如何添加用户并授予他们 sudo 访问权限。
什么是 XML-RPC?
WordPress 利用 XML-RPC 远程执行 函数。 流行的插件 JetPack 和 WordPress 移动应用程序是 WordPress 如何使用 XML-RPC 的两个很好的例子。 也可以利用相同的功能在短时间内向 WordPress 发送数千个请求。 这种情况实际上是一种蛮力攻击。
识别 XML-RPC 攻击
识别 XML-RPC 攻击的两种主要方法如下:
- 当您的 WordPress 站点关闭时看到“连接到数据库时出错”消息
- 在您的 Web 服务器日志中找到许多类似于
"POST /xmlrpc.php HTTP/1.0”
的条目
Web 服务器日志文件的位置取决于您正在运行的 Linux 发行版和正在运行的 Web 服务器。
对于 Ubuntu 14.04 上的 Apache,使用此命令搜索 XML-RPC 攻击:
grep xmlrpc /var/log/apache2/access.log
对于 Ubuntu 14.04 上的 Nginx,使用此命令搜索 XML-RPC 攻击:
grep xmlrpc /var/log/nginx/access.log
如果上述命令导致多行输出,则您的 WordPress 站点正在接收 XML-RPC 攻击,类似于以下示例:
访问日志
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
本文的其余部分将重点介绍防止进一步 XML-RPC 攻击的三种不同方法。
方法一:安装 Jetpack 插件
理想情况下,您希望在 XML-RPC 攻击发生之前阻止它们。 WordPress 的 Jetpack 插件可以通过其 Protect 功能阻止 XML-RPC 多调用方法请求。 在启用 Jetpack 的情况下,您仍然会在 Web 服务器日志中看到 XML-RPC 条目。 但是,Jetpack 会将这些恶意登录尝试对数据库的负载降低近 90%。
注意: 激活 Jetpack 插件需要 WordPress.com 帐户。
Jetpack 可以从 WordPress 后端轻松安装。 首先,登录您的 WordPress 控制面板并在左侧菜单中选择 Plugins->Add New。
Jetpack 应自动列在 Add New 页面的特色插件部分。 如果没有看到,可以使用搜索框搜索Jetpack。
点击 Install Now 按钮下载、解压并安装 Jetpack。 安装成功后,页面会出现Activate Plugin链接。 单击 激活插件 链接。 您将返回到 Plugins 页面,顶部会出现一个绿色标题,表明 您的 Jetpack 几乎准备就绪!。 点击【X10X】Connect to Wordpress.com【X38X】按钮,完成Jetpack的激活。
现在,使用 WordPress.com 帐户登录。 如果需要,您还可以创建一个帐户。
登录您的 WordPress.com 帐户后,Jetpack 将被激活。 您将看到一个运行 Jump Start 的选项,它将自动启用 Jetpack 的常用功能。 在这一步单击跳过链接。
.
即使您跳过 Jump Start 过程,也会自动启用保护功能。 您现在可以看到一个 Jetpack 仪表板,该仪表板也将 Protect 功能显示为处于活动状态。 通过单击 Protect 名称旁边的齿轮,白名单 IP 地址可能被 Protect 阻止。
输入要加入白名单的 IPv4 或 IPv6 地址,然后单击 保存 按钮以更新 Protect 白名单。
方法 2:使用 a2enconf 启用 block-xmlrpc
a2enconf block-xmlrpc
功能于 2015 年 12 月添加到 DigitalOcean WordPress 一键图像中。 使用它,您可以在 Web 服务器级别阻止所有 XML-RPC 请求。
注意: 此方法仅适用于 2015 年 12 月及以后创建的 DigitalOcean One-Click WordPress Install。
要启用 XML-RPC 块脚本,请在安装了 DO WordPress 一键图像的 Droplet 上运行以下命令:
sudo a2enconf block-xmlrpc
重新启动 Apache 以启用更改:
sudo service apache2 restart
警告: 此方法将阻止任何使用 XML-RPC 的功能运行,包括 Jetpack 或 WordPress 移动应用程序。
方法 3:手动阻止所有 XML-RPC 流量
或者,可以手动将 XML-RPC 块应用于您的 Apache 或 Nginx 配置。
对于 Ubuntu 14.04 上的 Apache,使用以下命令编辑配置文件:
sudo nano /etc/apache2/sites-available/000-default.conf
在 <VirtualHost>
标签之间添加下面突出显示的行。
Apache 虚拟主机配置
<VirtualHost> … <files xmlrpc.php> order allow,deny deny from all </files> </VirtualHost>
完成后保存并关闭此文件。
重新启动 Web 服务器以启用更改:
sudo service apache2 restart
对于 Ubuntu 14.04 上的 Nginx,使用以下命令编辑配置文件(更改路径以反映您的配置文件):
sudo nano /etc/nginx/sites-available/example.com
在 server 块中添加下面突出显示的行:
Nginx 服务器块文件
server { … location /xmlrpc.php { deny all; } }
完成后保存并关闭此文件。
重新启动 Web 服务器以启用更改:
sudo service nginx restart
警告: 此方法将阻止任何使用 XML-RPC 的功能运行,包括 Jetpack 或 WordPress 移动应用程序。
验证攻击缓解步骤
无论您选择哪种方法来防止攻击,您都应该验证它是否有效。
如果启用 Jetpack Protect 功能,您将在 Web 服务器日志中看到 XML-RPC 请求继续。 频率应该更低,Jetpack 将减少攻击可能对数据库服务器进程造成的负载。 Jetpack 还将逐步阻止攻击 IP 地址。
如果您手动阻止所有 XML-RPC 流量,您的日志仍会显示尝试,但生成的错误代码不是 200。 例如,Apache access.log
文件中的条目可能如下所示:
访问日志
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 500 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
结论
通过采取措施减轻恶意 XML-RPC 流量,您的 WordPress 站点将消耗更少的系统资源。 耗尽系统资源是 WordPress 站点在 VPS 上离线的最常见原因。 本文中提到的防止 XML-RPC 攻击的方法将确保您的 WordPress 站点保持在线。
要了解有关 WordPress XML-RPC 蛮力攻击的更多信息,请阅读 Sucuri.net — 针对 WordPress XMLRPC 的蛮力放大攻击 。