介绍
WordPress是一个流行的和强大的CMS(内容管理系统)平台,其受欢迎性可以引起不必要的注意,以恶意流量的形式,专门针对WordPress网站。
有许多情况下,没有受到保护或优化的服务器在收到少量恶意流量后可能会遇到问题或错误。这些攻击导致系统资源耗尽,导致MySQL等服务不响应。
本指南将向您展示如何保护 WordPress 免受 Ubuntu 14.04 系统上的 XML-RPC 攻击。
前提条件
对于这个指南,你需要以下几点:
- Ubuntu 14.04 Droplet
- 具有 sudo 特权的非根用户(Initial Server Setup with Ubuntu 14.04解释了如何设置此功能)。
我们假设你已经在Ubuntu 14.04 Droplet上安装了WordPress,安装WordPress的方法有很多,但这里有两种常见的方法:
本教程中的所有命令都应该作为非根用户运行,如果命令需要 root 访问,则将被sudo
提前。
XML RPC 是什么?
WordPress 使用 XML-RPC远程执行 函数。受欢迎的插件 JetPack 和 WordPress 移动应用程序是 WordPress 如何使用 XML-RPC 的两个很好的例子。
识别 XML-RPC 攻击
识别XML-RPC攻击的两种主要方法如下:
看到错误连接到数据库
消息,当您的WordPress网站下载
2. 在您的Web服务器日志中找到许多类似于POST /xmlrpc.php HTTP/1.0
的条目
您的 Web 服务器日志文件的位置取决于您正在运行的 Linux 发行版和您正在运行的 Web 服务器。
对于 Ubuntu 14.04 上的 Apache,使用此命令搜索 XML-RPC 攻击:
1grep xmlrpc /var/log/apache2/access.log
对于 Ubuntu 14.04 上的 Nginx,使用此命令搜索 XML-RPC 攻击:
1grep xmlrpc /var/log/nginx/access.log
您的WordPress网站正在接收XML-RPC攻击,如果上述命令导致许多输出行,类似于这个例子:
1[label access.log]
2111.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攻击的三种不同的方法上。
方法 1:安装 Jetpack 插件
理想情况下,您希望在发生 XML-RPC 攻击之前防止它发生。 WordPress 的 Jetpack插件可以通过其 Protect 函数阻止 XML-RPC 多调方法请求。 但是,Jetpack 将减少这些恶意日志尝试中的数据库负载近 90%。
<$>[注] 注: 需要一个 WordPress.com 帐户才能激活 Jetpack 插件。
Jetpack 可以从 WordPress 后端轻松安装。 首先,登录您的 WordPress 控制面板,并在左侧菜单中选择 ** Plugins-> Add New**。
Jetpack 应该自动列出在 新增页面的附加插件部分. 如果您看不到它,您可以使用搜索框搜索 Jetpack。
点击安装现在
按钮来下载、卸载和安装 Jetpack。一旦成功安装,页面上将有激活插件
链接。点击激活插件
链接。您将返回到插件
页面,一张绿色标题将在顶部表示您的 Jetpack 几乎准备好了!
**。点击连接到 Wordpress.com
按钮来完成 Jetpack 的激活。
现在,使用WordPress.com帐户登录,如果需要,您也可以创建一个帐户。
在您登录您的 WordPress.com 帐户后,Jetpack 将被激活,您将收到启动 Jump Start的选项,该选项将自动启用 Jetpack 的常见功能。
.
保护函数会自动启用,即使你跳过跳动启动过程。你现在可以看到一个 Jetpack 仪表板,该仪表板还显示了保护函数作为活跃。
输入您想要白列出的 IPv4 或 IPv6 地址,然后单击保存
按钮来更新保护
白列表。
方法 2: 使用 a2enconf 启用 block-xmlrpc
a2enconf block-xmlrpc
功能于 2015 年 12 月被添加到 DigitalOcean WordPress 单击图像中。
<$>[注] 注: 此方法仅在 2015 年 12 月及之后创建的 DigitalOcean One-Click WordPress Install中可使用。
要启用XML-RPC区块脚本,请在Droplet上运行下列命令:
1sudo a2enconf block-xmlrpc
重启 Apache 以启用更改:
1sudo service apache2 restart
<$>[警告] 警告: 此方法将阻止任何使用XML-RPC的功能,包括Jetpack或WordPress移动应用程序。
方法 3:手动阻止所有 XML-RPC 流量
或者可以将 XML-RPC 块手动应用到您的 Apache 或 Nginx 配置中。
对于 Ubuntu 14.04 的 Apache,使用以下命令编辑配置文件:
1sudo nano /etc/apache2/sites-available/000-default.conf
在<VirtualHost>
标签之间添加下面的突出行。
1[label Apache VirtualHost Config]
2<VirtualHost>
3…
4 <files xmlrpc.php>
5 order allow,deny
6 deny from all
7 </files>
8</VirtualHost>
保存并关闭此文件,当你完成。
重新启动 Web 服务器以启用更改:
1sudo service apache2 restart
对于 Ubuntu 14.04 的 Nginx,用以下命令编辑配置文件(更改路径以反映您的配置文件):
1sudo nano /etc/nginx/sites-available/example.com
在服务器块中添加下面的突出行:
1[label Nginx Server Block File]
2server {
3…
4 location /xmlrpc.php {
5 deny all;
6 }
7}
保存并关闭此文件,当你完成。
重新启动 Web 服务器以启用更改:
1sudo service nginx restart
<$>[警告] 警告: 此方法将阻止任何使用XML-RPC的功能,包括Jetpack或WordPress移动应用程序。
检查攻击缓解步骤
无论您选择如何防止攻击,您都应该检查它是否有效。
如果您启用 Jetpack Protect 函数,您将看到 XML-RPC 请求在您的 Web 服务器日志中继续进行。 频率应该较低, Jetpack 将减少攻击对数据库服务器流程的负载。
如果您手动阻止所有 XML-RPC 流量,您的日志仍然会显示尝试,但由此产生的错误代码不等于 200。
1[label access.log]
2111.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上离线的最常见原因。
若要了解有关 WordPress XML-RPC 的 brute force 攻击的更多信息,请参阅 Sucuri.net — Brute Force Amplification Attacks Against WordPress XMLRPC。