介绍
WordPress是一个流行和强大的CMS(内容管理系统)平台。 它的流行可以带来不必要的注意的形式的恶意流量特别针对WordPress网站。
在许多情况下,未受保护或优化的服务器在接收到少量恶意流量后可能会遇到问题或错误。 这些攻击导致系统资源耗尽,导致像MySQL这样的服务无响应。 这方面最常见的视觉提示将是一个Error connecting to database
消息。 该Web控制台还可以显示Out of Memory
错误。
本指南将向您介绍如何在Ubuntu 14.04系统上保护WordPress免受XML-RPC攻击。
先决条件
对于本指南,您需要以下内容:
- Ubuntu 14.04 Droplet
- 使用sudo特权的非root用户( 与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攻击的两种主要方法如下:
1)当您的WordPress站点关闭时,看到“连接到数据库错误”消息
2)寻找类似的条目"POST /xmlrpc.php HTTP/1.0”
在你的Web服务器日志
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攻击的三种不同的方法。
方法1:安装Jetpack插件
理想情况下,您希望防止XML-RPC攻击发生之前。 该Jetpack的 WordPress插件可以阻止其保护功能XML-RPC多重呼叫方法请求。 您仍然会在启用Jetpack的Web服务器日志中看到XML-RPC条目。 但是,Jetpack会将这些恶意登录尝试中的数据库负载减少近90%。
注:WordPress.com帐户,才能激活Jetpack的插件。
Jetpack可以从WordPress后端轻松安装。 首先,登录到你的WordPress的控制面板,选择插件- >在左边的菜单中添加新 。
Jetpack的应自动列在添加新页面的功能插件部分。 如果你没有看到它,你可以使用搜索框搜索Jetpack的 。
点击立即安装按钮来下载,解压缩,并安装Jetpack的。 一旦安装成功,会出现在页面上的激活插件的链接。 单击激活插件的链接。 您将返回到插件页面和一个绿色的头将在指出你的Jetpack几乎是准备好了!顶部。 点击连接到Wordpress.com按钮完成的Jetpack的激活。
现在,使用WordPress.com帐户登录。 如果需要,您还可以创建帐户。
登录您的WordPress.com帐户后,Jetpack将被激活。 你将与一个选项来运行跳跃开始 ,将自动启用的Jetpack的共同特征呈现。 点击在该步骤中跳过链接。
。
即使您跳过跳跃启动过程,保护功能也会自动启用。 您现在可以看到一个Jetpack仪表板,它也将保护功能显示为活动。 从潜在的白名单的IP地址被拦截的保护通过单击旁边保护名字齿轮。
输入您要白名单IPv4或IPv6地址,然后点击保存按钮,更新保护白名单。
方法2:使用a2enconf启用block-xmlrpc
该a2enconf block-xmlrpc
功能被添加到DigitalOcean WordPress的一键式图像中的2015年12月有了它,您可以阻止在网络服务器级别的所有XML-RPC请求。
注意:此方法仅适用于一DigitalOcean一键安装WordPress在2015年12月创建及更高版本。
要启用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>
标记。
<VirtualHost>
…
<files xmlrpc.php>
order allow,deny
deny from all
</files>
</VirtualHost>
保存并在完成后关闭此文件。
重新启动Web服务器以启用更改:
sudo service apache2 restart
对于Nginx的在Ubuntu 14.04,编辑用下面的命令( 更改路径以反映您的配置文件 )配置文件:
sudo nano /etc/nginx/sites-available/example.com
在服务器块中添加以下突出显示的行:
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 。