diff --git a/README.md b/README.md index c1da1f5..c676c0f 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,27 @@ # 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 -- ✅ **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 +- ✅ **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 - ✅ **Bulk-Operationen**: Alle Shops gleichzeitig aktivieren/deaktivieren - ✅ **Link11-Erkennung**: Automatische Erkennung ob Shop hinter Link11 CDN steht - ✅ **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 - ✅ **Sauberes Cleanup**: Vollständige Deinstallation bei Deaktivierung - ✅ **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) ## 🏗️ 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 - Lädt IP-Ranges von ipdeny.com (konfigurierte Länder) - Prüft jede Anfrage gegen diese Ranges -- Blockt nicht-erlaubte IPs sofort mit HTTP 403 -- Loggt alle Blocks +- Blockt Nicht-erlaubte IPs sofort mit HTTP 403 +- Cache wird alle 24 Stunden erneuert + +**Anwendungsfall**: Shop soll nur aus bestimmten Ländern erreichbar sein. ### Modus 2: Bot-Rate-Limiting 🤖 - Shop bleibt weltweit erreichbar -- Erkennt Bots anhand von User-Agent Patterns -- **Rate-Limit gilt PRO BOT-TYP** (nicht pro IP!) -- Alle Googlebot-Requests teilen sich EIN Limit -- Bei Überschreitung: Gesamter Bot-Typ wird temporär gebannt +- Bots werden erkannt per: + 1. IP-Ranges (für getarnte Bots wie Alibaba) + 2. User-Agent Patterns (321 bekannte Bots) + 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 +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 ▼ -┌───────────────────┐ -│ Bot erkannt? │──── Nein ──▶ Weiter (normaler Traffic) -└───────────────────┘ - │ Ja +┌───────────────────────┐ +│ Generisches Pattern? │──── Ja ───▶ Bot-Typ erkannt +└───────────────────────┘ + │ Nein ▼ -┌───────────────────┐ -│ Bot-Typ Counter │ -│ erhöhen │ -│ Limit erreicht? │──── Ja ───▶ Bot-Typ bannen + 403 -└───────────────────┘ + Normaler User ──────▶ Weiter (kein Limit) + + │ + ▼ (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 ▼ 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: -- Der IP-Adresse -- Der genauen User-Agent Variante +### Konfiguration -Beispiel mit Limit 30 req/min: - -| 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 +Bei Aktivierung werden zwei Werte abgefragt: ``` 🚦 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! Requests pro Minute bevor Ban [30]: 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")`) -- **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 +## 🌐 IP-basierte Bot-Erkennung -### Verzeichnisstruktur +### Problem: Getarnte Bots +Manche Bots (z.B. von Alibaba Cloud) tarnen sich mit einem normalen Browser User-Agent: ``` -httpdocs/ -├── geoip_ratelimit/ -│ ├── bans/ -│ │ └── {bot_hash}.ban # Format: unix_timestamp|bot_name -│ └── counts/ -│ └── {bot_hash}.count # Format: window_start|count +Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36... ``` +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 -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 | 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 | -| **Suchmaschinen** | 36 | Googlebot, Googlebot-Image/Video/News, Google-Extended, Bingbot, BingPreview, MSNBot, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, QwantBot, PetalBot | -| **SEO & Marketing** | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot, Linkdex, SearchmetricsBot | -| **Social Media** | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, Instagram, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot, Snapchat | -| **E-Commerce** | 15 | Amazonbot, Amazon-Kendra, AmazonBuyForMe, Shopify, Idealo, Billiger.de, Guenstiger.de, Ladenzeile, Kelkoo, PriceRunner, PriceGrabber | +| **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, Baiduspider, YandexBot, DuckDuckBot, Applebot, Yahoo Slurp, Sogou, NaverBot, BraveBot, PetalBot | +| **SEO & Marketing** | 15 | AhrefsBot, SemrushBot, MJ12Bot, DotBot, RogerBot, Screaming Frog, BLEXBot, DataForSEOBot | +| **Social Media** | 21 | FacebookBot, Meta-ExternalAgent, Twitterbot, LinkedInBot, Pinterestbot, WhatsApp, TelegramBot, DiscordBot, Slackbot, RedditBot | +| **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 | -| **Monitoring & Uptime** | 9 | UptimeRobot, Pingdom, StatusCake, Site24x7, NewRelic, Datadog, GTmetrix, PageSpeed Insights, Chrome Lighthouse | -| **Download & Scraper** | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, Harvest, Collector, WebZIP, BlackWidow | -| **HTTP Libraries** | 32 | Python-Requests, Python-urllib, cURL, Wget, Go-HTTP-Client, Axios, Node-Fetch, Scrapy, OkHttp, Guzzle, libwww-perl, Mechanize | -| **Security Scanner** | 11 | Nessus, SQLMap, Netsparker, Nikto, Acunetix, Burp Suite, OWASP ZAP, OpenVAS, Nmap, Masscan, WPScan | +| **Monitoring & Uptime** | 9 | UptimeRobot, Pingdom, StatusCake, Site24x7, NewRelic, Datadog, GTmetrix, PageSpeed Insights | +| **Download & Scraper** | 48 | HTTrack, Teleport Pro, WebCopier, SiteSucker, ScrapeBox, Xenu, Grabber, WebZIP, BlackWidow | +| **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, Nmap, WPScan | | **Headless & Automation** | 7 | PhantomJS, Headless Chrome, Selenium, Puppeteer, Playwright, Cypress | | **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 -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, @@ -157,7 +180,7 @@ Diese werden dann als `Bot (crawler)`, `Bot (spider)`, etc. angezeigt. ## 📋 Voraussetzungen - **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 - **Python**: Version 3.8 oder höher - **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 🛡️ Mit Cache-Validierung und Fail-Open 🚦 Rate-Limiting nach BOT-TYP (nicht IP) + 🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s) ============================================================ +---------------------------------------- [1] Aktivieren (einzeln) [2] Deaktivieren (einzeln) [3] Logs anzeigen [4] Status -──────────────────────────────────────── +---------------------------------------- [5] 🚀 ALLE aktivieren [6] 🛑 ALLE deaktivieren [7] 🎯 Nur DIREKTE aktivieren (ohne Link11) -──────────────────────────────────────── +---------------------------------------- [0] Beenden ``` ### Modus-Auswahl -Bei jeder Aktivierung wird nach dem Modus gefragt: - ``` 🔧 Wähle den Blocking-Modus: [1] 🌍 GeoIP-Blocking (nur erlaubte Regionen) @@ -218,14 +241,6 @@ Bei jeder Aktivierung wird nach dem Modus gefragt: 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) ``` @@ -236,7 +251,7 @@ Modus 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 @@ -256,49 +271,16 @@ Region wählen [1/2]: Shop: shop.example.com Modus: Bot-Rate-Limiting 🤖 🤖 321 Bot-Patterns + 32 generische Patterns + 🌐 37 IP-Ranges für 1 getarnte Bots 🚦 Rate-Limit: 30 req/min PRO BOT-TYP ⏱️ Ban-Dauer: 5 min ℹ️ 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 - -``` -══════════════════════════════════════════════════════════════════════ - 📊 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 +### Logs anzeigen ``` ══════════════════════════════════════════════════════════════════════ @@ -307,57 +289,43 @@ Region wählen [1/2]: ⏱️ Laufzeit: 2h 15m 📈 Log-Einträge: 1,234 (9.1 req/min) 🤖 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 -🚫 Bans: 3 ausgelöst, 2 Bot-Typen aktuell gebannt - Gebannt: AhrefsBot, Bytespider (TikTok/ByteDance) +🚫 Bans: 23 ausgelöst, 3 Bot-Typen aktuell gebannt + Gebannt: Alibaba-Bot, GPTBot (OpenAI), Bytespider (TikTok/ByteDance) 🤖 Bot-Statistik (nach Bot-Typ): - Googlebot: 456x ███████████████████████████████████████ - Bingbot (Microsoft): 234x ███████████████████ + Alibaba-Bot: 456x ███████████████████████████████████████ + Googlebot: 234x ███████████████████ GPTBot (OpenAI): 189x ███████████████ 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 ``` -📊 5/15 Shops aktiv +📊 3/10 Shops aktiv shop1.example.com [Link11] 🇩🇪🇦🇹🇨🇭 🌍 523 blocks, 1h 41m, Cache: ✅8,234 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] 🇪🇺 🌍 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 ### 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 - `geoip_blocking.php` - PHP-Blocking-Script - `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:** -- `index.php.geoip_backup` - Backup der Original index.php -- `geoip_blocking.php` - PHP-Blocking-Script -- `geoip_blocked.log` - Log der Bot-Requests und Bans +**Bot-Rate-Limiting Modus (zusätzlich):** - `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) ### System-weit - `/var/lib/geoip/active_shops.json` - Tracking aktiver Shops -## ⚙️ Konfiguration +## ⚙️ Konfiguration anpassen ### Blocking-Dauer ändern @@ -408,37 +373,47 @@ GEO_REGIONS = { "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 ```python -# Am Anfang des Scripts 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 -- ✅ Sofortiger 403 Response +- ✅ Alle IPs außerhalb der konfigurierten Region → HTTP 403 +- ✅ Private IPs (192.168.x.x, 10.x.x.x) werden durchgelassen +- ✅ Localhost (127.0.0.1) wird durchgelassen -**Bot-Only Modus:** -- ✅ Erkannte Bot-Typen die das Rate-Limit überschreiten -- ✅ Temporärer Ban für den gesamten Bot-Typ +### Bot-Rate-Limiting Modus + +- ✅ 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!) - -### 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) +- ❌ Normaler User-Traffic wird nie geblockt ## 🐛 Troubleshooting @@ -459,122 +434,112 @@ mv index.php.geoip_backup index.php # Prüfe Verzeichnis-Berechtigungen ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ -# Sollte 777 sein (PHP läuft als anderer User) -# Falls nicht: +# Sollte 777 sein (PHP läuft als Domain-User) chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ ``` -### Bots werden nicht erkannt - -Prüfe ob der User-Agent in den Bot-Patterns enthalten ist: +### Alibaba-Bot wird nicht erkannt ```bash -# Im Log nach unbekannten Bots suchen -grep "Bot (.*)" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log +# Prüfe ob die IP im Range liegt +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 - -**Berechtigungsproblem!** Das Python-Script läuft als root, aber PHP läuft als Domain-User. +### GeoIP-Cache lädt nicht ```bash -# Quick-Fix für alle Shops: -for dir in /var/www/vhosts/*/httpdocs/geoip_ratelimit; do - [ -d "$dir" ] && chmod -R 777 "$dir" && echo "Fixed: $dir" -done +# Manuell testen ob ipdeny.com erreichbar ist +curl -I https://www.ipdeny.com/ipblocks/data/aggregated/de-aggregated.zone + +# 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 -### PHP-Level Blocking (GeoIP) +### GeoIP-Modus - **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges) - **Erster Request**: ~400-800ms (beim Download der IP-Ranges) - **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) +- **IP-Range-Check**: ~0.5ms - **Ban-Check**: ~0.5ms (schneller Pfad) -- **Cleanup**: Probabilistisch (1% der Requests) -## 📝 Logs und Monitoring +## 📝 Log-Analyse -### PHP-Level Logs +### Blockierte Zugriffe anzeigen ```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 -# Nur BANNED Einträge (Rate-Limit überschritten) +# Nur gebannte Bots grep "BANNED:" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log -# Nur BOT Einträge (unter Limit, durchgelassen) -grep "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 +# Nur Alibaba +grep "Alibaba-Bot" /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log ``` ### Bot-Statistik erstellen ```bash -# Top 10 Bots (aus Log) +# Top 10 Bot-Typen 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 +### 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 -- **BREAKING**: CrowdSec-Integration komplett entfernt -- **BREAKING**: Rate-Limiting jetzt nach **Bot-Typ** statt IP+UA -- **NEU**: Alle Requests eines Bot-Typs teilen sich EIN Limit -- **NEU**: Ban-Dateien speichern Bot-Namen (`timestamp|botname`) -- **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 +- **NEU**: Rate-Limiting nach Bot-Typ (nicht IP) +- **ENTFERNT**: CrowdSec-Integration komplett entfernt +- **VEREINFACHT**: Nur noch 2 Modi (GeoIP / Bot-Rate-Limiting) +- Alle IPs eines Bot-Typs teilen sich ein Limit ### v3.5.0 -- Erweiterte Bot-Erkennung mit **321 Bot-Patterns** -- 12 Bot-Kategorien -- **32 generische Fallback-Patterns** +- Erweiterte Bot-Erkennung mit 321 Bot-Patterns +- 32 generische Fallback-Patterns ### v3.4.x -- Rate-Limit Logik korrigiert -- Verzeichnis-Berechtigungen (0o777) -- Bot-Namen in Statistiken +- File-basiertes Rate-Limiting +- Verbessertes Logging ### v3.3.0 -- Option [7] - Nur direkte Shops aktivieren -- Link11-Erkennung per DNS-Lookup -- Farbcodierung im Menü +- Option "Nur direkte Shops" (ohne Link11) +- Link11-Erkennung per DNS ### v3.2.0 -- Bot-Only Blocking Modus -- 4 Blocking-Modi - -### v3.1.0 -- Eurozone+GB Region (22 Länder) -- Cache-Validierung -- Fail-Open Mechanismus +- Bot-Only Modus eingeführt +- Multi-Shop-Management ### v3.0.0 - DACH-Support -- CrowdSec-Integration -- Multi-Shop-Management +- Eurozone+GB Region +- Cache-Validierung mit Fail-Open --- -**Version**: 4.0.0 +**Version**: 4.1.0 **Letztes Update**: Dezember 2025 **Status**: Production Ready ✅ -**Bot-Patterns**: 321 spezifisch + 32 generisch = 353 total -**Rate-Limiting**: Pro Bot-Typ (nicht pro IP) -**Erlaubte Regionen**: 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Only (weltweit) \ No newline at end of file +**Bot-Patterns**: 321 spezifisch + 32 generisch +**Bot-IP-Ranges**: 37 Ranges für Alibaba (~20 Mio IPs) +**Modi**: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting \ No newline at end of file