From 18d9b22ea63b676747fe596e131d2fbe25ca1846 Mon Sep 17 00:00:00 2001 From: thomasciesla Date: Thu, 4 Dec 2025 17:08:42 +0100 Subject: [PATCH] README.md aktualisiert --- README.md | 79 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 1de7300..1df4792 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -# GeoIP Shop Blocker Manager +# GeoIP Shop Blocker Manager - DACH Version **Hybrid-System für temporäres GeoIP-Blocking auf Plesk-Servern mit mehreren Shops** -Dieses Tool ermöglicht es, einzelne Shops auf einem Plesk-Server temporär für alle Zugriffe außerhalb Deutschlands zu sperren. Es kombiniert PHP-Level-Blocking mit CrowdSec Firewall-Integration für maximalen Schutz. +Dieses Tool ermöglicht es, einzelne Shops auf einem Plesk-Server temporär für alle Zugriffe außerhalb der DACH-Region (Deutschland, Österreich, Schweiz) zu sperren. Es kombiniert PHP-Level-Blocking mit CrowdSec Firewall-Integration für maximalen Schutz. ## 🎯 Features -- ✅ **Präzises Blocking**: PHP prüft gegen vollständige deutsche IP-Ranges (keine Fehlblockierungen) +- ✅ **DACH-Region erlaubt**: Deutschland (DE), Österreich (AT), Schweiz (CH) +- ✅ **Präzises Blocking**: PHP prüft gegen vollständige DACH IP-Ranges (keine Fehlblockierungen) - ✅ **Doppelter Schutz**: PHP-Level + Firewall-Level (CrowdSec) - ✅ **Automatische Synchronisation**: Blockierte IPs werden automatisch an CrowdSec weitergegeben - ✅ **Multi-Shop-Management**: Verwaltung mehrerer Shops auf einem Server @@ -19,9 +20,9 @@ Dieses Tool ermöglicht es, einzelne Shops auf einem Plesk-Server temporär für ### Komponente 1: PHP-Script - Wird in die `index.php` des Shops integriert -- Lädt deutsche IP-Ranges von ipdeny.com +- Lädt DACH IP-Ranges von ipdeny.com (DE, AT, CH) - Prüft jede Anfrage gegen diese Ranges -- Blockt Nicht-DE-IPs sofort mit HTTP 403 +- Blockt Nicht-DACH-IPs sofort mit HTTP 403 - Schreibt blockierte IPs in Queue-Datei für CrowdSec ### Komponente 2: Python Watcher (systemd service) @@ -102,6 +103,7 @@ Das war's! Das Script ist vollständig selbstverwaltend. - `geoip_blocking.php` wird erstellt und eingebunden - Shop wird für Tracking registriert - Blocking ist sofort aktiv +- Erlaubt werden nur IPs aus: 🇩🇪 Deutschland, 🇦🇹 Österreich, 🇨🇭 Schweiz ### Blocking deaktivieren @@ -195,7 +197,7 @@ cscli decisions delete --ip DEINE_IP - `index.php.geoip_backup` - Backup der Original index.php - `geoip_blocking.php` - PHP-Blocking-Script -- `de_ip_ranges.cache` - Gecachte deutsche IP-Ranges (erneuert alle 24h) +- `dach_ip_ranges.cache` - Gecachte DACH IP-Ranges (erneuert alle 24h) - `geoip_blocked.log` - Log der PHP-Level Blocks - `geoip_crowdsec_queue.log` - Queue für CrowdSec-Synchronisation @@ -242,17 +244,27 @@ Standard: 24 Stunden. Im PHP-Script: $cache_duration = 86400; // In Sekunden ``` +### Weitere Länder hinzufügen + +Um weitere Länder zur Whitelist hinzuzufügen, editiere im Python-Script das PHP-Template. Suche nach: + +```php +$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/ + ## 🛡️ Sicherheit ### Was wird geblockt? -- ✅ Alle IPs außerhalb deutscher IP-Ranges +- ✅ Alle IPs außerhalb der DACH IP-Ranges (DE, AT, CH) - ✅ Auf allen Ebenen: HTTP, HTTPS, SSH, FTP, SMTP, etc. (durch CrowdSec) - ✅ Auch wenn sie den PHP-Check umgehen (Firewall blockt) ### Was wird NICHT geblockt? -- ✅ Alle deutschen IPs (basierend auf RIPE/ipdeny.com Daten) +- ✅ Alle IPs aus Deutschland, Österreich und der Schweiz (basierend auf RIPE/ipdeny.com Daten) - ✅ Private IPs (192.168.x.x, 10.x.x.x, etc.) - ✅ Localhost (127.0.0.1) @@ -261,13 +273,13 @@ $cache_duration = 86400; // In Sekunden Das System nutzt die **offiziellen IP-Zuweisungen** von ipdeny.com: - Basiert auf RIPE-Daten - Täglich aktualisiert -- Umfasst alle deutschen Provider (Telekom, Vodafone, O2, 1&1, etc.) +- Umfasst alle DACH-Provider (Telekom, Vodafone, A1, Swisscom, etc.) - Präzise CIDR-Prüfung **Risiko für Fehlblockierungen: Minimal** -Deutsche IPs können nur geblockt werden, wenn: -1. Der Provider die IP-Range außerhalb Deutschlands registriert hat (extrem selten) +DACH-IPs können nur geblockt werden, wenn: +1. Der Provider die IP-Range außerhalb der DACH-Region registriert hat (extrem selten) 2. Die IP über einen ausländischen VPN/Proxy kommt 3. Die ipdeny.com Daten veraltet sind (wird täglich aktualisiert) @@ -333,21 +345,21 @@ iptables -L -n -v | grep crowdsec ipset list crowdsec-blacklists-5 | head -20 ``` -### Deutsche IPs werden geblockt +### DACH-IPs werden geblockt **Sehr unwahrscheinlich!** Aber falls doch: ```bash -# Prüfe welche IP-Ranges als deutsch erkannt werden -cat /var/www/vhosts/SHOP/httpdocs/de_ip_ranges.cache +# Prüfe welche IP-Ranges als DACH erkannt werden +cat /var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache # Lösche Cache (wird neu geladen) -rm /var/www/vhosts/SHOP/httpdocs/de_ip_ranges.cache +rm /var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache -# Prüfe ob IP in deutschen Ranges ist +# Prüfe ob IP in DACH-Ranges ist php -r ' $ip = "91.107.229.191"; -$ranges = unserialize(file_get_contents("/var/www/vhosts/SHOP/httpdocs/de_ip_ranges.cache")); +$ranges = unserialize(file_get_contents("/var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache")); foreach($ranges as $range) { list($subnet, $mask) = explode("/", $range); $ip_long = ip2long($ip); @@ -372,14 +384,29 @@ done cscli decisions list | grep "GeoIP" ``` +### Migration von der alten DE-Only Version + +Falls du von der alten Version (nur Deutschland) auf die DACH-Version wechselst: + +```bash +# 1. Alle aktiven Shops deaktivieren (alte Version) +python3 geoip_shop_manager_old.py # Option 2 für jeden Shop + +# 2. Alte Cache-Dateien löschen +rm /var/www/vhosts/*/httpdocs/de_ip_ranges.cache + +# 3. Neue Version verwenden +python3 geoip_shop_manager.py # Shops wieder aktivieren +``` + ## 📊 Performance ### PHP-Level Blocking -- **Overhead pro Request**: ~1-5ms (bei gecachten IP-Ranges) -- **Erster Request**: ~200-500ms (beim Download der IP-Ranges) +- **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges, etwas mehr als DE-only wegen mehr Ranges) +- **Erster Request**: ~400-800ms (beim Download der IP-Ranges für 3 Länder) - **Cache-Dauer**: 24 Stunden -- **RAM-Verbrauch**: ~2-5 MB pro Shop +- **RAM-Verbrauch**: ~5-10 MB pro Shop (mehr Ranges als DE-only) ### CrowdSec Firewall Blocking @@ -417,7 +444,7 @@ systemctl stop geoip-crowdsec-watcher.service ```bash # Cache löschen (wird automatisch neu geladen) -rm /var/www/vhosts/*/httpdocs/de_ip_ranges.cache +rm /var/www/vhosts/*/httpdocs/dach_ip_ranges.cache ``` Die Ranges werden automatisch alle 24h aktualisiert. @@ -466,7 +493,7 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \ ### Vor Aktivierung 1. ✅ Backup erstellen (macht das Script automatisch) -2. ✅ Sicherstellen, dass Admin-Zugriff aus Deutschland kommt +2. ✅ Sicherstellen, dass Admin-Zugriff aus DACH-Region kommt 3. ✅ Test mit kurzer Dauer (kann im Script angepasst werden) 4. ✅ Monitoring einrichten @@ -540,9 +567,11 @@ Bei Problemen: - [CrowdSec Dokumentation](https://docs.crowdsec.net/) - [Plesk Dokumentation](https://docs.plesk.com/) - [iptables Tutorial](https://www.netfilter.org/documentation/) +- [ipdeny.com Ländercodes](https://www.ipdeny.com/ipblocks/data/aggregated/) --- -**Version**: 1.0.0 -**Letztes Update**: November 2025 -**Status**: Production Ready ✅ \ No newline at end of file +**Version**: 2.0.0 (DACH) +**Letztes Update**: Dezember 2025 +**Status**: Production Ready ✅ +**Erlaubte Länder**: 🇩🇪 Deutschland | 🇦🇹 Österreich | 🇨🇭 Schweiz \ No newline at end of file