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

# 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:

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

# 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

check-if-ip-banned --help

Argumente:

  • ip - Die zu analysierende IP-Adresse (erforderlich)

Beispiele

# 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:

# 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:

# 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:

# 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:

# 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:

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.

Description
Überprüft ob eine IP irgendwo gesperrt ist.
Readme 60 KiB
Languages
Python 100%