近段时间一直饱受垃圾评论的攻击,服务器一度负载太高而宕机,参见:WordPress垃圾评论防御记。开始试了很多方法都不能很好的解决问题,最后通过屏蔽垃圾评论IP的方式,算是解决了这个问题,当然这个方法不是最好的,但是确实是非常实用的方法。
然后一些朋友就问我是怎么屏蔽这些垃圾评论的IP的,以及能否共享这些垃圾评论的IP,还有朋友问怎么提取自己博客的垃圾评论的IP,这个稍稍讲解下,高手略过,我也是个菜鸟。
nginx环境下
新建 denyip.conf 文件,在服务器/usr/local/nginx/conf目录下的nginx.conf里面,加上
include denyip.conf;
将屏蔽的IP放到 denyip.conf 里面
deny 110.83.0.0/16;
deny 110.84.111.0/24;
deny 110.85.124.56;
保存之后将 denyip.conf 上传到/usr/local/nginx/conf目录下,弄好之后记得重启nginx。
上面我列举了3中屏蔽类型,第一行的是屏蔽110.83.*.*的所有IP,第二行的是屏蔽110.84.111.*的所有IP,第三行是只屏蔽110.85.124.56这个IP。
第一行的屏蔽的范围较大,很容易误拦,第三行的疲敝最稳妥,但是IP越多导致文件会很大,也不算太可取,第二行的方式是我目前使用的,好处坏处介于2这之间,大家可以自由选择。
垃圾评论IP的收集
有人问我如何收集这些垃圾评论IP的,其实很简单,一个SQL就搞定,然后Excle处理下。
首先安装Akismet插件,这个插件会把垃圾评论标记为spam,只安装这一个就可以了,其他任何防评论插件请勿安装。
SELECT `comment_author_IP` FROM `wp_comments` WHERE `comment_approved`= 'spam'
执行好了之后,导出这些IP,保存csv格式,然后直接用Excle打开,排序,去重,就得到唯一的垃圾评论IP了。
得到垃圾评论了之后就可以按照上面的方式操作了。
apache环境下
空间支持 .htaccess
<Limit GET HEAD POST>
order allow,deny
deny from 110.85.104.152
deny from 110.85.113
deny from 110.85.113.0/24
deny from 110.87
deny from 110.87.0.0/16
deny from 110.86.167.210 110.86.184.181
deny from 110.86.185.0/24 110.86.187.0/24
allow from all
</Limit>
apache下关于限制IP的写法比较多种,IP开始的第一行,是最普通的限制唯一IP,第二行跟第三行表达的内容是一样的,限制110.85.113.* 下所有的IP;第四五行也是一样的,限制110.87.*.* 下所有的IP;第六行是限制这2个IP,第7行就是显示这两个IP段;注意多个IP限制时用空格分开。
经过大约一周时间的统计,将收集的垃圾评论IP用纯真IP批量跑了一下,发现其中以福建莆田市的居多,美国的也不少。如果你也饱受垃圾评论的攻击,可以用用这个方法试试。
这个不错,学习了
已经中招了,还好拯救及时,太感谢楼主的分享了
威哥,最近垃圾评论还多吗?我也遇到同样问题了。谢了!
@一只羊现在基本很少垃圾评论了。可以看看这篇文章 https://www.weisay.com/blog/prevent-spam-for-wordpress.html
这是初级的方法,如果你主题没用使用ajax提交评论的话这个方法就很有效了,如果你使用了Willin Kan写的 ajax提交评论的话,做了上面说的之后,再改下他那个代码的文件路径名称。目前我这么做了之后就很少垃圾评论了。
思路不错。可以放到iptables的禁封列表里,效果会更好点吧。
现在我这里一天100条左右,Akismet全拦下来
不过一个月流量也就500MB…也没什么啦…
每次点一下批量删除就好了,不过有可能误删…
@甜菜Akismet非常占用内存,我用了屏蔽过滤词汇的方法以及一些funcation.php里面的语句,把每天超过1000条的垃圾评论挡住了!
在WP下,你用的哪款代码高亮插件呢?感觉不错的…
@左岸岛SyntaxHighlighter Evolved
博客新上线,流量基本没有,垃圾评论不请自来啊