From a59d4945fae2271f47a697bafb18401dca0ad3b6 Mon Sep 17 00:00:00 2001 From: thomasciesla Date: Tue, 9 Dec 2025 08:27:51 +0100 Subject: [PATCH] README.md aktualisiert --- README.md | 229 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 133 insertions(+), 96 deletions(-) diff --git a/README.md b/README.md index f9d4289..766e5df 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temp - ✅ **Gesamtübersicht**: Logs und Statistiken über alle Shops hinweg (Top 100 IPs) - ✅ **Bot-Erkennung**: Automatische Identifikation von 80+ Bots/Crawlern (Googlebot, GPTBot, AhrefsBot, etc.) - ✅ **Request-Statistiken**: Requests pro Minute (req/min) und Laufzeit pro Shop +- ✅ **Top-IP pro Shop**: Zeigt die aktivste IP pro Shop mit Details +- ✅ **Link11-Erkennung**: Farbige Anzeige ob Shop hinter Link11 CDN ist (Grün/Rot) - ✅ **Auto-Deaktivierung**: Blocking läuft nach 72 Stunden automatisch ab - ✅ **Systemd-Service**: Automatischer Start beim Booten - ✅ **Sauberes Cleanup**: Vollständige Deinstallation bei Deaktivierung @@ -143,11 +145,35 @@ Modus wählen [1/2]: | Minimaler Overhead gewünscht | Nur PHP 📝 | | Maximaler Schutz (alle Ports) | PHP + CrowdSec 🛡️ | +### Link11-Erkennung + +Das Script erkennt automatisch, ob ein Shop hinter Link11 CDN ist und zeigt dies farblich an: + +``` +📋 Verfügbare Shops: + Grün = hinter Link11 | Rot = Direkt + [1] air-suspension-parts.de [Link11] ← grün + [2] allgaeu-triathlon-shop.de [Direkt] ← rot + [3] autohalle24.de [Link11] ← grün + [4] behome24.de [Direkt] ← rot +``` + +**Funktionsweise:** +- Prüft per DNS-Lookup ob die Domain zur Link11-IP `128.65.223.106` auflöst +- `[Link11]` (grün) = Shop ist hinter Link11 CDN → PHP-only Modus empfohlen +- `[Direkt]` (rot) = Shop ist direkt erreichbar → PHP+CrowdSec möglich + +Die Erkennung ist in allen Menüs aktiv: +- Aktivieren (einzeln & alle) +- Deaktivieren (einzeln & alle) +- Logs anzeigen +- Status anzeigen + ### Blocking aktivieren (einzelner Shop) 1. Script starten: `python3 geoip_shop_manager.py` 2. Option `[1] GeoIP-Blocking AKTIVIEREN (einzeln)` wählen -3. Shop aus der Liste auswählen +3. Shop aus der Liste auswählen (farbig markiert nach Link11-Status) 4. **Modus wählen** (PHP+CrowdSec oder Nur PHP) 5. Bestätigen mit `ja` @@ -170,7 +196,7 @@ Modus wählen [1/2]: 1. Script starten: `python3 geoip_shop_manager.py` 2. Option `[5] 🚀 ALLE Shops aktivieren` wählen -3. Liste der zu aktivierenden Shops wird angezeigt +3. Liste der zu aktivierenden Shops wird angezeigt (mit Link11-Status) 4. **Modus wählen** (gilt für alle Shops) 5. Bestätigen mit `ja` @@ -181,10 +207,11 @@ Modus wählen [1/2]: ══════════════════════════════════════════════════════════════ 📋 Folgende 5 Shop(s) werden aktiviert: + Grün = hinter Link11 | Rot = Direkt - • shop1.example.com - • shop2.example.com - • shop3.example.com + • shop1.example.com [Link11] + • shop2.example.com [Direkt] + • shop3.example.com [Link11] ... 🔧 Wähle den Blocking-Modus: @@ -197,33 +224,13 @@ Modus wählen [1/2]: 2 Modus: Nur PHP 📝 Fortfahren? (ja/nein): ja - -══════════════════════════════════════════════════════════════ - Starte Aktivierung (Nur PHP 📝)... -══════════════════════════════════════════════════════════════ - -[1/5] Aktiviere: shop1.example.com - ✅ Aktiviert (bis 2025-12-11 14:30) -... - -══════════════════════════════════════════════════════════════ - ZUSAMMENFASSUNG -══════════════════════════════════════════════════════════════ - - ✅ Erfolgreich aktiviert: 5 - ❌ Fehlgeschlagen: 0 - - 🇩🇪 🇦🇹 🇨🇭 Nur DACH-Traffic erlaubt - 🔧 Modus: Nur PHP 📝 - ⏰ Gültig für 72 Stunden -══════════════════════════════════════════════════════════════ ``` ### Blocking deaktivieren (einzelner Shop) 1. Script starten: `python3 geoip_shop_manager.py` 2. Option `[2] GeoIP-Blocking DEAKTIVIEREN (einzeln)` wählen -3. Shop aus der Liste auswählen (zeigt Modus an) +3. Shop aus der Liste auswählen (zeigt Modus und Link11-Status) 4. Bestätigen mit `ja` **Was passiert:** @@ -237,16 +244,9 @@ Fortfahren? (ja/nein): ja 1. Script starten: `python3 geoip_shop_manager.py` 2. Option `[6] 🛑 ALLE Shops deaktivieren` wählen -3. Liste der aktiven Shops wird angezeigt +3. Liste der aktiven Shops wird angezeigt (mit Link11-Status) 4. Bestätigen mit `ja` -**Was passiert:** -- Zeigt alle Shops mit aktivem Blocking -- Deaktiviert das Blocking für jeden Shop nacheinander -- Entfernt alle zugehörigen CrowdSec-Decisions (nur bei PHP+CrowdSec Shops) -- Deinstalliert den Watcher-Service am Ende (falls aktiv) -- Zusammenfassung mit Erfolgs-/Fehlerzählung - ### Logs anzeigen 1. Script starten: `python3 geoip_shop_manager.py` @@ -255,9 +255,10 @@ Fortfahren? (ja/nein): ja ``` 📋 Logs anzeigen für: + Grün = hinter Link11 | Rot = Direkt [0] 📊 ALLE Shops (Zusammenfassung) - [1] shop1.example.com 🛡️ - [2] shop2.example.com 📝 + [1] shop1.example.com [Link11] 🛡️ + [2] shop2.example.com [Direkt] 📝 ... ``` @@ -267,33 +268,35 @@ Die Icons zeigen den Modus: #### Option [0]: Gesamtübersicht aller Shops -Zeigt eine aggregierte Statistik über alle aktiven Shops mit **Requests pro Minute** und **Bot-Erkennung**: +Zeigt eine aggregierte Statistik über alle aktiven Shops mit **Requests pro Minute**, **Bot-Erkennung** und **Top-IP pro Shop**: ``` ══════════════════════════════════════════════════════════════════════ 📊 GESAMTÜBERSICHT ALLER SHOPS ══════════════════════════════════════════════════════════════════════ -📝 PHP-Blocks gesamt: 173319 (⌀ 42.3 req/min, Laufzeit: 2d 20h 15m) - ├─ air-suspension-parts.de: 19243 (8.2 req/min, seit 39h 12m) ████████████████ - ├─ gastro-shop-24.com: 20959 (12.1 req/min, seit 28h 45m) ████████████████████████ - ├─ horchakustik-shop.de: 29978 (15.3 req/min, seit 32h 38m) ██████████████████████████████ - ├─ leonessa.at: 12554 (5.8 req/min, seit 36h 05m) ███████████ - └─ verve-klima.de: 18412 (9.1 req/min, seit 33h 42m) ██████████████████ +📝 PHP-Blocks gesamt: 1359 (⌀ 184.7 req/min, Laufzeit: 7m) + ├─ air-suspension-parts.de: 426 (57.9 req/min, seit 7m) ████████████████████ + │ └─➤ Top: 40.113.19.56 (Mozilla/5.0 (Windows NT 10...) - 89x, 12.1 req/min + ├─ allgaeu-triathlon-shop.de: 3 (0.4 req/min, seit 7m) + │ └─➤ Top: 66.249.66.10 (Googlebot) - 2x, 0.3 req/min + ├─ autohalle24.de: 62 (8.4 req/min, seit 7m) ████████████████ + │ └─➤ Top: 157.55.39.203 (Bingbot) - 15x, 2.0 req/min + ├─ gastro-shop-24.com: 172 (23.4 req/min, seit 7m) ████████████████████ + │ └─➤ Top: 52.167.144.204 (Bingbot) - 45x, 6.1 req/min + ... 🛡️ CrowdSec-Bans gesamt: 892 - ├─ air-suspension-parts.de: 401 ████████████████ - ├─ gastro-shop-24.com: 298 ███████████ - └─ horchakustik-shop.de: 193 ███████ + ├─ shop1.example.com: 401 ████████████████ + ├─ shop2.example.com: 298 ███████████ + └─ shop3.example.com: 193 ███████ 🔥 Top 100 blockierte IPs (alle Shops): - 66.249.66.10 (Googlebot): 7025 ████████████████████ - 66.249.66.169 (Googlebot): 6179 ████████████████████ - 40.77.167.27 (Bingbot): 571 ████████████████████ - 173.0.81.65 (PayPal IPN): 466 ████████████████████ - 216.244.66.196 (DotBot): 416 ████████████████████ - 185.191.171.5 (SemrushBot): 312 ████████████████████ - 35.187.50.162 (Unbekannt): 1035 ████████████████████ + 40.113.19.56 (Mozilla/5.0 (Windows NT 10.0; Win...): 146 (19.9 req/min) → air-suspension-parts.de [89x] ████████████████████ + 157.55.39.203 (Bingbot): 85 (11.6 req/min) → gastro-shop-24.com [32x] █████████████████ + 52.167.144.204 (Bingbot): 27 (3.7 req/min) → horchakustik-shop.de [12x] █████ + 66.249.66.169 (Googlebot): 26 (3.5 req/min) → designbraun.de [8x] █████ + 66.249.66.203 (Googlebot): 25 (3.4 req/min) → itemstar-shop.de [11x] █████ ... ══════════════════════════════════════════════════════════════════════ @@ -302,8 +305,12 @@ Zeigt eine aggregierte Statistik über alle aktiven Shops mit **Requests pro Min **Enthält:** - **PHP-Blocks gesamt** mit durchschnittlicher Request-Rate und Gesamtlaufzeit - **Pro Shop**: Anzahl Blocks, req/min, Laufzeit seit Aktivierung, visueller Balken +- **Top-IP pro Shop**: Aktivste IP mit Bot-Name/User-Agent, Anzahl und req/min - **CrowdSec-Bans** pro Shop (nur für PHP+CrowdSec Shops) -- **Top 100 blockierte IPs** mit automatischer Bot-Erkennung +- **Top 100 blockierte IPs** mit: + - Bot-Name oder User-Agent (wenn unbekannt) + - req/min für diese IP + - Meistbetroffener Shop mit Anzahl #### Option [1-n]: Einzelner Shop @@ -327,11 +334,11 @@ Zeigt detaillierte Logs für einen spezifischen Shop: Gesamt: 19243 🔥 Top 20 blockierte IPs: - 66.249.66.10 (Googlebot): 2341 ████████████████████ - 40.77.167.27 (Bingbot): 892 ████████████████████ - 216.244.66.196 (DotBot): 234 ████████████████████ - 185.191.171.5 (SemrushBot): 189 ████████████████████ - 52.167.144.225 (Unbekannt): 156 ████████████████████ + 66.249.66.10 (Googlebot): 2341 (1.0 req/min) ████████████████████ + 40.77.167.27 (Bingbot): 892 (0.4 req/min) ████████████████████ + 216.244.66.196 (DotBot): 234 (0.1 req/min) ████████████████████ + 185.191.171.5 (SemrushBot): 189 (0.1 req/min) ████████████████████ + 52.167.144.225 (Mozilla/5.0 (Windows NT 6.1; WOW...): 156 (0.1 req/min) ████████████████████ ... 🛡️ CrowdSec Decisions: @@ -355,17 +362,18 @@ Bei PHP-only Shops wird stattdessen angezeigt: Option `[4] Status anzeigen` zeigt: - Anzahl verfügbarer Shops - Anzahl aktiver Blockings -- Liste aller Shops mit aktivem Blocking, **Modus**, **Blocks**, **req/min** und **Laufzeit** +- Liste aller Shops mit aktivem Blocking, **Modus**, **Link11-Status**, **Blocks**, **req/min** und **Laufzeit** ``` 📊 Status: - Shops gesamt: 15 + Shops gesamt: 41 Aktive DACH-Blockings: 5 - ✓ shop1.example.com [PHP+CS] 🛡️ - 19243 blocks (8.2 req/min, 1d 18h 45m) - ✓ shop2.example.com [PHP] 📝 - 12554 blocks (5.8 req/min, 2d 3h 12m) - ✓ shop3.example.com [PHP] 📝 - 8921 blocks (4.1 req/min, 1d 12h 30m) - ✓ shop4.example.com [PHP+CS] 🛡️ - 29978 blocks (15.3 req/min, 1d 8h 22m) - ✓ shop5.example.com [PHP] 📝 - 3456 blocks (2.3 req/min, 1d 1h 05m) + Grün = hinter Link11 | Rot = Direkt + ✓ air-suspension-parts.de [Link11] [PHP] 📝 - 426 blocks (57.9 req/min, 7m) + ✓ gastro-shop-24.com [Direkt] [PHP+CS] 🛡️ - 172 blocks (23.4 req/min, 7m) + ✓ horchakustik-shop.de [Link11] [PHP] 📝 - 103 blocks (14.0 req/min, 7m) + ✓ itemstar-shop.de [Direkt] [PHP+CS] 🛡️ - 100 blocks (13.6 req/min, 7m) + ✓ leonessa.at [Link11] [PHP] 📝 - 39 blocks (5.3 req/min, 7m) ``` ## 🤖 Bot-Erkennung @@ -384,20 +392,28 @@ Das Script erkennt automatisch über **80 verschiedene Bots und Crawler** anhand | **E-Commerce** | PayPal IPN, Stripe, Shopify, Amazonbot | | **Andere** | Bytespider (TikTok), Diffbot, Wget, curl, python-requests, HeadlessChrome, Scrapy | -### Beispiel-Ausgabe mit Bot-Erkennung +### Anzeige in den Logs +**Bei bekanntem Bot:** ``` -🔥 Top 100 blockierte IPs (alle Shops): - 66.249.66.10 (Googlebot): 7025 ████████████████████ - 40.77.167.27 (Bingbot): 571 ████████████████████ - 173.0.81.65 (PayPal IPN): 466 ████████████████████ - 216.244.66.196 (DotBot): 416 ████████████████████ - 185.191.171.5 (SemrushBot): 312 ████████████████████ - 54.36.148.0 (AhrefsBot): 289 ████████████████████ - 35.187.50.162 (Unbekannt): 1035 ████████████████████ +66.249.66.10 (Googlebot): 7025 (9.5 req/min) → shop.example.com [234x] ████████████████████ ``` -Wenn kein Bot erkannt wird, wird `Unbekannt` angezeigt. +**Bei unbekanntem Bot (zeigt User-Agent):** +``` +40.113.19.56 (Mozilla/5.0 (Windows NT 10.0; Win...): 146 (19.9 req/min) → shop.example.com [89x] ████████████████████ +``` + +### Bot-Erkennung erweitern + +Um weitere Bots zur Erkennung hinzuzufügen, editiere das `BOT_PATTERNS` Dictionary im Python-Script: + +```python +BOT_PATTERNS = { + # Existierende Patterns... + 'MeinNeuerBot': r'MeinNeuerBot', # Regex-Pattern für User-Agent +} +``` ## 🔧 Erweiterte Verwendung @@ -512,6 +528,15 @@ Standard: 24 Stunden. Im PHP-Script: $cache_duration = 86400; // In Sekunden ``` +### Link11-IP ändern + +Falls Link11 eine andere IP verwendet: + +```python +# Im Python-Script +LINK11_IP = "128.65.223.106" # Hier ändern +``` + ### Weitere Länder hinzufügen Um weitere Länder zur Whitelist hinzuzufügen, editiere im Python-Script das PHP-Template. Suche nach: @@ -522,17 +547,6 @@ $countries = ['de', 'at', 'ch']; // Germany, Austria, Switzerland Füge weitere Ländercodes hinzu (z.B. `'nl'` für Niederlande, `'be'` für Belgien). Die verfügbaren Ländercodes findest du unter: https://www.ipdeny.com/ipblocks/data/aggregated/ -### Bot-Erkennung erweitern - -Um weitere Bots zur Erkennung hinzuzufügen, editiere das `BOT_PATTERNS` Dictionary im Python-Script: - -```python -BOT_PATTERNS = { - # Existierende Patterns... - 'MeinNeuerBot': r'MeinNeuerBot', # Regex-Pattern für User-Agent -} -``` - ## 🛡️ Sicherheit ### Was wird geblockt? @@ -585,6 +599,12 @@ Das PHP-Script liest die echte IP aus dem `X-Forwarded-For` Header: **Empfehlung für CDN-Nutzer:** Wähle bei der Aktivierung den Modus **[2] Nur PHP**. +### Link11-Erkennung nutzen + +Das Script erkennt automatisch Shops hinter Link11: +- **Grün `[Link11]`** = Shop hinter Link11 → PHP-only Modus empfohlen +- **Rot `[Direkt]`** = Shop direkt erreichbar → PHP+CrowdSec möglich + ### Prüfen ob CDN aktiv ist ```bash @@ -592,6 +612,10 @@ Das PHP-Script liest die echte IP aus dem `X-Forwarded-For` Header: ss -tn state established '( sport = :80 or sport = :443 )' | head -20 # Wenn nur interne/CDN-IPs erscheinen → PHP-only Modus verwenden + +# DNS-Check für eine Domain +dig +short shop.example.com +# Wenn 128.65.223.106 → Link11 aktiv ``` ## 🐛 Troubleshooting @@ -644,7 +668,7 @@ cscli decisions delete --ip 1.2.3.4 **Mögliche Ursachen:** -1. **CDN/Reverse-Proxy aktiv** → Wechsle zu PHP-only Modus +1. **CDN/Reverse-Proxy aktiv** → Wechsle zu PHP-only Modus (nutze Link11-Erkennung!) 2. **Bouncer läuft nicht:** ```bash systemctl status crowdsec-firewall-bouncer @@ -801,18 +825,20 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ 1. ✅ Backup erstellen (macht das Script automatisch) 2. ✅ Sicherstellen, dass Admin-Zugriff aus DACH-Region kommt -3. ✅ **Modus wählen** (PHP+CrowdSec für direkte Server, PHP-only für CDN) -4. ✅ Test mit kurzer Dauer (kann im Script angepasst werden) -5. ✅ Monitoring einrichten +3. ✅ **Link11-Status prüfen** (grün = PHP-only empfohlen) +4. ✅ **Modus wählen** (PHP+CrowdSec für direkte Server, PHP-only für CDN) +5. ✅ Test mit kurzer Dauer (kann im Script angepasst werden) +6. ✅ Monitoring einrichten ### Während aktivem Blocking 1. ✅ Logs regelmäßig prüfen (Gesamtübersicht nutzen!) 2. ✅ **req/min beobachten** - hohe Werte können auf Angriffe hindeuten 3. ✅ **Bot-Traffic analysieren** - welche Crawler werden geblockt? -4. ✅ Auf Fehlblockierungen achten (sehr selten) -5. ✅ CrowdSec-Statistiken beobachten (nur bei PHP+CrowdSec) -6. ✅ Server-Performance monitoren +4. ✅ **Top-IPs pro Shop prüfen** - ungewöhnliche Aktivität erkennen +5. ✅ Auf Fehlblockierungen achten (sehr selten) +6. ✅ CrowdSec-Statistiken beobachten (nur bei PHP+CrowdSec) +7. ✅ Server-Performance monitoren ### Nach Deaktivierung @@ -833,7 +859,7 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ - **API-Calls**: Bei vielen aktiven Shops könnten viele IPs in CrowdSec landen - **CrowdSec-Limits**: Kostenloser Tier hat API-Limits - **Netzwerk**: Kein Blocking möglich, wenn Server selbst unter DDoS steht -- **CDN**: Bei CDN-Nutzung ist PHP-only Modus empfohlen +- **CDN**: Bei CDN-Nutzung ist PHP-only Modus empfohlen (Link11-Erkennung nutzen!) ### Empfehlungen @@ -842,6 +868,7 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ - ✅ Kombinieren mit anderen Security-Maßnahmen - ✅ Regelmäßig Logs prüfen (Gesamtübersicht für schnellen Überblick) - ✅ **req/min im Auge behalten** für Anomalie-Erkennung +- ✅ **Link11-Erkennung nutzen** für Modus-Empfehlung - ✅ Bei CDN: PHP-only Modus verwenden ## 🤝 Contributing @@ -876,6 +903,7 @@ Bei Problemen: - Relevante Logs - System-Infos (OS, PHP-Version, CrowdSec-Version) - **Verwendeter Modus** (PHP+CrowdSec oder PHP-only) + - **Link11-Status** der betroffenen Shops ## 📚 Weitere Dokumentation @@ -886,13 +914,22 @@ Bei Problemen: --- -**Version**: 2.3.0 (DACH) +**Version**: 2.4.0 (DACH) **Letztes Update**: Dezember 2025 **Status**: Production Ready ✅ **Erlaubte Länder**: 🇩🇪 Deutschland | 🇦🇹 Österreich | 🇨🇭 Schweiz ### Changelog +#### v2.4.0 +- **NEU**: Link11-Erkennung mit farbiger Anzeige (Grün = hinter Link11, Rot = Direkt) +- **NEU**: DNS-Check für automatische CDN-Erkennung +- **NEU**: Top-IP pro Shop in Gesamtübersicht mit Bot-Name/User-Agent und req/min +- **NEU**: req/min für jede IP in Top 100 Liste +- **NEU**: User-Agent-Anzeige statt "Unbekannt" bei nicht erkannten Bots +- **NEU**: Shop-Zuordnung bei Top 100 IPs (welcher Shop am meisten betroffen) +- Link11-Status in allen Menüs sichtbar (Aktivieren, Deaktivieren, Logs, Status) + #### v2.3.0 - **NEU**: Bot-Erkennung mit 80+ bekannten Bots/Crawlern (Googlebot, GPTBot, ClaudeBot, AhrefsBot, SemrushBot, etc.) - **NEU**: Requests pro Minute (req/min) Berechnung pro Shop