diff --git a/README.md b/README.md index 766e5df..ab922f3 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,51 @@ -# GeoIP Shop Blocker Manager - DACH Version +# GeoIP Shop Blocker Manager **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 DACH-Region (Deutschland, Österreich, Schweiz) zu sperren. Es kombiniert PHP-Level-Blocking mit optionaler CrowdSec Firewall-Integration für maximalen Schutz. +Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temporär für alle Zugriffe außerhalb der gewählten Region zu sperren. Es kombiniert PHP-Level-Blocking mit optionaler CrowdSec Firewall-Integration für maximalen Schutz. ## 🎯 Features -- ✅ **DACH-Region erlaubt**: Deutschland (DE), Österreich (AT), Schweiz (CH) -- ✅ **Präzises Blocking**: PHP prüft gegen vollständige DACH IP-Ranges (keine Fehlblockierungen) +- ✅ **Zwei Geo-Regionen wählbar**: + - 🇩🇪🇦🇹🇨🇭 **DACH**: Deutschland, Österreich, Schweiz (3 Länder) + - 🇪🇺 **Eurozone+GB**: 22 Länder (DE, AT, CH, BE, CY, EE, ES, FI, FR, GB, GR, HR, IE, IT, LT, LU, LV, MT, NL, PT, SI, SK) +- ✅ **Präzises Blocking**: PHP prüft gegen vollständige IP-Ranges (keine Fehlblockierungen) - ✅ **Flexibler Modus**: Wahl zwischen "PHP + CrowdSec" oder "Nur PHP" - ✅ **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 - ✅ **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 - ✅ **Plesk-kompatibel**: Funktioniert mit Plesk-verwalteten Shops - ✅ **CDN-kompatibel**: PHP-only Modus für Link11, Cloudflare & Co. +- ✅ **Link11-Erkennung**: Automatische Anzeige ob Shop hinter Link11 steht + +## 🌍 Verfügbare Geo-Regionen + +### 🇩🇪🇦🇹🇨🇭 DACH (3 Länder) +| Code | Land | +|------|------| +| DE | Deutschland | +| AT | Österreich | +| CH | Schweiz | + +### 🇪🇺 Eurozone + GB (22 Länder) +| Code | Land | Code | Land | +|------|------|------|------| +| DE | Deutschland | IT | Italien | +| AT | Österreich | LT | Litauen | +| CH | Schweiz | LU | Luxemburg | +| BE | Belgien | LV | Lettland | +| CY | Zypern | MT | Malta | +| EE | Estland | NL | Niederlande | +| ES | Spanien | PT | Portugal | +| FI | Finnland | SI | Slowenien | +| FR | Frankreich | SK | Slowakei | +| GB | Großbritannien | GR | Griechenland | +| HR | Kroatien | IE | Irland | ## 🏗️ Architektur @@ -30,9 +53,9 @@ Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temp #### Komponente 1: PHP-Script - Wird in die `index.php` des Shops integriert -- Lädt DACH IP-Ranges von ipdeny.com (DE, AT, CH) +- Lädt IP-Ranges der gewählten Region von ipdeny.com - Prüft jede Anfrage gegen diese Ranges -- Blockt Nicht-DACH-IPs sofort mit HTTP 403 +- Blockt Nicht-Regions-IPs sofort mit HTTP 403 - Schreibt blockierte IPs in Queue-Datei für CrowdSec #### Komponente 2: Python Watcher (systemd service) @@ -112,6 +135,15 @@ Das war's! Das Script ist vollständig selbstverwaltend. ### Hauptmenü ``` +══════════════════════════════════════════════════════════════ + GeoIP Shop Blocker Manager + Regionen: 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB (22 Länder) + PHP + CrowdSec Watcher (systemd service) +══════════════════════════════════════════════════════════════ + ✅ CrowdSec: Aktiv + ✅ Watcher-Service: Läuft + +──────────────────────────────────────── [1] GeoIP-Blocking AKTIVIEREN (einzeln) [2] GeoIP-Blocking DEAKTIVIEREN (einzeln) [3] Logs anzeigen @@ -123,9 +155,21 @@ Das war's! Das Script ist vollständig selbstverwaltend. [0] Beenden ``` +### Geo-Region wählen + +Bei jeder Aktivierung (einzeln oder alle) wird zuerst nach der Region gefragt: + +``` +🌍 Wähle die Geo-Region: + [1] 🇩🇪🇦🇹🇨🇭 DACH - Deutschland, Österreich, Schweiz + [2] 🇪🇺 Eurozone+GB - 22 Länder + +Region wählen [1/2]: +``` + ### Blocking-Modus wählen -Bei jeder Aktivierung (einzeln oder alle) wird nach dem Modus gefragt: +Nach der Region wird der Modus abgefragt: ``` 🔧 Wähle den Blocking-Modus: @@ -135,75 +179,71 @@ Bei jeder Aktivierung (einzeln oder alle) wird nach dem Modus gefragt: Modus wählen [1/2]: ``` -**Wann welchen Modus wählen?** +**Wann welche Kombination wählen?** -| Situation | Empfohlener Modus | -|-----------|-------------------| -| Server direkt im Internet | PHP + CrowdSec 🛡️ | -| Server hinter CDN (Link11, Cloudflare) | Nur PHP 📝 | -| CrowdSec nicht installiert | Nur PHP 📝 | -| 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 +| Situation | Region | Modus | +|-----------|--------|-------| +| DE/AT/CH Shop, Server direkt | DACH | PHP + CrowdSec 🛡️ | +| DE/AT/CH Shop, hinter CDN | DACH | Nur PHP 📝 | +| EU-weiter Shop, Server direkt | Eurozone+GB | PHP + CrowdSec 🛡️ | +| EU-weiter Shop, hinter CDN | Eurozone+GB | Nur PHP 📝 | +| Maximaler Schutz (nur DACH) | DACH | PHP + CrowdSec 🛡️ | +| Weniger restriktiv (EU-weit) | Eurozone+GB | Nur PHP 📝 | ### 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 (farbig markiert nach Link11-Status) -4. **Modus wählen** (PHP+CrowdSec oder Nur PHP) -5. Bestätigen mit `ja` +3. Shop aus der Liste auswählen +4. **Geo-Region wählen** (DACH oder Eurozone+GB) +5. **Modus wählen** (PHP+CrowdSec oder Nur PHP) +6. Bestätigen mit `ja` -**Was passiert (PHP + CrowdSec Modus):** -- Bei ERSTEM Shop: Systemd-Service wird installiert und gestartet -- Backup der `index.php` wird erstellt -- `geoip_blocking.php` wird erstellt und eingebunden -- Shop wird für Tracking registriert -- Blocking ist sofort aktiv -- Erlaubt werden nur IPs aus: 🇩🇪 Deutschland, 🇦🇹 Österreich, 🇨🇭 Schweiz +**Beispielausgabe:** +``` +🔧 Aktiviere 🇪🇺 Eurozone + GB GeoIP-Blocking für: shop.example.com + Erlaubt: 22 Länder: DE, AT, CH, BE, CY, EE, ES, FI, FR, GB, GR, HR, IE, IT, LT, LU, LV, MT, NL, PT, SI, SK + Modus: PHP + CrowdSec +════════════════════════════════════════════════════════════════ -**Was passiert (Nur PHP Modus):** -- Backup der `index.php` wird erstellt -- `geoip_blocking.php` wird erstellt (ohne CrowdSec-Queue) -- Shop wird für Tracking registriert -- Blocking ist sofort aktiv -- Kein Watcher-Service nötig +[1/3] Installiere CrowdSec-Watcher-Service... + ✅ Watcher-Script erstellt: /usr/local/bin/geoip_crowdsec_watcher.py + ✅ Systemd-Service erstellt: /etc/systemd/system/geoip-crowdsec-watcher.service + ✅ Service gestartet und läuft + +[2/3] Aktiviere PHP-Blocking... + 📋 Backup erstellen... + ✏️ index.php modifiziert + 📝 geoip_blocking.php erstellt + +[3/3] Registriere Shop... + ✅ Shop registriert + +════════════════════════════════════════════════════════════════ +✅ 🇪🇺 Eurozone + GB GeoIP-Blocking aktiviert für: shop.example.com + Erlaubte Länder: 22 Länder: DE, AT, CH, BE, CY, EE, ES, FI, FR, GB, GR, HR, IE, IT, LT, LU, LV, MT, NL, PT, SI, SK + Modus: PHP + CrowdSec 🛡️ + Gültig bis: 2025-12-12 14:30:00 CET + PHP-Log: /var/www/vhosts/shop.example.com/httpdocs/geoip_blocked.log + CrowdSec-Queue: /var/www/vhosts/shop.example.com/httpdocs/geoip_crowdsec_queue.log + + 🔄 Der Watcher-Service synchronisiert blockierte IPs zu CrowdSec +════════════════════════════════════════════════════════════════ +``` ### Blocking für ALLE Shops aktivieren 1. Script starten: `python3 geoip_shop_manager.py` 2. Option `[5] 🚀 ALLE Shops aktivieren` wählen -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` +3. Liste der zu aktivierenden Shops wird angezeigt +4. **Geo-Region wählen** (gilt für alle Shops) +5. **Modus wählen** (gilt für alle Shops) +6. Bestätigen mit `ja` **Beispielausgabe:** ``` ══════════════════════════════════════════════════════════════ - DACH GeoIP-Blocking für ALLE Shops aktivieren + GeoIP-Blocking für ALLE Shops aktivieren ══════════════════════════════════════════════════════════════ 📋 Folgende 5 Shop(s) werden aktiviert: @@ -214,6 +254,12 @@ Die Erkennung ist in allen Menüs aktiv: • shop3.example.com [Link11] ... +🌍 Wähle die Geo-Region: + [1] 🇩🇪🇦🇹🇨🇭 DACH - Deutschland, Österreich, Schweiz + [2] 🇪🇺 Eurozone+GB - 22 Länder + +Region wählen [1/2]: 2 + 🔧 Wähle den Blocking-Modus: [1] PHP + CrowdSec (IPs werden an CrowdSec gemeldet) [2] Nur PHP (keine CrowdSec-Synchronisation) @@ -221,18 +267,48 @@ Die Erkennung ist in allen Menüs aktiv: Modus wählen [1/2]: 2 ⚠️ Dies aktiviert den Schutz für alle oben genannten Shops! + Region: 🇪🇺 Eurozone + GB Modus: Nur PHP 📝 Fortfahren? (ja/nein): ja + +══════════════════════════════════════════════════════════════ + Starte Aktivierung (🇪🇺 Eurozone + GB, Nur PHP 📝)... +══════════════════════════════════════════════════════════════ + +[1/5] Aktiviere: shop1.example.com + ✅ Aktiviert (bis 2025-12-12 14:30) +... + +══════════════════════════════════════════════════════════════ + ZUSAMMENFASSUNG +══════════════════════════════════════════════════════════════ + + ✅ Erfolgreich aktiviert: 5 + ❌ Fehlgeschlagen: 0 + + 🇪🇺 Region: Eurozone + GB + 🔧 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 und Link11-Status) +3. Shop aus der Liste auswählen (zeigt Region und Modus an) 4. Bestätigen mit `ja` +**Shop-Liste zeigt alle relevanten Infos:** +``` +📋 Aktive Shops: + Grün = hinter Link11 | Rot = Direkt + [1] shop1.example.com [Link11] 🇪🇺 🛡️ + [2] shop2.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 📝 + [3] shop3.example.com [Link11] 🇪🇺 📝 +``` + **Was passiert:** - Original `index.php` wird wiederhergestellt - Alle PHP-Dateien werden gelöscht @@ -244,7 +320,7 @@ 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 (mit Link11-Status) +3. Liste der aktiven Shops wird angezeigt (mit Region-Icons) 4. Bestätigen mit `ja` ### Logs anzeigen @@ -257,88 +333,78 @@ Fortfahren? (ja/nein): ja 📋 Logs anzeigen für: Grün = hinter Link11 | Rot = Direkt [0] 📊 ALLE Shops (Zusammenfassung) - [1] shop1.example.com [Link11] 🛡️ - [2] shop2.example.com [Direkt] 📝 + [1] shop1.example.com [Link11] 🇪🇺 🛡️ + [2] shop2.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 📝 ... ``` -Die Icons zeigen den Modus: -- 🛡️ = PHP + CrowdSec -- 📝 = Nur PHP +Die Icons zeigen: +- 🇩🇪🇦🇹🇨🇭 = DACH Region +- 🇪🇺 = Eurozone+GB Region +- 🛡️ = PHP + CrowdSec Modus +- 📝 = Nur PHP Modus #### Option [0]: Gesamtübersicht aller Shops -Zeigt eine aggregierte Statistik über alle aktiven Shops mit **Requests pro Minute**, **Bot-Erkennung** und **Top-IP pro Shop**: +Zeigt eine aggregierte Statistik über alle aktiven Shops: ``` -══════════════════════════════════════════════════════════════════════ +════════════════════════════════════════════════════════════════════════ 📊 GESAMTÜBERSICHT ALLER SHOPS -══════════════════════════════════════════════════════════════════════ +════════════════════════════════════════════════════════════════════════ + Grün = hinter Link11 | Rot = Direkt -📝 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 - ... +📝 PHP-Blocks gesamt: 1.247 (⌀ 2.3 req/min, Laufzeit: 9h 12m) + ├─ shop1.example.com 🇪🇺: 523 (1.2 req/min, seit 9h 12m) ██████████ + │ └─➤ Top: 185.220.101.34 (GPTBot) - 127x, 0.2 req/min + ├─ shop2.example.com 🇩🇪🇦🇹🇨🇭: 412 (0.8 req/min, seit 8h 30m) ████████ + │ └─➤ Top: 45.95.169.22 (SemrushBot) - 89x, 0.2 req/min + └─ shop3.example.com 🇪🇺: 312 (0.6 req/min, seit 8h 45m) ██████ + └─➤ Top: 194.26.192.64 (Unbekannt) - 67x, 0.1 req/min 🛡️ CrowdSec-Bans gesamt: 892 - ├─ shop1.example.com: 401 ████████████████ - ├─ shop2.example.com: 298 ███████████ - └─ shop3.example.com: 193 ███████ + ├─ shop1.example.com 🇪🇺: 401 ████████████████ + └─ shop2.example.com 🇩🇪🇦🇹🇨🇭: 298 ███████████ 🔥 Top 100 blockierte IPs (alle Shops): - 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] █████ + 185.220.101.34 (GPTBot): 127 (0.2 req/min) → shop1.example.com [127x] █████████████████████████ + 45.95.169.22 (SemrushBot): 89 (0.2 req/min) → shop2.example.com [89x] █████████████████ + 194.26.192.64 (Unbekannt): 67 (0.1 req/min) → shop3.example.com [45x] █████████████ ... -══════════════════════════════════════════════════════════════════════ +════════════════════════════════════════════════════════════════════════ ``` **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: - - Bot-Name oder User-Agent (wenn unbekannt) - - req/min für diese IP - - Meistbetroffener Shop mit Anzahl +- PHP-Blocks pro Shop mit Geo-Region-Icon, req/min und Top-IP +- CrowdSec-Bans pro Shop (nur für PHP+CrowdSec Shops) +- Top 100 der am häufigsten blockierten IPs über alle Shops hinweg +- Bot-Erkennung (GPTBot, SemrushBot, Googlebot, etc.) #### Option [1-n]: Einzelner Shop Zeigt detaillierte Logs für einen spezifischen Shop: ``` -══════════════════════════════════════════════════════════════════════ -📊 Logs für shop1.example.com [PHP + CrowdSec 🛡️] -══════════════════════════════════════════════════════════════════════ +════════════════════════════════════════════════════════════════════════ +📊 Logs für shop1.example.com + 🇪🇺 Eurozone + GB | PHP + CrowdSec 🛡️ +════════════════════════════════════════════════════════════════════════ -⏱️ Aktiviert: 2025-12-08 14:30:00 -⏱️ Laufzeit: 1d 18h 45m -📈 Blocks: 19243 (8.2 req/min) +⏱️ Aktiviert: 2025-12-09 05:18:00 +⏱️ Laufzeit: 9h 12m +📈 Blocks: 523 (1.2 req/min) 📝 Letzte 50 PHP-Blocks: ====================================================================== -[2025-12-10 09:15:23] IP: 66.249.66.10 | UA: Mozilla/5.0 (compatible; Googlebot/2.1) | URI: /produkt-123 -[2025-12-10 09:15:21] IP: 40.77.167.27 | UA: Mozilla/5.0 (compatible; bingbot/2.0) | URI: /kategorie +[2025-12-09 14:24:57] IP: 202.8.43.232 | UA: Mozilla/5.0 ... | URI: /produkt-123 ... ====================================================================== -Gesamt: 19243 +Gesamt: 523 🔥 Top 20 blockierte IPs: - 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) ████████████████████ + 185.220.101.34 (GPTBot): 127 (0.2 req/min) █████████████████████████ + 45.95.169.22 (SemrushBot): 89 (0.2 req/min) █████████████████ ... 🛡️ CrowdSec Decisions: @@ -346,8 +412,8 @@ Gesamt: 19243 Aktive Bans: 401 Letzte 20 Bans: - 🚫 202.8.43.232 (bis 2025-12-11 17:24:57) - 🚫 45.95.169.22 (bis 2025-12-11 16:30:12) + 🚫 202.8.43.232 (bis 2025-12-12 14:24:57) + 🚫 45.95.169.22 (bis 2025-12-12 13:30:12) ... ====================================================================== ``` @@ -362,57 +428,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**, **Link11-Status**, **Blocks**, **req/min** und **Laufzeit** +- Liste aller Shops mit aktivem Blocking, Region und Modus ``` 📊 Status: - Shops gesamt: 41 - Aktive DACH-Blockings: 5 + Shops gesamt: 15 + Aktive GeoIP-Blockings: 5 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 - -Das Script erkennt automatisch über **80 verschiedene Bots und Crawler** anhand des User-Agent-Strings. Die erkannten Bots werden in den Logs hinter der IP-Adresse angezeigt. - -### Erkannte Bot-Kategorien - -| Kategorie | Bots | -|-----------|------| -| **AI/LLM Crawler** | GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Gemini-Deep-Research, cohere-ai, MistralAI-User, AI2Bot, CCBot | -| **Suchmaschinen** | Googlebot, Bingbot, YandexBot, Baiduspider, DuckDuckBot, Applebot, PetalBot, Sogou, Qwantify | -| **SEO-Tools** | AhrefsBot, SemrushBot, MJ12bot, DotBot, BLEXBot, DataForSeoBot, SEOkicks, Screaming Frog, Sistrix | -| **Social Media** | FacebookBot, LinkedInBot, Twitterbot, Pinterest, Slackbot, TelegramBot, WhatsApp, Discordbot | -| **Monitoring** | UptimeRobot, Pingdom, StatusCake, GTmetrix, Site24x7 | -| **E-Commerce** | PayPal IPN, Stripe, Shopify, Amazonbot | -| **Andere** | Bytespider (TikTok), Diffbot, Wget, curl, python-requests, HeadlessChrome, Scrapy | - -### Anzeige in den Logs - -**Bei bekanntem Bot:** -``` -66.249.66.10 (Googlebot): 7025 (9.5 req/min) → shop.example.com [234x] ████████████████████ -``` - -**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 -} + ✓ shop1.example.com [Link11] 🇪🇺 [PHP+CS] 🛡️ - 523 blocks (1.2 req/min, 9h 12m) + ✓ shop2.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 [PHP] 📝 - 412 blocks (0.8 req/min, 8h 30m) + ✓ shop3.example.com [Link11] 🇪🇺 [PHP] 📝 - 312 blocks (0.6 req/min, 8h 45m) + ✓ shop4.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 [PHP+CS] 🛡️ - 201 blocks (0.4 req/min, 8h 15m) + ✓ shop5.example.com [Link11] 🇪🇺 [PHP] 📝 - 156 blocks (0.3 req/min, 8h 0m) ``` ## 🔧 Erweiterte Verwendung @@ -481,7 +508,7 @@ cscli decisions delete --ip DEINE_IP - `index.php.geoip_backup` - Backup der Original index.php - `geoip_blocking.php` - PHP-Blocking-Script -- `dach_ip_ranges.cache` - Gecachte DACH IP-Ranges (erneuert alle 24h) +- `geoip_ip_ranges.cache` - Gecachte IP-Ranges der gewählten Region (erneuert alle 24h) - `geoip_blocked.log` - Log der PHP-Level Blocks - `geoip_crowdsec_queue.log` - Queue für CrowdSec-Synchronisation (nur PHP+CrowdSec Modus) @@ -489,7 +516,7 @@ cscli decisions delete --ip DEINE_IP - `/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 (inkl. Modus und Aktivierungszeit) +- `/var/lib/crowdsec/geoip_active_shops.json` - Tracking aktiver Shops (inkl. Modus und Region) ## ⚙️ Konfiguration @@ -502,21 +529,11 @@ Standardmäßig 72 Stunden. Zum Ändern editiere das Python-Script: expiry = datetime.now() + timedelta(hours=72) # Hier ändern ``` -Und im PHP-Script Template: -```python -# Zeile ~30-50 -GEOIP_SCRIPT = '''/dev/null; done; done && echo "✅ Alle GeoIP-Decisions gelöscht" - -# Prüfen -cscli decisions list --limit 0 | grep "GeoIP" -``` - -### Migration von der alten DE-Only Version - -Falls du von der alten Version (nur Deutschland) auf die DACH-Version wechselst: +Falls du von der alten Version (nur DACH) auf die neue Version mit Regionsauswahl wechselst: ```bash # 1. Alle aktiven Shops deaktivieren (alte Version) python3 geoip_shop_manager_old.py # Option 2 für jeden Shop # 2. Alte Cache-Dateien löschen -rm /var/www/vhosts/*/httpdocs/de_ip_ranges.cache +rm /var/www/vhosts/*/httpdocs/dach_ip_ranges.cache # 3. Neue Version verwenden -python3 geoip_shop_manager.py # Shops wieder aktivieren +python3 geoip_shop_manager.py # Shops wieder aktivieren mit gewünschter Region ``` ## 📊 Performance @@ -735,9 +718,11 @@ python3 geoip_shop_manager.py # Shops wieder aktivieren ### PHP-Level Blocking - **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges) -- **Erster Request**: ~400-800ms (beim Download der IP-Ranges für 3 Länder) +- **Erster Request DACH**: ~400-800ms (Download für 3 Länder) +- **Erster Request Eurozone+GB**: ~1-2s (Download für 22 Länder) - **Cache-Dauer**: 24 Stunden -- **RAM-Verbrauch**: ~5-10 MB pro Shop +- **RAM-Verbrauch DACH**: ~5-10 MB pro Shop +- **RAM-Verbrauch Eurozone+GB**: ~15-25 MB pro Shop ### CrowdSec Firewall Blocking (nur PHP+CrowdSec Modus) @@ -761,21 +746,13 @@ wget -O geoip_shop_manager.py https://raw.githubusercontent.com/DEIN-REPO/geoip- chmod +x geoip_shop_manager.py ``` -**WICHTIG**: Bereits aktive Shops bleiben unberührt. Der Watcher-Service muss manuell aktualisiert werden: - -```bash -# Für aktive Shops: Watcher-Service neu installieren -# (Automatisch beim nächsten Aktivieren/Deaktivieren) -# ODER manuell: -systemctl stop geoip-crowdsec-watcher.service -# Script ausführen und einen Shop kurz de-/reaktivieren -``` +**WICHTIG**: Bereits aktive Shops bleiben unberührt. Der Watcher-Service muss manuell aktualisiert werden. ### IP-Ranges aktualisieren ```bash # Cache löschen (wird automatisch neu geladen) -rm /var/www/vhosts/*/httpdocs/dach_ip_ranges.cache +rm /var/www/vhosts/*/httpdocs/geoip_ip_ranges.cache ``` Die Ranges werden automatisch alle 24h aktualisiert. @@ -824,8 +801,8 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ ### Vor Aktivierung 1. ✅ Backup erstellen (macht das Script automatisch) -2. ✅ Sicherstellen, dass Admin-Zugriff aus DACH-Region kommt -3. ✅ **Link11-Status prüfen** (grün = PHP-only empfohlen) +2. ✅ Sicherstellen, dass Admin-Zugriff aus erlaubter Region kommt +3. ✅ **Region wählen** (DACH für DE/AT/CH Shops, Eurozone+GB für EU-weite Shops) 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 @@ -833,12 +810,9 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ ### 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. ✅ **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 +2. ✅ Auf Fehlblockierungen achten (sehr selten) +3. ✅ CrowdSec-Statistiken beobachten (nur bei PHP+CrowdSec) +4. ✅ Server-Performance monitoren ### Nach Deaktivierung @@ -859,7 +833,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 (Link11-Erkennung nutzen!) +- **CDN**: Bei CDN-Nutzung ist PHP-only Modus empfohlen ### Empfehlungen @@ -867,9 +841,8 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ - ✅ Nicht als permanente Lösung - ✅ 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 +- ✅ Region passend zum Shop wählen ## 🤝 Contributing @@ -889,7 +862,6 @@ MIT License - siehe LICENSE Datei - **IP-Ranges**: [ipdeny.com](https://www.ipdeny.com/) (RIPE-basiert) - **CrowdSec**: [crowdsec.net](https://www.crowdsec.net/) -- **Bot-Listen**: [momenticmarketing.com](https://momenticmarketing.com/blog/ai-search-crawlers-bots), [searchenginejournal.com](https://www.searchenginejournal.com/ai-crawler-user-agents-list/558130/) - **Entwickelt für**: Plesk-basierte Multi-Shop-Server ## 📞 Support @@ -902,8 +874,8 @@ Bei Problemen: - Fehlerbeschreibung - Relevante Logs - System-Infos (OS, PHP-Version, CrowdSec-Version) + - **Gewählte Region** (DACH oder Eurozone+GB) - **Verwendeter Modus** (PHP+CrowdSec oder PHP-only) - - **Link11-Status** der betroffenen Shops ## 📚 Weitere Dokumentation @@ -914,30 +886,20 @@ Bei Problemen: --- -**Version**: 2.4.0 (DACH) +**Version**: 3.0.0 **Letztes Update**: Dezember 2025 **Status**: Production Ready ✅ -**Erlaubte Länder**: 🇩🇪 Deutschland | 🇦🇹 Österreich | 🇨🇭 Schweiz +**Verfügbare Regionen**: 🇩🇪🇦🇹🇨🇭 DACH (3 Länder) | 🇪🇺 Eurozone+GB (22 Länder) ### 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 -- **NEU**: Laufzeit-Anzeige seit Aktivierung (z.B. "1d 18h 45m") -- **NEU**: Erweiterte Status-Ansicht mit Blocks, req/min und Laufzeit -- **NEU**: Top 20 IPs mit Bot-Erkennung in Einzelshop-Logs -- Bot-Kategorien: AI/LLM, Suchmaschinen, SEO-Tools, Social Media, Monitoring, E-Commerce -- Verbesserte Gesamtübersicht mit durchschnittlicher Request-Rate +#### v3.0.0 +- **NEU**: Geo-Region-Auswahl bei Aktivierung (DACH oder Eurozone+GB) +- **NEU**: Eurozone+GB Region mit 22 Ländern (DE, AT, CH, BE, CY, EE, ES, FI, FR, GB, GR, HR, IE, IT, LT, LU, LV, MT, NL, PT, SI, SK) +- **NEU**: Geo-Region-Icon in Status, Logs und allen Menüs (🇩🇪🇦🇹🇨🇭 / 🇪🇺) +- **NEU**: Pro-Shop Geo-Region-Tracking (verschiedene Shops können verschiedene Regionen haben) +- Umbenannt von "DACH Version" zu "GeoIP Shop Blocker Manager" +- Cache-Datei umbenannt von `dach_ip_ranges.cache` zu `geoip_ip_ranges.cache` #### v2.2.0 - **NEU**: Modus-Auswahl bei Aktivierung (PHP+CrowdSec 🛡️ oder Nur PHP 📝) @@ -945,6 +907,9 @@ Bei Problemen: - **NEU**: Modus-Anzeige in Status, Logs und Deaktivierungs-Menü - **NEU**: Automatische Erkennung ob CrowdSec-Cleanup nötig ist - **NEU**: Top 100 blockierte IPs (statt Top 10) in Gesamtübersicht +- **NEU**: Bot-Erkennung (GPTBot, SemrushBot, Googlebot, etc.) +- **NEU**: req/min Statistiken und Laufzeit-Anzeige +- **NEU**: Link11-Erkennung mit Farbcodierung - **FIX**: CrowdSec Cleanup nutzt jetzt `--limit 0` für vollständige Löschung - Verbesserte Dokumentation zu CDN/Proxy-Szenarien