Aller au contenu

bot-verifier: Un module de vérification des bots d'indexation pour NGINX

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_bot_verifier_module.so;

Ce document décrit nginx-module-bot-verifier v0.0.17 publié le 6 février 2026.


Module NGINX pour vérifier les identités des bots des moteurs de recherche via une recherche DNS inverse/avant.

Ce module valide les acteurs prétendant être des robots d'exploration de moteurs de recherche (Google, Bing, Yahoo, Baidu, Yandex) en effectuant la méthode de vérification DNS recommandée par chaque fournisseur de recherche. Il empêche les acteurs malveillants de contourner les mesures de sécurité en usurpant les chaînes User-Agent des bots.

Un remplacement direct pour l'original ngx_bot_verifier par Aaron Bedra.

Fonctionnalités

  • Vérification DNS inverse/avant suivant les directives des fournisseurs de moteurs de recherche
  • Résolution DNS asynchrone utilisant le résolveur intégré de NGINX (non-bloquant)
  • Mise en cache Redis avec mise en pool de connexions pour minimiser la surcharge des recherches DNS
  • Fournisseurs configurables - ajoutez des fournisseurs de bots personnalisés au-delà des valeurs par défaut
  • Conception fail-open - les erreurs de vérification permettent aux requêtes de passer pour éviter de bloquer le trafic légitime
  • Support IP réelle via ngx_http_realip_module pour les déploiements derrière des proxies

Fournisseurs pris en charge

Fournisseurs intégrés

Fournisseur Domaines vérifiés
Google google.com, googlebot.com
Bing search.msn.com
Yahoo yahoo.com
Baidu crawl.baidu.com
Yandex yandex.com, yandex.net, yandex.ru

Fournisseurs personnalisés

Ajoutez des fournisseurs personnalisés en utilisant la directive bot_verifier_provider :

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

Les fournisseurs personnalisés sont vérifiés en plus des fournisseurs intégrés.

Synopsis

http {
    # Requis : Configurer le module realip pour faire confiance à vos proxies en amont
    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;

    # Requis : Configurer le résolveur pour des recherches DNS non-bloquantes
    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;

            # Optionnel : Ajouter des fournisseurs personnalisés
            bot_verifier_provider applebot .applebot.apple.com;
        }
    }
}

Directives

bot_verifier

syntaxe : bot_verifier on|off;

par défaut : off

contexte : http, server, location

Active ou désactive la vérification des bots. Lorsqu'elle est activée, les requêtes avec des chaînes User-Agent correspondant à des modèles de bots connus sont vérifiées via une recherche DNS.

bot_verifier_provider

syntaxe : bot_verifier_provider <nom> <domaine1> [domaine2] ...;

par défaut : aucun

contexte : http, server, location

Ajoute un fournisseur de bots personnalisé pour la vérification. Le nom est comparé aux chaînes User-Agent (insensible à la casse). Les domaines sont utilisés pour vérifier le résultat de la recherche DNS inverse.

Exemple :

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

Les fournisseurs personnalisés sont vérifiés en plus des fournisseurs intégrés (Google, Bing, Yahoo, Baidu, Yandex).

bot_verifier_redis_host

syntaxe : bot_verifier_redis_host <nom_d_hôte>;

par défaut : localhost

contexte : http, server, location

Nom d'hôte du serveur Redis pour la mise en cache des résultats de vérification.

bot_verifier_redis_port

syntaxe : bot_verifier_redis_port <port>;

par défaut : 6379

contexte : http, server, location

Port du serveur Redis.

bot_verifier_redis_connection_timeout

syntaxe : bot_verifier_redis_connection_timeout <millisecondes>;

par défaut : 10

contexte : http, server, location

Délai d'attente pour établir des connexions Redis.

bot_verifier_redis_read_timeout

syntaxe : bot_verifier_redis_read_timeout <millisecondes>;

par défaut : 10

contexte : http, server, location

Délai d'attente pour les opérations de lecture Redis.

bot_verifier_redis_expiry

syntaxe : bot_verifier_redis_expiry <secondes>;

par défaut : 3600

contexte : http, server, location

TTL pour les résultats de vérification mis en cache. Après expiration, la prochaine requête provenant de la même IP déclenche une nouvelle vérification DNS.

bot_verifier_redis_database

syntaxe : bot_verifier_redis_database <nombre>;

par défaut : 0

contexte : http, server, location

Numéro de base de données Redis à utiliser pour stocker les résultats de vérification.

bot_verifier_redis_password

syntaxe : bot_verifier_redis_password <mot_de_passe>;

par défaut : vide

contexte : http, server, location

Mot de passe pour l'authentification Redis. Laissez vide si Redis ne nécessite pas d'authentification.

Résolution DNS asynchrone

Lorsque la directive resolver de NGINX est configurée, le module effectue des recherches DNS de manière asynchrone en utilisant le résolveur intégré de NGINX. C'est la configuration recommandée pour la production :

  • Non-bloquant - Les recherches DNS ne bloquent pas les processus de travail de NGINX
  • Scalable - gère un trafic élevé sans pics de latence induits par DNS
  • Délai d'attente gracieux - les réponses DNS lentes n'affectent pas les autres requêtes

Le flux de vérification :

  1. Recherche DNS inverse (enregistrement PTR) pour l'IP du client
  2. Vérifiez que le nom d'hôte résolu se termine par un domaine de fournisseur connu
  3. Recherche DNS avant (enregistrement A) pour confirmer que l'IP correspond
  4. Mettez le résultat en cache dans Redis

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-bot-verifier.