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_modulepara implantações atrás de proxies
Provedores Suportados
Provedores Embutidos
| Provedor | Domínios Verificados |
|---|---|
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:
- Consulta DNS reversa (registro PTR) para o IP do cliente
- Verifique se o nome do host resolvido termina com um domínio de provedor conhecido
- Consulta DNS forward (registro A) para confirmar se o IP corresponde
- 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.