Traefik Middleware-Plugin zur »Abwehr« von AI-Crawlern
Zum Plugin geht es hier entlang: https://plugins.traefik.io/plugins/680bb19ee4f1c0f6442c2665
In einem Blog-Post von Anfang des Jahres habe ich beschrieben, wie ein Crawler eines großen AI-Anbieters auf mein Gitea eingehämmert hat. Es kam zu einer Vielzahl an sich wiederholenden Anfragen, die eine Unmenge an Traffic verursacht haben. Die Lösung damals: Vor die Gitea-Instanz habe ich einen Caddy1 gestellt, der Anhand der User-Agents Requests von AI-Crawlern herausgefiltert und datentransfersparsam abgelehnt hat.
Inzwischen betrifft das Thema »AI-Crawling« jedoch nicht mehr nur mein Gitea, sondern hat sich auf einige meiner kleinen Hobby-Projekte ausgeweitet, die auf sparsamer Hardware direkt aus Containern heraus betrieben werden. Sie werden durch Traefik2 »nach draußen« bereitgestellt. Dabei greife ich sowieso schon auf die eine oder andere teilweise selbst-geschriebene Middleware zur Absicherung und Protokollierung zurück. Was liegt also näher, als das, was ich in Caddy für Gitea konfiguriert habe, als Middleware für Traefik bereitzustellen?
Funktionsumfang
- Bots werden anhand des
User-Agent
-Headers identifiziert. Damit werden derzeit nur die Bots erkannt, die legitim angeben, wer sie sind. Für meine Zwecke ist das ausreichend. Leider ist meine Erfahrung, dass auch diese Bots teilweise dierobots.txt
nicht so respektieren, wie ich es erwarte – und es teilweise sehr lange dauert, bis die Angaben dort eine Wirkung auf die Crawler zeigen. - Die User-Agents, die »ausgesperrt« werden sollen, lassen sich per Konfiguration festlegen.
- Wird ein Bot identifiziert, wird die Verbindung mit HTTP-Status 403 abgebrochen, der Request wird in diesem Fall nicht an die dahinterliegende App geleitet.
- Wenn ein »ausgesperrter« Bot die URL
/robots.txt
aufruft, wird eine Standard-Angabe ausgeliefert, die besagt, dass für alle Bots der Zugriff unterwünscht ist.
Installation und Konfiguration
Der Quellcode liegt ausnahmsweise bei Github3, so dass Traefik das Plugin automatisch dem eigenen Katalog hinzufügen konnte. So ist die Installation des Plugins denkbar einfach und kann durch das simple Hinzufügen der passenden Konfiguration erfolgen.
Die README.md des Projekts beschreibt die einzelnen Konfigurationsschritte und gibt Beispiele.
Die wesentlichen Schritte sind:
- Konfiguration des Plugins im Rahmen der statischen Konfiguration
- Definition der Middleware mit dem Plugin und den Bot-Patterns im Rahmen der dynamischen Konfiguration
- Nutzung der Middleware wie gewohnt entweder im Rahmen der Container-Labels oder direkt an den jeweiligen
entryPoints
. Auf letztem Wege nutze ich die Middleware.
Test
Konfiguration vorgenommen? Traefik neugestartet? Dann wird es Zeit für einen Test. Dazu können wir den Testablauf aus dem oben genannten Blog-Post verwenden:
- Aufruf im normalen Webbrowser: Es kann wie gewohnt mit Gitea gearbeitet werden.
- Curl-Aufruf mit
curl -H "User-Agent: GPTBot/1.2" -v https://########
: Es kommt eine leere Antwort mit dem HTTP-Status-Code 403:1 * Request completely sent off 2 < HTTP/2 403 3 < date: Wed, 07 May 2025 18:44:13 GMT 4 < content-length: 13 5 < 6 Access denied
- Curl-Aufruf mit
curl -H "User-Agent: GPTBot/1.2" -v https://########/robots.txt
: Es wird eine allgemeinerobots.txt
ausgeliefert, die auf jeden Bot passen sollte:1 * Request completely sent off 2 < HTTP/2 200 3 < date: Wed, 07 May 2025 18:52:11 GMT 4 < content-type: text/plain; charset=utf-8 5 < content-length: 26 6 < 7 User-agent: * 8 Disallow: /
Viel Spaß! Ich hoffe, es hilft dem einen oder anderen!
-
Alle Informationen zu Caddy: https://caddyserver.com/ ↩︎
-
Alle Informationen zu Traefik: https://traefik.io/traefik/ ↩︎
-
Quellcode des Plugins: https://github.com/edelbluth/tm_no_ai_bots ↩︎
Web Traefik Entwicklung AI
Zuletzt geändert: 2025-05-08 16:16:07