Standardmäßige Sperrung aggressiver Bots

cPanel 7 Min. Lesezeit

Ein erheblicher Teil des Traffics vieler Websites stammt nicht von echten Besuchern, sondern von automatisierten Crawlern (Bots): SEO-Analyse-Tools, Roboter, die Daten zum Trainieren von KI-Modellen sammeln, ausländische Suchmaschinen und einfache Scraper. Ein Teil davon durchforstet ohne Einschränkungen alle Unterseiten der Website, oft mit mehreren Anfragen pro Sekunde, was die Website für echte Besucher verlangsamt und die Ressourcen des Webhostings unnötig beansprucht.

Aus diesem Grund weist der Webserver auf den Servern, die unsere cPanel- und WordPress-Hosting-Pakete bereitstellen, standardmäßig alle Anfragen mit dem Fehlercode 403 Forbidden zurück, deren User-Agent-Header (die vom Client gesendete Kennung) auf einen Bot hinweist, der in einer Sperrliste aufgeführt ist. Diese Regel ist in den Server-Einstellungen hinterlegt und gilt für alle Websites Ihres Hosting-Pakets; Sie müssen hierfür keine zusätzlichen Einstellungen vornehmen. Sollten Sie dennoch einen bestimmten Bot zulassen wollen, können Sie in der Datei „.htaccess“ eine Ausnahme festlegen (siehe unten).

Welche Bots sind gemäß den Regeln verboten?

Die Sperrliste enthält derzeit Bots, die in die folgenden Gruppen eingeteilt werden können:

  • Bots zur Erfassung von SEO-, Marketing- und Geschäftsdaten: AhrefsBot und AhrefsSiteAudit, SemrushBot, MJ12bot (Majestic), DotBot (Moz), BLEXBot, BarkRowler, serpstatbot, DataForSeoBot, MegaIndex.ru, seocompany.store, Ezooms, SentiBot, MetaURI, ZoominfoBot, VelenPublicWebCrawler, Dataprovider.com, AwarioBot, IonCrawl, GrapeshotCrawler, CriteoBot, BitSightBot, WellKnownBot, Nimbostratus-Bot, Polaris, brokenlinkcheck.com. Diese sammeln Daten für externe Dienste (Backlink-Analysetools, Wettbewerbsbeobachtungsdienste, Werbe- und Unternehmensdatenbanken). Sie bringen keine Besucher auf die Seite, durchsuchen diese jedoch regelmäßig und sehr gründlich.
  • Bots zum Trainieren von KI-Modellen und zum Sammeln großer Datenmengen: GPTBot (OpenAI), ClaudeBot (Anthropic), CCBot (Common Crawl), Bytespider (ByteDance), Amazonbot (Amazon), ImagesiftBot, FriendlyCrawler, GeedoProductSearch. Die Inhalte von Websites werden zum Trainieren großer Sprachmodelle oder zur Speicherung in eigenen Datenbanken gesammelt.
  • Ausländische und kleinere Suchmaschinen: Baiduspider (China), YandexBot (Russland), SeznamBot (Tschechien), PetalBot und dessen Vorgänger AspiegelBot (Huawei), SeekportBot, Applebot (Siri, Spotlight und Safari-Vorschläge sowie die KI-Modelle von Apple). Diese gehören zu legitimen Suchmaschinen, bringen jedoch typischerweise nur wenige Besucher auf eine Website, die sich an ein ungarisches Publikum richtet.
  • Webarchivierungs-Bots und Crawler-Frameworks: OSZKBOT (das ungarische Webarchiv der Nationalbibliothek „Széchényi“), Archive Team, Nutch (ein Open-Source-Crawler-Framework, auf dem viele individuelle Bots basieren).
  • HTTP-Client-Bibliotheken: python-requests, Go-http-client, axios, GuzzleHttp, fasthttp, GRequests. Hierbei handelt es sich nicht um konkrete Bots, sondern um die Standard-User-Agent-Werte von Programmierbibliotheken. Ein Browser sendet solche Werte niemals; daher verbergen sich dahinter meist nicht identifizierte Skripte, Schwachstellenscanner oder Programme zum Diebstahl von Inhalten.
  • Als Browser getarnte Scraper: Einige veraltete Browser-Identifikatoren (z. B. Firefox 62 unter Ubuntu, Firefox 95 unter Linux), die von bekannten Scraper-Netzwerken verwendet werden. Aktuelle Browser senden solche Identifikatoren nicht.

Was ist nicht verboten?

