README.md aktualisiert

This commit is contained in:
2025-12-16 16:51:38 +01:00
parent 19dce667f7
commit c21d62a27a

457
README.md
View File

@@ -1,25 +1,27 @@
# GeoIP Shop Blocker Manager - DACH & Eurozone Version # GeoIP Shop Blocker Manager - DACH & Eurozone Version
**PHP-basiertes System für temporäres GeoIP-Blocking und Bot-Rate-Limiting auf Plesk-Servern** **PHP-basiertes GeoIP-Blocking und Bot-Rate-Limiting für Plesk-Server 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 konfigurierten Region zu sperren, oder Bots nach Bot-Typ zu rate-limitieren. Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temporär für alle Zugriffe außerhalb der konfigurierten Region zu sperren, oder Bots per Rate-Limiting zu bremsen.
## 🎯 Features ## 🎯 Features
-**Flexible Regionen**: DACH (DE, AT, CH) oder Eurozone+GB (22 Länder)
-**Bot-Rate-Limiting nach Bot-Typ**: Alle Requests eines Bot-Typs teilen sich EIN Limit
-**Umfangreiche Bot-Erkennung**: 321 bekannte Bot-Patterns + 32 generische Fallback-Patterns
-**Präzises Blocking**: PHP prüft gegen vollständige IP-Ranges (keine Fehlblockierungen)
-**Zwei Modi**: GeoIP-Blocking oder Bot-Rate-Limiting -**Zwei Modi**: GeoIP-Blocking oder Bot-Rate-Limiting
-**Flexible Regionen**: DACH (DE, AT, CH) oder Eurozone+GB (22 Länder)
-**Bot-Rate-Limiting**: Bots unter Limit durchlassen, bei Überschreitung temporär bannen
-**Rate-Limiting nach Bot-Typ**: Alle IPs eines Bot-Typs teilen sich EIN Limit
-**IP-basierte Bot-Erkennung**: Erkennt getarnte Bots anhand ihrer IP-Ranges (z.B. Alibaba)
-**Umfangreiche Bot-Erkennung**: 321 bekannte Bot-Patterns + 32 generische Fallback-Patterns
-**Präzises GeoIP-Blocking**: PHP prüft gegen vollständige IP-Ranges (keine Fehlblockierungen)
-**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
-**Link11-Erkennung**: Automatische Erkennung ob Shop hinter Link11 CDN steht -**Link11-Erkennung**: Automatische Erkennung ob Shop hinter Link11 CDN steht
-**Nur direkte Shops**: Option um nur Shops ohne CDN-Schutz zu aktivieren -**Nur direkte Shops**: Option um nur Shops ohne CDN-Schutz zu aktivieren
-**Gesamtübersicht**: Logs und Statistiken über alle Shops hinweg -**Gesamtübersicht**: Logs und Statistiken über alle Shops hinweg (Top 50 IPs)
-**Auto-Deaktivierung**: Blocking läuft nach 72 Stunden automatisch ab -**Auto-Deaktivierung**: Blocking läuft nach 72 Stunden automatisch ab
-**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**: Funktioniert mit Link11, Cloudflare & Co. -**CDN-kompatibel**: Funktioniert auch hinter Link11, Cloudflare & Co.
-**Fail-Open**: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle) -**Fail-Open**: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle)
## 🏗️ Architektur ## 🏗️ Architektur
@@ -29,65 +31,75 @@ Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temp
- PHP-Script wird in die `index.php` des Shops integriert - PHP-Script wird in die `index.php` des Shops integriert
- Lädt IP-Ranges von ipdeny.com (konfigurierte Länder) - Lädt IP-Ranges von ipdeny.com (konfigurierte Länder)
- Prüft jede Anfrage gegen diese Ranges - Prüft jede Anfrage gegen diese Ranges
- Blockt nicht-erlaubte IPs sofort mit HTTP 403 - Blockt Nicht-erlaubte IPs sofort mit HTTP 403
- Loggt alle Blocks - Cache wird alle 24 Stunden erneuert
**Anwendungsfall**: Shop soll nur aus bestimmten Ländern erreichbar sein.
### Modus 2: Bot-Rate-Limiting 🤖 ### Modus 2: Bot-Rate-Limiting 🤖
- Shop bleibt weltweit erreichbar - Shop bleibt weltweit erreichbar
- Erkennt Bots anhand von User-Agent Patterns - Bots werden erkannt per:
- **Rate-Limit gilt PRO BOT-TYP** (nicht pro IP!) 1. IP-Ranges (für getarnte Bots wie Alibaba)
- Alle Googlebot-Requests teilen sich EIN Limit 2. User-Agent Patterns (321 bekannte Bots)
- Bei Überschreitung: Gesamter Bot-Typ wird temporär gebannt 3. Generische Patterns (bot, crawler, spider, etc.)
- **Alle IPs eines Bot-Typs teilen sich EIN Rate-Limit**
- Bots unter dem Limit werden durchgelassen
- Bei Überschreitung: temporärer Ban für den gesamten Bot-Typ
## 🚦 Rate-Limiting (Bot-Only Modus) **Anwendungsfall**: Shop soll weltweit erreichbar bleiben, aber Bots sollen gebremst werden.
## 🚦 Rate-Limiting (Bot-Modus)
### Funktionsweise ### Funktionsweise
Das Rate-Limiting funktioniert **nach Bot-Typ, nicht nach IP**:
``` ```
Bot-Request kommt rein Request kommt rein
┌───────────────────┐ ┌───────────────────────
Bot-Typ gebannt? │──── Ja ───▶ 403 + Exit (sofort) IP in Bot-IP-Ranges? │──── Ja ───▶ Bot-Typ erkannt (z.B. "Alibaba-Bot")
└─────────────────── └───────────────────────┘ │
│ Nein │
▼ │
┌───────────────────────┐ │
│ User-Agent Pattern? │──── Ja ───▶ Bot-Typ erkannt ◀────┘
└───────────────────────┘
│ Nein │ Nein
┌───────────────────┐ ┌───────────────────────
Bot erkannt? │──── Nein ──▶ Weiter (normaler Traffic) Generisches Pattern? │──── Ja ──Bot-Typ erkannt
└───────────────────┘ └───────────────────────
Ja Nein
┌───────────────────┐ Normaler User ──────▶ Weiter (kein Limit)
│ Bot-Typ Counter │
│ erhöhen
│ Limit erreicht? │──── Ja ───▶ Bot-Typ bannen + 403 ▼ (Bot erkannt)
─────────────────── ┌───────────────────────
│ Bot-Typ gebannt? │──── Ja ───▶ 403 Forbidden
└───────────────────────┘
│ Nein
┌───────────────────────┐
│ Counter für Bot-Typ │
│ erhöhen. Limit? │──── Ja ───▶ Ban für Bot-Typ + 403
└───────────────────────┘
│ Nein │ Nein
Log + Weiter ✅ Log + Weiter ✅
(Bot darf durch!)
``` ```
### Wichtig: Rate-Limit pro Bot-Typ **Wichtig**:
- Bots werden **nicht** sofort geblockt! Sie dürfen crawlen, solange sie unter dem Limit bleiben.
- **Alle IPs eines Bot-Typs teilen sich EIN Limit!** Z.B. 100 verschiedene Googlebot-IPs = 1 gemeinsames Limit.
- Getarnte Bots (wie Alibaba) werden anhand ihrer IP-Ranges erkannt, unabhängig vom User-Agent.
**Alle Requests eines Bot-Typs teilen sich EINEN Zähler**, unabhängig von: ### Konfiguration
- Der IP-Adresse
- Der genauen User-Agent Variante
Beispiel mit Limit 30 req/min: Bei Aktivierung werden zwei Werte abgefragt:
| Request | IP | User-Agent | Bot-Typ | Zähler |
|---------|-----|-----------|---------|--------|
| 1 | 1.1.1.1 | Googlebot/2.1 | Googlebot | 1/30 |
| 2 | 2.2.2.2 | Googlebot/2.1 (+http...) | Googlebot | 2/30 |
| 3 | 3.3.3.3 | Googlebot-Image/1.0 | Googlebot-Image | 1/30 |
| ... | ... | ... | ... | ... |
| 31 | 99.99.99.99 | Googlebot/2.1 | Googlebot | **31/30 → BAN** |
Nach dem Ban werden **ALLE** Googlebot-Requests geblockt (egal welche IP).
### Konfiguration bei Aktivierung
``` ```
🚦 Rate-Limit Konfiguration: 🚦 Rate-Limit Konfiguration:
@@ -95,55 +107,66 @@ Nach dem Ban werden **ALLE** Googlebot-Requests geblockt (egal welche IP).
⚠️ ACHTUNG: Limit gilt pro Bot-TYP, nicht pro IP! ⚠️ ACHTUNG: Limit gilt pro Bot-TYP, nicht pro IP!
Requests pro Minute bevor Ban [30]: Requests pro Minute bevor Ban [30]:
Ban-Dauer in Minuten [5]: Ban-Dauer in Minuten [5]:
✅ Rate-Limit: 30 req/min pro Bot-Typ
✅ Ban-Dauer: 5 Minuten
``` ```
### Technische Details - **Requests pro Minute**: Wie viele Requests ein Bot-Typ pro Minute machen darf (Default: 30)
- **Ban-Dauer**: Wie lange ein Bot-Typ nach Überschreitung gebannt wird (Default: 5 Minuten)
- **Identifier**: MD5-Hash des erkannten Bot-Namens (z.B. `md5("Googlebot")`) ## 🌐 IP-basierte Bot-Erkennung
- **Speicherung**: File-basiert in `geoip_ratelimit/` Verzeichnis
- **Ban-Format**: `timestamp|botname` (ermöglicht Anzeige des Bot-Namens)
- **Cleanup**: Probabilistisch (1% der Requests) um Overhead zu minimieren
- **Atomare Operationen**: File-Locking verhindert Race Conditions
### Verzeichnisstruktur ### Problem: Getarnte Bots
Manche Bots (z.B. von Alibaba Cloud) tarnen sich mit einem normalen Browser User-Agent:
``` ```
httpdocs/ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
├── geoip_ratelimit/
│ ├── bans/
│ │ └── {bot_hash}.ban # Format: unix_timestamp|bot_name
│ └── counts/
│ └── {bot_hash}.count # Format: window_start|count
``` ```
Diese wären normalerweise nicht als Bots erkennbar. **ABER**: Sie kommen immer aus bestimmten IP-Bereichen!
### Lösung: BOT_IP_RANGES
Das Script enthält eine Liste bekannter Bot-IP-Ranges. Aktuell für Alibaba:
| Block | Abdeckung | IPs |
|-------|-----------|-----|
| `43.0.0.0/9` | Alibaba Cloud Singapore | ~8.3 Mio |
| `8.128.0.0/10` | Alibaba Cloud Singapore | ~4.2 Mio |
| `8.208.0.0/12` | Alibaba Cloud Global | ~1 Mio |
| + 34 weitere | China, HK, etc. | mehrere Mio |
**Gesamt**: ~20 Millionen IPs werden als "Alibaba-Bot" erkannt.
### Erkennungsreihenfolge
1. **IP-Check (höchste Priorität)**: Liegt die IP in einem bekannten Bot-Netz?
2. **User-Agent Patterns**: Enthält der User-Agent ein bekanntes Bot-Pattern?
3. **Generische Patterns**: Enthält der User-Agent generische Bot-Begriffe?
## 🤖 Erkannte Bot-Patterns ## 🤖 Erkannte Bot-Patterns
Das System erkennt **321 verschiedene Bots** in 12 Kategorien, plus **32 generische Fallback-Patterns** für unbekannte Bots. Das System erkennt **321 verschiedene Bots** in 12 Kategorien, plus **32 generische Fallback-Patterns**.
### Bot-Kategorien ### Bot-Kategorien
| Kategorie | Anzahl | Beispiele | | Kategorie | Anzahl | Beispiele |
|-----------|--------|-----------| |-----------|--------|-----------|
| **AI/LLM Services** | 61 | ChatGPT-User, GPTBot, ClaudeBot, Anthropic, PerplexityBot, Gemini-Deep-Research, Google-NotebookLM, Cohere, MistralAI, DeepSeekBot, Bytespider, HuggingFace, Diffbot, BedrockBot, Firecrawl, Crawl4AI | | **AI/LLM Services** | 61 | ChatGPT-User, GPTBot, ClaudeBot, Anthropic, PerplexityBot, Gemini, Cohere, MistralAI, DeepSeekBot, Bytespider, HuggingFace, Diffbot, BedrockBot, Firecrawl, Crawl4AI |
| **Suchmaschinen** | 36 | Googlebot, Googlebot-Image/Video/News, Google-Extended, Bingbot, BingPreview, MSNBot, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, QwantBot, PetalBot | | **Suchmaschinen** | 36 | Googlebot, Googlebot-Image/Video/News, Google-Extended, Bingbot, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, PetalBot |
| **SEO & Marketing** | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot, Linkdex, SearchmetricsBot | | **SEO & Marketing** | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot |
| **Social Media** | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, Instagram, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot, Snapchat | | **Social Media** | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot |
| **E-Commerce** | 15 | Amazonbot, Amazon-Kendra, AmazonBuyForMe, Shopify, Idealo, Billiger.de, Guenstiger.de, Ladenzeile, Kelkoo, PriceRunner, PriceGrabber | | **E-Commerce** | 18 | Amazonbot, **Alibaba-Bot**, AlibabaSpider, Aliyun, Shopify, Idealo, Billiger.de, Guenstiger.de, Ladenzeile, Kelkoo, PriceRunner |
| **Archiv & Research** | 6 | Archive.org Bot, Internet Archive, Wayback Machine, Heritrix, Apache Nutch, Common Crawl | | **Archiv & Research** | 6 | Archive.org Bot, Internet Archive, Wayback Machine, Heritrix, Apache Nutch, Common Crawl |
| **Monitoring & Uptime** | 9 | UptimeRobot, Pingdom, StatusCake, Site24x7, NewRelic, Datadog, GTmetrix, PageSpeed Insights, Chrome Lighthouse | | **Monitoring & Uptime** | 9 | UptimeRobot, Pingdom, StatusCake, Site24x7, NewRelic, Datadog, GTmetrix, PageSpeed Insights |
| **Download & Scraper** | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, Harvest, Collector, WebZIP, BlackWidow | | **Download & Scraper** | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, WebZIP, BlackWidow |
| **HTTP Libraries** | 32 | Python-Requests, Python-urllib, cURL, Wget, Go-HTTP-Client, Axios, Node-Fetch, Scrapy, OkHttp, Guzzle, libwww-perl, Mechanize | | **HTTP Libraries** | 32 | Python-Requests, cURL, Wget, Go-HTTP-Client, Axios, Node-Fetch, Scrapy, OkHttp, Guzzle |
| **Security Scanner** | 11 | Nessus, SQLMap, Netsparker, Nikto, Acunetix, Burp Suite, OWASP ZAP, OpenVAS, Nmap, Masscan, WPScan | | **Security Scanner** | 11 | Nessus, SQLMap, Netsparker, Nikto, Acunetix, Burp Suite, OWASP ZAP, Nmap, WPScan |
| **Headless & Automation** | 7 | PhantomJS, Headless Chrome, Selenium, Puppeteer, Playwright, Cypress | | **Headless & Automation** | 7 | PhantomJS, Headless Chrome, Selenium, Puppeteer, Playwright, Cypress |
| **Feed Reader & RSS** | 5 | FeedFetcher, FeedParser, Feedly, Inoreader, NewsBlur | | **Feed Reader & RSS** | 5 | FeedFetcher, FeedParser, Feedly, Inoreader, NewsBlur |
| **Weitere Bots** | 55 | OmgiliBot, Webzio, Linguee, QuillBot, TurnitinBot, Brandwatch, Meltwater, BitlyBot, Mail.ru Bot, und viele mehr | | **Weitere Bots** | 55+ | OmgiliBot, Webzio, Linguee, QuillBot, TurnitinBot, Brandwatch, Meltwater, BitlyBot, etc. |
### Generische Fallback-Patterns ### Generische Fallback-Patterns
Falls ein Bot nicht in der spezifischen Liste ist, wird er trotzdem erkannt wenn sein User-Agent eines dieser Schlüsselwörter enthält: Falls ein Bot nicht in der spezifischen Liste ist, wird er erkannt wenn sein User-Agent eines dieser Wörter enthält:
``` ```
bot, crawler, spider, scraper, fetch, scan, check, monitor, probe, index, bot, crawler, spider, scraper, fetch, scan, check, monitor, probe, index,
@@ -157,7 +180,7 @@ Diese werden dann als `Bot (crawler)`, `Bot (spider)`, etc. angezeigt.
## 📋 Voraussetzungen ## 📋 Voraussetzungen
- **Betriebssystem**: Ubuntu Server (getestet auf 24.04) - **Betriebssystem**: Ubuntu Server (getestet auf 24.04)
- **Webserver**: Apache mit mod_rewrite (oder nginx) - **Webserver**: Apache oder nginx
- **PHP**: Version 8.0 oder höher - **PHP**: Version 8.0 oder höher
- **Python**: Version 3.8 oder höher - **Python**: Version 3.8 oder höher
- **Plesk**: Optional, aber empfohlen - **Plesk**: Optional, aber empfohlen
@@ -188,28 +211,28 @@ Das war's! Das Script ist vollständig selbstverwaltend.
``` ```
============================================================ ============================================================
GeoIP Shop Blocker Manager v4.0.0 GeoIP Shop Blocker Manager v4.1.0
🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting
🛡️ Mit Cache-Validierung und Fail-Open 🛡️ Mit Cache-Validierung und Fail-Open
🚦 Rate-Limiting nach BOT-TYP (nicht IP) 🚦 Rate-Limiting nach BOT-TYP (nicht IP)
🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s)
============================================================ ============================================================
----------------------------------------
[1] Aktivieren (einzeln) [1] Aktivieren (einzeln)
[2] Deaktivieren (einzeln) [2] Deaktivieren (einzeln)
[3] Logs anzeigen [3] Logs anzeigen
[4] Status [4] Status
──────────────────────────────────────── ----------------------------------------
[5] 🚀 ALLE aktivieren [5] 🚀 ALLE aktivieren
[6] 🛑 ALLE deaktivieren [6] 🛑 ALLE deaktivieren
[7] 🎯 Nur DIREKTE aktivieren (ohne Link11) [7] 🎯 Nur DIREKTE aktivieren (ohne Link11)
──────────────────────────────────────── ----------------------------------------
[0] Beenden [0] Beenden
``` ```
### Modus-Auswahl ### Modus-Auswahl
Bei jeder Aktivierung wird nach dem Modus gefragt:
``` ```
🔧 Wähle den Blocking-Modus: 🔧 Wähle den Blocking-Modus:
[1] 🌍 GeoIP-Blocking (nur erlaubte Regionen) [1] 🌍 GeoIP-Blocking (nur erlaubte Regionen)
@@ -218,14 +241,6 @@ Bei jeder Aktivierung wird nach dem Modus gefragt:
Modus wählen [1/2]: Modus wählen [1/2]:
``` ```
**Wann welchen Modus wählen?**
| Situation | Empfohlener Modus |
|-----------|-------------------|
| Nur bestimmte Länder erlauben | GeoIP-Blocking 🌍 |
| Weltweit erreichbar bleiben, nur Bots bremsen | Bot-Rate-Limiting 🤖 |
| Aggressive Bots stoppen (verteilt über viele IPs) | Bot-Rate-Limiting 🤖 |
### Geo-Region wählen (nur GeoIP-Modus) ### Geo-Region wählen (nur GeoIP-Modus)
``` ```
@@ -236,7 +251,7 @@ Modus wählen [1/2]:
Region wählen [1/2]: Region wählen [1/2]:
``` ```
### Beispielausgabe: Bot-Only Aktivierung ### Beispiel: Bot-Rate-Limiting aktivieren
``` ```
🔧 Aktiviere 🤖 Bot-Only für: shop.example.com 🔧 Aktiviere 🤖 Bot-Only für: shop.example.com
@@ -256,49 +271,16 @@ Region wählen [1/2]:
Shop: shop.example.com Shop: shop.example.com
Modus: Bot-Rate-Limiting 🤖 Modus: Bot-Rate-Limiting 🤖
🤖 321 Bot-Patterns + 32 generische Patterns 🤖 321 Bot-Patterns + 32 generische Patterns
🌐 37 IP-Ranges für 1 getarnte Bots
🚦 Rate-Limit: 30 req/min PRO BOT-TYP 🚦 Rate-Limit: 30 req/min PRO BOT-TYP
⏱️ Ban-Dauer: 5 min ⏱️ Ban-Dauer: 5 min
Alle Googlebot-Requests teilen sich EIN Limit! Alle Googlebot-Requests teilen sich EIN Limit!
Gültig bis: 2025-12-19 19:30:00 CET Alle Alibaba-IPs teilen sich EIN Limit!
Gültig bis: 2025-12-19 12:00:00 CET
============================================================ ============================================================
``` ```
### Logs anzeigen - Gesamtübersicht ### Logs anzeigen
```
══════════════════════════════════════════════════════════════════════
📊 GESAMTÜBERSICHT ALLER SHOPS
══════════════════════════════════════════════════════════════════════
Grün = hinter Link11 | Rot = Direkt
🚫 AKTUELL GEBANNTE BOT-TYPEN: AhrefsBot, Bytespider (TikTok/ByteDance), SemrushBot
📝 Log-Einträge gesamt: 1,234 (⌀ 5.2 req/min, Laufzeit: 3h 57m)
├─ shop1.example.com 🤖 🤖: 456 (3.8 req/min, seit 2h 0m) ███████
│ ├─➤ Googlebot: 234x, 1.9 req/min
│ ├─➤ Bingbot (Microsoft): 123x, 1.0 req/min
│ └─➤ AhrefsBot: 99x, 0.8 req/min
├─ shop2.example.com 🤖 🤖: 778 (6.5 req/min, seit 2h 0m) █████████████
│ ├─➤ Bytespider (TikTok/ByteDance): 456x, 3.8 req/min
│ ├─➤ GPTBot (OpenAI): 189x, 1.6 req/min
│ └─➤ ClaudeBot (Anthropic): 133x, 1.1 req/min
🚫 Rate-Limit Bans: 5 ausgelöst, 3 Bot-Typen aktuell gebannt
├─ shop1.example.com: 2 bans (1 Bot-Typen aktiv) █
│ └─🚫 AhrefsBot
├─ shop2.example.com: 3 bans (2 Bot-Typen aktiv) █
│ └─🚫 Bytespider (TikTok/ByteDance)
│ └─🚫 SemrushBot
🤖 Bot-Statistik nach Bot-Typ (alle Shops):
Googlebot: 456x ███████████████████████████████████████
Bytespider (TikTok/ByteDance): 389x ████████████████████████████████
Bingbot (Microsoft): 234x ███████████████████
GPTBot (OpenAI): 189x ███████████████
...
```
### Logs anzeigen - Einzelner Shop
``` ```
══════════════════════════════════════════════════════════════════════ ══════════════════════════════════════════════════════════════════════
@@ -307,57 +289,43 @@ Region wählen [1/2]:
⏱️ Laufzeit: 2h 15m ⏱️ Laufzeit: 2h 15m
📈 Log-Einträge: 1,234 (9.1 req/min) 📈 Log-Einträge: 1,234 (9.1 req/min)
🤖 Bot-Patterns: 321 + 32 generische 🤖 Bot-Patterns: 321 + 32 generische
🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s)
🚦 Rate-Limit: 30 req/min PRO BOT-TYP, Ban: 5 min 🚦 Rate-Limit: 30 req/min PRO BOT-TYP, Ban: 5 min
🚫 Bans: 3 ausgelöst, 2 Bot-Typen aktuell gebannt 🚫 Bans: 23 ausgelöst, 3 Bot-Typen aktuell gebannt
Gebannt: AhrefsBot, Bytespider (TikTok/ByteDance) Gebannt: Alibaba-Bot, GPTBot (OpenAI), Bytespider (TikTok/ByteDance)
🤖 Bot-Statistik (nach Bot-Typ): 🤖 Bot-Statistik (nach Bot-Typ):
Googlebot: 456x ███████████████████████████████████████ Alibaba-Bot: 456x ███████████████████████████████████████
Bingbot (Microsoft): 234x ███████████████████ Googlebot: 234x ███████████████████
GPTBot (OpenAI): 189x ███████████████ GPTBot (OpenAI): 189x ███████████████
AhrefsBot: 123x ██████████ AhrefsBot: 123x ██████████
... ...
📝 Letzte 30 Log-Einträge:
[2025-12-16 10:45:23] BOT: Alibaba-Bot | IP: 43.104.26.55 | Count: 12/30 | URI: /produkt-123
[2025-12-16 10:45:24] BOT: Alibaba-Bot | IP: 43.104.27.12 | Count: 13/30 | URI: /kategorie-abc
[2025-12-16 10:45:25] BANNED: Alibaba-Bot | IP: 43.104.26.99 | Exceeded 30 req/min | Ban: 5m
...
🔥 Top 10 IPs:
43.104.26.55 (Alibaba-Bot): 234x
43.104.27.12 (Alibaba-Bot): 198x
66.249.66.1 (Googlebot): 156x
...
``` ```
### Status anzeigen ### Status anzeigen
``` ```
📊 5/15 Shops aktiv 📊 3/10 Shops aktiv
shop1.example.com [Link11] 🇩🇪🇦🇹🇨🇭 🌍 shop1.example.com [Link11] 🇩🇪🇦🇹🇨🇭 🌍
523 blocks, 1h 41m, Cache: ✅8,234 523 blocks, 1h 41m, Cache: ✅8,234
shop2.example.com [Direkt] 🤖 🤖 shop2.example.com [Direkt] 🤖 🤖
1,234 log entries, 2h 15m, 321 Patterns, 30 req/min/Bot-Typ, 🚫 AhrefsBot, SemrushBot 1,234 log entries, 2h 15m, 321 Patterns, 30 req/min/Bot-Typ, 🚫 Alibaba-Bot
shop3.example.com [Direkt] 🇪🇺 🌍 shop3.example.com [Direkt] 🇪🇺 🌍
312 blocks, 1h 39m, Cache: ✅12,456 312 blocks, 1h 39m, Cache: ✅12,456
``` ```
## 🔧 Erweiterte Verwendung
### Rate-Limit Dateien prüfen
```bash
# Aktive Bans anzeigen (mit Bot-Namen)
for f in /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/bans/*.ban; do
[ -f "$f" ] && echo "$(cat $f)"
done
# Request-Counter anzeigen
find /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/counts/ -name "*.count" -exec cat {} \;
# Anzahl aktiver Bans
find /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/bans/ -name "*.ban" | wc -l
```
### Manuell einen Bot-Typ entbannen
```bash
# Alle Bans löschen für einen Shop
rm -f /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/bans/*.ban
# Alle Counter zurücksetzen
rm -f /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/counts/*.count
```
## 📁 Dateistruktur ## 📁 Dateistruktur
### Pro Shop (in `/var/www/vhosts/SHOP/httpdocs/`) ### Pro Shop (in `/var/www/vhosts/SHOP/httpdocs/`)
@@ -366,21 +334,18 @@ rm -f /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/counts/*.count
- `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
- `geoip_ip_ranges.cache` - Gecachte IP-Ranges (erneuert alle 24h) - `geoip_ip_ranges.cache` - Gecachte IP-Ranges (erneuert alle 24h)
- `geoip_blocked.log` - Log der Blocks - `geoip_blocked.log` - Log der blockierten Zugriffe
**Bot-Only Modus:** **Bot-Rate-Limiting Modus (zusätzlich):**
- `index.php.geoip_backup` - Backup der Original index.php
- `geoip_blocking.php` - PHP-Blocking-Script
- `geoip_blocked.log` - Log der Bot-Requests und Bans
- `geoip_ratelimit/` - Rate-Limit Verzeichnis - `geoip_ratelimit/` - Rate-Limit Verzeichnis
- `bans/` - Aktive Bans (`.ban` Dateien, Format: `timestamp|botname`) - `bans/` - Aktive Bans (`.ban` Dateien mit Timestamp|Bot-Name)
- `counts/` - Request-Counter (`.count` Dateien) - `counts/` - Request-Counter (`.count` Dateien)
### System-weit ### System-weit
- `/var/lib/geoip/active_shops.json` - Tracking aktiver Shops - `/var/lib/geoip/active_shops.json` - Tracking aktiver Shops
## ⚙️ Konfiguration ## ⚙️ Konfiguration anpassen
### Blocking-Dauer ändern ### Blocking-Dauer ändern
@@ -408,37 +373,47 @@ GEO_REGIONS = {
"countries": ["de", "at", "ch"], # Hier Länder hinzufügen "countries": ["de", "at", "ch"], # Hier Länder hinzufügen
... ...
}, },
...
} }
``` ```
### Eigene Bot-IP-Ranges hinzufügen
```python
BOT_IP_RANGES = {
'Alibaba-Bot': [
'43.0.0.0/9',
# ... bestehende Ranges
],
# Neuen Bot hinzufügen:
'MeinBot': [
'192.0.2.0/24',
'198.51.100.0/24',
],
}
```
**Wichtig**: Nach Änderungen müssen die Shops neu aktiviert werden (deaktivieren + aktivieren)!
### Link11-IP ändern ### Link11-IP ändern
```python ```python
# Am Anfang des Scripts
LINK11_IP = "128.65.223.106" # Hier ändern LINK11_IP = "128.65.223.106" # Hier ändern
``` ```
## 🛡️ Sicherheit ## 🛡️ Was wird geblockt?
### Was wird geblockt? ### GeoIP-Modus
**GeoIP-Modus:** - ✅ Alle IPs außerhalb der konfigurierten Region → HTTP 403
-Alle IPs außerhalb der konfigurierten Region -Private IPs (192.168.x.x, 10.x.x.x) werden durchgelassen
-Sofortiger 403 Response -Localhost (127.0.0.1) wird durchgelassen
**Bot-Only Modus:** ### Bot-Rate-Limiting Modus
- ✅ Erkannte Bot-Typen die das Rate-Limit überschreiten
-Temporärer Ban für den gesamten Bot-Typ -Erkannte Bot-Typen die das Rate-Limit überschreiten → Temporärer Ban
- ✅ Getarnte Bots (wie Alibaba) werden per IP erkannt
- ❌ Bots unter dem Limit werden durchgelassen (gewollt!) - ❌ Bots unter dem Limit werden durchgelassen (gewollt!)
- ❌ Normaler User-Traffic wird nie geblockt
### Was wird NICHT geblockt?
- ✅ Alle IPs aus den erlaubten Ländern (GeoIP-Modus)
- ✅ Normaler User-Traffic (Bot-Only Modus)
- ✅ Bots unter dem Rate-Limit (Bot-Only Modus)
- ✅ Private IPs (192.168.x.x, 10.x.x.x, etc.)
- ✅ Localhost (127.0.0.1)
## 🐛 Troubleshooting ## 🐛 Troubleshooting
@@ -459,122 +434,112 @@ mv index.php.geoip_backup index.php
# Prüfe Verzeichnis-Berechtigungen # Prüfe Verzeichnis-Berechtigungen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
# Sollte 777 sein (PHP läuft als anderer User) # Sollte 777 sein (PHP läuft als Domain-User)
# Falls nicht:
chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
``` ```
### Bots werden nicht erkannt ### Alibaba-Bot wird nicht erkannt
Prüfe ob der User-Agent in den Bot-Patterns enthalten ist:
```bash ```bash
# Im Log nach unbekannten Bots suchen # Prüfe ob die IP im Range liegt
grep "Bot (.*)" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log python3 -c "import ipaddress; print(ipaddress.ip_address('43.104.26.55') in ipaddress.ip_network('43.0.0.0/9'))"
# Sollte "True" ausgeben
# Prüfe Version (muss 4.1.0+ sein)
grep "v4." geoip_shop_manager.py
``` ```
Unbekannte Bots werden als `Bot (crawler)`, `Bot (spider)`, etc. erkannt, wenn sie generische Keywords enthalten. Nach Update: Shops neu aktivieren (deaktivieren + aktivieren).
### Rate-Limit Verzeichnisse sind leer trotz Bot-Traffic ### GeoIP-Cache lädt nicht
**Berechtigungsproblem!** Das Python-Script läuft als root, aber PHP läuft als Domain-User.
```bash ```bash
# Quick-Fix für alle Shops: # Manuell testen ob ipdeny.com erreichbar ist
for dir in /var/www/vhosts/*/httpdocs/geoip_ratelimit; do curl -I https://www.ipdeny.com/ipblocks/data/aggregated/de-aggregated.zone
[ -d "$dir" ] && chmod -R 777 "$dir" && echo "Fixed: $dir"
done # Cache-Datei prüfen
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ip_ranges.cache
``` ```
Bei Fail-Open: Traffic wird durchgelassen wenn Cache nicht geladen werden kann.
## 📊 Performance ## 📊 Performance
### PHP-Level Blocking (GeoIP) ### GeoIP-Modus
- **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) - **Erster Request**: ~400-800ms (beim Download der IP-Ranges)
- **Cache-Dauer**: 24 Stunden - **Cache-Dauer**: 24 Stunden
- **RAM-Verbrauch**: ~5-10 MB pro Shop
### Bot-Rate-Limiting ### Bot-Rate-Limiting Modus
- **Overhead pro Request**: ~1-3ms (File-I/O) - **Overhead pro Request**: ~1-3ms (File-I/O)
- **IP-Range-Check**: ~0.5ms
- **Ban-Check**: ~0.5ms (schneller Pfad) - **Ban-Check**: ~0.5ms (schneller Pfad)
- **Cleanup**: Probabilistisch (1% der Requests)
## 📝 Logs und Monitoring ## 📝 Log-Analyse
### PHP-Level Logs ### Blockierte Zugriffe anzeigen
```bash ```bash
# Alle Log-Einträge für einen Shop # Alle Logs für einen Shop
tail -f /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log tail -f /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur BANNED Einträge (Rate-Limit überschritten) # Nur gebannte Bots
grep "BANNED:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log grep "BANNED:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur BOT Einträge (unter Limit, durchgelassen) # Nur Alibaba
grep "BOT:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log grep "Alibaba-Bot" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
# Nur BLOCKED Einträge (bereits gebannter Bot)
grep "BLOCKED (banned):" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
``` ```
### Bot-Statistik erstellen ### Bot-Statistik erstellen
```bash ```bash
# Top 10 Bots (aus Log) # Top 10 Bot-Typen
grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
sed 's/ //g' | sort | uniq -c | sort -rn | head -10 sort | uniq -c | sort -rn | head -10
``` ```
## 📚 Changelog ## 📚 Changelog
### v4.1.0
- **NEU**: IP-basierte Bot-Erkennung für getarnte Bots
- **NEU**: `BOT_IP_RANGES` mit Alibaba Cloud IP-Ranges (~20 Mio IPs)
- **NEU**: Alibaba-Bot wird auch per User-Agent erkannt
- **NEU**: IP-Check hat höchste Priorität (vor User-Agent)
### v4.0.0 ### v4.0.0
- **BREAKING**: CrowdSec-Integration komplett entfernt - **NEU**: Rate-Limiting nach Bot-Typ (nicht IP)
- **BREAKING**: Rate-Limiting jetzt nach **Bot-Typ** statt IP+UA - **ENTFERNT**: CrowdSec-Integration komplett entfernt
- **NEU**: Alle Requests eines Bot-Typs teilen sich EIN Limit - **VEREINFACHT**: Nur noch 2 Modi (GeoIP / Bot-Rate-Limiting)
- **NEU**: Ban-Dateien speichern Bot-Namen (`timestamp|botname`) - Alle IPs eines Bot-Typs teilen sich ein Limit
- **NEU**: Anzeige der aktuell gebannten Bot-Typen mit Namen
- **NEU**: Top 3 Bot-Typen pro Shop in Gesamtübersicht
- **NEU**: Vereinfachte Modi: nur noch `geoip` und `bot`
- **ENTFERNT**: Watcher-Service (nicht mehr benötigt)
- **ENTFERNT**: CrowdSec Queue-Dateien
- **ENTFERNT**: Alle CrowdSec-Funktionen
### v3.5.0 ### v3.5.0
- Erweiterte Bot-Erkennung mit **321 Bot-Patterns** - Erweiterte Bot-Erkennung mit 321 Bot-Patterns
- 12 Bot-Kategorien - 32 generische Fallback-Patterns
- **32 generische Fallback-Patterns**
### v3.4.x ### v3.4.x
- Rate-Limit Logik korrigiert - File-basiertes Rate-Limiting
- Verzeichnis-Berechtigungen (0o777) - Verbessertes Logging
- Bot-Namen in Statistiken
### v3.3.0 ### v3.3.0
- Option [7] - Nur direkte Shops aktivieren - Option "Nur direkte Shops" (ohne Link11)
- Link11-Erkennung per DNS-Lookup - Link11-Erkennung per DNS
- Farbcodierung im Menü
### v3.2.0 ### v3.2.0
- Bot-Only Blocking Modus - Bot-Only Modus eingeführt
- 4 Blocking-Modi - Multi-Shop-Management
### v3.1.0
- Eurozone+GB Region (22 Länder)
- Cache-Validierung
- Fail-Open Mechanismus
### v3.0.0 ### v3.0.0
- DACH-Support - DACH-Support
- CrowdSec-Integration - Eurozone+GB Region
- Multi-Shop-Management - Cache-Validierung mit Fail-Open
--- ---
**Version**: 4.0.0 **Version**: 4.1.0
**Letztes Update**: Dezember 2025 **Letztes Update**: Dezember 2025
**Status**: Production Ready ✅ **Status**: Production Ready ✅
**Bot-Patterns**: 321 spezifisch + 32 generisch = 353 total **Bot-Patterns**: 321 spezifisch + 32 generisch
**Rate-Limiting**: Pro Bot-Typ (nicht pro IP) **Bot-IP-Ranges**: 37 Ranges für Alibaba (~20 Mio IPs)
**Erlaubte Regionen**: 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Only (weltweit) **Modi**: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting