阻止恶意机器人 - Apache 2.2.15

阻止恶意机器人 - Apache 2.2.15

几个月来,我曾使用过下面各种版本的代码来尝试阻止恶意机器人,但最终发现它实际上不起作用。

我的服务器有许多虚拟主机,因此我希望将代码放在 httpd.conf 中,而不是单独的 .htaccess 文件中,因为这样更易于维护。

服务器信息:Apache 版本:Apache/2.2.15 (Unix) 操作系统:CentOS 版本 6.2

我知道 Apache 的版本不是最新的,但我必须使用它。

因此,下面的代码是从我的 httpd.conf 文件中摘录的缩写,其中只列出了一个虚拟主机部分,并且只列出了一部分机器人:

<Location *> 
SetEnvIfNoCase User-Agent ".*MJ12bot.*" bad_bot 
SetEnvIfNoCase User-Agent ".*Baiduspider.*" bad_bot 
SetEnvIfNoCase User-Agent ".*Vagabondo.*" bad_bot 
SetEnvIfNoCase User-Agent ".*lwp-trivial.*" bad_bot 
SetEnvIfNoCase User-Agent ".*libwww.*" bad_bot 
SetEnvIfNoCase User-Agent ".*Wget.*" bad_bot 
SetEnvIfNoCase User-Agent ".*XoviBot.*" bad_bot 
SetEnvIfNoCase User-Agent ".*xovibot.*" bad_bot 
SetEnvIfNoCase User-Agent ".*AhrefsBot.*" bad_bot 
SetEnvIfNoCase User-Agent "SemrushBot" bad_bot 
Deny from env=bad_bot 
</Location> 

<VirtualHost xx.xxx.xx.xxx:80> 
DocumentRoot "/var/www/sites/xxx" 
ServerName www.xxx.com 
ServerAlias xxx.com 

ScriptAlias /cgi-bin/   "/var/www/sites/xxx/cgi-bin/" 
AddType application/x-httpd-php .html .php 

<Directory "/var/www/sites/xxx"> 
Order allow,deny 
Allow from all 
Deny from env=bad_bot 
Options FollowSymLinks +ExecCGI +Includes 
RewriteEngine On 
AllowOverride All 
Include "/var/www/sites/xxx/.htaccess" 
</Directory> 

CustomLog "/var/www/sites/logs/xxx_access.log" combined 
ErrorLog  "/var/www/sites/logs/xxx_error.log" 
</VirtualHost>

我已经尝试了有关如何编写机器人部分的各种方法,例如使用通配符,或仅将机器人名称放在引号中,或在其前面加上 ^ 符号,这样如果用户代理实际上以机器人名称开头,就有望捕获机器人名称,等等。

但是,我所做的一切似乎都没有什么效果,这些机器人仍然会返回 200(本地内容)或 302(如果是链接到站外内容)。我估计它应该会抛出 403 错误。

任何帮助均感激不尽。

非常感谢。

答案1

您的基本想法是正确的,但您需要使用<Location />而不是。我建议阅读和的<Location *>文档,了解何时可以使用通配符。LocationLocationMatch

另外,您不需要.*在 User-Agent 模式的开始和结束处使用,也不需要在您的虚拟主机的块deny from env=bad_bot中使用Directory。块中的Location就足够了。

答案2

可能有点晚了,但如果其他人也有同样的需要 https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker

相关内容