Zum Inhalt

bot-verifier: Ein Suchindex-Bot-Verifizierungsmodul für NGINX

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

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

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_bot_verifier_module.so;

Dieses Dokument beschreibt nginx-module-bot-verifier v0.0.17 veröffentlicht am 06. Februar 2026.


NGINX-Modul zur Überprüfung der Identitäten von Suchmaschinen-Bots über Reverse-/Forward-DNS-Abfragen.

Dieses Modul validiert Akteure, die behaupten, Suchmaschinen-Crawler (Google, Bing, Yahoo, Baidu, Yandex) zu sein, indem es die von jedem Suchanbieter empfohlene DNS-Verifizierungsmethode durchführt. Es verhindert, dass böswillige Akteure Sicherheitsmaßnahmen umgehen, indem sie Bot-User-Agent-Strings fälschen.

Ein Drop-in-Ersatz für das ursprüngliche ngx_bot_verifier von Aaron Bedra.

Funktionen

  • Reverse/Forward-DNS-Verifizierung gemäß den Richtlinien der Suchmaschinenanbieter
  • Asynchrone DNS-Auflösung mit dem integrierten Resolver von NGINX (nicht blockierend)
  • Redis-Caching mit Verbindungspooling zur Minimierung des DNS-Abfrageaufwands
  • Konfigurierbare Anbieter - fügen Sie benutzerdefinierte Bot-Anbieter über die Standardwerte hinaus hinzu
  • Fail-open-Design - Verifizierungsfehler lassen Anfragen durch, um legitimen Verkehr nicht zu blockieren
  • Echte IP-Unterstützung über ngx_http_realip_module für Bereitstellungen hinter Proxys

Unterstützte Anbieter

Eingebaute Anbieter

Anbieter Verifizierte Domains
Google google.com, googlebot.com
Bing search.msn.com
Yahoo yahoo.com
Baidu crawl.baidu.com
Yandex yandex.com, yandex.net, yandex.ru

Benutzerdefinierte Anbieter

Fügen Sie benutzerdefinierte Anbieter mit der Direktive bot_verifier_provider hinzu:

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

Benutzerdefinierte Anbieter werden zusätzlich zu den eingebauten Anbietern verifiziert.

Zusammenfassung

http {
    # Erforderlich: Konfigurieren Sie das realip-Modul, um Ihren upstream-Proxys zu vertrauen
    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;

    # Erforderlich: Konfigurieren Sie den Resolver für nicht blockierende DNS-Abfragen
    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: Fügen Sie benutzerdefinierte Anbieter hinzu
            bot_verifier_provider applebot .applebot.apple.com;
        }
    }
}

Direktiven

bot_verifier

syntax: bot_verifier on|off;

default: off

context: http, server, location

Aktiviert oder deaktiviert die Bot-Verifizierung. Wenn aktiviert, werden Anfragen mit User-Agent-Strings, die bekannten Bot-Mustern entsprechen, über eine DNS-Abfrage verifiziert.

bot_verifier_provider

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

default: keine

context: http, server, location

Fügt einen benutzerdefinierten Bot-Anbieter zur Verifizierung hinzu. Der name wird mit User-Agent-Strings (nicht groß-/kleinschreibungssensitiv) verglichen. Die Domains werden verwendet, um das Ergebnis der Reverse-DNS-Abfrage zu verifizieren.

Beispiel:

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

Benutzerdefinierte Anbieter werden zusätzlich zu den eingebauten Anbietern (Google, Bing, Yahoo, Baidu, Yandex) überprüft.

bot_verifier_redis_host

syntax: bot_verifier_redis_host <hostname>;

default: localhost

context: http, server, location

Hostname des Redis-Servers für das Caching von Verifizierungsergebnissen.

bot_verifier_redis_port

syntax: bot_verifier_redis_port <port>;

default: 6379

context: http, server, location

Port des Redis-Servers.

bot_verifier_redis_connection_timeout

syntax: bot_verifier_redis_connection_timeout <milliseconds>;

default: 10

context: http, server, location

Timeout für die Herstellung von Redis-Verbindungen.

bot_verifier_redis_read_timeout

syntax: bot_verifier_redis_read_timeout <milliseconds>;

default: 10

context: http, server, location

Timeout für Redis-Lesevorgänge.

bot_verifier_redis_expiry

syntax: bot_verifier_redis_expiry <seconds>;

default: 3600

context: http, server, location

TTL für zwischengespeicherte Verifizierungsergebnisse. Nach Ablauf wird die nächste Anfrage von derselben IP eine frische DNS-Verifizierung auslösen.

bot_verifier_redis_database

syntax: bot_verifier_redis_database <number>;

default: 0

context: http, server, location

Redis-Datenbanknummer, die zur Speicherung von Verifizierungsergebnissen verwendet wird.

bot_verifier_redis_password

syntax: bot_verifier_redis_password <password>;

default: leer

context: http, server, location

Passwort für die Redis-Authentifizierung. Leer lassen, wenn Redis keine Authentifizierung erfordert.

Asynchrone DNS-Auflösung

Wenn die NGINX-Direktive resolver konfiguriert ist, führt das Modul DNS-Abfragen asynchron mit dem integrierten Resolver von NGINX durch. Dies ist die empfohlene Konfiguration für die Produktion:

  • Nicht blockierend - DNS-Abfragen blockieren keine NGINX-Worker-Prozesse
  • Skalierbar - bewältigt hohen Verkehr ohne durch DNS verursachte Verzögerungsspitzen
  • Sanfte Timeouts - langsame DNS-Antworten beeinflussen andere Anfragen nicht

Der Verifizierungsfluss:

  1. Reverse-DNS-Abfrage (PTR-Datensatz) für die Client-IP
  2. Überprüfen, ob der aufgelöste Hostname mit einer bekannten Anbieter-Domain endet
  3. Forward-DNS-Abfrage (A-Datensatz), um zu bestätigen, dass die IP übereinstimmt
  4. Ergebnis im Redis cachen

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentation für dieses Modul im GitHub-Repository für nginx-module-bot-verifier.