README.md aktualisiert

This commit is contained in:
2025-12-04 17:08:42 +01:00
parent 5f498edbae
commit 18d9b22ea6

View File

@@ -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** **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 ## 🎯 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) -**Doppelter Schutz**: PHP-Level + Firewall-Level (CrowdSec)
-**Automatische Synchronisation**: Blockierte IPs werden automatisch an CrowdSec weitergegeben -**Automatische Synchronisation**: Blockierte IPs werden automatisch an CrowdSec weitergegeben
-**Multi-Shop-Management**: Verwaltung mehrerer Shops auf einem Server -**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 ### Komponente 1: PHP-Script
- Wird in die `index.php` des Shops integriert - 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 - 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 - Schreibt blockierte IPs in Queue-Datei für CrowdSec
### Komponente 2: Python Watcher (systemd service) ### 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 - `geoip_blocking.php` wird erstellt und eingebunden
- Shop wird für Tracking registriert - Shop wird für Tracking registriert
- Blocking ist sofort aktiv - Blocking ist sofort aktiv
- Erlaubt werden nur IPs aus: 🇩🇪 Deutschland, 🇦🇹 Österreich, 🇨🇭 Schweiz
### Blocking deaktivieren ### Blocking deaktivieren
@@ -195,7 +197,7 @@ cscli decisions delete --ip DEINE_IP
- `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
- `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_blocked.log` - Log der PHP-Level Blocks
- `geoip_crowdsec_queue.log` - Queue für CrowdSec-Synchronisation - `geoip_crowdsec_queue.log` - Queue für CrowdSec-Synchronisation
@@ -242,17 +244,27 @@ Standard: 24 Stunden. Im PHP-Script:
$cache_duration = 86400; // In Sekunden $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 ## 🛡️ Sicherheit
### Was wird geblockt? ### 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) - ✅ Auf allen Ebenen: HTTP, HTTPS, SSH, FTP, SMTP, etc. (durch CrowdSec)
- ✅ Auch wenn sie den PHP-Check umgehen (Firewall blockt) - ✅ Auch wenn sie den PHP-Check umgehen (Firewall blockt)
### Was wird NICHT geblockt? ### 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.) - ✅ Private IPs (192.168.x.x, 10.x.x.x, etc.)
- ✅ Localhost (127.0.0.1) - ✅ Localhost (127.0.0.1)
@@ -261,13 +273,13 @@ $cache_duration = 86400; // In Sekunden
Das System nutzt die **offiziellen IP-Zuweisungen** von ipdeny.com: Das System nutzt die **offiziellen IP-Zuweisungen** von ipdeny.com:
- Basiert auf RIPE-Daten - Basiert auf RIPE-Daten
- Täglich aktualisiert - 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 - Präzise CIDR-Prüfung
**Risiko für Fehlblockierungen: Minimal** **Risiko für Fehlblockierungen: Minimal**
Deutsche IPs können nur geblockt werden, wenn: DACH-IPs können nur geblockt werden, wenn:
1. Der Provider die IP-Range außerhalb Deutschlands registriert hat (extrem selten) 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 2. Die IP über einen ausländischen VPN/Proxy kommt
3. Die ipdeny.com Daten veraltet sind (wird täglich aktualisiert) 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 ipset list crowdsec-blacklists-5 | head -20
``` ```
### Deutsche IPs werden geblockt ### DACH-IPs werden geblockt
**Sehr unwahrscheinlich!** Aber falls doch: **Sehr unwahrscheinlich!** Aber falls doch:
```bash ```bash
# Prüfe welche IP-Ranges als deutsch erkannt werden # Prüfe welche IP-Ranges als DACH erkannt werden
cat /var/www/vhosts/SHOP/httpdocs/de_ip_ranges.cache cat /var/www/vhosts/SHOP/httpdocs/dach_ip_ranges.cache
# Lösche Cache (wird neu geladen) # 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 ' php -r '
$ip = "91.107.229.191"; $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) { foreach($ranges as $range) {
list($subnet, $mask) = explode("/", $range); list($subnet, $mask) = explode("/", $range);
$ip_long = ip2long($ip); $ip_long = ip2long($ip);
@@ -372,14 +384,29 @@ done
cscli decisions list | grep "GeoIP" 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 ## 📊 Performance
### PHP-Level Blocking ### PHP-Level Blocking
- **Overhead pro Request**: ~1-5ms (bei gecachten IP-Ranges) - **Overhead pro Request**: ~2-8ms (bei gecachten IP-Ranges, etwas mehr als DE-only wegen mehr Ranges)
- **Erster Request**: ~200-500ms (beim Download der IP-Ranges) - **Erster Request**: ~400-800ms (beim Download der IP-Ranges für 3 Länder)
- **Cache-Dauer**: 24 Stunden - **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 ### CrowdSec Firewall Blocking
@@ -417,7 +444,7 @@ systemctl stop geoip-crowdsec-watcher.service
```bash ```bash
# Cache löschen (wird automatisch neu geladen) # 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. Die Ranges werden automatisch alle 24h aktualisiert.
@@ -466,7 +493,7 @@ cat /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log | \
### Vor Aktivierung ### Vor Aktivierung
1. ✅ Backup erstellen (macht das Script automatisch) 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) 3. ✅ Test mit kurzer Dauer (kann im Script angepasst werden)
4. ✅ Monitoring einrichten 4. ✅ Monitoring einrichten
@@ -540,9 +567,11 @@ Bei Problemen:
- [CrowdSec Dokumentation](https://docs.crowdsec.net/) - [CrowdSec Dokumentation](https://docs.crowdsec.net/)
- [Plesk Dokumentation](https://docs.plesk.com/) - [Plesk Dokumentation](https://docs.plesk.com/)
- [iptables Tutorial](https://www.netfilter.org/documentation/) - [iptables Tutorial](https://www.netfilter.org/documentation/)
- [ipdeny.com Ländercodes](https://www.ipdeny.com/ipblocks/data/aggregated/)
--- ---
**Version**: 1.0.0 **Version**: 2.0.0 (DACH)
**Letztes Update**: November 2025 **Letztes Update**: Dezember 2025
**Status**: Production Ready ✅ **Status**: Production Ready ✅
**Erlaubte Länder**: 🇩🇪 Deutschland | 🇦🇹 Österreich | 🇨🇭 Schweiz