Die Regel gilt nicht für die Robots von Google (Googlebot, AdsBot-Google), Bing und DuckDuckGo, für die Link-Viewer von sozialen Netzwerken (Facebook, LinkedIn, X), für Robots, die auf Nutzeranfragen hin Seiten öffnen oder für KI-Suchmaschinen indexieren (ChatGPT-User, OAI-SearchBot, Claude-SearchBot, PerplexityBot), den Roboter des Internet Archive, die Programme „curl“ und „wget“, die eigenen Anfragen von WordPress sowie die meisten Uptime-Monitore (z. B. UptimeRobot).

Warum sperren wir diese Bots?

  • Geringere Auslastung: Einige Bots halten sich nicht an die Vorgaben der robots.txt-Datei und können pro Minute mehrere hundert Anfragen senden. Dies führt zu einer Belastung der CPU und der Datenbank, was bei Erreichen der Ressourcenobergrenze des Webhostings zu einem 508-Fehler führen kann.
  • Geringer Traffic: Bei Websites mit Bildern, Videos oder vielen Unterseiten kann der Traffic durch Scraper erheblich sein.
  • Sicherheit: Hinter nicht authentifizierten HTTP-Clients verbergen sich häufig automatisierte Angriffsversuche, Schwachstellensuche oder Content-Diebstahl.
  • Inhaltsschutz: Durch die Sperrung von KI-Trainingsbots wird verhindert, dass Inhalte der Website ohne Genehmigung in die Trainingsdaten großer Sprachmodelle gelangen.

Wann kann eine Ausnahme erforderlich sein?

Es kann vorkommen, dass Sie einen Dienst benötigen, der einen gesperrten User-Agent verwendet, zum Beispiel:

  • Sie analysieren Ihre eigene Website mithilfe von Ahrefs oder Semrush, und deren Crawler kann die Seite nicht crawlen;
  • Ihre Website richtet sich auch an den russischen, tschechischen oder chinesischen Markt (Yandex, Seznam, Baidu), oder ist es für Sie wichtig, in den Suchmaschinen von Apple (Applebot) zu erscheinen;
  • Ein Rückruf (IPN) eines Zahlungsanbieters, ein Webhook, ein API-Client oder ein eigenes Skript greift auf die Website zu und verwendet eine HTTP-Bibliothek, die in PHP (Guzzle), Node.js (axios), Python oder Go geschrieben ist.

Wenn bei einem solchen Dienst ein 403-Fehler auftritt, zeigt im Menüpunkt „cPanel-Übersicht » Fehler“ die zur Anfrage gehörende Zeile „client denied by server configuration“ an, dass der Server die Anfrage abgelehnt hat.

Ausnahme in der .htaccess-Datei

Die Sperre kann in der Datei „.htaccess“ im Stammverzeichnis der Website aufgehoben werden. Diese Datei können Sie über den Menüpunkt „Dateimanager“ in cPanel bearbeiten (die Anzeige versteckter Dateien können Sie über die Schaltfläche „Einstellungen“ aktivieren).

Es ist wichtig zu beachten, dass die Ausnahme nur innerhalb eines <If>-Blocks wirksam ist: Die Serverregel wird nach den einfachen Require-Zeilen in der .htaccess-Datei ausgewertet; daher hebt beispielsweise eine für sich allein stehende Require all granted-Zeile die Sperre nicht auf. Der <If>-Block in der .htaccess-Datei folgt jedoch auf die Serverregel und überschreibt diese daher.

Bei WordPress sollten Sie den Code außerhalb des Abschnitts zwischen den Zeilen „# BEGIN WordPress“ und „# END WordPress“ platzieren, da WordPress diesen Abschnitt beim Speichern der Einstellungen überschreibt.

Ausnahmen haben keine Auswirkungen auf die Serverregeln zum Schutz von .env-Dateien und .git-Verzeichnissen; diese bleiben weiterhin gesperrt.

Vollständige Freigabe eines Bots

Wenn Sie einen bestimmten Bot von überall her zulassen möchten, geben Sie dessen Namen (oder mehrere Namen, durch das Zeichen „|“ getrennt) in die Regel ein:

<If "%{HTTP_USER_AGENT} =~ /(AhrefsSiteAudit|SemrushBot)/i">
    Require all granted
</If>

Da jeder den User-Agent-Header beliebig einstellen kann, kann mit dieser Konfiguration jedes Programm Zugriff erlangen, das sich als dieser Bot ausgibt. Wenn der Dienst von bekannten IP-Adressen aus aufgerufen wird, ist die folgende IP-basierte Ausnahmeregel sicherer.

Freigabe anhand der IP-Adresse

