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.