Der entscheidende Unterschied: Community-Intelligenz
Fail2ban arbeitet isoliert. Wenn ein Angreifer deinen SSH-Scan startet, merkt das nur dein Server. Der gleiche Angreifer kann 10.000 andere Server scannen, ohne dass Fail2ban das mitbekommt. Jeder Server kämpft allein.
CrowdSec vernetzt die Server. Wenn auf deinem Server ein Angriff erkannt wird, wird diese Information an die CrowdSec-Community-API gesendet. Wenn der gleiche Angreifer dann den nächsten Server scannt, ist dieser bereits informiert und blockt die IP sofort – ohne dass ein einziger Angriffsversuch sichtbar wird.
Stell es dir vor wie eine Nachbarschaftswache: Wenn in deiner Straße eingebrochen wird, rufst du die Polizei – und alle anderen in der Straße schließen ihre Türen ab, bevor der Einbrecher überhaupt bei ihnen klingeln kann.
CrowdSec arbeitet mit sogenannten Collections – vorgefertigten Paketen aus Parsern, Szenarien und Bouncern für bestimmte Dienste. Statt selbst Regex zu schreiben (wie bei Fail2ban), installierst du einfach cscli collections install crowdsecurity/nginx und CrowdSec weiß automatisch, wie Nginx-Angriffe aussehen, wie man sie erkennt und was man dagegen tun kann.
Warum CrowdSec zusätzlich zu Fail2ban?
Beide lassen sich parallel betreiben, und das ist sogar eine gute Strategie:
- Fail2ban übernimmt die lokale, sofortige Abwehr von Brute-Force-Angriffen auf SSH, Mail und Dienste, bei denen du sofort sperren willst (z.B. WordPress-Login).
- CrowdSec sammelt Daten, analysiert Verhaltensmuster über längere Zeiträume und schützt dich vor Angreifern, die in der globalen Blocklist stehen.
Die Kombination ist wie eine zweistufige Sicherheitskontrolle: Fail2ban ist der Posten am Tor, CrowdSec die Videoanalyse mit KI. Beide zusammen geben dir die beste Abdeckung.
Was ist CrowdSec?
CrowdSec ist die moderne Weiterentwicklung von Fail2ban. Es analysiert Logdateien, erkennt Angriffe und sperrt IPs – aber mit einem entscheidenden Vorteil: Community-Intelligenz. Wenn ein Angreifer auf deinem Server auffällt, wird er in die globale Blocklist aufgenommen und alle anderen CrowdSec-Nutzer sind sofort geschützt.
Im Vergleich zu Fail2ban:
| Feature | Fail2ban | CrowdSec |
|---|---|---|
| IP-Sperre | ✅ Lokal | ✅ Lokal + Global |
| Community-Blocklist | ❌ | ✅ |
| Web-Dashboard | ❌ | ✅ (Metabase) |
| API-basierte Bouncer | ❌ | ✅ (Nginx, Cloudflare, etc.) |
| Simulations-Modus | ❌ | ✅ (Testen ohne zu sperren) |
Architektur
Logdateien (auth.log, mail.log, nginx/access.log ...)
│
▼
CrowdSec (crowdsec.service) – analysiert Logs auf Angriffsmuster
│
├─► Lokale Entscheidung: IP sperren (via nftables)
│
└─► Community-API: Angreifer melden & globale Blocklist empfangen
│
▼
CrowdSec Bouncer (z.B. Nginx-Firewall-Bouncer) – setzt Sperren durch
1. Installation
# CrowdSec installieren (offizielles Repo) curl -s https://install.crowdsec.net | sudo bash sudo apt-get install crowdsec # Nginx-Firewall-Bouncer (blockt IPs im Nginx) sudo apt-get install crowdsec-firewall-bouncer-nftables # Optional: Metabase-Dashboard (schöne UI) sudo apt-get install crowdsec-metabase
2. Konfiguration (config.yaml)
common:
daemonize: true
log_media: file
log_level: info
log_dir: /var/log/
log_max_size: 20
compress_logs: true
db_config:
type: sqlite
db_path: /var/lib/crowdsec/data/crowdsec.db
api:
server:
listen_uri: 127.0.0.1:8888
profiles_path: /etc/crowdsec/profiles.yaml
trusted_ips:
- 127.0.0.1
- ::1
client:
credentials_path: /etc/crowdsec/local_api_credentials.yaml
crowdsec_service:
acquisition_path: /etc/crowdsec/acquis.yaml
parser_routines: 3
prometheus:
enabled: true
level: full
listen_addr: 127.0.0.1
listen_port: 6060
3. Log-Quellen konfigurieren (acquis.yaml)
# /etc/crowdsec/acquis.yaml filenames: - /var/log/nginx/access.log - /var/log/nginx/error.log - /var/log/auth.log - /var/log/mail.log labels: type: syslog
4. Profile (Entscheidungsregeln)
# /etc/crowdsec/profiles.yaml
name: default_ip_remediation
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
- type: ban
duration: 4h
duration_expr: Sprintf("%dh", (GetDecisionsCount(Alert.GetValue()) + 1) * 4)
on_success: break
Die Bantime erhöht sich automatisch: 1. Treffer → 4h, 2. Treffer → 8h, 3. Treffer → 12h …
5. Simulation (Testmodus)
# /etc/crowdsec/simulation.yaml simulation: false # true = erkennen ohne zu sperren (Test)
Setze simulation: true in der Testphase – CrowdSec erkennt dann Angriffe, sperrt aber noch nicht. Perfekt zum Einrichten!
6. Wichtige Befehle
# Status systemctl status crowdsec cscli metrics # Alle installierten Collections & Parser cscli hub list # Verfügbare Collections durchsuchen cscli collections list # Collection installieren (z.B. für Nginx) cscli collections install crowdsecurity/nginx # Collection installieren (für Linux) cscli collections install crowdsecurity/linux # Collection installieren (für Mailserver) cscli collections install crowdsecurity/postfix # Geladene Parser/Scenarios anzeigen cscli hub list --all # Aktuell gesperrte IPs cscli decisions list # IP entsperren cscli decisions delete -i 192.168.1.100 # IP manuell sperren cscli decisions add -i 192.168.1.100 -d 4h # Bouncer Status cscli bouncers list # Machine-Status cscli machines list # Mit Community-API verbinden (für globale Blocklist) cscli console enroll DEIN_API_KEY # Dashboard-Zugriff echo "Dashboard: http://DEINE_SERVER_IP:3000" cscli dashboard setup
7. Nginx-Bouncer (Firewall-Sperren durchsetzen)
Der firewall-bouncer blockt IPs direkt per nftables – ohne dass Nginx neu geladen werden muss:
# Installieren (bereits oben gemacht) # apt-get install crowdsec-firewall-bouncer-nftables # Status prüfen systemctl status crowdsec-firewall-bouncer # Gebannte IPs in nftables anzeigen nft list set inet f2b-table addr-set-crowdsec
8. Dashboard & Monitoring (Metabase)
# Metabase installieren apt-get install crowdsec-metabase # Dashboard einrichten cscli dashboard setup # Zugriff # Öffne http://DEINE_SERVER_IP:3000 im Browser # Setup abschließen (User anlegen) # Datenbank: SQLite (wird automatisch erkannt)
9. Auswertung – Was CrowdSec erkennt
# Metriken anzeigen cscli metrics
| Quelle | Gelesene Zeilen | Erkannte Angriffe | Geblockte IPs |
|---|---|---|---|
| Nginx Access Log | 100k+ | ja (Paths, Bots, etc.) | viele |
| Nginx Error Log | ~100 | ja (HTTP-Auth, Limit-Req) | manche |
| SSH (auth.log) | 5k+ | ja (Brute-Force) | viele |
| Mail (mail.log) | 7k+ | ja (SASL, Spam-Relay) | viele |
10. Fail2ban vs CrowdSec – Sollte man wechseln?
| Kriterium | Fail2ban | CrowdSec |
|---|---|---|
| Ressourcen | ★★★ Sehr leicht | ★★ Etwas schwerer (Go + SQLite) |
| Community-Blocklist | ❌ Nein | ✅ Ja (globaler Schutz) |
| Dashboard | ❌ | ✅ Metabase-UI |
| Lernkurve | ★ Einfach | ★★ Mittel |
| Collections | Manuelle Filter | Automatische Updates |
| API-gesteuert | ❌ | ✅ (Bouncer-Konzept) |
Empfehlung: CrowdSec zusätzlich zu Fail2ban betreiben, oder bei Neuinstallationen direkt CrowdSec nutzen. Fail2ban ist einfacher, CrowdSec ist zukunftssicherer.
11. Nach der Installation – Quickstart
# 1. Status prüfen systemctl status crowdsec cscli metrics # 2. Nginx-Collection installieren cscli collections install crowdsecurity/nginx # 3. Linux-Collection installieren (SSH + mehr) cscli collections install crowdsecurity/linux # 4. Postfix-Collection installieren (Mail) cscli collections install crowdsecurity/postfix # 5. Nginx neustarten + Logs prüfen systemctl restart crowdsec # 6. Gebannte IPs anzeigen cscli decisions list # 7. Mit Community verbinden (optional) # cscli console enroll DEIN_API_KEY
Fazit
CrowdSec ist der moderne Nachfolger von Fail2ban. Die Community-Intelligenz macht den entscheidenden Unterschied: Ein Angreifer, der auf deinem Server auffällt, wird weltweit geblockt. Mit Dashboard, API und Collections ist es skalierbarer und zukunftssicherer.
