威言威语
我愿像茶,苦涩留心,清香予人。
威言威语
当前位置: 首页 > 网络 > 正文

WordPress垃圾评论防御记

最近服务器的负载一直高,一直定位不到真实的问题,然后开始不断折腾。发现是垃圾评论导致,这些垃圾评论绝大部分来自福建莆田市,收集并整理这些垃圾评论IP,在服务器端限制这些IP的访问,服务器的负载好了很多。对于这些可恶的垃圾评论,有本事你就用遍全球所有的ip,不然来一个封一个,下次你就进不来,对垃圾评论必须死磕到底。
WordPress垃圾评论防御记

最近一段时间,服务器的负载一直高的吓人,对于目前我这个低配的阿里云服务器来说,512M内存的单核处理器来说,负载竟然能高到14.9。对于这种单核处理器,负载是1以下算马马虎虎 ,4-5就算很高了,CPU的使用率基本全在75%以上。网站访问更是一度瘫痪或者访问极慢。为了应对这个问题,开始简单修改就能防止WordPress垃圾评论的方法,经过不断的尝试及调整,最后又通过限制垃圾评论IP访问的方法来解决这个问题的。

其中占用内存的最高是mysql,基本占用cpu 30%以上。然后我就开始瞎折腾了。

虽然我懂点产品,懂点前端,懂点php,懂点js,但是以前没玩过vps,对Linux命令完全陌生,nginx更是首次接触,所以下面的文字都是带有我强烈的猜测,可能猜测的风牛马不相及,非常希望懂服务器运维的童鞋能给点专业的意见。

我先说下我折腾的过程。

上上周,有童鞋跟我说博客打开很慢,有时候还数据库连接出错,然后我看了下,确实很慢,登陆阿里云后台放了cpu使用率,全部高于75%,一度接近100%。其实博客访问量也没那么高,不可能占用那么高。

然后我就反复的不停的更换主题,一会儿我自己写的主题,一会儿官方默认主题,在我使用官方默认主题Twenty Twelve的时候,cpu使用率降到50%以下,然后25%左右,博客访问基本正常,速度也还不错。

然后我就怀疑是不是我主题的问题,是不是主题使用mysql过于频繁,代码效率不够高。

然后我找了几个同样使用阿里云服务器的童鞋,同样的配置,完全使用我那个主题,虽然他流量不多,cpu的使用仅仅在5%以下,我就很不淡定了,为什么同样的主题,不一样的命运呢?

我看了他使用使用的仿垃圾评论插件,除了系统默认的Akismet之外,没有安装其他任何评论插件,他的后台也从来不见一条垃圾评论,我很嫉妒。

然后我就怀疑评论的问题了,于是我开始了更加疯狂的操作,删除了博客所有的数据(前提是备份啊,亲),完全是一个新的博客来玩,就一篇hello world,cpu的使用率和服务器负载立马降了下来,全部低于25%,于是我把备份的数据库里面的表就一个一个的导进新数据库里面,导入全部文章之后,服务器负载就上来了,进入博客后台,几十条垃圾评论,此时未使用任何防垃圾插件,包括Akismet。后台刷新一下就几十条垃圾评论,刷新一下就新增几十条评论,很是疯狂。

我似乎知道了为什么博客负载这么高,垃圾评论那是如潮水般涌入啊。我跟各位发垃圾评论的也没有什么深仇大恨的,不至于这么汹涌吧。

于是我设置必须注册用户才能发表评论,垃圾评论立马没有了,不过零星了还是有些许漏网之鱼。

接着我又研究下验证码,必须正确输入验证码才能发表评论,垃圾评论算是防住了,不过服务器负载还是挺高的。有时候cpu占用也能在25%-50%之间,不过高起来直接接近100%,这还不是一个好方法。

最后,我想了一个极端方法,我只保留了Akismet卸载了其他所有的评论防御插件,坐等垃圾评论进来,一刹那间,垃圾评论就蜂拥而至,看了下cpu占用的曲线,大概疯狂攻击的时间两个多小时,然后发现基本每天保持2个多小时的大规模攻击,其余时间算是小规模骚扰。

