AI-Bot-Blocker
Übersicht
Der AI-Bot-Blocker schützt über GateControl exponierte Services vor unerwünschten AI-Crawlern. Er erkennt und blockiert Zugriffe von bekannten AI-Firmen (OpenAI, Google, AWS, DeepSeek, GitHub Copilot, Microsoft Azure) anhand ihrer IP-Adressbereiche — direkt auf Reverse-Proxy-Ebene, bevor der Request das Backend erreicht.
Lizenz-Feature-Key: bot_blocking
Funktionsweise
Der Bot-Blocker basiert auf dem caddy-defender Plugin für Caddy. Er wird als erster Handler in die Caddy-Route-Chain eingefügt — noch vor Request-Tracing, Rate-Limiting, Authentifizierung und Compression. Dadurch werden Bots sofort abgewiesen, ohne andere Handler zu belasten.
Erkannte IP-Bereiche
Das Plugin pflegt automatisch aktuelle IP-Listen der folgenden Anbieter:
| Anbieter | Beschreibung |
|---|---|
| OpenAI | GPTBot, ChatGPT-User und andere OpenAI-Dienste |
| AWS | Amazon Web Services (häufig von AI-Crawlern genutzt) |
| Google Cloud | Google-Extended, Gemini und andere Google-AI-Dienste |
| GitHub Copilot | GitHub Copilot Anfragen |
| DeepSeek | DeepSeek AI-Crawler |
| Azure | Microsoft Azure Public Cloud |
Die IP-Listen werden vom Plugin-Maintainer regelmäßig aktualisiert.
Bot-Counter
Funktionsweise
Ein Hintergrund-Task zählt alle 60 Sekunden die geblockten Requests pro Route. Der Counter basiert auf HTTP 403-Responses im Caddy Access-Log, gefiltert nach der Domain der Route.
Anzeige
In der Routen-Liste wird ein oranges Badge angezeigt:
- Bot-Icon + Zahl (z.B.
🤖 42): Anzahl der bisher geblockten Requests - Nur Bot-Icon (ohne Zahl): Bot-Blocker ist aktiv, aber noch keine Bots geblockt
Das Badge wird nur für HTTP-Routen angezeigt (nicht für L4/TCP-Routen).
Bekannte Einschränkung
Der Counter zählt alle HTTP 403-Responses auf der Route, nicht nur die vom Bot-Blocker. Wenn auf derselben Route auch IP-Zugriffskontrolle oder ACL aktiv ist, können diese ebenfalls 403-Responses erzeugen, die mitgezählt werden. Für die meisten Anwendungsfälle ist die Genauigkeit ausreichend.
Testen
Bot-Blocking verifizieren
# Normaler Request — sollte durchkommen
curl -s -o /dev/null -w "%{http_code}" https://deine-route.com/
# Erwartetes Ergebnis: 200 (oder 302 bei Auth)
# Request von einer OpenAI-IP simulieren (nur im lokalen Netzwerk möglich)
# Stattdessen: Im GateControl-Log nach "defender" Einträgen suchen
docker logs gatecontrol 2>&1 | grep "defender"
Counter prüfen
# Route-Daten abrufen — bot_blocker_count enthält den aktuellen Zähler
curl -s /api/v1/routes/:id | jq '.route.bot_blocker_count'
Einschränkungen
- Nur HTTP-Routen: L4/TCP-Routen unterstützen kein Bot-Blocking (caddy-defender ist ein HTTP-Handler)
- IP-basiert: Blockierung basiert auf IP-Adressen, nicht auf User-Agent-Strings. Bots die über nicht-gelistete IP-Bereiche kommen, werden nicht erkannt.
- Keine benutzerdefinierten IP-Ranges: Es werden die vom Plugin gepflegten Standard-Ranges verwendet
- Keine Whitelist: Einzelne IPs können nicht vom Blocking ausgenommen werden
- Counter-Genauigkeit: Zählt alle 403er, nicht nur Bot-Blocks (siehe oben)
Datenbank
Felder in der routes-Tabelle
| Spalte | Typ | Default | Beschreibung |
|---|---|---|---|
bot_blocker_enabled |
INTEGER | 0 | Feature aktiviert (0/1) |
bot_blocker_mode |
TEXT | 'block' | Aktiver Modus |
bot_blocker_count |
INTEGER | 0 | Kumulativer Block-Counter |
bot_blocker_config |
TEXT | null | JSON mit modusspezifischen Optionen |
Migration
Version 28 (add_bot_blocker) — erstellt am 2026-03-28.
Backup/Restore
Die Bot-Blocker-Konfiguration (bot_blocker_enabled, bot_blocker_mode, bot_blocker_config) wird bei Backup/Restore berücksichtigt. Der bot_blocker_count wird nicht exportiert — der Counter startet nach einem Restore bei 0.
Technische Details
Caddy-Handler-Config
{
"handler": "defender",
"raw_responder": "block",
"ranges": ["openai", "aws", "gcloud", "githubcopilot", "deepseek", "azurepubliccloud"]
}
Handler-Position in der Route-Chain
1. defender (Bot-Blocker) ← blockiert Bots sofort
2. trace (Request-Tracing)
3. headers (Custom Headers)
4. rate_limit
5. mirror (Request Mirroring)
6. encode (Komprimierung)
7. reverse_proxy (Backend)
Go-Modul
pkg.jsn.cam/caddy-defender (ursprünglich github.com/JasonLovesDoggo/caddy-defender)
Background-Task
- Intervall: 60 Sekunden
- Quelle:
/data/caddy/access.log - Logik: Parst JSON-Zeilen, filtert nach
status === 403, matchedrequest.hostgegen Routen mitbot_blocker_enabled, inkrementiertbot_blocker_count - Log-Rotation: Timestamp-basiertes Tracking (kein Offset), kompatibel mit Caddy's Log-Rotation (10 MB, 3 Dateien)