昨天早上,发现本博客网站不能打开了,然后FTP也不能登录,所以就先联系了一下淘宝上卖这个服务的卖家,他告诉我购买的虚拟主机的5GB网络流量已经用完了所以站点的访问已经受限。尽管曾经也遭遇过黑客的攻击(“今天博客被hack了”),不过上次是网站密码简单被破解了,呵呵,还没有遇到过恶意的访问消耗掉流量的情况。正常情况下,一个月我的站点应该1GB流量左右,所以第一感觉是攻击了。
我通过客服下载到了我的当天的access log,简单看一下发现了IP 106.187.103.251 的访问数量异常的多,几个小时内就有多达2000多次的访问。查了下,根据该IP是来自日本的,反向解析得到的域名为:li498-251.members.linode.com。而且发现,它访问使用的明显不是浏览器,log中的User Agent为“Python-urllib/2.7”,是明显的网络爬虫了。
我也想不明白为啥这个IP的robot要一直爬我的网站,难道也算DDOS攻击了,呵呵。还和淘宝卖家的客服笑说,不会是你们为了让我等用户升级到更大流量而搞小动作恶意访问吧。其实应该也不是的,没啥证据证明别人做错,我还是愿意相信他们都是好人。后来还和客户聊了下,我最后加了100元每年升级到了每个月15GB流量的套餐了,而且说了下我要准备采取措施解决问题。BTW,得知我对这些东西比较懂,客户工程师居然说我很牛,请我加QQ,今后向我请教,⊙﹏⊙b汗!~
由于是租用的屌丝级别的虚拟主机,Apache等Web Server不是在我所能配置的范围的,不过,我还是可以使用网站目录下的.htaccess文件来些一些规则和指令。(本来客服给了一个.htaccess文件用于次用途,说是他们的专家做的,但看了下不是很靠谱啊,还是我自己弄吧。。)
分析访问日志,其中有大量的类似如下的恶意爬虫的信息:
1 |
106.187.103.251 - - [17/Jul/2013:06:22:02 +0800] "GET /2013/03/host-and-network-byte-order/?utm_source=rss&utm_medium=rss&utm_campaign=host-and-network-byte-order HTTP/1.1" 200 44574 "-" "Python-urllib/2.7" |
由上面的数据,响应的大小为44KB左右,注意我是加了gzip压缩了的,否则估计都在100KB以上。
统计访问日志中访问最多的前5个IP,如下:
1 2 3 4 5 6 |
[root@jay-linux jay]# awk '{print $1}' smilejay.cn.log.1 | sort | uniq -c | sort -nr | head -5 2140 106.187.103.251 461 221.226.97.63 308 117.27.138.148 265 134.134.139.76 260 66.249.77.142 |
可知,这几个小时内,单纯是106.187.103.251这个最恶意的IP的200多次访问,就消耗了我的大约100MB的流量啊;可能单这个IP一天都能消耗我的200MB以上的数据流量。如果它的每次访问我还正常响应的话,我的5GB哪里够用啊~
分析清楚问题后,解决方案也就出来,可以直接屏蔽那些垃圾IP的访问,也可以通过匹配USER-AGENT并使用Rewrite规则讲起访问拒绝或者外部重定向到别的大型站点。
屏蔽某些IP的访问,在.htaccess文件中配置如下:
1 2 3 |
Order Allow,Deny Deny from 106.187.103 Allow from all |
强烈建议了解下Order指令的说明,http://httpd.apache.org/docs/current/mod/mod_access_compat.html#allow, 刚开始我还是把Allow和Deny写反了导致没有生效。如果这个生效后,对于被限制的那些IP访问本站将会得到403的访问被拒绝的响应。
通过Rewrite规则来写,可以参考我曾经写过的一篇博客:Apache Rewrite规则(内部重定向、外部重定向)
规则示例为:
1 2 3 |
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^Python [NC] RewriteRule ^.* – [F,L] # 这里"-"表示没有替换,"Python-urllib"这样的访客将被禁止访问。 |
暂时,我还是采用根据IP直接拒绝访问的方法,观察几天看看效果吧~
被拒绝访问的恶意爬虫的访问日志信息变为了:
106.187.103.251 - - [19/Jul/2013:00:45:00 +0800] "GET /feed/ HTTP/1.1" 403 556 "-" "UniversalFeedParser/5.1.2 +https://code.google.com/p/feedparser/"
自己买个VPS搭建博客咯,自己控制爽多了:P
VPS当然爽些了,但价格可能是我目前的5~10倍,就写几篇博客,省钱点才好~~
现在也用VPS了 呵呵~ 由于太多的恶意访问,开始使用iptables直接禁止访问了。