Files
check-if-ip-banned/README.md
2025-11-27 15:58:04 +01:00

321 lines
8.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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