diff --git a/README.md b/README.md index f967b30..ddb6162 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,321 @@ -# check-if-ip-banned +# CrowdSec IP Analyzer -Überprüft ob eine IP irgendwo gesperrt ist. \ No newline at end of file +Ein umfassendes Analysewerkzeug für CrowdSec-Blockierungen, das alle relevanten Logs, Konfigurationen und Firewall-Regeln durchsucht. + +## 📋 Übersicht + +Der CrowdSec IP Analyzer ist ein Python-Skript, das eine vollständige Analyse einer IP-Adresse durchführt und folgende Informationen sammelt: + +- CrowdSec Decisions und Alerts mit Zeitstempeln +- Ausgelöste Szenarien und deren Häufigkeit +- Firewall-Regeln (iptables, ip6tables, nftables, ipset) +- System-Logs und Service-Logs +- VHost-Logs inkl. komprimierter Archive (.gz) +- Die auslösenden Log-Zeilen, die zu Bans geführt haben + +### ✨ Hauptfunktionen + +- **Parallele Verarbeitung**: Nutzt mehrere CPU-Cores für schnelles Durchsuchen großer Log-Mengen +- **Zeitstempel-Analyse**: Zeigt wann und warum IPs blockiert wurden +- **VHost-Support**: Durchsucht alle VHost-Logs inkl. komprimierter Archive +- **Interaktive Entsperrung**: Bietet Option zum temporären Whitelisten von IPs +- **Farbige Ausgabe**: Übersichtliche, farbcodierte Darstellung der Ergebnisse + +## 🚀 Installation + +### Voraussetzungen + +- Linux-System (Ubuntu/Debian getestet) +- Python 3.6+ +- CrowdSec installiert und konfiguriert +- Root-Rechte für vollständige Funktionalität + +### Script installieren + +```bash +# Script herunterladen +wget https://raw.githubusercontent.com/DEIN_USER/DEIN_REPO/main/check-if-ip-banned.py + +# Ausführbar machen +chmod +x check-if-ip-banned.py + +# Optional: In PATH verschieben +sudo mv check-if-ip-banned.py /usr/local/bin/check-if-ip-banned +``` + +### Optionale Abhängigkeit + +Für bessere Zeitstempel-Formatierung: + +```bash +pip install python-dateutil --break-system-packages +``` + +**Hinweis**: Das Skript funktioniert auch ohne diese Bibliothek, aber Zeitstempel werden dann weniger formatiert angezeigt. + +## 📖 Verwendung + +### Grundlegende Verwendung + +```bash +# Als root ausführen (empfohlen) +sudo ./check-if-ip-banned.py 78.43.28.75 + +# Oder wenn in PATH installiert +sudo check-if-ip-banned 192.168.1.100 +``` + +### Optionen + +```bash +check-if-ip-banned --help +``` + +**Argumente:** +- `ip` - Die zu analysierende IP-Adresse (erforderlich) + +### Beispiele + +```bash +# IPv4-Adresse analysieren +sudo check-if-ip-banned 203.0.113.42 + +# IPv6-Adresse analysieren +sudo check-if-ip-banned 2001:db8::1 + +# Ausgabe in Datei umleiten +sudo check-if-ip-banned 78.43.28.75 > analyse.txt 2>&1 +``` + +## 🔍 Was wird analysiert? + +### 1. CrowdSec Decisions +- Aktive Blockierungen +- Whitelist-Einträge +- Zeitstempel (Erstellung, Ablauf) +- Decision-Typ (ban, whitelist) +- Dauer der Sperre + +### 2. CrowdSec Alerts +- Chronologische Übersicht aller Alerts +- Auslösende Szenarien +- Event-Anzahl pro Alert +- Zeitstempel der Vorfälle + +### 3. Firewall-Regeln +- **iptables**: Filter, NAT, Mangle Tables +- **ip6tables**: Alle IPv6-Regeln +- **nftables**: Komplettes Ruleset +- **ipset**: IP-Sets mit Timeout-Informationen + +### 4. System-Logs +- Systemd Journal (journalctl) +- Alle Log-Dateien in `/var/log/` +- Service-spezifische Logs: + - CrowdSec & Bouncers + - Nginx + - Apache + - Dovecot + - Postfix + - Fail2ban + +### 5. VHost-Logs +- Alle VHosts unter `/var/www/vhosts/` +- Verschiedene Log-Typen: + - Access-Logs + - Error-Logs + - PHP-FPM-Logs + - Proxy-Logs + - Transfer-Logs +- **Inklusive komprimierter Archive** (.gz) +- Statistiken pro VHost + +### 6. Auslösende Log-Zeilen +Zeigt die tatsächlichen Log-Einträge, die zu Bans geführt haben: +- Postfix Relay-Versuche +- Ungültige SMTP-Befehle +- Dovecot Auth-Failures +- HTTP Probing/Scanning +- Backdoor-Versuche + +## 📊 Ausgabe-Beispiel + +``` +================================================================================ +CrowdSec IP Analyse für: 78.43.28.75 +================================================================================ + +>>> CrowdSec Decisions +❌ Gefunden: 1 Decision(s) + → │ 12345 │ 78.43.28.75 │ ban │ crowdsecurity/postfix-relay-denied │ ... + +Zeitstempel der Decisions: + → [ban] crowdsecurity/postfix-relay-denied - Erstellt: 2024-11-27 10:30:15 - Dauer: 4h + +>>> Firewall Regeln +❌ IP gefunden in ipset: + → Set: crowdsec-blacklists-0 + → 78.43.28.75 timeout 14280 + ⚠️ Hinzugefügt um: 2024-11-27 10:30:15 (läuft ab in 3h 58m) + +>>> VHost Logs durchsuchen (parallel, inkl. .gz Archive) +ℹ️ Durchsuche 45 VHosts parallel... +⚠️ IP in 3 VHost(s) gefunden: + +example.com: 847 Einträge + access: 820 + error: 27 + Beispiel-Zeilen: + [access_log] 78.43.28.75 - - [27/Nov/2024:10:25:33] "POST /wp-login.php HTTP/1.1" 404 + +================================================================================ +ZUSAMMENFASSUNG +================================================================================ + +BLOCKIERUNGEN GEFUNDEN: +❌ CrowdSec hat aktive Decisions für diese IP +❌ IP ist in Firewall-Regeln vorhanden + +WARUM WURDE GEBLOCKT: +⚠️ crowdsecurity/postfix-relay-denied (5x) +⚠️ crowdsecurity/http-probing (12x) +``` + +## 🎯 Features im Detail + +### Parallele Verarbeitung + +Das Skript nutzt automatisch `CPU-Cores - 6` für die parallele Log-Durchsuchung: + +```python +# Bei 16 CPUs werden 10 Worker verwendet +# Bei 8 CPUs werden 2 Worker verwendet +# Minimum ist immer 1 Worker +``` + +Dies beschleunigt die Analyse erheblich, besonders bei vielen VHost-Logs. + +### Interaktive Whitelist-Erstellung + +Am Ende der Analyse bietet das Skript an, die IP temporär zu entsperren: + +``` +⚠️ IP ist AKTUELL blockiert! +Möchtest du diese IP für 72 Stunden entsperren? +Dies wird: + 1. Alle aktuellen CrowdSec Decisions löschen + 2. Eine temporäre Whitelist-Decision für 72h erstellen + 3. Die IP aus der Firewall entfernen (falls vorhanden) + +Whitelist erstellen? [j/n]: +``` + +**Was passiert bei "ja":** +1. Alle aktiven Decisions werden gelöscht +2. Eine 72h Whitelist-Decision wird erstellt +3. Die IP wird aus ipset entfernt +4. Der neue Status wird verifiziert + +### Zeitstempel-Analyse + +Mit der optionalen `python-dateutil` Bibliothek zeigt das Skript: + +- Wann die erste Sperrung erfolgte +- Wie lange die IP bereits gesperrt ist +- Wann die Sperre abläuft +- Verbleibende Zeit in ipset + +### Szenario-spezifische Log-Suche + +Für häufige Szenarien sucht das Skript gezielt nach relevanten Log-Zeilen: + +| Szenario | Log-Dateien | Such-Pattern | +|----------|-------------|--------------| +| postfix-relay-denied | mail.log | "Relay access denied" | +| postfix-non-smtp-command | mail.log | "non-SMTP command" | +| dovecot-spam | mail.log | "auth failed" | +| http-probing | access.log | "404", "403" | +| http-backdoors-attempts | access.log | "php", "admin", "wp-" | + +## ⚙️ Konfiguration + +### CPU-Worker anpassen + +Die Anzahl der Worker kann im Code angepasst werden: + +```python +# In der __init__ Methode der IPAnalyzer Klasse: +self.worker_count = max(1, total_cpus - 6) # Standard: CPUs - 6 + +# Beispiel für fixe Worker-Anzahl: +self.worker_count = 4 # Immer 4 Worker verwenden +``` + +### VHost-Pfad anpassen + +Falls VHosts an einem anderen Ort liegen: + +```python +# In der search_vhost_logs Methode: +vhosts_path = '/var/www/vhosts' # Standard + +# Anpassen auf z.B.: +vhosts_path = '/home/vhosts' +``` + +## 🐛 Fehlerbehandlung + +Das Skript enthält umfangreiche Fehlerbehandlung: + +- **Timeouts**: Befehle werden nach 30 Sekunden abgebrochen +- **Berechtigungen**: Warnung bei fehlenden Root-Rechten +- **Fehlende Dateien**: Überspringt nicht-existierende Log-Verzeichnisse +- **Große Dateien**: Überspringt Dateien >100MB +- **Encoding-Fehler**: Behandelt ungültige UTF-8-Zeichen + +## 📝 Empfehlungen für permanente Whitelists + +Für dauerhafte Whitelists empfiehlt das Skript: + +```bash +# IP in Custom Whitelist eintragen +sudo nano /etc/crowdsec/parsers/s02-enrich/jtl_whitelist.yaml + +# CrowdSec neu laden +sudo systemctl reload crowdsec +``` + +Beispiel `jtl_whitelist.yaml`: +```yaml +name: crowdsecurity/jtl-whitelist +description: "JTL specific whitelist" +whitelist: + reason: "Trusted JTL IP" + ip: + - "78.43.28.75" + - "192.168.1.0/24" +``` + +## 🔒 Sicherheitshinweise + +- **Root-Rechte erforderlich**: Für vollständigen Zugriff auf alle Logs und Firewall-Regeln +- **Sensible Daten**: Die Ausgabe kann sensitive Informationen enthalten (IPs, URLs, Pfade) +- **Vorsicht beim Whitelisten**: Stelle sicher, dass die IP vertrauenswürdig ist + +## 🤝 Beitragen + +Contributions sind willkommen! Bitte: + +1. Forke das Repository +2. Erstelle einen Feature-Branch (`git checkout -b feature/AmazingFeature`) +3. Committe deine Änderungen (`git commit -m 'Add AmazingFeature'`) +4. Push zum Branch (`git push origin feature/AmazingFeature`) +5. Öffne einen Pull Request + +## 📜 Lizenz + +Dieses Projekt ist Open Source. Details siehe LICENSE-Datei. + +## 🙏 Credits + +Entwickelt für effiziente CrowdSec-Analysen in Multi-VHost-Umgebungen. \ No newline at end of file