Pular para o conteúdo principal

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

· Leitura de 4 minutos
Customer Care Engineer

bloquear-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

  1. Conecte-se ao seu servidor via SSH.
  2. 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.

  1. 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.