607 lines
21 KiB
Markdown
607 lines
21 KiB
Markdown
# GeoIP Shop Blocker Manager - DACH & Eurozone Version
|
||
|
||
**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 per Rate-Limiting zu bremsen.
|
||
|
||
## 🎯 Features
|
||
|
||
- ✅ **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 (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 auch hinter Link11, Cloudflare & Co.
|
||
- ✅ **Fail-Open**: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle)
|
||
- ✅ **Korrekte Ownership**: Erstellte Dateien gehören dem Shop-User, nicht root
|
||
|
||
## 🏗️ Architektur
|
||
|
||
### Modus 1: GeoIP-Blocking 🌍
|
||
|
||
- 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
|
||
- 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
|
||
- 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
|
||
|
||
**Anwendungsfall**: Shop soll weltweit erreichbar bleiben, aber Bots sollen gebremst werden.
|
||
|
||
## 👤 Ownership-Handling
|
||
|
||
### Problem: root:root Dateien
|
||
|
||
Wenn das Script als root läuft, werden erstellte Dateien standardmäßig `root:root` zugeordnet. Das kann zu Problemen führen:
|
||
|
||
- PHP läuft als Domain-User und kann die Dateien evtl. nicht lesen/schreiben
|
||
- Plesk zeigt falsche Berechtigungen an
|
||
- Backup-Tools erfassen die Dateien möglicherweise nicht korrekt
|
||
|
||
### Lösung: Automatische Owner-Erkennung
|
||
|
||
Das Script ermittelt automatisch den häufigsten Owner im `httpdocs`-Verzeichnis und verwendet diesen für alle erstellten Dateien:
|
||
|
||
```
|
||
👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006)
|
||
```
|
||
|
||
**Betroffene Dateien/Ordner:**
|
||
- `index.php` (nach Änderung)
|
||
- `index.php.geoip_backup`
|
||
- `geoip_blocking.php`
|
||
- `geoip_ip_ranges.cache`
|
||
- `geoip_ratelimit/` (inkl. Unterordner)
|
||
|
||
### Warum "häufigster Owner"?
|
||
|
||
In manchen Fällen können einzelne Dateien im `httpdocs`-Verzeichnis einem anderen User gehören (z.B. durch manuelle Uploads oder Plugins). Die Zählung der häufigsten `uid:gid`-Kombination stellt sicher, dass der "richtige" Owner verwendet wird.
|
||
|
||
## 🚦 Rate-Limiting (Bot-Modus)
|
||
|
||
### Funktionsweise
|
||
|
||
Das Rate-Limiting funktioniert **nach Bot-Typ, nicht nach IP**:
|
||
|
||
```
|
||
Request kommt rein
|
||
│
|
||
▼
|
||
┌───────────────────────┐
|
||
│ IP in Bot-IP-Ranges? │──── Ja ───▶ Bot-Typ erkannt (z.B. "Alibaba-Bot")
|
||
└───────────────────────┘ │
|
||
│ Nein │
|
||
▼ │
|
||
┌───────────────────────┐ │
|
||
│ User-Agent Pattern? │──── Ja ───▶ Bot-Typ erkannt ◀────┘
|
||
└───────────────────────┘
|
||
│ Nein
|
||
▼
|
||
┌───────────────────────┐
|
||
│ Generisches Pattern? │──── Ja ───▶ Bot-Typ erkannt
|
||
└───────────────────────┘
|
||
│ Nein
|
||
▼
|
||
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 ✅
|
||
```
|
||
|
||
**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.
|
||
|
||
### Konfiguration
|
||
|
||
Bei Aktivierung werden zwei Werte abgefragt:
|
||
|
||
```
|
||
🚦 Rate-Limit Konfiguration:
|
||
(0 = Bots sofort bannen, kein Rate-Limiting)
|
||
⚠️ ACHTUNG: Limit gilt pro Bot-TYP, nicht pro IP!
|
||
Requests pro Minute bevor Ban [30]:
|
||
Ban-Dauer in Minuten [5]:
|
||
```
|
||
|
||
- **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)
|
||
|
||
## 🌐 IP-basierte Bot-Erkennung
|
||
|
||
### Problem: Getarnte Bots
|
||
|
||
Manche Bots (z.B. von Alibaba Cloud) tarnen sich mit einem normalen Browser User-Agent:
|
||
```
|
||
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**.
|
||
|
||
### Bot-Kategorien
|
||
|
||
| Kategorie | Anzahl | Beispiele |
|
||
|-----------|--------|-----------|
|
||
| **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 |
|
||
| **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, etc. |
|
||
|
||
### Generische Fallback-Patterns
|
||
|
||
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,
|
||
archive, capture, reader, download, mirror, ripper, collector, extractor,
|
||
siphon, copier, sucker, bandit, stripper, whacker, reaper, robot, agent,
|
||
seeker, finder, walker, roam, snagger
|
||
```
|
||
|
||
Diese werden dann als `Bot (crawler)`, `Bot (spider)`, etc. angezeigt.
|
||
|
||
## 📋 Voraussetzungen
|
||
|
||
- **Betriebssystem**: Ubuntu Server (getestet auf 24.04)
|
||
- **Webserver**: Apache oder nginx
|
||
- **PHP**: Version 8.0 oder höher
|
||
- **Python**: Version 3.8 oder höher
|
||
- **Plesk**: Optional, aber empfohlen
|
||
- **Root-Zugriff**: Erforderlich für Installation und Verwaltung
|
||
|
||
## 🚀 Installation
|
||
|
||
### 1. Script herunterladen
|
||
|
||
```bash
|
||
# Als root
|
||
cd /root
|
||
wget https://git.jtl-hosting.de/thomasciesla/geoip_shop_manager/raw/branch/main/geoip_shop_manager.py
|
||
chmod +x geoip_shop_manager.py
|
||
```
|
||
|
||
### 2. Script ausführen
|
||
|
||
```bash
|
||
python3 geoip_shop_manager.py
|
||
```
|
||
|
||
Das war's! Das Script ist vollständig selbstverwaltend.
|
||
|
||
## 📖 Verwendung
|
||
|
||
### Hauptmenü
|
||
|
||
```
|
||
============================================================
|
||
GeoIP Shop Blocker Manager v4.2.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)
|
||
👤 Korrekte Ownership für erstellte Dateien
|
||
============================================================
|
||
|
||
----------------------------------------
|
||
[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
|
||
|
||
```
|
||
🔧 Wähle den Blocking-Modus:
|
||
[1] 🌍 GeoIP-Blocking (nur erlaubte Regionen)
|
||
[2] 🤖 Bot-Rate-Limiting (weltweit erreichbar, Bots limitiert)
|
||
|
||
Modus wählen [1/2]:
|
||
```
|
||
|
||
### Geo-Region wählen (nur GeoIP-Modus)
|
||
|
||
```
|
||
🌍 Wähle die Geo-Region:
|
||
[1] 🇩🇪🇦🇹🇨🇭 DACH - Deutschland, Österreich, Schweiz
|
||
[2] 🇪🇺 Eurozone+GB - 22 Länder
|
||
|
||
Region wählen [1/2]:
|
||
```
|
||
|
||
### Beispiel: Bot-Rate-Limiting aktivieren
|
||
|
||
```
|
||
👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006)
|
||
|
||
🔧 Aktiviere 🤖 Bot-Only für: shop.example.com
|
||
Modus: Bot-Rate-Limiting nach Bot-Typ (weltweit erreichbar)
|
||
Rate-Limit: 30 req/min pro Bot-Typ, Ban: 5 min
|
||
============================================================
|
||
|
||
[1/3] Aktiviere PHP-Blocking...
|
||
✅ PHP-Blocking aktiviert
|
||
|
||
[2/3] Cache-Generierung nicht erforderlich (Bot-Only)
|
||
|
||
[3/3] Registriere Shop...
|
||
|
||
============================================================
|
||
✅ 🤖 Bot-Only aktiviert
|
||
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!
|
||
ℹ️ Alle Alibaba-IPs teilen sich EIN Limit!
|
||
Gültig bis: 2025-12-19 12:00:00 CET
|
||
============================================================
|
||
```
|
||
|
||
### Logs anzeigen
|
||
|
||
```
|
||
══════════════════════════════════════════════════════════════════════
|
||
📊 shop.example.com | 🤖 Bot-Only 🤖
|
||
══════════════════════════════════════════════════════════════════════
|
||
⏱️ 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: 23 ausgelöst, 3 Bot-Typen aktuell gebannt
|
||
Gebannt: Alibaba-Bot, GPTBot (OpenAI), Bytespider (TikTok/ByteDance)
|
||
|
||
🤖 Bot-Statistik (nach Bot-Typ):
|
||
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
|
||
|
||
```
|
||
📊 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, 🚫 Alibaba-Bot
|
||
shop3.example.com [Direkt] 🇪🇺 🌍
|
||
312 blocks, 1h 39m, Cache: ✅12,456
|
||
```
|
||
|
||
## 📁 Dateistruktur
|
||
|
||
### Pro Shop (in `/var/www/vhosts/SHOP/httpdocs/`)
|
||
|
||
**GeoIP-Modus:**
|
||
- `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 blockierten Zugriffe
|
||
|
||
**Bot-Rate-Limiting Modus (zusätzlich):**
|
||
- `geoip_ratelimit/` - Rate-Limit Verzeichnis
|
||
- `bans/` - Aktive Bans (`.ban` Dateien mit Timestamp|Bot-Name)
|
||
- `counts/` - Request-Counter (`.count` Dateien)
|
||
|
||
**Wichtig**: Alle diese Dateien gehören dem Shop-User (z.B. `dbartholomae:psacln`), nicht `root:root`.
|
||
|
||
### System-weit
|
||
|
||
- `/var/lib/geoip/active_shops.json` - Tracking aktiver Shops
|
||
|
||
## ⚙️ Konfiguration anpassen
|
||
|
||
### Blocking-Dauer ändern
|
||
|
||
Standardmäßig 72 Stunden. Zum Ändern editiere das Python-Script:
|
||
|
||
```python
|
||
expiry = datetime.now() + timedelta(hours=72) # Hier ändern
|
||
```
|
||
|
||
### Rate-Limit Defaults ändern
|
||
|
||
```python
|
||
# Am Anfang des Scripts
|
||
DEFAULT_RATE_LIMIT = 30 # Requests pro Minute pro Bot-Typ
|
||
DEFAULT_BAN_DURATION = 5 # Minuten
|
||
```
|
||
|
||
### Weitere Länder hinzufügen
|
||
|
||
Editiere `GEO_REGIONS` im Python-Script:
|
||
|
||
```python
|
||
GEO_REGIONS = {
|
||
"dach": {
|
||
"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
|
||
LINK11_IP = "128.65.223.106" # Hier ändern
|
||
```
|
||
|
||
## 🛡️ Was wird geblockt?
|
||
|
||
### GeoIP-Modus
|
||
|
||
- ✅ 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-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!)
|
||
- ❌ Normaler User-Traffic wird nie geblockt
|
||
|
||
## 🐛 Troubleshooting
|
||
|
||
### Shop zeigt 500 Error
|
||
|
||
```bash
|
||
# Prüfe PHP-Fehler-Log
|
||
tail -50 /var/www/vhosts/SHOP/logs/error_log
|
||
|
||
# Stelle Original-Index wieder her
|
||
cd /var/www/vhosts/SHOP/httpdocs
|
||
mv index.php.geoip_backup index.php
|
||
```
|
||
|
||
### Rate-Limit funktioniert nicht
|
||
|
||
```bash
|
||
# Prüfe Verzeichnis-Berechtigungen
|
||
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
|
||
|
||
# Sollte 777 sein und dem Shop-User gehören
|
||
chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
|
||
|
||
# Falls Owner falsch ist (root statt Shop-User):
|
||
chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
|
||
```
|
||
|
||
### Dateien gehören root:root
|
||
|
||
Falls du eine ältere Version verwendet hast, können Dateien noch `root:root` gehören:
|
||
|
||
```bash
|
||
# Prüfen
|
||
ls -la /var/www/vhosts/SHOP/httpdocs/geoip_*
|
||
|
||
# Korrigieren (ersetze SHOPUSER mit dem richtigen User)
|
||
chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_*
|
||
chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/index.php*
|
||
chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/
|
||
```
|
||
|
||
Alternativ: Shop deaktivieren und mit v4.2.0+ neu aktivieren.
|
||
|
||
### Alibaba-Bot wird nicht erkannt
|
||
|
||
```bash
|
||
# 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
|
||
```
|
||
|
||
Nach Update: Shops neu aktivieren (deaktivieren + aktivieren).
|
||
|
||
### GeoIP-Cache lädt nicht
|
||
|
||
```bash
|
||
# 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
|
||
|
||
### GeoIP-Modus
|
||
|
||
- **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges)
|
||
- **Erster Request**: ~400-800ms (beim Download der IP-Ranges)
|
||
- **Cache-Dauer**: 24 Stunden
|
||
|
||
### Bot-Rate-Limiting Modus
|
||
|
||
- **Overhead pro Request**: ~1-3ms (File-I/O)
|
||
- **IP-Range-Check**: ~0.5ms
|
||
- **Ban-Check**: ~0.5ms (schneller Pfad)
|
||
|
||
## 📝 Log-Analyse
|
||
|
||
### Blockierte Zugriffe anzeigen
|
||
|
||
```bash
|
||
# Alle Logs für einen Shop
|
||
tail -f /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log
|
||
|
||
# Nur gebannte Bots
|
||
grep "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 Bot-Typen
|
||
grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
|
||
sort | uniq -c | sort -rn | head -10
|
||
```
|
||
|
||
## 📚 Changelog
|
||
|
||
### v4.2.0
|
||
- **NEU**: Korrekte Ownership für erstellte Dateien
|
||
- **NEU**: Automatische Erkennung des häufigsten Owners im httpdocs-Verzeichnis
|
||
- **NEU**: Alle erstellten Dateien/Ordner gehören dem Shop-User statt root
|
||
- **NEU**: `get_most_common_owner()` und `set_owner()` Hilfsfunktionen
|
||
- Betroffene Dateien: index.php, Backup, geoip_blocking.php, Cache, ratelimit-Ordner
|
||
|
||
### 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
|
||
- **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
|
||
- 32 generische Fallback-Patterns
|
||
|
||
### v3.4.x
|
||
- File-basiertes Rate-Limiting
|
||
- Verbessertes Logging
|
||
|
||
### v3.3.0
|
||
- Option "Nur direkte Shops" (ohne Link11)
|
||
- Link11-Erkennung per DNS
|
||
|
||
### v3.2.0
|
||
- Bot-Only Modus eingeführt
|
||
- Multi-Shop-Management
|
||
|
||
### v3.0.0
|
||
- DACH-Support
|
||
- Eurozone+GB Region
|
||
- Cache-Validierung mit Fail-Open
|
||
|
||
---
|
||
|
||
**Version**: 4.2.0
|
||
**Letztes Update**: Dezember 2025
|
||
**Status**: Production Ready ✅
|
||
**Bot-Patterns**: 321 spezifisch + 32 generisch
|
||
**Bot-IP-Ranges**: 37 Ranges für Alibaba (~20 Mio IPs)
|
||
**Modi**: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting
|
||
**Ownership**: Automatisch vom Shop-User übernommen 👤 |