# CrowdSec IP Analyzer 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.