Pular para conteúdo

bot-verifier: Um módulo de verificação de bots de índice de busca para NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-bot-verifier
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-bot-verifier

Habilite o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_bot_verifier_module.so;

Este documento descreve o nginx-module-bot-verifier v0.0.17 lançado em 06 de fevereiro de 2026.


Módulo NGINX para verificar identidades de bots de mecanismos de busca por meio de consulta DNS reversa/direta.

Este módulo valida atores que afirmam ser rastreadores de mecanismos de busca (Google, Bing, Yahoo, Baidu, Yandex) executando o método de verificação DNS recomendado por cada provedor de busca. Ele impede que atores maliciosos contornem medidas de segurança falsificando strings de User-Agent de bots.

Um substituto direto do ngx_bot_verifier original, de Aaron Bedra.

Recursos

  • Verificação DNS reversa/direta seguindo as diretrizes dos provedores de mecanismos de busca
  • Resolução DNS assíncrona usando o resolver integrado do NGINX (não bloqueante)
  • Cache em Redis com pool de conexões para minimizar a sobrecarga de consultas DNS
  • Provedores configuráveis - adicione provedores de bots personalizados além dos padrões
  • Design fail-open - erros de verificação permitem que as requisições passem, para evitar bloquear tráfego legítimo
  • Suporte a Real IP via ngx_http_realip_module para implantações atrás de proxies

Provedores Suportados

Provedores Integrados

Provedor Domínios Verificados
Google google.com, googlebot.com
Bing search.msn.com
Yahoo yahoo.com
Baidu crawl.baidu.com
Yandex yandex.com, yandex.net, yandex.ru

Provedores Personalizados

Adicione provedores personalizados usando a diretiva bot_verifier_provider:

bot_verifier_provider facebook .facebook.com .fbcdn.net;
bot_verifier_provider apple .applebot.apple.com;

Provedores personalizados são verificados além dos provedores integrados.

Sinopse

http {
    # Required: Configure realip module to trust your upstream proxies
    set_real_ip_from 10.0.0.0/8;
    set_real_ip_from 172.16.0.0/12;
    set_real_ip_from 192.168.0.0/16;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    # Required: Configure resolver for non-blocking DNS lookups
    resolver 8.8.8.8 8.8.4.4 valid=300s ipv6=off;
    resolver_timeout 5s;

    server {
        location / {
            bot_verifier on;
            bot_verifier_redis_host localhost;
            bot_verifier_redis_port 6379;
            bot_verifier_redis_expiry 3600;

            # Optional: Add custom providers
            bot_verifier_provider applebot .applebot.apple.com;
        }
    }
}

Diretivas

bot_verifier

syntax: bot_verifier on|off;

default: off

context: http, server, location

Habilita ou desabilita a verificação de bots. Quando habilitada, requisições com strings de User-Agent que correspondem a padrões de bots conhecidos são verificadas por meio de consulta DNS.

bot_verifier_provider

syntax: bot_verifier_provider <name> <domain1> [domain2] ...;

default: none

context: http, server, location

Adiciona um provedor de bots personalizado para verificação. O name é comparado com strings de User-Agent (sem diferenciar maiúsculas de minúsculas). Os domínios são usados para verificar o resultado da consulta DNS reversa.

Exemplo:

bot_verifier_provider facebook .facebook.com .fbcdn.net;
bot_verifier_provider apple .applebot.apple.com;
bot_verifier_provider duckduckgo .duckduckgo.com;

Provedores personalizados são verificados além dos provedores integrados (Google, Bing, Yahoo, Baidu, Yandex).

bot_verifier_redis_host

syntax: bot_verifier_redis_host <hostname>;

default: localhost

context: http, server, location

Hostname do servidor Redis para armazenar em cache os resultados de verificação.

bot_verifier_redis_port

syntax: bot_verifier_redis_port <port>;

default: 6379

context: http, server, location

Porta do servidor Redis.

bot_verifier_redis_connection_timeout

syntax: bot_verifier_redis_connection_timeout <milliseconds>;

default: 10

context: http, server, location

Timeout para estabelecer conexões com o Redis.

bot_verifier_redis_read_timeout

syntax: bot_verifier_redis_read_timeout <milliseconds>;

default: 10

context: http, server, location

Timeout para operações de leitura no Redis.

bot_verifier_redis_expiry

syntax: bot_verifier_redis_expiry <seconds>;

default: 3600

context: http, server, location

TTL para resultados de verificação em cache. Após a expiração, a próxima requisição do mesmo IP dispara uma nova verificação DNS.

bot_verifier_redis_database

syntax: bot_verifier_redis_database <number>;

default: 0

context: http, server, location

Número do banco de dados Redis a ser usado para armazenar os resultados de verificação.

bot_verifier_redis_password

syntax: bot_verifier_redis_password <password>;

default: empty

context: http, server, location

Senha para autenticação no Redis. Deixe vazio se o Redis não exigir autenticação.

Resolução DNS Assíncrona

Quando a diretiva resolver do NGINX está configurada, o módulo realiza consultas DNS de forma assíncrona usando o resolver integrado do NGINX. Esta é a configuração recomendada para produção:

  • Não bloqueante - consultas DNS não bloqueiam os processos worker do NGINX
  • Escalável - lida com alto tráfego sem picos de latência induzidos por DNS
  • Timeouts elegantes - respostas DNS lentas não afetam outras requisições

O fluxo de verificação:

  1. Consulta DNS reversa (registro PTR) para o IP do cliente
  2. Verificar se o hostname resolvido termina com um domínio de provedor conhecido
  3. Consulta DNS direta (registro A) para confirmar que o IP corresponde
  4. Armazenar o resultado em cache no Redis

Retorne APENAS o Markdown traduzido.