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

Ative o módulo adicionando o seguinte no início 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 via consulta DNS reversa/forward.

Este módulo valida atores que afirmam ser crawlers de mecanismos de busca (Google, Bing, Yahoo, Baidu, Yandex) realizando 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 User-Agent de bots.

Um substituto direto para o original ngx_bot_verifier de Aaron Bedra.

Recursos

  • Verificação DNS reversa/forward seguindo as diretrizes do provedor de mecanismos de busca
  • Resolução DNS assíncrona usando o resolvedor embutido do NGINX (não bloqueante)
  • Cache Redis com pooling 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 solicitações passem para evitar bloquear tráfego legítimo
  • Suporte a IP real via ngx_http_realip_module para implantações atrás de proxies

Provedores Suportados

Provedores Embutidos

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

Sinopse

http {
    # Obrigatório: Configure o módulo realip para confiar em seus proxies upstream
    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;

    # Obrigatório: Configure o resolvedor para consultas DNS não bloqueantes
    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;

            # Opcional: Adicione provedores personalizados
            bot_verifier_provider applebot .applebot.apple.com;
        }
    }
}

Diretrizes

bot_verifier

sintaxe: bot_verifier on|off;

padrão: off

contexto: http, server, location

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

bot_verifier_provider

sintaxe: bot_verifier_provider <nome> <dominio1> [dominio2] ...;

padrão: nenhum

contexto: http, server, location

Adiciona um provedor de bots personalizado para verificação. O nome é comparado com strings User-Agent (sem distinção entre maiúsculas e 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 embutidos (Google, Bing, Yahoo, Baidu, Yandex).

bot_verifier_redis_host

sintaxe: bot_verifier_redis_host <hostname>;

padrão: localhost

contexto: http, server, location

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

bot_verifier_redis_port

sintaxe: bot_verifier_redis_port <port>;

padrão: 6379

contexto: http, server, location

Porta do servidor Redis.

bot_verifier_redis_connection_timeout

sintaxe: bot_verifier_redis_connection_timeout <milliseconds>;

padrão: 10

contexto: http, server, location

Tempo limite para estabelecer conexões Redis.

bot_verifier_redis_read_timeout

sintaxe: bot_verifier_redis_read_timeout <milliseconds>;

padrão: 10

contexto: http, server, location

Tempo limite para operações de leitura do Redis.

bot_verifier_redis_expiry

sintaxe: bot_verifier_redis_expiry <seconds>;

padrão: 3600

contexto: http, server, location

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

bot_verifier_redis_database

sintaxe: bot_verifier_redis_database <number>;

padrão: 0

contexto: http, server, location

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

bot_verifier_redis_password

sintaxe: bot_verifier_redis_password <password>;

padrão: vazio

contexto: 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 é configurada, o módulo realiza consultas DNS de forma assíncrona usando o resolvedor embutido do NGINX. Esta é a configuração recomendada para produção:

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

O fluxo de verificação:

  1. Consulta DNS reversa (registro PTR) para o IP do cliente
  2. Verifique se o nome do host resolvido termina com um domínio de provedor conhecido
  3. Consulta DNS forward (registro A) para confirmar se o IP corresponde
  4. Armazene o resultado no Redis

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-bot-verifier.