从GoogleBot撤下对/xmlrpc.php的许多POST请求,导致服务器停机?


9

我有几个托管的wordpress博客,并且我一直在尝试访问它们,但它们确实很慢。我查看了我的服务器日志,发现了这个

stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:28 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:28 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:28 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:28 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:29 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:29 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:29 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:29 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:31 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:31 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"
stanfordflipside.com:80 188.138.33.149 - - [17/Aug/2013:17:14:31 -0700] "POST /xmlrpc.php HTTP/1.1" 200 595 "-" "GoogleBot/1.0"

我从GoogleBot到几个站点的文件/xmlrpc.php每秒获得约10次点击,这似乎正在减慢服务器的速度。我在跑步

tail -f 

在日志文件上,并且可以看到这些请求仍在继续。有谁知道为什么会发生这种情况,或者您可以采取什么措施阻止这种情况发生?


2
我必须查找IP和地址,但我敢打赌这实际上并不是Google的抓取工具,只是一个(很可能是)假装的恶意机器人。
s_ha_dum 2013年


是的,我不认为这是一个Googlebot-我想我的问题还不清楚。无论如何,您对此怎么办?我应该阻止ips吗?
jkeesh

Answers:


7

iptables如果是我,并且您具有那种服务器级别的访问权限,我将阻止该IP 。

您也可以禁用xmlrpc。不幸的是,从3.5开始,禁用该功能的管理员屏幕选项已被删除。但是,单行代码应该禁用它:add_filter( 'xmlrpc_enabled', '__return_false' );尽管不会消除所有代码,但这可能会节省请求的开销。


谢谢。我最终用iptables阻止了它,这似乎有所帮助。
jkeesh

5

“ Googlebot”没有理由访问xmlrpc.php您可以将其添加到xmlrpc.php的顶部

// Block fake Googlebot
if ( strpos($_SERVER['HTTP_USER_AGENT'], "Googlebot") === true ) { exit(); }

我猜这是一个核心的WordPress文件。因此,保持此更新可能很烦人。如果Automattic使用Akismet在所有WP脚本中将这些IP列入黑名单,那就太好了。

更新:chmod 0 xmlrpc.phpDDoS开始对服务器征税后,我最终以(请参阅我的评论)删除权限。换句话说,此条件PHP代码可能不会阻止积极的攻击者暂时禁用您的博客。无论如何,它们通常会很快放弃。


另外,如果您是不使用单独的移动或桌面博客客户端应用程序的博客作者,则不需要xmlrpc.php,并且可以安全地删除它。换句话说,如果您在WordPress仪表板中的Web上编写博客帖子,则不需要xmlrpc.php。最近,xmlrpc.php确实受到了黑客的攻击,因此我个人建议您删除此文件。
PJ Brunet

要修改我上面的评论:您可以“ chmod 0”文件并根据需要将其重新启用,而不是删除xmlrpc.php,因为某些事情可能需要xmlrpc.php,就像我模糊地记得您需要xmlrpc.php一样激活Jetpack。
PJ Brunet

谢谢你的提示。我只exit()在文件的顶部放一个,因为我们总是使用wp-admin编辑页面。我发现这是Wordpress的相对弱点,这使我担心要为大型组织实施WP。禁用xmlrpc后,我不必担心,对吗?
Mattijs

1

使用iptables阻止IP:

for ip in $(grep xmlrpc /var/log/apache2/access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head -n8 | awk '{print $2}'); do \
iptables -A INPUT -s $ip -j DROP; \
done

很高兴看到此shell命令的一些解释。
大卫,

@David有点自负和笨拙的IMO。本质上,此操作将扫描access.log文件并查找对xmlrpc.php的任何请求。然后,它计算重复的IP地址,从最高到最低对它们进行排序,然后返回前8个IP(请求重复最多的IP)。对于每个这些IP地址,它告诉防火墙丢弃来自它们的所有流量。在我的服务器上,有8个以上的IP正在执行此操作,而且这也可能阻止合法请求,因为它不会检查是谁在进行此操作。
tdk2fe

0

如果最近发生这种情况,并且正在杀死服务器,我们现在正在使用fail2ban来缓解此问题。

将此配置添加到jail.local

[apache-xmlrpc]

enabled = true
port = http,https
filter = xmlrpc
logpath = /var/log/apache2/*access.log
maxretry = 30
findtime = 300
bantime = -1

并在filter.d / apache-xmlrpc.conf中创建过滤器:

[Definition]
failregex = ^<HOST> -.*"(GET|POST) .*xmlrpc.php
ignoreregex =

就我而言,攻击并不总是来自googlebot,因此使regex变得更广泛,但就我的目的而言,几乎没有任何充分的理由使任何IP在5分钟内达到xmlrpc 30次以上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.