Files
geoip_shop_manager/README.md
2025-12-18 14:38:56 +01:00

607 lines
21 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
**PHP-basiertes GeoIP-Blocking und Bot-Rate-Limiting für Plesk-Server 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, oder Bots per Rate-Limiting zu bremsen.
## 🎯 Features
-**Zwei Modi**: GeoIP-Blocking oder Bot-Rate-Limiting
-**Flexible Regionen**: DACH (DE, AT, CH) oder Eurozone+GB (22 Länder)
-**Bot-Rate-Limiting**: Bots unter Limit durchlassen, bei Überschreitung temporär bannen
-**Rate-Limiting nach Bot-Typ**: Alle IPs eines Bot-Typs teilen sich EIN Limit
-**IP-basierte Bot-Erkennung**: Erkennt getarnte Bots anhand ihrer IP-Ranges (z.B. Alibaba)
-**Umfangreiche Bot-Erkennung**: 321 bekannte Bot-Patterns + 32 generische Fallback-Patterns
-**Präzises GeoIP-Blocking**: PHP prüft gegen vollständige IP-Ranges (keine Fehlblockierungen)
-**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
-**Sauberes Cleanup**: Vollständige Deinstallation bei Deaktivierung
-**Plesk-kompatibel**: Funktioniert mit Plesk-verwalteten Shops
-**CDN-kompatibel**: Funktioniert auch hinter Link11, Cloudflare & Co.
-**Fail-Open**: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle)
-**Korrekte Ownership**: Erstellte Dateien gehören dem Shop-User, nicht root
## 🏗️ Architektur
### Modus 1: GeoIP-Blocking 🌍
- 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
- Cache wird alle 24 Stunden erneuert
**Anwendungsfall**: Shop soll nur aus bestimmten Ländern erreichbar sein.
### Modus 2: Bot-Rate-Limiting 🤖
- Shop bleibt weltweit erreichbar
- Bots werden erkannt per:
1. IP-Ranges (für getarnte Bots wie Alibaba)
2. User-Agent Patterns (321 bekannte Bots)
3. Generische Patterns (bot, crawler, spider, etc.)
- **Alle IPs eines Bot-Typs teilen sich EIN Rate-Limit**
- Bots unter dem Limit werden durchgelassen
- Bei Überschreitung: temporärer Ban für den gesamten Bot-Typ
**Anwendungsfall**: Shop soll weltweit erreichbar bleiben, aber Bots sollen gebremst werden.
## 👤 Ownership-Handling
### Problem: root:root Dateien
Wenn das Script als root läuft, werden erstellte Dateien standardmäßig `root:root` zugeordnet. Das kann zu Problemen führen:
- PHP läuft als Domain-User und kann die Dateien evtl. nicht lesen/schreiben
- Plesk zeigt falsche Berechtigungen an
- Backup-Tools erfassen die Dateien möglicherweise nicht korrekt
### Lösung: Automatische Owner-Erkennung
Das Script ermittelt automatisch den häufigsten Owner im `httpdocs`-Verzeichnis und verwendet diesen für alle erstellten Dateien:
```
👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006)
```
**Betroffene Dateien/Ordner:**
- `index.php` (nach Änderung)
- `index.php.geoip_backup`
- `geoip_blocking.php`
- `geoip_ip_ranges.cache`
- `geoip_ratelimit/` (inkl. Unterordner)
### Warum "häufigster Owner"?
In manchen Fällen können einzelne Dateien im `httpdocs`-Verzeichnis einem anderen User gehören (z.B. durch manuelle Uploads oder Plugins). Die Zählung der häufigsten `uid:gid`-Kombination stellt sicher, dass der "richtige" Owner verwendet wird.
## 🚦 Rate-Limiting (Bot-Modus)
### Funktionsweise
Das Rate-Limiting funktioniert **nach Bot-Typ, nicht nach IP**:
```
Request kommt rein
┌───────────────────────┐
│ IP in Bot-IP-Ranges? │──── Ja ───▶ Bot-Typ erkannt (z.B. "Alibaba-Bot")
└───────────────────────┘ │
│ Nein │
▼ │
┌───────────────────────┐ │
│ User-Agent Pattern? │──── Ja ───▶ Bot-Typ erkannt ◀────┘
└───────────────────────┘
│ Nein
┌───────────────────────┐
│ Generisches Pattern? │──── Ja ───▶ Bot-Typ erkannt
└───────────────────────┘
│ Nein
Normaler User ──────▶ Weiter (kein Limit)
▼ (Bot erkannt)
┌───────────────────────┐
│ Bot-Typ gebannt? │──── Ja ───▶ 403 Forbidden
└───────────────────────┘
│ Nein
┌───────────────────────┐
│ Counter für Bot-Typ │
│ erhöhen. Limit? │──── Ja ───▶ Ban für Bot-Typ + 403
└───────────────────────┘
│ Nein
Log + Weiter ✅
```
**Wichtig**:
- Bots werden **nicht** sofort geblockt! Sie dürfen crawlen, solange sie unter dem Limit bleiben.
- **Alle IPs eines Bot-Typs teilen sich EIN Limit!** Z.B. 100 verschiedene Googlebot-IPs = 1 gemeinsames Limit.
- Getarnte Bots (wie Alibaba) werden anhand ihrer IP-Ranges erkannt, unabhängig vom User-Agent.
### Konfiguration
Bei Aktivierung werden zwei Werte abgefragt:
```
🚦 Rate-Limit Konfiguration:
(0 = Bots sofort bannen, kein Rate-Limiting)
⚠️ ACHTUNG: Limit gilt pro Bot-TYP, nicht pro IP!
Requests pro Minute bevor Ban [30]:
Ban-Dauer in Minuten [5]:
```
- **Requests pro Minute**: Wie viele Requests ein Bot-Typ pro Minute machen darf (Default: 30)
- **Ban-Dauer**: Wie lange ein Bot-Typ nach Überschreitung gebannt wird (Default: 5 Minuten)
## 🌐 IP-basierte Bot-Erkennung
### Problem: Getarnte Bots
Manche Bots (z.B. von Alibaba Cloud) tarnen sich mit einem normalen Browser User-Agent:
```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
```
Diese wären normalerweise nicht als Bots erkennbar. **ABER**: Sie kommen immer aus bestimmten IP-Bereichen!
### Lösung: BOT_IP_RANGES
Das Script enthält eine Liste bekannter Bot-IP-Ranges. Aktuell für Alibaba:
| Block | Abdeckung | IPs |
|-------|-----------|-----|
| `43.0.0.0/9` | Alibaba Cloud Singapore | ~8.3 Mio |
| `8.128.0.0/10` | Alibaba Cloud Singapore | ~4.2 Mio |
| `8.208.0.0/12` | Alibaba Cloud Global | ~1 Mio |
| + 34 weitere | China, HK, etc. | mehrere Mio |
**Gesamt**: ~20 Millionen IPs werden als "Alibaba-Bot" erkannt.
### Erkennungsreihenfolge
1. **IP-Check (höchste Priorität)**: Liegt die IP in einem bekannten Bot-Netz?
2. **User-Agent Patterns**: Enthält der User-Agent ein bekanntes Bot-Pattern?
3. **Generische Patterns**: Enthält der User-Agent generische Bot-Begriffe?
## 🤖 Erkannte Bot-Patterns
Das System erkennt **321 verschiedene Bots** in 12 Kategorien, plus **32 generische Fallback-Patterns**.
### Bot-Kategorien
| Kategorie | Anzahl | Beispiele |
|-----------|--------|-----------|
| **AI/LLM Services** | 61 | ChatGPT-User, GPTBot, ClaudeBot, Anthropic, PerplexityBot, Gemini, Cohere, MistralAI, DeepSeekBot, Bytespider, HuggingFace, Diffbot, BedrockBot, Firecrawl, Crawl4AI |
| **Suchmaschinen** | 36 | Googlebot, Googlebot-Image/Video/News, Google-Extended, Bingbot, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, PetalBot |
| **SEO & Marketing** | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot |
| **Social Media** | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot |
| **E-Commerce** | 18 | Amazonbot, **Alibaba-Bot**, AlibabaSpider, Aliyun, Shopify, Idealo, Billiger.de, Guenstiger.de, Ladenzeile, Kelkoo, PriceRunner |
| **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 |
| **Download & Scraper** | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, WebZIP, BlackWidow |
| **HTTP Libraries** | 32 | Python-Requests, cURL, Wget, Go-HTTP-Client, Axios, Node-Fetch, Scrapy, OkHttp, Guzzle |
| **Security Scanner** | 11 | Nessus, SQLMap, Netsparker, Nikto, Acunetix, Burp Suite, OWASP ZAP, Nmap, 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, etc. |
### Generische Fallback-Patterns
Falls ein Bot nicht in der spezifischen Liste ist, wird er erkannt wenn sein User-Agent eines dieser Wö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 oder nginx
- **PHP**: Version 8.0 oder höher
- **Python**: Version 3.8 oder höher
- **Plesk**: Optional, aber empfohlen
- **Root-Zugriff**: Erforderlich für Installation und Verwaltung
## 🚀 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 v4.2.0
🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting
🛡️ Mit Cache-Validierung und Fail-Open
🚦 Rate-Limiting nach BOT-TYP (nicht IP)
🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s)
👤 Korrekte Ownership für erstellte Dateien
============================================================
----------------------------------------
[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
```
🔧 Wähle den Blocking-Modus:
[1] 🌍 GeoIP-Blocking (nur erlaubte Regionen)
[2] 🤖 Bot-Rate-Limiting (weltweit erreichbar, Bots limitiert)
Modus wählen [1/2]:
```
### Geo-Region wählen (nur GeoIP-Modus)
```
🌍 Wähle die Geo-Region:
[1] 🇩🇪🇦🇹🇨🇭 DACH - Deutschland, Österreich, Schweiz
[2] 🇪🇺 Eurozone+GB - 22 Länder
Region wählen [1/2]:
```
### Beispiel: Bot-Rate-Limiting aktivieren
```
👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006)
🔧 Aktiviere 🤖 Bot-Only für: shop.example.com
Modus: Bot-Rate-Limiting nach Bot-Typ (weltweit erreichbar)
Rate-Limit: 30 req/min pro Bot-Typ, Ban: 5 min
============================================================
[1/3] Aktiviere PHP-Blocking...
✅ PHP-Blocking aktiviert
[2/3] Cache-Generierung nicht erforderlich (Bot-Only)
[3/3] Registriere Shop...
============================================================
✅ 🤖 Bot-Only aktiviert
Shop: shop.example.com
Modus: Bot-Rate-Limiting 🤖
🤖 321 Bot-Patterns + 32 generische Patterns
🌐 37 IP-Ranges für 1 getarnte Bots
🚦 Rate-Limit: 30 req/min PRO BOT-TYP
⏱️ Ban-Dauer: 5 min
Alle Googlebot-Requests teilen sich EIN Limit!
Alle Alibaba-IPs teilen sich EIN Limit!
Gültig bis: 2025-12-19 12:00:00 CET
============================================================
```
### Logs anzeigen
```
══════════════════════════════════════════════════════════════════════
📊 shop.example.com | 🤖 Bot-Only 🤖
══════════════════════════════════════════════════════════════════════
⏱️ Laufzeit: 2h 15m
📈 Log-Einträge: 1,234 (9.1 req/min)
🤖 Bot-Patterns: 321 + 32 generische
🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s)
🚦 Rate-Limit: 30 req/min PRO BOT-TYP, Ban: 5 min
🚫 Bans: 23 ausgelöst, 3 Bot-Typen aktuell gebannt
Gebannt: Alibaba-Bot, GPTBot (OpenAI), Bytespider (TikTok/ByteDance)
🤖 Bot-Statistik (nach Bot-Typ):
Alibaba-Bot: 456x ███████████████████████████████████████
Googlebot: 234x ███████████████████
GPTBot (OpenAI): 189x ███████████████
AhrefsBot: 123x ██████████
...
📝 Letzte 30 Log-Einträge:
[2025-12-16 10:45:23] BOT: Alibaba-Bot | IP: 43.104.26.55 | Count: 12/30 | URI: /produkt-123
[2025-12-16 10:45:24] BOT: Alibaba-Bot | IP: 43.104.27.12 | Count: 13/30 | URI: /kategorie-abc
[2025-12-16 10:45:25] BANNED: Alibaba-Bot | IP: 43.104.26.99 | Exceeded 30 req/min | Ban: 5m
...
🔥 Top 10 IPs:
43.104.26.55 (Alibaba-Bot): 234x
43.104.27.12 (Alibaba-Bot): 198x
66.249.66.1 (Googlebot): 156x
...
```
### Status anzeigen
```
📊 3/10 Shops aktiv
shop1.example.com [Link11] 🇩🇪🇦🇹🇨🇭 🌍
523 blocks, 1h 41m, Cache: ✅8,234
shop2.example.com [Direkt] 🤖 🤖
1,234 log entries, 2h 15m, 321 Patterns, 30 req/min/Bot-Typ, 🚫 Alibaba-Bot
shop3.example.com [Direkt] 🇪🇺 🌍
312 blocks, 1h 39m, Cache: ✅12,456
```
## 📁 Dateistruktur
### Pro Shop (in `/var/www/vhosts/SHOP/httpdocs/`)
**GeoIP-Modus:**
- `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 blockierten Zugriffe
**Bot-Rate-Limiting Modus (zusätzlich):**
- `geoip_ratelimit/` - Rate-Limit Verzeichnis
- `bans/` - Aktive Bans (`.ban` Dateien mit Timestamp|Bot-Name)
- `counts/` - Request-Counter (`.count` Dateien)
**Wichtig**: Alle diese Dateien gehören dem Shop-User (z.B. `dbartholomae:psacln`), nicht `root:root`.
### System-weit
- `/var/lib/geoip/active_shops.json` - Tracking aktiver Shops
## ⚙️ Konfiguration anpassen
### 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 pro Bot-Typ
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
...
},
}
```
### Eigene Bot-IP-Ranges hinzufügen
```python
BOT_IP_RANGES = {
'Alibaba-Bot': [
'43.0.0.0/9',
# ... bestehende Ranges
],
# Neuen Bot hinzufügen:
'MeinBot': [
'192.0.2.0/24',
'198.51.100.0/24',
],
}
```
**Wichtig**: Nach Änderungen müssen die Shops neu aktiviert werden (deaktivieren + aktivieren)!
### Link11-IP ändern
```python
LINK11_IP = "128.65.223.106" # Hier ändern
```
## 🛡️ Was wird geblockt?
### GeoIP-Modus
- ✅ Alle IPs außerhalb der konfigurierten Region → HTTP 403
- ✅ Private IPs (192.168.x.x, 10.x.x.x) werden durchgelassen
- ✅ Localhost (127.0.0.1) wird durchgelassen
### Bot-Rate-Limiting Modus
- ✅ Erkannte Bot-Typen die das Rate-Limit überschreiten → Temporärer Ban
- ✅ Getarnte Bots (wie Alibaba) werden per IP erkannt
- ❌ Bots unter dem Limit werden durchgelassen (gewollt!)
- ❌ Normaler User-Traffic wird nie geblockt
## 🐛 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 und dem Shop-User gehören
chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
# Falls Owner falsch ist (root statt Shop-User):
chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
```
### Dateien gehören root:root
Falls du eine ältere Version verwendet hast, können Dateien noch `root:root` gehören:
```bash
# Prüfen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_*
# Korrigieren (ersetze SHOPUSER mit dem richtigen User)
chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_*
chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/index.php*
chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
```
Alternativ: Shop deaktivieren und mit v4.2.0+ neu aktivieren.
### Alibaba-Bot wird nicht erkannt
```bash
# Prüfe ob die IP im Range liegt
python3 -c "import ipaddress; print(ipaddress.ip_address('43.104.26.55') in ipaddress.ip_network('43.0.0.0/9'))"
# Sollte "True" ausgeben
# Prüfe Version (muss 4.1.0+ sein)
grep "v4." geoip_shop_manager.py
```
Nach Update: Shops neu aktivieren (deaktivieren + aktivieren).
### GeoIP-Cache lädt nicht
```bash
# Manuell testen ob ipdeny.com erreichbar ist
curl -I https://www.ipdeny.com/ipblocks/data/aggregated/de-aggregated.zone
# Cache-Datei prüfen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
```
Bei Fail-Open: Traffic wird durchgelassen wenn Cache nicht geladen werden kann.
## 📊 Performance
### GeoIP-Modus
- **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges)
- **Erster Request**: ~400-800ms (beim Download der IP-Ranges)
- **Cache-Dauer**: 24 Stunden
### Bot-Rate-Limiting Modus
- **Overhead pro Request**: ~1-3ms (File-I/O)
- **IP-Range-Check**: ~0.5ms
- **Ban-Check**: ~0.5ms (schneller Pfad)
## 📝 Log-Analyse
### Blockierte Zugriffe anzeigen
```bash
# Alle Logs für einen Shop
tail -f /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur gebannte Bots
grep "BANNED:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur Alibaba
grep "Alibaba-Bot" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
```
### Bot-Statistik erstellen
```bash
# Top 10 Bot-Typen
grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
sort | uniq -c | sort -rn | head -10
```
## 📚 Changelog
### v4.2.0
- **NEU**: Korrekte Ownership für erstellte Dateien
- **NEU**: Automatische Erkennung des häufigsten Owners im httpdocs-Verzeichnis
- **NEU**: Alle erstellten Dateien/Ordner gehören dem Shop-User statt root
- **NEU**: `get_most_common_owner()` und `set_owner()` Hilfsfunktionen
- Betroffene Dateien: index.php, Backup, geoip_blocking.php, Cache, ratelimit-Ordner
### v4.1.0
- **NEU**: IP-basierte Bot-Erkennung für getarnte Bots
- **NEU**: `BOT_IP_RANGES` mit Alibaba Cloud IP-Ranges (~20 Mio IPs)
- **NEU**: Alibaba-Bot wird auch per User-Agent erkannt
- **NEU**: IP-Check hat höchste Priorität (vor User-Agent)
### v4.0.0
- **NEU**: Rate-Limiting nach Bot-Typ (nicht IP)
- **ENTFERNT**: CrowdSec-Integration komplett entfernt
- **VEREINFACHT**: Nur noch 2 Modi (GeoIP / Bot-Rate-Limiting)
- Alle IPs eines Bot-Typs teilen sich ein Limit
### v3.5.0
- Erweiterte Bot-Erkennung mit 321 Bot-Patterns
- 32 generische Fallback-Patterns
### v3.4.x
- File-basiertes Rate-Limiting
- Verbessertes Logging
### v3.3.0
- Option "Nur direkte Shops" (ohne Link11)
- Link11-Erkennung per DNS
### v3.2.0
- Bot-Only Modus eingeführt
- Multi-Shop-Management
### v3.0.0
- DACH-Support
- Eurozone+GB Region
- Cache-Validierung mit Fail-Open
---
**Version**: 4.2.0
**Letztes Update**: Dezember 2025
**Status**: Production Ready ✅
**Bot-Patterns**: 321 spezifisch + 32 generisch
**Bot-IP-Ranges**: 37 Ranges für Alibaba (~20 Mio IPs)
**Modi**: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting
**Ownership**: Automatisch vom Shop-User übernommen 👤