Files
geoip_shop_manager/README.md
2025-12-10 18:36:57 +01:00

648 lines
22 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GeoIP Shop Blocker Manager - DACH & Eurozone Version
**Hybrid-System für temporäres GeoIP-Blocking auf Plesk-Servern mit mehreren Shops**
Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temporär für alle Zugriffe außerhalb der konfigurierten Region zu sperren. Es kombiniert PHP-Level-Blocking mit optionaler CrowdSec Firewall-Integration für maximalen Schutz.
## 🎯 Features
-**Flexible Regionen**: DACH (DE, AT, CH) oder Eurozone+GB (22 Länder)
-**Bot-Rate-Limiting**: Bots unter Limit durchlassen, bei Überschreitung temporär bannen
-**Umfangreiche Bot-Erkennung**: 321 bekannte Bot-Patterns + 32 generische Fallback-Patterns
-**Präzises Blocking**: PHP prüft gegen vollständige IP-Ranges (keine Fehlblockierungen)
-**Flexibler Modus**: 4 Modi - GeoIP+CrowdSec, GeoIP-only, Bot+CrowdSec, Bot-only
-**Doppelter Schutz**: PHP-Level + Firewall-Level (CrowdSec) - optional
-**Automatische Synchronisation**: Blockierte IPs werden automatisch an CrowdSec weitergegeben
-**Multi-Shop-Management**: Verwaltung mehrerer Shops auf einem Server
-**Bulk-Operationen**: Alle Shops gleichzeitig aktivieren/deaktivieren
-**Link11-Erkennung**: Automatische Erkennung ob Shop hinter Link11 CDN steht
-**Nur direkte Shops**: Option um nur Shops ohne CDN-Schutz zu aktivieren
-**Gesamtübersicht**: Logs und Statistiken über alle Shops hinweg (Top 50 IPs)
-**Auto-Deaktivierung**: Blocking läuft nach 72 Stunden automatisch ab
-**Systemd-Service**: Automatischer Start beim Booten
-**Sauberes Cleanup**: Vollständige Deinstallation bei Deaktivierung
-**Plesk-kompatibel**: Funktioniert mit Plesk-verwalteten Shops
-**CDN-kompatibel**: PHP-only Modus für Link11, Cloudflare & Co.
-**Fail-Open**: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle)
## 🏗️ Architektur
### Modus 1: GeoIP + CrowdSec 🛡️
#### Komponente 1: PHP-Script
- Wird in die `index.php` des Shops integriert
- Lädt IP-Ranges von ipdeny.com (konfigurierte Länder)
- Prüft jede Anfrage gegen diese Ranges
- Blockt Nicht-erlaubte IPs sofort mit HTTP 403
- Schreibt blockierte IPs in Queue-Datei für CrowdSec
#### Komponente 2: Python Watcher (systemd service)
- Läuft permanent im Hintergrund als root
- Überwacht Queue-Dateien aller aktiven Shops
- Fügt blockierte IPs automatisch zu CrowdSec hinzu
- Vermeidet Duplikate durch In-Memory-Cache
- Prüft alle 5 Sekunden auf neue IPs
#### Komponente 3: CrowdSec Firewall Bouncer
- Blockiert IPs auf Firewall-Ebene (iptables/nftables)
- Schützt ALLE Services (HTTP, HTTPS, SSH, FTP, etc.)
- Übernimmt Bans für 72 Stunden
- Deutlich performanter als PHP-Checks
### Modus 2: Nur GeoIP 📝
- Nur das PHP-Script wird aktiviert
- Keine CrowdSec-Synchronisation
- Kein Watcher-Service nötig
- **Ideal für Server hinter CDN/Proxy** (Link11, Cloudflare, etc.)
### Modus 3: Bot-Rate-Limiting + CrowdSec 🤖🛡️
- Shop bleibt weltweit erreichbar
- Nur bekannte Bots werden rate-limited
- **Bots unter dem Limit werden durchgelassen**
- Bei Überschreitung: temporärer Ban + CrowdSec-Meldung
### Modus 4: Nur Bot-Rate-Limiting 🤖
- Shop bleibt weltweit erreichbar
- Nur bekannte Bots werden rate-limited
- **Bots unter dem Limit werden durchgelassen**
- Keine CrowdSec-Synchronisation
> **Hinweis**: Bei Servern hinter einem CDN/Reverse-Proxy (wie Link11, Cloudflare, Hetzner LB) sieht iptables nur die Proxy-IP, nicht die echte Client-IP. In diesem Fall ist der **PHP-only Modus** oder **Bot-only Modus** die bessere Wahl.
## 🚦 Rate-Limiting (Bot-Only Modus)
### Funktionsweise
Das Rate-Limiting im Bot-Only Modus funktioniert wie folgt:
```
Bot-Request kommt rein
┌───────────────────┐
│ Ist IP+UA gebannt?│──── Ja ───▶ 403 + Exit (sofort)
└───────────────────┘
│ Nein
┌───────────────────┐
│ Bot erkannt? │──── Nein ──▶ Weiter (normaler Traffic)
└───────────────────┘
│ Ja
┌───────────────────┐
│ Counter erhöhen │
│ Limit erreicht? │──── Ja ───▶ Ban erstellen + 403
└───────────────────┘
│ Nein
Log + Weiter ✅
(Bot darf durch!)
```
**Wichtig**: Bots werden **nicht** sofort geblockt! Sie dürfen crawlen, solange sie unter dem konfigurierten Limit bleiben. Erst bei Überschreitung werden sie temporär gebannt.
### Konfiguration bei Aktivierung
Bei Aktivierung des Bot-Only Modus werden zwei Werte abgefragt:
```
🚦 Rate-Limit Konfiguration:
Requests pro Minute bevor Ban [30]:
Ban-Dauer in Minuten [5]:
✅ Rate-Limit: 30 req/min
✅ Ban-Dauer: 5 Minuten
```
- **Requests pro Minute**: Wie viele Requests ein Bot pro Minute machen darf (Default: 30)
- **Ban-Dauer**: Wie lange ein Bot nach Überschreitung gebannt wird (Default: 5 Minuten)
### Technische Details
- **Identifier**: MD5-Hash aus IP + User-Agent (ermöglicht granulare Tracking pro Bot-Typ)
- **Speicherung**: File-basiert in `geoip_ratelimit/` Verzeichnis
- **Cleanup**: Probabilistisch (1% der Requests) um Overhead zu minimieren
- **Atomare Operationen**: File-Locking verhindert Race Conditions
### Verzeichnisstruktur
```
httpdocs/
├── geoip_ratelimit/
│ ├── bans/
│ │ └── {hash}.ban # Unix-Timestamp wann Ban abläuft
│ └── counts/
│ └── {hash}.count # Format: window_start|count
```
## 🤖 Erkannte Bot-Patterns
Das System erkennt **321 verschiedene Bots** in 12 Kategorien, plus **32 generische Fallback-Patterns** für unbekannte Bots.
### Bot-Kategorien
| Kategorie | Anzahl | Beispiele |
|-----------|--------|-----------|
| **AI/LLM Services** | 61 | ChatGPT-User, GPTBot, ClaudeBot, Anthropic, PerplexityBot, Gemini-Deep-Research, Google-NotebookLM, Cohere, MistralAI, DeepSeekBot, Bytespider, HuggingFace, Diffbot, BedrockBot, Firecrawl, Crawl4AI |
| **Suchmaschinen** | 36 | Googlebot, Googlebot-Image/Video/News, Google-Extended, Bingbot, BingPreview, MSNBot, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, QwantBot, PetalBot |
| **SEO & Marketing** | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot, Linkdex, SearchmetricsBot |
| **Social Media** | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, Instagram, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot, Snapchat |
| **E-Commerce** | 15 | Amazonbot, Amazon-Kendra, AmazonBuyForMe, Shopify, Idealo, Billiger.de, Guenstiger.de, Ladenzeile, Kelkoo, PriceRunner, PriceGrabber |
| **Archiv & Research** | 6 | Archive.org Bot, Internet Archive, Wayback Machine, Heritrix, Apache Nutch, Common Crawl |
| **Monitoring & Uptime** | 9 | UptimeRobot, Pingdom, StatusCake, Site24x7, NewRelic, Datadog, GTmetrix, PageSpeed Insights, Chrome Lighthouse |
| **Download & Scraper** | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, Harvest, Collector, WebZIP, BlackWidow |
| **HTTP Libraries** | 32 | Python-Requests, Python-urllib, cURL, Wget, Go-HTTP-Client, Axios, Node-Fetch, Scrapy, OkHttp, Guzzle, libwww-perl, Mechanize |
| **Security Scanner** | 11 | Nessus, SQLMap, Netsparker, Nikto, Acunetix, Burp Suite, OWASP ZAP, OpenVAS, Nmap, Masscan, WPScan |
| **Headless & Automation** | 7 | PhantomJS, Headless Chrome, Selenium, Puppeteer, Playwright, Cypress |
| **Feed Reader & RSS** | 5 | FeedFetcher, FeedParser, Feedly, Inoreader, NewsBlur |
| **Weitere Bots** | 55 | OmgiliBot, Webzio, Linguee, QuillBot, TurnitinBot, Brandwatch, Meltwater, BitlyBot, Mail.ru Bot, und viele mehr |
### Generische Fallback-Patterns
Falls ein Bot nicht in der spezifischen Liste ist, wird er trotzdem erkannt wenn sein User-Agent eines dieser Schlüsselwörter enthält:
```
bot, crawler, spider, scraper, fetch, scan, check, monitor, probe, index,
archive, capture, reader, download, mirror, ripper, collector, extractor,
siphon, copier, sucker, bandit, stripper, whacker, reaper, robot, agent,
seeker, finder, walker, roam, snagger
```
Diese werden dann als `Bot (crawler)`, `Bot (spider)`, etc. angezeigt.
## 📋 Voraussetzungen
- **Betriebssystem**: Ubuntu Server (getestet auf 24.04)
- **Webserver**: Apache mit mod_rewrite (oder nginx)
- **PHP**: Version 8.0 oder höher
- **Python**: Version 3.8 oder höher
- **CrowdSec**: Installiert und aktiv (nur für +CrowdSec Modi)
- **CrowdSec Firewall Bouncer**: Installiert und konfiguriert (nur für +CrowdSec Modi)
- **Plesk**: Optional, aber empfohlen
- **Root-Zugriff**: Erforderlich für Installation und Verwaltung
### CrowdSec Installation prüfen (nur für +CrowdSec Modi)
```bash
# Prüfe ob CrowdSec läuft
systemctl status crowdsec
# Prüfe ob Firewall Bouncer aktiv ist
cscli bouncers list
```
Falls CrowdSec noch nicht installiert ist:
```bash
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
apt-get update
apt-get install crowdsec crowdsec-firewall-bouncer-iptables
```
## 🚀 Installation
### 1. Script herunterladen
```bash
# Als root
cd /root
wget https://git.jtl-hosting.de/thomasciesla/geoip_shop_manager/raw/branch/main/geoip_shop_manager.py
chmod +x geoip_shop_manager.py
```
### 2. Script ausführen
```bash
python3 geoip_shop_manager.py
```
Das war's! Das Script ist vollständig selbstverwaltend.
## 📖 Verwendung
### Hauptmenü
```
============================================================
GeoIP Shop Blocker Manager v3.5.0
🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting
🛡️ Mit Cache-Validierung und Fail-Open
🚦 Bots unter Rate-Limit werden durchgelassen
============================================================
[1] Aktivieren (einzeln)
[2] Deaktivieren (einzeln)
[3] Logs anzeigen
[4] Status
────────────────────────────────────────
[5] 🚀 ALLE aktivieren
[6] 🛑 ALLE deaktivieren
[7] 🎯 Nur DIREKTE aktivieren (ohne Link11)
────────────────────────────────────────
[0] Beenden
```
### Modus-Auswahl
Bei jeder Aktivierung wird nach dem Modus gefragt:
```
🔧 Wähle den Blocking-Modus:
[1] 🌍 GeoIP + CrowdSec (IPs werden an CrowdSec gemeldet)
[2] 🌍 Nur GeoIP (keine CrowdSec-Synchronisation)
[3] 🤖 Bot-Rate-Limiting (weltweit erreichbar, mit CrowdSec)
[4] 🤖 Bot-Rate-Limiting (weltweit erreichbar, ohne CrowdSec)
Modus wählen [1/2/3/4]:
```
**Wann welchen Modus wählen?**
| Situation | Empfohlener Modus |
|-----------|-------------------|
| Server direkt im Internet, Geo-Blocking gewünscht | GeoIP + CrowdSec 🛡️ |
| Server hinter CDN, Geo-Blocking gewünscht | Nur GeoIP 📝 |
| Weltweit erreichbar bleiben, nur Bots bremsen | Bot-Rate-Limiting 🤖 |
| CrowdSec nicht installiert | Nur GeoIP 📝 oder Bot-only 🤖 |
### Geo-Region wählen (nur GeoIP-Modi)
```
🌍 Wähle die Geo-Region:
[1] 🇩🇪🇦🇹🇨🇭 DACH - Deutschland, Österreich, Schweiz
[2] 🇪🇺 Eurozone+GB - 22 Länder
Region wählen [1/2]:
```
### Beispielausgabe: Bot-Only Aktivierung
```
🔧 Aktiviere 🤖 Bot-Only für: shop.example.com
Modus: Bot-Rate-Limiting (weltweit erreichbar)
Rate-Limit: 30 req/min, Ban: 5 min
CrowdSec: Nein
============================================================
[1/4] CrowdSec-Synchronisation deaktiviert
[2/4] Aktiviere PHP-Blocking...
✅ PHP-Blocking aktiviert
[3/4] Cache-Generierung nicht erforderlich (Bot-Only)
[4/4] Registriere Shop...
============================================================
✅ 🤖 Bot-Only aktiviert
Shop: shop.example.com
Modus: Nur Bot-Rate-Limit 🤖
🤖 321 Bot-Patterns aktiv
🚦 Rate-Limit: 30 req/min, Ban: 5 min
Bots unter dem Limit werden durchgelassen
Gültig bis: 2025-12-12 19:30:00 CET
============================================================
```
### Logs anzeigen
Die Logs zeigen bei Bot-Only Modus auch die Rate-Limit Statistiken:
```
══════════════════════════════════════════════════════════════════════
📊 shop.example.com | 🤖 Bot-Only 🤖
══════════════════════════════════════════════════════════════════════
⏱️ Laufzeit: 2h 15m
📈 Log-Einträge: 1,234 (9.1 req/min)
🤖 Bot-Patterns: 321 aktiv
🚦 Rate-Limit: 30 req/min, Ban: 5 min
🚫 Bans: 23 ausgelöst, 3 aktiv
🤖 Bot-Statistik:
Googlebot: 456x ███████████████████████████████████████
Bingbot (Microsoft): 234x ███████████████████
GPTBot (OpenAI): 189x ███████████████
AhrefsBot: 123x ██████████
Bytespider (TikTok/ByteDance): 98x ████████
ClaudeBot (Anthropic): 76x ██████
Amazonbot: 54x ████
...
📝 Letzte 30 Log-Einträge:
[2025-12-09 19:45:23] BOT: Googlebot | IP: 66.249.66.1 | Count: 12/30 | URI: /produkt-123
[2025-12-09 19:45:24] BOT: Googlebot | IP: 66.249.66.1 | Count: 13/30 | URI: /kategorie-abc
[2025-12-09 19:45:25] BANNED: GPTBot (OpenAI) | IP: 20.15.240.64 | Exceeded 30 req/min | Ban: 5m | UA: ...
...
```
### Status anzeigen
```
📊 5/15 Shops aktiv
shop1.example.com [Link11] 🇩🇪🇦🇹🇨🇭 🛡️
523 blocks, 1h 41m, Cache: ✅8,234
shop2.example.com [Direkt] 🤖 🤖
1,234 log entries, 2h 15m, 321 Bot-Patterns, 30 req/min, 3 aktive Bans
shop3.example.com [Direkt] 🇪🇺 📝
312 blocks, 1h 39m, Cache: ✅12,456
```
## 🔧 Erweiterte Verwendung
### Manuell CrowdSec Decisions prüfen
```bash
# Alle Decisions anzeigen
cscli decisions list --limit 0
# Nur GeoIP-Blocks anzeigen
cscli decisions list --limit 0 | grep "GeoIP"
```
### Rate-Limit Dateien prüfen
```bash
# Aktive Bans anzeigen
find /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/bans/ -name "*.ban" -exec cat {} \;
# Request-Counter anzeigen
find /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/counts/ -name "*.count" -exec cat {} \;
# Anzahl aktiver Bans
find /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/bans/ -name "*.ban" | wc -l
```
### Systemd-Service verwalten
```bash
# Status des Watcher-Service
systemctl status geoip-crowdsec-watcher.service
# Logs des Watcher-Service
journalctl -u geoip-crowdsec-watcher.service -f
# Service neu starten
systemctl restart geoip-crowdsec-watcher.service
```
## 📁 Dateistruktur
### Pro Shop (in `/var/www/vhosts/SHOP/httpdocs/`)
**GeoIP-Modi:**
- `index.php.geoip_backup` - Backup der Original index.php
- `geoip_blocking.php` - PHP-Blocking-Script
- `geoip_ip_ranges.cache` - Gecachte IP-Ranges (erneuert alle 24h)
- `geoip_blocked.log` - Log der Blocks
- `geoip_crowdsec_queue.log` - Queue für CrowdSec (nur +CrowdSec Modi)
**Bot-Only Modi (zusätzlich):**
- `geoip_ratelimit/` - Rate-Limit Verzeichnis
- `bans/` - Aktive Bans (`.ban` Dateien)
- `counts/` - Request-Counter (`.count` Dateien)
### System-weit
- `/usr/local/bin/geoip_crowdsec_watcher.py` - Watcher-Service Script
- `/etc/systemd/system/geoip-crowdsec-watcher.service` - Systemd Service
- `/var/lib/crowdsec/geoip_active_shops.json` - Tracking aktiver Shops
## ⚙️ Konfiguration
### Blocking-Dauer ändern
Standardmäßig 72 Stunden. Zum Ändern editiere das Python-Script:
```python
expiry = datetime.now() + timedelta(hours=72) # Hier ändern
```
### Rate-Limit Defaults ändern
```python
# Am Anfang des Scripts
DEFAULT_RATE_LIMIT = 30 # Requests pro Minute
DEFAULT_BAN_DURATION = 5 # Minuten
```
### Weitere Länder hinzufügen
Editiere `GEO_REGIONS` im Python-Script:
```python
GEO_REGIONS = {
"dach": {
"countries": ["de", "at", "ch"], # Hier Länder hinzufügen
...
},
...
}
```
### Link11-IP ändern
```python
# Am Anfang des Scripts
LINK11_IP = "128.65.223.106" # Hier ändern
```
## 🛡️ Sicherheit
### Was wird geblockt?
**GeoIP-Modi:**
- ✅ Alle IPs außerhalb der konfigurierten Region
- ✅ Auf PHP-Ebene: Sofortiger 403 Response
- ✅ Auf Firewall-Ebene (+CrowdSec): Alle Ports
**Bot-Only Modi:**
- ✅ Erkannte Bots die das Rate-Limit überschreiten
- ✅ Temporärer Ban (konfigurierbare Dauer)
- ❌ Bots unter dem Limit werden durchgelassen (gewollt!)
### Was wird NICHT geblockt?
- ✅ Alle IPs aus den erlaubten Ländern (GeoIP-Modi)
- ✅ Normaler User-Traffic (Bot-Only Modi)
- ✅ Bots unter dem Rate-Limit (Bot-Only Modi)
- ✅ Private IPs (192.168.x.x, 10.x.x.x, etc.)
- ✅ Localhost (127.0.0.1)
## 🐛 Troubleshooting
### Shop zeigt 500 Error
```bash
# Prüfe PHP-Fehler-Log
tail -50 /var/www/vhosts/SHOP/logs/error_log
# Stelle Original-Index wieder her
cd /var/www/vhosts/SHOP/httpdocs
mv index.php.geoip_backup index.php
```
### Rate-Limit funktioniert nicht
```bash
# Prüfe Verzeichnis-Berechtigungen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
# Sollte 777 sein (PHP läuft als anderer User)
# Falls nicht:
chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
```
### Bots werden sofort geblockt (nicht rate-limited)
**Prüfe ob du die aktuelle Version (v3.4.3+) verwendest!**
In älteren Versionen wurden Bots sofort geblockt. Ab v3.4.3 werden Bots unter dem Limit durchgelassen.
```bash
# Version prüfen
grep "v3." geoip_shop_manager.py
# Update durchführen
wget -O geoip_shop_manager.py https://git.jtl-hosting.de/...
# Shops neu aktivieren (deaktivieren + aktivieren)
# damit das neue PHP-Template angewendet wird
```
### Watcher-Service läuft nicht
```bash
# Status prüfen
systemctl status geoip-crowdsec-watcher.service
# Logs prüfen
journalctl -u geoip-crowdsec-watcher.service -n 100
# Service neu starten
systemctl restart geoip-crowdsec-watcher.service
```
### Rate-Limit Verzeichnisse sind leer trotz Bot-Traffic
**Berechtigungsproblem!** Das Python-Script läuft als root, aber PHP läuft als Domain-User.
```bash
# Quick-Fix für alle Shops:
for dir in /var/www/vhosts/*/httpdocs/geoip_ratelimit; do
[ -d "$dir" ] && chmod -R 777 "$dir" && echo "Fixed: $dir"
done
```
Ab v3.4.2 werden die Verzeichnisse automatisch mit 777 erstellt.
## 📊 Performance
### PHP-Level Blocking (GeoIP)
- **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges)
- **Erster Request**: ~400-800ms (beim Download der IP-Ranges)
- **Cache-Dauer**: 24 Stunden
- **RAM-Verbrauch**: ~5-10 MB pro Shop
### Bot-Rate-Limiting
- **Overhead pro Request**: ~1-3ms (File-I/O)
- **Ban-Check**: ~0.5ms (schneller Pfad)
- **Cleanup**: Probabilistisch (1% der Requests)
### CrowdSec Firewall Blocking
- **Overhead**: 0ms (blockt vor PHP)
- **RAM**: ~20-50 MB (Watcher-Service)
## 📝 Logs und Monitoring
### PHP-Level Logs
```bash
# Blockierte IPs/Bots für einen Shop
tail -f /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur BANNED Einträge (Rate-Limit überschritten)
grep "BANNED:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur BOT Einträge (unter Limit, durchgelassen)
grep "BOT:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
```
### Bot-Statistik erstellen
```bash
# Top 10 Bots (aus Log)
grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
sed 's/ //g' | sort | uniq -c | sort -rn | head -10
```
## 📚 Changelog
### v3.5.0
- **NEU**: Erweiterte Bot-Erkennung mit **321 Bot-Patterns** (vorher ~35)
- **NEU**: 12 Bot-Kategorien: AI/LLM, Suchmaschinen, SEO, Social Media, E-Commerce, Archiv, Monitoring, Downloader, HTTP Libraries, Security Scanner, Automation, Feed Reader
- **NEU**: **32 generische Fallback-Patterns** für unbekannte Bots (bot, crawler, spider, etc.)
- **NEU**: Verbesserte Bot-Namen-Anzeige mit Kontext (z.B. "ClaudeBot (Anthropic)", "Bytespider (TikTok/ByteDance)")
- **NEU**: Amazon-Bots komplett: Amazonbot, Amazon-Kendra, AmazonBuyForMe, AMZNKAssocBot
- **NEU**: Alle wichtigen AI-Crawler: ChatGPT, Claude, Gemini, Perplexity, Cohere, Mistral, DeepSeek, etc.
- **NEU**: Deutsche Preisvergleiche: Idealo, Billiger.de, Guenstiger.de, Ladenzeile
- **NEU**: Security Scanner Erkennung: Nessus, SQLMap, Nikto, Burp Suite, OWASP ZAP, etc.
### v3.4.5
- **FIX**: Regex delimiter escape für curl pattern
### v3.4.3
- **FIX**: Rate-Limit Logik korrigiert - Bots unter dem Limit werden jetzt durchgelassen
- Vorher: Alle erkannten Bots wurden sofort mit 403 geblockt
- Nachher: Bots dürfen crawlen bis sie das Limit überschreiten, dann temporärer Ban
- PHP-Templates aktualisiert mit korrektem Flowchart
### v3.4.2
- **FIX**: Verzeichnis-Berechtigungen für Rate-Limit (0o777 statt 0o755)
- PHP läuft als Domain-User, nicht als root
- Explizite `os.chmod()` Aufrufe nach `os.makedirs()`
### v3.4.1
- **FIX**: Bot-Namen werden jetzt korrekt in Statistiken angezeigt
- Bot-Name wird direkt aus Log extrahiert (BOT: / BANNED: Prefix)
- Fallback auf User-Agent Detection wenn nötig
### v3.4.0
- **NEU**: File-basiertes Rate-Limiting für Bot-Only Modus
- **NEU**: Konfigurierbare Rate-Limits (Requests/Minute, Ban-Dauer)
- **NEU**: Sliding Window Counter Algorithmus
- **NEU**: Probabilistisches Cleanup (1% der Requests)
- **NEU**: Ban-Check als schneller Pfad (vor Bot-Detection)
### v3.3.0
- **NEU**: Option [7] - Nur direkte Shops aktivieren (ohne Link11)
- **NEU**: Automatische Link11-Erkennung per DNS-Lookup
- **NEU**: Farbcodierung im Menü (Grün = Link11, Rot = Direkt)
### v3.2.0
- **NEU**: Bot-Only Blocking Modus (weltweit erreichbar, nur Bots blocken)
- **NEU**: 4 Blocking-Modi: GeoIP+CrowdSec, GeoIP-only, Bot+CrowdSec, Bot-only
- **NEU**: 30+ Bot-Patterns (GPTBot, ClaudeBot, Googlebot, etc.)
### v3.1.0
- **NEU**: Eurozone+GB Region (22 Länder)
- **NEU**: Cache-Validierung mit Mindest-Range-Prüfung
- **NEU**: Fail-Open Mechanismus bei Cache-Fehlern
### v3.0.0
- **NEU**: DACH-Support (DE, AT, CH)
- Systemd-Service für Watcher
- CrowdSec-Integration
- Multi-Shop-Management
---
**Version**: 3.5.0
**Letztes Update**: Dezember 2025
**Status**: Production Ready ✅
**Bot-Patterns**: 321 spezifisch + 32 generisch = 353 total
**Erlaubte Regionen**: 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Only (weltweit)