Wenn der Dienst, der den unzulässigen User-Agent verwendet (z. B. ein Zahlungsdienstleister, ein Überwachungssystem oder Ihr eigener Server), von bekannten IP-Adressen aus aufruft, lassen Sie bitte nur diese Adressen zu:

<If "%{HTTP_USER_AGENT} =~ /(GuzzleHttp|python-requests|axios|Go-http-client)/i">
    <RequireAny>
        Require all denied
        Require ip 203.0.113.42
        Require ip 198.51.100.0/24
    </RequireAny>
</If>

Innerhalb des <RequireAny>-Blocks reicht es aus, wenn eine der Require-Zeilen erfüllt ist. Die Zeile Require all denied wird niemals erfüllt, die Zeile Require ip hingegen schon, wenn die Anfrage von einer der aufgeführten Adressen stammt. Also:

  • Anfragen, die von den aufgeführten IP-Adressen stammen, werden auch dann durchgelassen, wenn deren User-Agent auf der Sperrliste steht;
  • Alle anderen Anfragen, die mit einem unzulässigen User-Agent eingehen, erhalten weiterhin den Fehlercode 403.

In der Zeile „Require ip“ können sowohl einzelne IP-Adressen (203.0.113.42) als auch CIDR-notierte Bereiche (198.51.100.0/24) angegeben werden, und zwar sowohl für IPv4 als auch für IPv6 in beliebig vielen Zeilen. Befindet sich die Website hinter Cloudflare, müssen Sie dennoch die tatsächliche IP-Adresse des Besuchers angeben; der Server liest diese aus dem Cloudflare-Header aus.

Autorisierung anhand eines geheimen Headers

Falls die IP-Adresse des Kunden nicht fest ist (beispielsweise bei einem CI-System oder einem internen Testtool), kann anstelle der IP-Adresse oder zusätzlich zu dieser auch ein eindeutiger HTTP-Header verwendet werden:

SetEnvIf X-Bot-Bypass "^titkos-token-ide$" bot_bypass

<If "%{HTTP_USER_AGENT} =~ /(python-requests|GuzzleHttp)/i">
    <RequireAny>
        Require all denied
        Require env bot_bypass
    </RequireAny>
</If>

In diesem Fall muss der Kunde bei jeder Anfrage den Header „X-Bot-Bypass: titkos-token-ide“ übermitteln. Das Token ist in der Datei „.htaccess“ als Klartext hinterlegt; daher handelt es sich hierbei nicht um eine echte Sicherheitslösung, sondern lediglich um eine einfache Ausnahmebehandlung, beispielsweise für Testzwecke. Verwenden Sie einen langen, zufälligen Wert.

Eigene Sperre hinzufügen

Wenn Sie einen Bot sperren möchten, der nicht in der Liste aufgeführt ist, können Sie dies ebenfalls mit einem <If>-Block tun:

<If "%{HTTP_USER_AGENT} =~ /(meta-externalagent|PerplexityBot)/i">
    Require all denied
</If>

Bei Bots, die sich an die Vorgaben der robots.txt-Datei halten (beispielsweise bei den Bots großer Suchmaschinen und KI-Unternehmen), reicht das in der robots.txt-Datei festgelegte Verbot aus.

Testen der Regel

Nach der Änderung können Sie mit dem Programm „curl“ überprüfen, ob die Sperre und die Ausnahme wie erwartet funktionieren:

# 403-as választ kell kapnia
curl -I -A "Mozilla/5.0 (compatible; BLEXBot/1.0)" https://pelda-domain.hu/

# 200-as választ kell kapnia (normál böngésző User-Agent)
curl -I -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://pelda-domain.hu/

# Fejléc alapú kivételnél a fejléccel 200-as választ kell kapnia
curl -I -A "python-requests/2.32" -H "X-Bot-Bypass: titkos-token-ide" https://pelda-domain.hu/

Bei einer IP-basierten Ausnahmeregelung muss eine Anfrage, die mit einem unzulässigen User-Agent gesendet wird, bei Absendung von einer in der Ausnahmeliste aufgeführten IP-Adresse einen 200-Status zurückgeben, bei Absendung von jeder anderen Adresse hingegen einen 403-Status.

Sollte ein Dienst auch nach der Ausnahme weiterhin den Fehler 403 anzeigen, kann es sein, dass nicht diese Regel, sondern die Firewall des Servers den Zugriff blockiert (siehe: IP-Sperre durch die Firewall). In diesem Fall schreiben Sie uns bitte, und wir helfen Ihnen, die Ursache zu ermitteln.

Zurück: cPanel-Artikel (43)