Na semana passada o site de um cliente foi atacado por spammers devido a uma falha de segurança do WordPress e ontem um amigo notificou que o Eu Compraria estava fora do ar por falha do banco de dados – demorei um pouco para identificar isto pois o servidor e o banco continuavam “de pé”, mas analizando o processamento do servidor vi que constantemente o MySQL estava estourando o processamento.
Achei estranho e fui verificar os logs do servidor e encontrei a causa do problema: um bot fazendo requisições constantes para o And After, para páginas de busca e tags (onde meu sistema de cache, confesso, não é muito eficiente).
O primeiro passo foi bloquear o bot pelo IP via .htaccess para sanar o problema.
Como bloquear um IP via .htaccess
Sem mistérios, nas regras de .htacces adicionei o seguinte:
Order Deny,Allow Deny from 54.197.86.53
Problema resolvido temporariamente.
Mas claro que durou pouco, pois o bot tinha um tange de IP para trabalhar. Ao invés de ir bloquando IP por IP – ou bloquear o range de IPs, como este bot se identificava via user-agent, achei que seria uma solução mais elegante e duradoura.
Como bloquar user-agent via htaccess
O primeiro passo é identificar o user-agent que você quer bloquear, para isso basta ver os logs do apache.
tail -f /path_dos_logs_do_dominio/access.log
No meu caso o bot se identificava como BDBBot. Depois de identificar quem queremos bloquear vamos criar as regras no htacess, explicadas abaixo.
Na primeira linha vamos determinar uma “env” chamada bad_bot se o user-agent casar com BDCBot (usando o modsetenvif do Apache). Você pode repetir esta linha para todos os user-agents que deseja bloquear.
Com esta identificação de user-agent e com o env configurado quando “casar”, você só precisa escrever a regra para negar os acessos sempre que o env for bad_bot.
Para o meu caso adicionei o seguinte ao htaccess:
BrowserMatchNoCase BDCBot bad_bot Order Deny,Allow Deny from env=bad_bot
Agora sim, problema com este bot resolvido de uma forma um pouco menos temporária.
Ainda neste tópico li sobte uma abordagem curiosa e, ao meu ver, perigosa que é fazer o inverso: ao invés de bloquear os spammers, bloquear tudo e permitir apenas os bots / crawlers conhecidos.
Eu não arrisco, mas se você se interessar pode conferir o tópico sobre o assunto.