Não desperdice recursos do seu servidor: bloqueie bots indesejados usando Nginx

Bots de motores de busca (crawlers) são programas especiais que escaneiam sites na Internet. Os motores de busca precisam deles para encontrar, indexar e exibir páginas nos resultados de busca. Mas nem todos os bots são úteis!
Às vezes, seu site pode ser visitado por bots indesejados que:
- Coletam dados sem sua permissão.
- Consomem recursos do servidor, tornando-o mais lento.
- São usados para procurar vulnerabilidades.
Se você deseja proteger seu site contra esses bots, é hora de configurar o Nginx! Neste artigo, mostraremos como bloqueá-los facilmente e rapidamente usando um arquivo de configuração especial.
Por que configuração do Nginx em vez de robots.txt?
O arquivo robots.txt é uma ferramenta para gerenciar o comportamento dos bots de busca. Ele informa a eles quais partes do site não devem ser rastreadas. É muito fácil usar este arquivo: basta criar um no diretório raiz do site, por exemplo:
User-agent: BadBot
Disallow: /
No entanto, há um problema: as instruções no robots.txt são uma recomendação em vez de uma regra imposta. Bots conscienciosos seguem as instruções deste arquivo, mas a maioria dos bots simplesmente o ignora.
Por outro lado, a configuração do Nginx permite que você bloqueie fisicamente o acesso de bots indesejados, garantindo um resultado 100% eficaz.
Como o Nginx bloqueia bots indesejados: usando a resposta 444
Ao contrário do robots.txt, que fornece apenas recomendações aos bots, o Nginx bloqueia fisicamente o acesso deles. Uma maneira de conseguir isso é usando uma resposta especial do servidor com o código 444.
No Nginx, o código de resposta 444 é um método interno de encerrar a conexão com o cliente sem enviar qualquer resposta. Essa é uma abordagem eficiente para ignorar solicitações indesejadas e minimizar a carga do servidor.
Configurando o bloqueio
Passo 1: Como identificar bots indesejados?
Bots indesejados podem ser identificados por seu User-Agent, que é um parâmetro enviado por todos os clientes ao visitar seu site. Por exemplo, alguns User-Agents podem parecer assim:
AhrefsBot
SemrushBot
MJ12bot
Você pode encontrar valores suspeitos de User-Agent no log de acesso do Nginx (se o seu site usar PHP-FPM):
sudo grep -i bot /var/log/nginx/access.log
Ou no log de acesso do Apache (se o seu site usar o módulo Apache ou FastCGI como manipulador PHP):
- Para Ubuntu/Debian:
sudo grep -i bot /var/log/apache2/access.log
- Para CentOS/AlmaLinux/RockyLinux:
sudo grep -i bot /var/log/httpd/access.log
Se você estiver usando um painel de controle como o FASTPANEL, cada site terá seu próprio arquivo de log separado. Você pode analisá-los individualmente ou todos de uma vez usando um comando como:
- Se o seu site usa o módulo Apache ou FastCGI como manipulador PHP:
sudo cat /var/www/*/data/logs/*-backend.access.log | grep -i bot | tail -500
- Se o seu site usa PHP-FPM:
sudo cat /var/www/*/data/logs/*-frontend.access.log | grep -i bot | tail -500
Este comando exibirá as últimas 500 requisições feitas a todos os seus sites onde o parâmetro User-Agent contém a palavra "bot". Um exemplo de uma linha (uma requisição ao seu site) pode parecer assim:
IP - [03/Nov/2022:10:25:52 +0300] "GET link HTTP/1.0" 301 811 "-" "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; [email protected])"
ou
IP - [24/Oct/2022:17:32:37 +0300] "GET link HTTP/1.0" 404 469 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"
O User-Agent do bot está localizado entre os segmentos “compatible;” e “/version.number“ no final da linha de requisição entre parênteses. Portanto, nos exemplos acima, os User-agents são: BLEXBot e DotBot.
Analise as informações coletadas e anote as strings de User-Agent dos bots mais ativos para a próxima etapa de configuração do bloqueio.
Passo 2: Criar um Arquivo para Bloquear Bots
- Conecte-se ao seu servidor via SSH.
- Antes de fazer alterações, certifique-se de que sua configuração atual do Nginx não contenha erros:
nginx -t
Se tudo estiver correto, você verá:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Se houver algum erro, revise-os e corrija-os no arquivo indicado pelas mensagens de erro.
- Crie um arquivo separado listando os bots a serem bloqueados:
sudo nano /etc/nginx/conf.d/block_bots.conf
Adicione o seguinte código ao arquivo:
map $http_user_agent $block_bot {
default 0;
~*AhrefsBot 1;
~*SemrushBot 1;
~*MJ12bot 1;
}
server {
if ($block_bot) {
return 444;
}
}
Aqui criamos um mapa que determina quais bots devem ser bloqueados.
Siga este padrão para listar as strings de User-Agent dos bots que você deseja bloquear. Você deve listar cada bot em uma nova linha e colocar um ponto e vírgula ; no final de cada linha como delimitador.
Após terminar de construir sua lista, pressione "Ctrl + O" no teclado para salvar o arquivo, e depois "Ctrl + X" para sair do editor nano.
Passo 3: Aplicar as Alterações
Após fazer suas alterações, sempre teste a configuração do Nginx quanto à correção para garantir que não haja erros de sintaxe:
sudo nginx -t
Se tudo estiver correto, você verá:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Se houver erros, revise a saída para identificá-los e corrigi-los no arquivo especificado.
Em seguida, recarregue a configuração do Nginx para aplicar as alterações:
sudo systemctl reload nginx
No futuro, se você precisar adicionar mais bots ao arquivo block_bots.conf, você deverá repetir esta etapa a cada vez.
Conclusão
Agora você sabe como bloquear facilmente bots de busca indesejados no seu servidor usando Nginx! Fique de olho nos seus logs e adicione novas linhas ao arquivo de configuração block_bots.conf conforme necessário.
Certifique-se de bloquear apenas bots maliciosos para não impedir que mecanismos de busca úteis como Google ou Bing indexem seu site.