README.md aktualisiert
This commit is contained in:
77
README.md
77
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**
|
**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
|
||||||
Reference in New Issue
Block a user