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:

  1. CrowdSec Agent: Analysiert Logs, erkennt Angriffe, meldet sie an die CrowdSec Central API
  2. 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.