README.md aktualisiert

This commit is contained in:
2025-12-09 08:27:51 +01:00
parent 91f86c76e5
commit a59d4945fa

229
README.md
View File

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