Bloqueio por string user-agent no httpd.conf não efetivo

3

Eu gostaria de bloquear alguns spiders e bots ruins pela string de texto user agent para todos os meus hosts virtuais via httpd.conf, mas ainda não encontrei sucesso. Abaixo estão os conteúdos do meu arquivo http.conf. Alguma idéia porque isso não está funcionando? env_module é carregado.

SetEnvIfNoCase User-Agent "^BaiDuSpider" UnwantedRobot
SetEnvIfNoCase User-Agent "^Yandex" UnwantedRobot
SetEnvIfNoCase User-Agent "^Exabot" UnwantedRobot
SetEnvIfNoCase User-Agent "^Cityreview" UnwantedRobot
SetEnvIfNoCase User-Agent "^Dotbot" UnwantedRobot
SetEnvIfNoCase User-Agent "^Sogou" UnwantedRobot
SetEnvIfNoCase User-Agent "^Sosospider" UnwantedRobot
SetEnvIfNoCase User-Agent "^Twiceler" UnwantedRobot
SetEnvIfNoCase User-Agent "^Java" UnwantedRobot
SetEnvIfNoCase User-Agent "^YandexBot" UnwantedRobot
SetEnvIfNoCase User-Agent "^bot*" UnwantedRobot
SetEnvIfNoCase User-Agent "^spider" UnwantedRobot
SetEnvIfNoCase User-Agent "^crawl" UnwantedRobot
SetEnvIfNoCase User-Agent "^NG\ 1.x (Exalead)" UnwantedRobot
SetEnvIfNoCase User-Agent "^MJ12bot" UnwantedRobot

<Directory "/var/www/">
    Order Allow,Deny
    Allow from all
    Deny from env=UnwantedRobot
</Directory>
<Directory "/srv/www/">
    Order Allow,Deny
    Allow from all
    Deny from env=UnwantedRobot
</Directory>

EDIT - @Shane Madden: Eu tenho arquivos .htaccess em cada raiz de documento do host virtual com o seguinte.

order allow,deny
deny from xxx.xxx.xxx.xxx
deny from xx.xxx.xx.xx
deny from xx.xxx.xx.xxx
...
allow from all

Isso poderia estar criando conflito? Exemplo de configuração do VirtualHost:

<VirtualHost xx.xxx.xx.xxx:80>
 ServerAdmin [email protected]
 ServerName domain.com
 ServerAlias www.domain.com
 DocumentRoot /srv/www/domain.com/public_html/
 ErrorLog "|/usr/bin/cronolog /srv/www/domain.com/logs/error_log_%Y-%m"
 CustomLog "|/usr/bin/cronolog /srv/www/domain.com/logs/access_log_%Y-%m"     combined
</VirtualHost>
    
por Ferdinand.Bardamu 12.09.2011 / 23:06

2 respostas

1

Tente isso e, se falhar, tente-o em um arquivo .htaccess ...

   #Bad bot removal
   RewriteEngine on
   RewriteCond %{HTTP_USER_AGENT} ^useragent1 [OR]
   RewriteCond %{HTTP_USER_AGENT} ^useragent2 [OR]
   RewriteCond %{HTTP_USER_AGENT} ^useragent3
   RewriteRule ^(.*)$ http://website-you-want-to-send-bad-bots-to.com

Siga este padrão e não coloque um [OR] no último.

EDIT: Nova solução:

Se você quiser bloquear todos os bots (amigáveis), crie um arquivo chamado "robots.txt" e coloque-o em seu index.html. Dentro dele, coloque isso:

User-agent: *
Disallow: /

Você ainda precisa manter uma lista como a minha resposta original (acima) para proibir os bots que ignoram o robots.txt.

    
por 12.09.2011 / 23:11
0

Para o benefício daqueles que podem ler isso mais tarde, veja o seguinte:

Eu apaguei o pedido, neguei diretivas dos meus arquivos .htaccess e consegui acionar o comportamento esperado de certos user-agents quando os falsifiquei com o User Agent Switcher no Firefox, então parece que houve algum conflito. Outros user-agents na minha lista, no entanto, não foram bloqueados - mas isso é porque eu não estava claro quanto ao significado do carat (^) como usado no meu httpd.conf. Os tutoriais de Expressão Regular que li dizem isso, mas ele não afundou no início: o quilate força o servidor a procurar somente no começo do Toda a string user-agent (não strings individuais dentro, como eu pensava inicialmente) ao analisar o pedido de conexão. Como a chave identificadora de algumas das aranhas & bots que eu gostaria de bloquear ocorre mais tarde na cadeia user-agent, eu precisava soltar o quilate para fazer as coisas funcionarem.

    
por 13.09.2011 / 09:42