Brute-Force-Angriffe, Credential Stuffing und Web-Scraping sind tägliche Realität für jeden öffentlichen Server. Fail2ban ist seit über 15 Jahren der Standard zur automatischen IP-Blockierung — doch CrowdSec bringt einen modernen, kollaborativen Ansatz. Welches Tool schützt besser?
Das Problem: Automatisierte Angriffe auf Self-Hosted-Services
Wer SSH, Nginx, Traefik oder Gitea öffentlich betreibt, sieht im Auth-Log täglich hunderte von Fehlversuchen. Fail2ban und CrowdSec lösen dasselbe Problem auf unterschiedliche Weise: Sie erkennen Angriffsmuster in Logs und blockieren die angreifenden IPs.
Was ist Fail2ban?
Fail2ban (Python, 2004) analysiert Log-Dateien nach konfigurierten Regex-Mustern und sperrt IPs über iptables/nftables, wenn sie zu viele Fehlversuche produzieren.
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 86400 # 24 Stunden
findtime = 600 # Fenster: 10 Minuten
Fail2ban ist reaktiv und lokal: Es lernt nur aus dem eigenen Server-Log und kennt keine IPs aus anderen Systemen.
Was ist CrowdSec?
CrowdSec (Go, 2020) ist ein modernes IPS mit kollaborativer Bedrohungsintelligenz. Es besteht aus zwei Komponenten:
- CrowdSec Agent: Analysiert Logs, erkennt Angriffe, meldet sie an die CrowdSec Central API
- Bouncers: Setzen Blockierungen durch (Firewall, Nginx, Traefik, Cloudflare etc.)
Der entscheidende Unterschied: CrowdSec teilt erkannte Angreifer-IPs mit seiner Community. Wenn eine IP auf einem Server in Deutschland angreift, kann sie weltweit von anderen CrowdSec-Instanzen präventiv geblockt werden.
Architekturvergleich
| Aspekt | Fail2ban | CrowdSec |
|---|---|---|
| Ansatz | Reaktiv, lokal | Reaktiv + präventiv, kollaborativ |
| Sprache | Python | Go |
| Log-Analyse | Regex auf Log-Dateien | Grok-Parser auf Logs |
| Blockierung | Direkt via iptables | Via separate Bouncers |
| Community Intelligence | ❌ | ✅ Central API |
| Entscheidungsengine | Lokal | Lokal + Cloud-Scores |
| Dashbard | ❌ | ✅ (web-basiert) |
| Ressourcen | Minimal (<10MB RAM) | ~50MB RAM |
CrowdSec-Installation und Setup
# Installation auf Debian/Ubuntu
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec
# Bouncer für iptables installieren
sudo apt install crowdsec-firewall-bouncer-iptables
# Status prüfen
sudo cscli metrics
sudo cscli decisions list
# Traefik-Bouncer (für Kubernetes/Docker)
sudo apt install crowdsec-traefik-bouncer
CrowdSec erkennt automatisch installierte Services (Nginx, Apache, SSH) und richtet passende Parser ein.
Erkennungsqualität im Vergleich
Fail2ban Erkennungsrate
Fail2ban erkennt nur Angriffe, die sich auf dem eigenen System manifestieren. Ein verteilter Angriff, der pro IP nur 3 Versuche macht (unter dem maxretry=5 Schwellwert), entgeht Fail2ban vollständig.
CrowdSec Erkennungsrate
CrowdSec hat zusätzlich zur lokalen Analyse Zugriff auf die Community Block List: IPs, die von anderen CrowdSec-Instanzen global gemeldet wurden. Stand 2026 enthält die Blocklist ~10-15 Millionen IPs von bekannten Scannern, Botnets und Attackern.
In meiner Praxis auf dem typoniels.dev-Server blockiert CrowdSec täglich 200-500 Anfragen präventiv, bevor sie überhaupt einen Login-Versuch starten — allein durch die Community-Blocklist.
Fail2ban-Konfiguration für Nginx und SSH
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
port = http,https
[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
CrowdSec-Konfiguration für Traefik (Docker)
# docker-compose.yml
services:
crowdsec:
image: crowdsecurity/crowdsec:latest
volumes:
- /var/log/traefik:/var/log/traefik:ro
- crowdsec_data:/var/lib/crowdsec/data
environment:
COLLECTIONS: "crowdsecurity/traefik"
bouncer-traefik:
image: fbonalair/traefik-crowdsec-bouncer:latest
environment:
CROWDSEC_BOUNCER_API_KEY: ${CROWDSEC_BOUNCER_KEY}
CROWDSEC_AGENT_HOST: crowdsec:8080
networks:
- traefik
Wann welches Tool?
Fail2ban ist richtig wenn…
- Dein Server kein Internet-Zugang für externe Dienste hat (Air-Gap-Umgebungen)
- Du minimale Abhängigkeiten und maximale Kontrolle willst
- Die Konfiguration vollständig lokal und erklärbar sein muss
- Dein Server sehr ressourcenbeschränkt ist
CrowdSec ist richtig wenn…
- Du präventiven Schutz durch Community-Intelligence willst
- Du mehrere Server schützt (CrowdSec kann Entscheidungen zwischen Agenten teilen)
- Du ein zentrales Dashboard über alle Blockierungen willst
- Du Traefik, Cloudflare oder Nginx-Ingress einsetzt (exzellente Bouncer)
Kann man beide zusammen nutzen?
Ja — manche Admins nutzen CrowdSec als primäres IPS und Fail2ban als Fallback für lokale Services, die CrowdSec nicht parsen kann. Das erhöht aber die Konfigurationskomplexität.
In den meisten Fällen ist CrowdSec allein ausreichend, wenn du die crowdsecurity/linux und service-spezifischen Collections installierst.
Datenschutz-Bedenken bei CrowdSec
CrowdSec sendet erkannte Angreifer-IPs und Angriffsmuster an die Central API. Es werden keine Log-Inhalte übertragen — nur anonymisierte IP-Reputationsdaten. Die Central API ist in der EU gehostet. Wer das nicht möchte, kann CrowdSec vollständig offline betreiben (DISABLE_ONLINE_API_PULL=true), verliert dann aber die Community-Blocklist.
Fazit
Fail2ban bleibt ein solides Werkzeug für einfache Setups und ressourcenknappe Environments. CrowdSec ist der modernere Ansatz mit echten Vorteilen durch kollaborative Bedrohungsintelligenz — besonders auf öffentlichen Servern mit SSH, Webservices und API-Endpunkten.
Meine Empfehlung für neue Setups: CrowdSec wählen und von der Community-Blocklist profitieren. Migration von Fail2ban zu CrowdSec dauert für Standard-Services (SSH, Nginx, Traefik) unter einer Stunde.