wp网站replytocom突然导致vps负载急剧升高的故障分析:
最近一个客户的vps突然经常负载很高,一开apache,几分钟内负载持续上升到100以上,问客户说只是跑一些wordpress网站,分析日志,看不到攻击的迹象。在仔细查看日志,发现大量有replytocom参数的访问, 类似下面:
www.ctohome.com - 98.240.150.212 - - [28/May/2014:15:36:34 +0400] "GET /2014/02/26/salvatore-ferragamo%E2%80%99s-debuts-the-fiamma-bag-for-fall-2014/comment-page-14/?replytocom=169579 HTTP/1.1" 403 168 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "-"
www.ctohome.com - 144.76.36.244 - - [28/May/2014:15:36:35 +0400] "GET /2014/03/08/chanel%E2%80%99s-fall-2014-bags-were-as-fantastically-crazy-as-we%E2%80%99ve-come-to-expect/?replytocom=169044 HTTP/1.0" 403 168 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "-"
www.ctohome.com- 98.240.150.212 - - [28/May/2014:15:36:36 +0400] "GET /2014/02/26/salvatore-ferragamo%E2%80%99s-debuts-the-fiamma-bag-for-fall-2014/comment-page-14/?replytocom=169773 HTTP/1.1" 403 168 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" "-"
进一步分析:
wordpress 是纯动态程序,本来就不适合大量的访问,replytocom参数的链接是爬虫无意义的访问,内容重复,爬虫大量抓取导致内存/cpu等资源不够用。
再进一步分析:
发现有不少的trackback和wp-comments-post.php的 post 行为,即使把数据库mysql停止,这些post日志依旧产生,这肯定不是正常的访问。猜测这是一些垃圾seo软件,在群发wp的文章回复,以增加外链。这种post行为的ip,需要屏蔽掉。
解决办法:
在nginx里屏蔽掉带有replytocom的链接访问
if ( $request_uri ~* "(replytocom|wp\-comments\-post|ctohome|trackback|comment\-page)" ){
return 403;
}
这样日志里面会有大量的403记录,可以杜绝掉提交评论和trackback的现象。一般情况,用上面的办法,已经可以做到降低50%的负载了。
但是这还不够,因为自动群发软件,还是会不断的爬网站上其他链接,寻找每一篇可以发布留言/trackback的文章,然后在去尝试post, 这一样造成服务器负载急剧升高。怎么办?我们需要写个程序,自动的把捣乱的ip都找出来,然后用防火墙屏蔽掉,这样才是根本解决的方法。
程序定制:
由于每个wordpress网站可能的情况都不同,程序定制是个十分消耗人工的事情,需要技术员长期/大量/仔细的分析日志,找出规律,然后再根据情况定制程序。一旦群发软件发现提交失败,它还会变动方法来达到他的目的。于是,程序也需要做相应的改动。目前ctohome提供wordpress类似情况的程序定制服务,帮助您解决服务器负载过高的难题。收费标准是每个网站500元/月,访问量巨大的,收费1000元/月