几个小时累计了6000多条垃圾评论,通过对这6000多垃圾评论IP的分析,去重之后大概350条不同的IP,然后我在nginx里面过滤了这些IP,cpu的占用立马就降了下来。看来全部都是垃圾评论惹的祸。

进一步对这350多个ip进行了分析,整了个php调用纯真IP整出了这些ip的地理位置,70%来着福建莆田市,接着就是美国。然后又精简了这些ip,改用ip段进行封杀。

百度了一下福建莆田市的wordpress垃圾评论,网上还不少,于是直接封掉。然后可能有误杀真实的福建莆田市的访客,不过也只能抱歉了,被封杀地区的ip是访问不了网站了。

这几天每天对还能进来的垃圾评论进行一次处理,加到封杀ip里面去,经过一周的处理,现在每天进入后台的垃圾评论越来越少了,服务器的负载也稳定了很多,对于这些可恶的垃圾评论,有本事你就用遍全球所有的ip,不然来一个封一个,下次你就进不来,对垃圾评论必须死磕到底。

可能是我网站进入很多了wordpress垃圾评论发布机器的名单里面了,之前用虚拟主机的时候,服务商就说了cpu占用异常的高,当时也没有想那么多,看来一直都是垃圾评论搞的鬼。

同时我也发现,通过php或者说插件来阻止垃圾评论,不是一个有效的方法,还是会加重服务器的负担的,还是得在服务器端进行屏蔽,虽然我说的这个方法容易有误杀,不过那也是没有办法的事情,得保证更多的人能够方便快速的打开,找到自己想要的内容。

您可能还会对这些文章感兴趣!

WordPress垃圾评论防御记:目前有 49 条评论

  1. noone
    29楼
    noone:Google Chrome 45.0.2454.84 Android 4.4.2

    进来学习下

    2015-09-22 13:14 回复
  2. joshua
    28楼
    joshua:Google Chrome 43.0.2357.134 Windows 7

    我用的万网的虚拟机,也是老是垃圾评论。。最后我选的办法就是该功能模版,屏蔽非中文的评论。。

    2015-08-15 00:57 回复
  3. xinwendashibaike
    27楼
    xinwendashibaike:Firefox 34.0 Mac OS X  10.9

    1.不让那些ip访问你的网站,直接vps那边就封掉,应该可以设置防火墙吧?
    2.加验证码

    一个小时6000多条,应该不多吧?

    2015-01-19 13:01 回复
  4. 李英杰
    26楼
    李英杰:UC浏览器 9.7.6.428 Windows Server 2003

    就用官方的,垃圾屏蔽几十万条。太多了,不过我没cpu这些担心,美国的虚拟主机,果然第三方评论,就没有了。

    2014-05-07 08:43 回复
  5. 木易小匠
    25楼
    木易小匠:搜狗高速浏览器 Windows 8

    老大用的是vps么?

    2014-03-12 23:56 回复
  6. 吴歌博客
    24楼
    吴歌博客:Google Chrome 28.0.1500.95 Windows XP

    手工搞不过机器啊,这就是自动化的BUG。貌似让我想起游戏里的外挂一样。。哎

    2013-12-21 23:54 回复
  7. 零下5度
    23楼
    零下5度:Google Chrome 21.0.1180.89 Windows XP

    我的垃圾评论大部分也是来自福建莆田市!!原来大家都这样。

    2013-12-18 15:54 回复
  8. caipaocc
    22楼
    caipaocc:Firefox 26.0 Windows 7

    我现在用Akismet,评论系统用多说评论,基本上杜绝了垃圾评论

    2013-12-16 17:52 回复
  9. zwwooooo
    21楼

    再加上一个步骤效果又会好点:
    前提:你用 ajax 提交评论
    然后:把 WordPress 根目录的 wp-comments-post.php 删了或者改名

    哈哈哈……

    2013-12-14 20:55 回复
    • William
      WilliamFirefox 26.0 Windows 7

      @zwwooooo试过这个办法的,不错貌似还是能有大批量的垃圾评论,发表垃圾评论的程序看来升级了

      2013-12-16 16:58 回复

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

gravatar

question razz sad smile redface biggrin eek shock confused cool lol mad rolleyes wink cry