README.md aktualisiert

This commit is contained in:
2025-12-09 10:41:45 +01:00
parent 6a253ad01d
commit 62d75f8137

543
README.md
View File

@@ -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** **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 ## 🎯 Features
-**DACH-Region erlaubt**: Deutschland (DE), Österreich (AT), Schweiz (CH) -**Zwei Geo-Regionen wählbar**:
- **Präzises Blocking**: PHP prüft gegen vollständige DACH IP-Ranges (keine Fehlblockierungen) - 🇩🇪🇦🇹🇨🇭 **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" -**Flexibler Modus**: Wahl zwischen "PHP + CrowdSec" oder "Nur PHP"
-**Doppelter Schutz**: PHP-Level + Firewall-Level (CrowdSec) - optional -**Doppelter Schutz**: PHP-Level + Firewall-Level (CrowdSec) - optional
-**Automatische Synchronisation**: Blockierte IPs werden automatisch an CrowdSec weitergegeben -**Automatische Synchronisation**: Blockierte IPs werden automatisch an CrowdSec weitergegeben
-**Multi-Shop-Management**: Verwaltung mehrerer Shops auf einem Server -**Multi-Shop-Management**: Verwaltung mehrerer Shops auf einem Server
-**Bulk-Operationen**: Alle Shops gleichzeitig aktivieren/deaktivieren -**Bulk-Operationen**: Alle Shops gleichzeitig aktivieren/deaktivieren
-**Gesamtübersicht**: Logs und Statistiken über alle Shops hinweg (Top 100 IPs) -**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 -**Auto-Deaktivierung**: Blocking läuft nach 72 Stunden automatisch ab
-**Systemd-Service**: Automatischer Start beim Booten -**Systemd-Service**: Automatischer Start beim Booten
-**Sauberes Cleanup**: Vollständige Deinstallation bei Deaktivierung -**Sauberes Cleanup**: Vollständige Deinstallation bei Deaktivierung
-**Plesk-kompatibel**: Funktioniert mit Plesk-verwalteten Shops -**Plesk-kompatibel**: Funktioniert mit Plesk-verwalteten Shops
-**CDN-kompatibel**: PHP-only Modus für Link11, Cloudflare & Co. -**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 ## 🏗️ Architektur
@@ -30,9 +53,9 @@ Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temp
#### Komponente 1: PHP-Script #### Komponente 1: PHP-Script
- Wird in die `index.php` des Shops integriert - 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 - 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 - Schreibt blockierte IPs in Queue-Datei für CrowdSec
#### Komponente 2: Python Watcher (systemd service) #### Komponente 2: Python Watcher (systemd service)
@@ -112,6 +135,15 @@ Das war's! Das Script ist vollständig selbstverwaltend.
### Hauptmenü ### 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) [1] GeoIP-Blocking AKTIVIEREN (einzeln)
[2] GeoIP-Blocking DEAKTIVIEREN (einzeln) [2] GeoIP-Blocking DEAKTIVIEREN (einzeln)
[3] Logs anzeigen [3] Logs anzeigen
@@ -123,9 +155,21 @@ Das war's! Das Script ist vollständig selbstverwaltend.
[0] Beenden [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 ### 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: 🔧 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]: Modus wählen [1/2]:
``` ```
**Wann welchen Modus wählen?** **Wann welche Kombination wählen?**
| Situation | Empfohlener Modus | | Situation | Region | Modus |
|-----------|-------------------| |-----------|--------|-------|
| Server direkt im Internet | PHP + CrowdSec 🛡️ | | DE/AT/CH Shop, Server direkt | DACH | PHP + CrowdSec 🛡️ |
| Server hinter CDN (Link11, Cloudflare) | Nur PHP 📝 | | DE/AT/CH Shop, hinter CDN | DACH | Nur PHP 📝 |
| CrowdSec nicht installiert | Nur PHP 📝 | | EU-weiter Shop, Server direkt | Eurozone+GB | PHP + CrowdSec 🛡️ |
| Minimaler Overhead gewünscht | Nur PHP 📝 | | EU-weiter Shop, hinter CDN | Eurozone+GB | Nur PHP 📝 |
| Maximaler Schutz (alle Ports) | PHP + CrowdSec 🛡️ | | Maximaler Schutz (nur DACH) | DACH | PHP + CrowdSec 🛡️ |
| Weniger restriktiv (EU-weit) | Eurozone+GB | Nur PHP 📝 |
### 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) ### Blocking aktivieren (einzelner Shop)
1. Script starten: `python3 geoip_shop_manager.py` 1. Script starten: `python3 geoip_shop_manager.py`
2. Option `[1] GeoIP-Blocking AKTIVIEREN (einzeln)` wählen 2. Option `[1] GeoIP-Blocking AKTIVIEREN (einzeln)` wählen
3. Shop aus der Liste auswählen (farbig markiert nach Link11-Status) 3. Shop aus der Liste auswählen
4. **Modus wählen** (PHP+CrowdSec oder Nur PHP) 4. **Geo-Region wählen** (DACH oder Eurozone+GB)
5. Bestätigen mit `ja` 5. **Modus wählen** (PHP+CrowdSec oder Nur PHP)
6. Bestätigen mit `ja`
**Was passiert (PHP + CrowdSec Modus):** **Beispielausgabe:**
- Bei ERSTEM Shop: Systemd-Service wird installiert und gestartet ```
- Backup der `index.php` wird erstellt 🔧 Aktiviere 🇪🇺 Eurozone + GB GeoIP-Blocking für: shop.example.com
- `geoip_blocking.php` wird erstellt und eingebunden 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
- Shop wird für Tracking registriert Modus: PHP + CrowdSec
- Blocking ist sofort aktiv ════════════════════════════════════════════════════════════════
- Erlaubt werden nur IPs aus: 🇩🇪 Deutschland, 🇦🇹 Österreich, 🇨🇭 Schweiz
**Was passiert (Nur PHP Modus):** [1/3] Installiere CrowdSec-Watcher-Service...
- Backup der `index.php` wird erstellt ✅ Watcher-Script erstellt: /usr/local/bin/geoip_crowdsec_watcher.py
- `geoip_blocking.php` wird erstellt (ohne CrowdSec-Queue) ✅ Systemd-Service erstellt: /etc/systemd/system/geoip-crowdsec-watcher.service
- Shop wird für Tracking registriert ✅ Service gestartet und läuft
- Blocking ist sofort aktiv
- Kein Watcher-Service nötig [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 ### Blocking für ALLE Shops aktivieren
1. Script starten: `python3 geoip_shop_manager.py` 1. Script starten: `python3 geoip_shop_manager.py`
2. Option `[5] 🚀 ALLE Shops aktivieren` wählen 2. Option `[5] 🚀 ALLE Shops aktivieren` wählen
3. Liste der zu aktivierenden Shops wird angezeigt (mit Link11-Status) 3. Liste der zu aktivierenden Shops wird angezeigt
4. **Modus wählen** (gilt für alle Shops) 4. **Geo-Region wählen** (gilt für alle Shops)
5. Bestätigen mit `ja` 5. **Modus wählen** (gilt für alle Shops)
6. Bestätigen mit `ja`
**Beispielausgabe:** **Beispielausgabe:**
``` ```
══════════════════════════════════════════════════════════════ ══════════════════════════════════════════════════════════════
DACH GeoIP-Blocking für ALLE Shops aktivieren GeoIP-Blocking für ALLE Shops aktivieren
══════════════════════════════════════════════════════════════ ══════════════════════════════════════════════════════════════
📋 Folgende 5 Shop(s) werden aktiviert: 📋 Folgende 5 Shop(s) werden aktiviert:
@@ -214,6 +254,12 @@ Die Erkennung ist in allen Menüs aktiv:
• shop3.example.com [Link11] • 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: 🔧 Wähle den Blocking-Modus:
[1] PHP + CrowdSec (IPs werden an CrowdSec gemeldet) [1] PHP + CrowdSec (IPs werden an CrowdSec gemeldet)
[2] Nur PHP (keine CrowdSec-Synchronisation) [2] Nur PHP (keine CrowdSec-Synchronisation)
@@ -221,18 +267,48 @@ Die Erkennung ist in allen Menüs aktiv:
Modus wählen [1/2]: 2 Modus wählen [1/2]: 2
⚠️ Dies aktiviert den Schutz für alle oben genannten Shops! ⚠️ Dies aktiviert den Schutz für alle oben genannten Shops!
Region: 🇪🇺 Eurozone + GB
Modus: Nur PHP 📝 Modus: Nur PHP 📝
Fortfahren? (ja/nein): ja 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) ### Blocking deaktivieren (einzelner Shop)
1. Script starten: `python3 geoip_shop_manager.py` 1. Script starten: `python3 geoip_shop_manager.py`
2. Option `[2] GeoIP-Blocking DEAKTIVIEREN (einzeln)` wählen 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` 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:** **Was passiert:**
- Original `index.php` wird wiederhergestellt - Original `index.php` wird wiederhergestellt
- Alle PHP-Dateien werden gelöscht - Alle PHP-Dateien werden gelöscht
@@ -244,7 +320,7 @@ Fortfahren? (ja/nein): ja
1. Script starten: `python3 geoip_shop_manager.py` 1. Script starten: `python3 geoip_shop_manager.py`
2. Option `[6] 🛑 ALLE Shops deaktivieren` wählen 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` 4. Bestätigen mit `ja`
### Logs anzeigen ### Logs anzeigen
@@ -257,88 +333,78 @@ Fortfahren? (ja/nein): ja
📋 Logs anzeigen für: 📋 Logs anzeigen für:
Grün = hinter Link11 | Rot = Direkt Grün = hinter Link11 | Rot = Direkt
[0] 📊 ALLE Shops (Zusammenfassung) [0] 📊 ALLE Shops (Zusammenfassung)
[1] shop1.example.com [Link11] 🛡️ [1] shop1.example.com [Link11] 🇪🇺 🛡️
[2] shop2.example.com [Direkt] 📝 [2] shop2.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 📝
... ...
``` ```
Die Icons zeigen den Modus: Die Icons zeigen:
- 🛡️ = PHP + CrowdSec - 🇩🇪🇦🇹🇨🇭 = DACH Region
- 📝 = Nur PHP - 🇪🇺 = Eurozone+GB Region
- 🛡️ = PHP + CrowdSec Modus
- 📝 = Nur PHP Modus
#### Option [0]: Gesamtübersicht aller Shops #### 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 📊 GESAMTÜBERSICHT ALLER SHOPS
══════════════════════════════════════════════════════════════════════ ════════════════════════════════════════════════════════════════════════
Grün = hinter Link11 | Rot = Direkt
📝 PHP-Blocks gesamt: 1359 (⌀ 184.7 req/min, Laufzeit: 7m) 📝 PHP-Blocks gesamt: 1.247 (⌀ 2.3 req/min, Laufzeit: 9h 12m)
├─ air-suspension-parts.de: 426 (57.9 req/min, seit 7m) ████████████████████ ├─ shop1.example.com 🇪🇺: 523 (1.2 req/min, seit 9h 12m) ██████████
│ └─➤ Top: 40.113.19.56 (Mozilla/5.0 (Windows NT 10...) - 89x, 12.1 req/min │ └─➤ Top: 185.220.101.34 (GPTBot) - 127x, 0.2 req/min
├─ allgaeu-triathlon-shop.de: 3 (0.4 req/min, seit 7m) ├─ shop2.example.com 🇩🇪🇦🇹🇨🇭: 412 (0.8 req/min, seit 8h 30m) ████████
│ └─➤ Top: 66.249.66.10 (Googlebot) - 2x, 0.3 req/min │ └─➤ Top: 45.95.169.22 (SemrushBot) - 89x, 0.2 req/min
autohalle24.de: 62 (8.4 req/min, seit 7m) ████████████████ shop3.example.com 🇪🇺: 312 (0.6 req/min, seit 8h 45m) ██████
└─➤ Top: 157.55.39.203 (Bingbot) - 15x, 2.0 req/min └─➤ Top: 194.26.192.64 (Unbekannt) - 67x, 0.1 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 🛡️ CrowdSec-Bans gesamt: 892
├─ shop1.example.com: 401 ████████████████ ├─ shop1.example.com 🇪🇺: 401 ████████████████
─ shop2.example.com: 298 ███████████ ─ shop2.example.com 🇩🇪🇦🇹🇨🇭: 298 ███████████
└─ shop3.example.com: 193 ███████
🔥 Top 100 blockierte IPs (alle Shops): 🔥 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] ████████████████████ 185.220.101.34 (GPTBot): 127 (0.2 req/min) → shop1.example.com [127x] █████████████████████████
157.55.39.203 (Bingbot): 85 (11.6 req/min) → gastro-shop-24.com [32x] █████████████████ 45.95.169.22 (SemrushBot): 89 (0.2 req/min) → shop2.example.com [89x] █████████████████
52.167.144.204 (Bingbot): 27 (3.7 req/min) → horchakustik-shop.de [12x] █████ 194.26.192.64 (Unbekannt): 67 (0.1 req/min) → shop3.example.com [45x] █████████████
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] █████
... ...
══════════════════════════════════════════════════════════════════════ ════════════════════════════════════════════════════════════════════════
``` ```
**Enthält:** **Enthält:**
- **PHP-Blocks gesamt** mit durchschnittlicher Request-Rate und Gesamtlaufzeit - PHP-Blocks pro Shop mit Geo-Region-Icon, req/min und Top-IP
- **Pro Shop**: Anzahl Blocks, req/min, Laufzeit seit Aktivierung, visueller Balken - CrowdSec-Bans pro Shop (nur für PHP+CrowdSec Shops)
- **Top-IP pro Shop**: Aktivste IP mit Bot-Name/User-Agent, Anzahl und req/min - Top 100 der am häufigsten blockierten IPs über alle Shops hinweg
- **CrowdSec-Bans** pro Shop (nur für PHP+CrowdSec Shops) - Bot-Erkennung (GPTBot, SemrushBot, Googlebot, etc.)
- **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 #### Option [1-n]: Einzelner Shop
Zeigt detaillierte Logs für einen spezifischen 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 ⏱️ Aktiviert: 2025-12-09 05:18:00
⏱️ Laufzeit: 1d 18h 45m ⏱️ Laufzeit: 9h 12m
📈 Blocks: 19243 (8.2 req/min) 📈 Blocks: 523 (1.2 req/min)
📝 Letzte 50 PHP-Blocks: 📝 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-09 14:24:57] IP: 202.8.43.232 | UA: Mozilla/5.0 ... | URI: /produkt-123
[2025-12-10 09:15:21] IP: 40.77.167.27 | UA: Mozilla/5.0 (compatible; bingbot/2.0) | URI: /kategorie
... ...
====================================================================== ======================================================================
Gesamt: 19243 Gesamt: 523
🔥 Top 20 blockierte IPs: 🔥 Top 20 blockierte IPs:
66.249.66.10 (Googlebot): 2341 (1.0 req/min) ████████████████████ 185.220.101.34 (GPTBot): 127 (0.2 req/min) █████████████████████████
40.77.167.27 (Bingbot): 892 (0.4 req/min) ████████████████████ 45.95.169.22 (SemrushBot): 89 (0.2 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: 🛡️ CrowdSec Decisions:
@@ -346,8 +412,8 @@ Gesamt: 19243
Aktive Bans: 401 Aktive Bans: 401
Letzte 20 Bans: Letzte 20 Bans:
🚫 202.8.43.232 (bis 2025-12-11 17:24:57) 🚫 202.8.43.232 (bis 2025-12-12 14:24:57)
🚫 45.95.169.22 (bis 2025-12-11 16:30:12) 🚫 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: Option `[4] Status anzeigen` zeigt:
- Anzahl verfügbarer Shops - Anzahl verfügbarer Shops
- Anzahl aktiver Blockings - 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: 📊 Status:
Shops gesamt: 41 Shops gesamt: 15
Aktive DACH-Blockings: 5 Aktive GeoIP-Blockings: 5
Grün = hinter Link11 | Rot = Direkt Grün = hinter Link11 | Rot = Direkt
air-suspension-parts.de [Link11] [PHP] 📝 - 426 blocks (57.9 req/min, 7m) shop1.example.com [Link11] 🇪🇺 [PHP+CS] 🛡️ - 523 blocks (1.2 req/min, 9h 12m)
gastro-shop-24.com [Direkt] [PHP+CS] 🛡️ - 172 blocks (23.4 req/min, 7m) shop2.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 [PHP] 📝 - 412 blocks (0.8 req/min, 8h 30m)
horchakustik-shop.de [Link11] [PHP] 📝 - 103 blocks (14.0 req/min, 7m) shop3.example.com [Link11] 🇪🇺 [PHP] 📝 - 312 blocks (0.6 req/min, 8h 45m)
itemstar-shop.de [Direkt] [PHP+CS] 🛡️ - 100 blocks (13.6 req/min, 7m) shop4.example.com [Direkt] 🇩🇪🇦🇹🇨🇭 [PHP+CS] 🛡️ - 201 blocks (0.4 req/min, 8h 15m)
leonessa.at [Link11] [PHP] 📝 - 39 blocks (5.3 req/min, 7m) shop5.example.com [Link11] 🇪🇺 [PHP] 📝 - 156 blocks (0.3 req/min, 8h 0m)
```
## 🤖 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
}
``` ```
## 🔧 Erweiterte Verwendung ## 🔧 Erweiterte Verwendung
@@ -481,7 +508,7 @@ cscli decisions delete --ip DEINE_IP
- `index.php.geoip_backup` - Backup der Original index.php - `index.php.geoip_backup` - Backup der Original index.php
- `geoip_blocking.php` - PHP-Blocking-Script - `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_blocked.log` - Log der PHP-Level Blocks
- `geoip_crowdsec_queue.log` - Queue für CrowdSec-Synchronisation (nur PHP+CrowdSec Modus) - `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 - `/usr/local/bin/geoip_crowdsec_watcher.py` - Watcher-Service Script
- `/etc/systemd/system/geoip-crowdsec-watcher.service` - Systemd Service - `/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 ## ⚙️ Konfiguration
@@ -502,21 +529,11 @@ Standardmäßig 72 Stunden. Zum Ändern editiere das Python-Script:
expiry = datetime.now() + timedelta(hours=72) # Hier ändern expiry = datetime.now() + timedelta(hours=72) # Hier ändern
``` ```
Und im PHP-Script Template:
```python
# Zeile ~30-50
GEOIP_SCRIPT = '''<?php
// Auto-disable after 72 hours
$expiry_date = strtotime('{expiry_timestamp}');
'''
```
### Watcher-Intervall ändern ### Watcher-Intervall ändern
Standard: 5 Sekunden. Zum Ändern im Watcher-Script: Standard: 5 Sekunden. Zum Ändern im Watcher-Script:
```python ```python
# Zeile ~140
CHECK_INTERVAL = 5 # In Sekunden CHECK_INTERVAL = 5 # In Sekunden
``` ```
@@ -528,36 +545,38 @@ Standard: 24 Stunden. Im PHP-Script:
$cache_duration = 86400; // In Sekunden $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 ### Weitere Länder hinzufügen
Um weitere Länder zur Whitelist hinzuzufügen, editiere im Python-Script das PHP-Template. Suche nach: Um weitere Länder zu einer Region hinzuzufügen, editiere im Python-Script das `GEO_REGIONS` Dictionary:
```php ```python
$countries = ['de', 'at', 'ch']; // Germany, Austria, Switzerland GEO_REGIONS = {
"dach": {
"name": "DACH",
"countries": ["de", "at", "ch"], # Hier Länder hinzufügen
...
},
"eurozone": {
"name": "Eurozone + GB",
"countries": ["de", "at", "ch", "be", ...], # Hier Länder hinzufügen
...
}
}
``` ```
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/ Die verfügbaren Ländercodes findest du unter: https://www.ipdeny.com/ipblocks/data/aggregated/
## 🛡️ Sicherheit ## 🛡️ Sicherheit
### Was wird geblockt? ### Was wird geblockt?
- ✅ Alle IPs außerhalb der DACH IP-Ranges (DE, AT, CH) - ✅ Alle IPs außerhalb der gewählten Region
- ✅ Auf PHP-Ebene: Sofortiger 403 Response - ✅ Auf PHP-Ebene: Sofortiger 403 Response
- ✅ Auf Firewall-Ebene (nur PHP+CrowdSec): Alle Ports (HTTP, HTTPS, SSH, FTP, etc.) - ✅ Auf Firewall-Ebene (nur PHP+CrowdSec): Alle Ports (HTTP, HTTPS, SSH, FTP, etc.)
### Was wird NICHT geblockt? ### Was wird NICHT geblockt?
- ✅ Alle IPs aus Deutschland, Österreich und der Schweiz (basierend auf RIPE/ipdeny.com Daten) - ✅ Alle IPs aus der gewählten Region (basierend auf RIPE/ipdeny.com Daten)
- ✅ Private IPs (192.168.x.x, 10.x.x.x, etc.) - ✅ Private IPs (192.168.x.x, 10.x.x.x, etc.)
- ✅ Localhost (127.0.0.1) - ✅ Localhost (127.0.0.1)
@@ -566,16 +585,11 @@ Füge weitere Ländercodes hinzu (z.B. `'nl'` für Niederlande, `'be'` für Belg
Das System nutzt die **offiziellen IP-Zuweisungen** von ipdeny.com: Das System nutzt die **offiziellen IP-Zuweisungen** von ipdeny.com:
- Basiert auf RIPE-Daten - Basiert auf RIPE-Daten
- Täglich aktualisiert - Täglich aktualisiert
- Umfasst alle DACH-Provider (Telekom, Vodafone, A1, Swisscom, etc.) - Umfasst alle Provider der Region
- Präzise CIDR-Prüfung - Präzise CIDR-Prüfung
**Risiko für Fehlblockierungen: Minimal** **Risiko für Fehlblockierungen: Minimal**
DACH-IPs können nur geblockt werden, wenn:
1. Der Provider die IP-Range außerhalb der DACH-Region registriert hat (extrem selten)
2. Die IP über einen ausländischen VPN/Proxy kommt
3. Die ipdeny.com Daten veraltet sind (wird täglich aktualisiert)
## 🌐 CDN/Reverse-Proxy Hinweise ## 🌐 CDN/Reverse-Proxy Hinweise
### Problem bei CDN-Nutzung (Link11, Cloudflare, etc.) ### Problem bei CDN-Nutzung (Link11, Cloudflare, etc.)
@@ -599,23 +613,17 @@ 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**. **Empfehlung für CDN-Nutzer:** Wähle bei der Aktivierung den Modus **[2] Nur PHP**.
### Link11-Erkennung nutzen ### Link11-Erkennung
Das Script erkennt automatisch Shops hinter Link11: Das Script erkennt automatisch, ob ein Shop hinter Link11 steht:
- **Grün `[Link11]`** = Shop hinter Link11 → PHP-only Modus empfohlen - **Grün** = Shop löst auf Link11-IP auf (128.65.223.106)
- **Rot `[Direkt]`** = Shop direkt erreichbar → PHP+CrowdSec möglich - **Rot** = Shop ist direkt erreichbar
### Prüfen ob CDN aktiv ist ```
📋 Verfügbare Shops:
```bash Grün = hinter Link11 | Rot = Direkt
# Welche IPs verbinden sich zu nginx/Apache? [1] shop1.example.com [Link11]
ss -tn state established '( sport = :80 or sport = :443 )' | head -20 [2] shop2.example.com [Direkt]
# 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 ## 🐛 Troubleshooting
@@ -668,7 +676,7 @@ cscli decisions delete --ip 1.2.3.4
**Mögliche Ursachen:** **Mögliche Ursachen:**
1. **CDN/Reverse-Proxy aktiv** → Wechsle zu PHP-only Modus (nutze Link11-Erkennung!) 1. **CDN/Reverse-Proxy aktiv** → Wechsle zu PHP-only Modus
2. **Bouncer läuft nicht:** 2. **Bouncer läuft nicht:**
```bash ```bash
systemctl status crowdsec-firewall-bouncer systemctl status crowdsec-firewall-bouncer
@@ -678,56 +686,31 @@ cscli decisions delete --ip 1.2.3.4
iptables -L -n -v | grep crowdsec iptables -L -n -v | grep crowdsec
``` ```
### DACH-IPs werden geblockt ### IPs aus erlaubter Region werden geblockt
**Sehr unwahrscheinlich!** Aber falls doch: **Sehr unwahrscheinlich!** Aber falls doch:
```bash ```bash
# Prüfe welche IP-Ranges als DACH erkannt werden # Prüfe welche IP-Ranges als erlaubt erkannt werden
cat /var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache cat /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
# Lösche Cache (wird neu geladen) # Lösche Cache (wird neu geladen)
rm /var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache rm /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
# Prüfe ob IP in DACH-Ranges ist
php -r '
$ip = "91.107.229.191";
$ranges = unserialize(file_get_contents("/var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache"));
foreach($ranges as $range) {
list($subnet, $mask) = explode("/", $range);
$ip_long = ip2long($ip);
$subnet_long = ip2long($subnet);
$mask_long = -1 << (32 - (int)$mask);
if(($ip_long & $mask_long) == ($subnet_long & $mask_long)) {
echo "IP $ip ist in Range $range\n";
}
}
'
``` ```
### Cleanup nach Deaktivierung unvollständig ### Migration von der alten DACH-Only Version
```bash Falls du von der alten Version (nur DACH) auf die neue Version mit Regionsauswahl wechselst:
# Manuelle Bereinigung aller GeoIP-Decisions (Einzeiler mit Fortschritt)
while cscli decisions list -o raw --limit 0 | grep -q "GeoIP"; do cscli decisions list -o raw --limit 0 | grep "GeoIP" | cut -d',' -f3 | cut -d':' -f2 | while read ip; do echo "🗑️ Lösche: $ip"; cscli decisions delete --ip "$ip" 2>/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:
```bash ```bash
# 1. Alle aktiven Shops deaktivieren (alte Version) # 1. Alle aktiven Shops deaktivieren (alte Version)
python3 geoip_shop_manager_old.py # Option 2 für jeden Shop python3 geoip_shop_manager_old.py # Option 2 für jeden Shop
# 2. Alte Cache-Dateien löschen # 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 # 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 ## 📊 Performance
@@ -735,9 +718,11 @@ python3 geoip_shop_manager.py # Shops wieder aktivieren
### PHP-Level Blocking ### PHP-Level Blocking
- **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges) - **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 - **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) ### 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 chmod +x geoip_shop_manager.py
``` ```
**WICHTIG**: Bereits aktive Shops bleiben unberührt. Der Watcher-Service muss manuell aktualisiert werden: **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
```
### IP-Ranges aktualisieren ### IP-Ranges aktualisieren
```bash ```bash
# Cache löschen (wird automatisch neu geladen) # 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. Die Ranges werden automatisch alle 24h aktualisiert.
@@ -824,8 +801,8 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
### Vor Aktivierung ### Vor Aktivierung
1. ✅ Backup erstellen (macht das Script automatisch) 1. ✅ Backup erstellen (macht das Script automatisch)
2. ✅ Sicherstellen, dass Admin-Zugriff aus DACH-Region kommt 2. ✅ Sicherstellen, dass Admin-Zugriff aus erlaubter Region kommt
3. ✅ **Link11-Status prüfen** (grün = PHP-only empfohlen) 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) 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) 5. ✅ Test mit kurzer Dauer (kann im Script angepasst werden)
6. ✅ Monitoring einrichten 6. ✅ Monitoring einrichten
@@ -833,12 +810,9 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
### Während aktivem Blocking ### Während aktivem Blocking
1. ✅ Logs regelmäßig prüfen (Gesamtübersicht nutzen!) 1. ✅ Logs regelmäßig prüfen (Gesamtübersicht nutzen!)
2. ✅ **req/min beobachten** - hohe Werte können auf Angriffe hindeuten 2. ✅ Auf Fehlblockierungen achten (sehr selten)
3. ✅ **Bot-Traffic analysieren** - welche Crawler werden geblockt? 3. ✅ CrowdSec-Statistiken beobachten (nur bei PHP+CrowdSec)
4. ✅ **Top-IPs pro Shop prüfen** - ungewöhnliche Aktivität erkennen 4. ✅ Server-Performance monitoren
5. ✅ Auf Fehlblockierungen achten (sehr selten)
6. ✅ CrowdSec-Statistiken beobachten (nur bei PHP+CrowdSec)
7. ✅ Server-Performance monitoren
### Nach Deaktivierung ### 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 - **API-Calls**: Bei vielen aktiven Shops könnten viele IPs in CrowdSec landen
- **CrowdSec-Limits**: Kostenloser Tier hat API-Limits - **CrowdSec-Limits**: Kostenloser Tier hat API-Limits
- **Netzwerk**: Kein Blocking möglich, wenn Server selbst unter DDoS steht - **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 ### Empfehlungen
@@ -867,9 +841,8 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
- ✅ Nicht als permanente Lösung - ✅ Nicht als permanente Lösung
- ✅ Kombinieren mit anderen Security-Maßnahmen - ✅ Kombinieren mit anderen Security-Maßnahmen
- ✅ Regelmäßig Logs prüfen (Gesamtübersicht für schnellen Überblick) - ✅ 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 - ✅ Bei CDN: PHP-only Modus verwenden
- ✅ Region passend zum Shop wählen
## 🤝 Contributing ## 🤝 Contributing
@@ -889,7 +862,6 @@ MIT License - siehe LICENSE Datei
- **IP-Ranges**: [ipdeny.com](https://www.ipdeny.com/) (RIPE-basiert) - **IP-Ranges**: [ipdeny.com](https://www.ipdeny.com/) (RIPE-basiert)
- **CrowdSec**: [crowdsec.net](https://www.crowdsec.net/) - **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 - **Entwickelt für**: Plesk-basierte Multi-Shop-Server
## 📞 Support ## 📞 Support
@@ -902,8 +874,8 @@ Bei Problemen:
- Fehlerbeschreibung - Fehlerbeschreibung
- Relevante Logs - Relevante Logs
- System-Infos (OS, PHP-Version, CrowdSec-Version) - System-Infos (OS, PHP-Version, CrowdSec-Version)
- **Gewählte Region** (DACH oder Eurozone+GB)
- **Verwendeter Modus** (PHP+CrowdSec oder PHP-only) - **Verwendeter Modus** (PHP+CrowdSec oder PHP-only)
- **Link11-Status** der betroffenen Shops
## 📚 Weitere Dokumentation ## 📚 Weitere Dokumentation
@@ -914,30 +886,20 @@ Bei Problemen:
--- ---
**Version**: 2.4.0 (DACH) **Version**: 3.0.0
**Letztes Update**: Dezember 2025 **Letztes Update**: Dezember 2025
**Status**: Production Ready ✅ **Status**: Production Ready ✅
**Erlaubte Länder**: 🇩🇪 Deutschland | 🇦🇹 Österreich | 🇨🇭 Schweiz **Verfügbare Regionen**: 🇩🇪🇦🇹🇨🇭 DACH (3 Länder) | 🇪🇺 Eurozone+GB (22 Länder)
### Changelog ### Changelog
#### v2.4.0 #### v3.0.0
- **NEU**: Link11-Erkennung mit farbiger Anzeige (Grün = hinter Link11, Rot = Direkt) - **NEU**: Geo-Region-Auswahl bei Aktivierung (DACH oder Eurozone+GB)
- **NEU**: DNS-Check für automatische CDN-Erkennung - **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**: Top-IP pro Shop in Gesamtübersicht mit Bot-Name/User-Agent und req/min - **NEU**: Geo-Region-Icon in Status, Logs und allen Menüs (🇩🇪🇦🇹🇨🇭 / 🇪🇺)
- **NEU**: req/min für jede IP in Top 100 Liste - **NEU**: Pro-Shop Geo-Region-Tracking (verschiedene Shops können verschiedene Regionen haben)
- **NEU**: User-Agent-Anzeige statt "Unbekannt" bei nicht erkannten Bots - Umbenannt von "DACH Version" zu "GeoIP Shop Blocker Manager"
- **NEU**: Shop-Zuordnung bei Top 100 IPs (welcher Shop am meisten betroffen) - Cache-Datei umbenannt von `dach_ip_ranges.cache` zu `geoip_ip_ranges.cache`
- 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
#### v2.2.0 #### v2.2.0
- **NEU**: Modus-Auswahl bei Aktivierung (PHP+CrowdSec 🛡️ oder Nur PHP 📝) - **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**: Modus-Anzeige in Status, Logs und Deaktivierungs-Menü
- **NEU**: Automatische Erkennung ob CrowdSec-Cleanup nötig ist - **NEU**: Automatische Erkennung ob CrowdSec-Cleanup nötig ist
- **NEU**: Top 100 blockierte IPs (statt Top 10) in Gesamtübersicht - **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 - **FIX**: CrowdSec Cleanup nutzt jetzt `--limit 0` für vollständige Löschung
- Verbesserte Dokumentation zu CDN/Proxy-Szenarien - Verbesserte Dokumentation zu CDN/Proxy-Szenarien