bot-verifier: Un módulo de verificación de bots de índice de búsqueda para NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo agregando lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_bot_verifier_module.so;
Este documento describe nginx-module-bot-verifier v0.0.17 lanzado el 06 de febrero de 2026.
Módulo de NGINX para verificar las identidades de los bots de motores de búsqueda a través de búsqueda DNS inversa/adelante.
Este módulo valida a los actores que afirman ser rastreadores de motores de búsqueda (Google, Bing, Yahoo, Baidu, Yandex) realizando el método de verificación DNS recomendado por cada proveedor de búsqueda. Previene que actores maliciosos eludan las medidas de seguridad al falsificar cadenas User-Agent de bots.
Un reemplazo directo para el original ngx_bot_verifier de Aaron Bedra.
Características
- Verificación DNS inversa/adelante siguiendo las pautas del proveedor de motores de búsqueda
- Resolución DNS asíncrona utilizando el resolutor integrado de NGINX (no bloqueante)
- Caché Redis con agrupamiento de conexiones para minimizar la sobrecarga de búsqueda DNS
- Proveedores configurables - agrega proveedores de bots personalizados más allá de los predeterminados
- Diseño de fallo abierto - los errores de verificación permiten que las solicitudes pasen para evitar bloquear el tráfico legítimo
- Soporte de IP real a través de
ngx_http_realip_modulepara implementaciones detrás de proxies
Proveedores Soportados
Proveedores Integrados
| Proveedor | Dominios Verificados |
|---|---|
google.com, googlebot.com |
|
| Bing | search.msn.com |
| Yahoo | yahoo.com |
| Baidu | crawl.baidu.com |
| Yandex | yandex.com, yandex.net, yandex.ru |
Proveedores Personalizados
Agrega proveedores personalizados usando la directiva bot_verifier_provider:
bot_verifier_provider facebook .facebook.com .fbcdn.net;
bot_verifier_provider apple .applebot.apple.com;
Los proveedores personalizados se verifican además de los proveedores integrados.
Sinopsis
http {
# Requerido: Configurar el módulo realip para confiar en tus proxies ascendentes
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;
# Requerido: Configurar el resolutor para búsquedas DNS no 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: Agregar proveedores personalizados
bot_verifier_provider applebot .applebot.apple.com;
}
}
}
Directivas
bot_verifier
sintaxis: bot_verifier on|off;
predeterminado: off
contexto: http, server, location
Habilita o deshabilita la verificación de bots. Cuando está habilitado, las solicitudes con cadenas User-Agent que coinciden con patrones de bots conocidos se verifican a través de búsqueda DNS.
bot_verifier_provider
sintaxis: bot_verifier_provider <nombre> <dominio1> [dominio2] ...;
predeterminado: ninguno
contexto: http, server, location
Agrega un proveedor de bots personalizado para verificación. El nombre se compara con las cadenas User-Agent (sin distinción entre mayúsculas y minúsculas). Los dominios se utilizan para verificar el resultado de la búsqueda DNS inversa.
Ejemplo:
bot_verifier_provider facebook .facebook.com .fbcdn.net;
bot_verifier_provider apple .applebot.apple.com;
bot_verifier_provider duckduckgo .duckduckgo.com;
Los proveedores personalizados se verifican además de los proveedores integrados (Google, Bing, Yahoo, Baidu, Yandex).
bot_verifier_redis_host
sintaxis: bot_verifier_redis_host <nombre_del_host>;
predeterminado: localhost
contexto: http, server, location
Nombre del host del servidor Redis para almacenar en caché los resultados de verificación.
bot_verifier_redis_port
sintaxis: bot_verifier_redis_port <puerto>;
predeterminado: 6379
contexto: http, server, location
Puerto del servidor Redis.
bot_verifier_redis_connection_timeout
sintaxis: bot_verifier_redis_connection_timeout <milisegundos>;
predeterminado: 10
contexto: http, server, location
Tiempo de espera para establecer conexiones Redis.
bot_verifier_redis_read_timeout
sintaxis: bot_verifier_redis_read_timeout <milisegundos>;
predeterminado: 10
contexto: http, server, location
Tiempo de espera para operaciones de lectura de Redis.
bot_verifier_redis_expiry
sintaxis: bot_verifier_redis_expiry <segundos>;
predeterminado: 3600
contexto: http, server, location
TTL para los resultados de verificación almacenados en caché. Después de la expiración, la siguiente solicitud desde la misma IP desencadena una nueva verificación DNS.
bot_verifier_redis_database
sintaxis: bot_verifier_redis_database <número>;
predeterminado: 0
contexto: http, server, location
Número de base de datos Redis a utilizar para almacenar los resultados de verificación.
bot_verifier_redis_password
sintaxis: bot_verifier_redis_password <contraseña>;
predeterminado: vacío
contexto: http, server, location
Contraseña para la autenticación de Redis. Deja vacío si Redis no requiere autenticación.
Resolución DNS Asíncrona
Cuando la directiva resolver de NGINX está configurada, el módulo realiza búsquedas DNS de manera asíncrona utilizando el resolutor integrado de NGINX. Esta es la configuración recomendada para producción:
- No bloqueante - Las búsquedas DNS no bloquean los procesos de trabajo de NGINX
- Escalable - Maneja alto tráfico sin picos de latencia inducidos por DNS
- Tiempos de espera suaves - Las respuestas DNS lentas no afectan a otras solicitudes
El flujo de verificación:
- Búsqueda DNS inversa (registro PTR) para la IP del cliente
- Verificar que el nombre de host resuelto termine con un dominio de proveedor conocido
- Búsqueda DNS adelante (registro A) para confirmar que la IP coincide
- Almacenar el resultado en Redis
GitHub
Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-bot-verifier.