README.md aktualisiert
This commit is contained in:
543
README.md
543
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 = '''<?php
|
||||
// Auto-disable after 72 hours
|
||||
$expiry_date = strtotime('{expiry_timestamp}');
|
||||
'''
|
||||
```
|
||||
|
||||
### Watcher-Intervall ändern
|
||||
|
||||
Standard: 5 Sekunden. Zum Ändern im Watcher-Script:
|
||||
|
||||
```python
|
||||
# Zeile ~140
|
||||
CHECK_INTERVAL = 5 # In Sekunden
|
||||
```
|
||||
|
||||
@@ -528,36 +545,38 @@ 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:
|
||||
Um weitere Länder zu einer Region hinzuzufügen, editiere im Python-Script das `GEO_REGIONS` Dictionary:
|
||||
|
||||
```php
|
||||
$countries = ['de', 'at', 'ch']; // Germany, Austria, Switzerland
|
||||
```python
|
||||
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
|
||||
|
||||
### 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 Firewall-Ebene (nur PHP+CrowdSec): Alle Ports (HTTP, HTTPS, SSH, FTP, etc.)
|
||||
|
||||
### 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.)
|
||||
- ✅ 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:
|
||||
- Basiert auf RIPE-Daten
|
||||
- Täglich aktualisiert
|
||||
- Umfasst alle DACH-Provider (Telekom, Vodafone, A1, Swisscom, etc.)
|
||||
- Umfasst alle Provider der Region
|
||||
- Präzise CIDR-Prüfung
|
||||
|
||||
**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
|
||||
|
||||
### 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**.
|
||||
|
||||
### Link11-Erkennung nutzen
|
||||
### Link11-Erkennung
|
||||
|
||||
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
|
||||
Das Script erkennt automatisch, ob ein Shop hinter Link11 steht:
|
||||
- **Grün** = Shop löst auf Link11-IP auf (128.65.223.106)
|
||||
- **Rot** = Shop ist direkt erreichbar
|
||||
|
||||
### Prüfen ob CDN aktiv ist
|
||||
|
||||
```bash
|
||||
# Welche IPs verbinden sich zu nginx/Apache?
|
||||
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
|
||||
```
|
||||
📋 Verfügbare Shops:
|
||||
Grün = hinter Link11 | Rot = Direkt
|
||||
[1] shop1.example.com [Link11]
|
||||
[2] shop2.example.com [Direkt]
|
||||
```
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
@@ -668,7 +676,7 @@ cscli decisions delete --ip 1.2.3.4
|
||||
|
||||
**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:**
|
||||
```bash
|
||||
systemctl status crowdsec-firewall-bouncer
|
||||
@@ -678,56 +686,31 @@ cscli decisions delete --ip 1.2.3.4
|
||||
iptables -L -n -v | grep crowdsec
|
||||
```
|
||||
|
||||
### DACH-IPs werden geblockt
|
||||
### IPs aus erlaubter Region werden geblockt
|
||||
|
||||
**Sehr unwahrscheinlich!** Aber falls doch:
|
||||
|
||||
```bash
|
||||
# Prüfe welche IP-Ranges als DACH erkannt werden
|
||||
cat /var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache
|
||||
# Prüfe welche IP-Ranges als erlaubt erkannt werden
|
||||
cat /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
|
||||
|
||||
# Lösche Cache (wird neu geladen)
|
||||
rm /var/www/vhosts/SHOP/httpdocs/dach_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";
|
||||
}
|
||||
}
|
||||
'
|
||||
rm /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
|
||||
```
|
||||
|
||||
### Cleanup nach Deaktivierung unvollständig
|
||||
### Migration von der alten DACH-Only Version
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user