由于360Spider我遇到了问题:这个机器人每秒向我的VPS发出太多请求并减慢它的速度(CPU使用率变为10-70%,但通常我有1-2%)。我查看了httpd日志并看到了这样的行:
182.118.25.209 - - [06/Sep/2012:19:39:08 +0300] "GET /slovar/znachenie-slova/42957-polovity.html HTTP/1.1" 200 96809 "http://www.hrinchenko.com/slovar/znachenie-slova/42957-polovity.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11; 360Spider
182.118.25.208 - - [06/Sep/2012:19:39:08 +0300] "GET /slovar/znachenie-slova/52614-rospryskaty.html HTTP/1.1" 200 100239 "http://www.hrinchenko.com/slovar/znachenie-slova/52614-rospryskaty.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11; 360Spider
等
如何通过robots.txt完全阻止此蜘蛛?现在我的robots.txt看起来像这样:
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
User-agent: YoudaoBot
Disallow: /
User-agent: sogou spider
Disallow: /
我添加了一行:
User-agent: 360Spider
Disallow: /
但这似乎不起作用。如何阻止这个愤怒的机器人?
如果你提议通过.htaccess阻止它,那么请注意它现在看起来像这样:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
SetEnvIfNoCase Referer ^360Spider$ block_them
Deny from env=block_them
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
尽管存在
SetEnvIfNoCase Referer ^360Spider$ block_them
Deny from env=block_them
这个机器人仍试图杀死我的VPS并登录访问日志。
答案 0 :(得分:8)
在.htaccess文件中,只需添加以下内容:
RewriteCond %{REMOTE_ADDR} ^(182\.118\.2) RewriteRule ^.*$ http://182.118.25.209/take_a_hike_moron [R=301,L]
这将捕获从182.118.2xx.xxx范围内启动的所有机器人并将它们发回给自己......
蹩脚的360机器人正在从中国的服务器中解雇......所以只要你不介意再见那个来自IP范围的蹩脚的中国流量,这将保证让那些小狗消失在任何文件上你的网站。
.htaccess文件中的以下两行也会因为愚蠢到足以自豪地将360spider放入其用户代理字符串中而将其选中。当它们使用其他IP范围(182.118.2xx.xxx
)时,这可能很方便RewriteCond %{HTTP_USER_AGENT} .*(360Spider) [NC] RewriteRule ^.*$ http://182.118.25.209/take_a_hike_moron [R=301,L]
是的......我也讨厌他们!
答案 1 :(得分:6)
你的robots.txt似乎是对的。一些机器人只是忽略它(恶意机器人从任何来自全球各地数百到数百万受感染设备的僵尸网络中的任何IP地址爬行),在这种情况下,您可以使用mod_security模块限制每秒的请求数量apache 2.X
此处配置示例:http://blog.cherouvim.com/simple-dos-protection-with-mod_security/
[编辑] 在linux上,iptables还允许每个ip限制tcp:port连接每(x)秒,这样就可以在内核上启用conntrack功能。请参阅:https://serverfault.com/questions/378357/iptables-dos-limit-for-all-ports
答案 2 :(得分:4)
您可以将以下规则放入.htaccess
文件
RewriteEngine On
RewriteBase /
SetEnvIfNoCase Referer 360Spider$ block_them
Deny from env=block_them
注意:应在服务器配置中启用Apache模块mod_setenvif
答案 3 :(得分:2)
运行抓取工具的人可能会忽略robots.txt。你可以通过IP阻止它们
命令拒绝,允许
否认自216.86.192.196
在.htaccess中
答案 4 :(得分:0)
SetEnvIfNoCase用户代理360Spider被阻止
答案 5 :(得分:0)
我的.htaccess
文件中有这样的行来阻止坏机器人:
RewriteEngine On
RewriteCond %{ENV:bad} 1
RewriteCond %{REQUEST_URI} !/forbidden.php
RewriteRule (.*) - [R=402,L]
SetEnvIf Remote_Addr "^38\.99\." bad=1
SetEnvIf Remote_Addr "^210\.195\.45\." bad=1
SetEnvIf Remote_Addr "^207\.189\." bad=1
SetEnvIf Remote_Addr "^69\.84\.207\." bad=1
# ...
SetEnvIf Remote_Addr "^221\.204\." bad=1
SetEnvIf User-agent "360Spider" bad=1
它会将状态代码402 Payment Required
发送给所有列入黑名单的IP /用户代理。
您可以在forbidden.php
。
非常有效。
答案 6 :(得分:0)
我只需要阻止360Spider。在IIS(IIS7)上解决了StreamCatcher,幸运的是已经安装了,因此只需要进行一些小的配置更改。详情请见http://needs-be.blogspot.com/2013/02/how-to-block-spider360.html
答案 7 :(得分:0)
我使用以下内容,它有很多帮助!检查HTTP_USER_AGENT是否有坏机器人
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteCond %{REQUEST_URI} !^/error\.html$
RewriteCond %{HTTP_USER_AGENT} EasouSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} YisouSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Sogou\ web\ spider [NC]
RewriteCond %{HTTP_USER_AGENT} 360Spider [NC,OR]
RewriteRule ^.*$ - [F,L]
</IfModule>
<Location />
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent "EasouSpider" bad_bot
SetEnvIfNoCase User-Agent "YisouSpider" bad_bot
SetEnvIfNoCase User-Agent "LinksCrawler" bad_bot
Order Allow,Deny
Allow from All
Deny from env=bad_bot
</IfModule>
</Location>