TL;DR — Kurzzusammenfassung

CrowdSec vollständige Anleitung: Installation, Bouncer-Konfiguration, eigene Szenarien, Community-Blocklisten und Nginx+SSH-Schutz unter Linux.

Jeder mit dem Internet verbundene Server steht unter konstantem Beschuss: SSH-Scanner, Web-Vulnerability-Crawler, Credential-Stuffing-Bots und API-Missbraucher erzeugen jede Stunde Millionen von bösartigen Anfragen. CrowdSec ist ein modernes Open-Source-Intrusion-Prevention-System, das über die einfache Log-Überwachung auf einem einzelnen Server hinausgeht: Es analysiert Ihre Logs lokal, erkennt Angriffsmuster mithilfe verhaltensbasierter Szenarien und teilt anonymisierte Angreifer-IPs mit einer globalen Community, um kollaborative Blocklisten aufzubauen. Dieser Leitfaden deckt das vollständige CrowdSec-Setup ab: Architektur, Installation auf Debian/Ubuntu und RHEL/Rocky, Collections, Bouncer, benutzerdefinierte Szenarien, Whitelists, Multi-Server-Deployment und einen vollständigen Produktions-Hardening-Walkthrough zum Schutz von Nginx und SSH.

Voraussetzungen

Stellen Sie vor dem Start sicher, dass Sie haben:

  • Einen Linux-Server mit Ubuntu 20.04/22.04/24.04, Debian 11/12 oder RHEL/Rocky/AlmaLinux 8/9
  • Root- oder sudo-Zugang
  • systemd als Init-System
  • iptables, nftables oder firewalld für den Firewall-Bouncer verfügbar
  • Grundlegende Kenntnisse mit YAML-Konfigurationsdateien

Wie CrowdSec Funktioniert

CrowdSec trennt die Bedrohungserkennung von ihrer Durchsetzung in drei Schichten:

1. Agent (Erkennung) Der CrowdSec-Agent liest Logs aus Dateien, journald, Docker, Kafka oder Syslog. Logs durchlaufen eine mehrstufige Parsing-Pipeline: S00-raw normalisiert den Rohtext, S01-parse extrahiert strukturierte Felder (IP, Zeitstempel, HTTP-Methode, Pfad) und S02-enrich fügt GeoIP- und CTI-Daten hinzu. Analysierte Ereignisse speisen Szenarien — YAML-Zustandsmaschinen, die Leaky-Bucket-, Trigger- oder Zähler-Logik implementieren, um Angriffsmuster zu identifizieren.

2. Local API (Koordination) Die Local API (LAPI) empfängt Entscheidungen vom Agenten, speichert sie in SQLite oder PostgreSQL und stellt sie Bouncern zur Verfügung. In einem Multi-Server-Setup betreibt ein Server die LAPI, während alle anderen Agenten und Bouncer sich per HTTPS mit ihr verbinden.

3. Central API (Community-Intelligenz) Bei der Registrierung Ihrer Instanz überträgt die Central API auf api.crowdsec.net Community-Blocklisten an Ihre LAPI und empfängt anonymisierte IP-Berichte von Ihnen. Dies macht jedes CrowdSec-Deployment zu einem Sensor, der das globale Bedrohungsnetzwerk speist.

4. Bouncer (Durchsetzung) Bouncer fragen die LAPI nach aktiven Entscheidungen ab und setzen diese durch: Der Firewall-Bouncer fügt iptables/nftables-Regeln hinzu, der Nginx-Bouncer gibt HTTP-403-Antworten oder CAPTCHA-Herausforderungen aus, und der Cloudflare-Bouncer erstellt Edge-Firewall-Regeln über die Cloudflare-API.


Installation

Ubuntu / Debian

curl -s https://install.crowdsec.net | sudo bash
sudo apt install crowdsec -y
sudo systemctl enable --now crowdsec
sudo systemctl status crowdsec

RHEL / Rocky / AlmaLinux

curl -s https://install.crowdsec.net | sudo bash
sudo dnf install crowdsec -y
sudo systemctl enable --now crowdsec

Docker

services:
  crowdsec:
    image: crowdsecurity/crowdsec:latest
    restart: unless-stopped
    environment:
      COLLECTIONS: "crowdsecurity/linux crowdsecurity/nginx crowdsecurity/sshd"
    volumes:
      - /var/log:/var/log:ro
      - crowdsec_data:/var/lib/crowdsec/data
      - crowdsec_config:/etc/crowdsec
    ports:
      - "8080:8080"

volumes:
  crowdsec_data:
  crowdsec_config:

Kubernetes (Helm)

helm repo add crowdsec https://crowdsecurity.github.io/helm-charts
helm repo update
helm install crowdsec crowdsec/crowdsec \
  --set agent.acquisition[0].namespace=default \
  --set agent.acquisition[0].podName="*" \
  --set agent.acquisition[0].program=nginx

Collections Installieren

Collections bündeln Parser und Szenarien für einen bestimmten Dienst. Installieren Sie sie mit cscli:

# Linux-Basis-Collection (auth, syslog)
sudo cscli collections install crowdsecurity/linux

# SSH-Brute-Force-Erkennung
sudo cscli collections install crowdsecurity/sshd

# Nginx-Angriffserkennung
sudo cscli collections install crowdsecurity/nginx

# Apache
sudo cscli collections install crowdsecurity/apache2

# WordPress
sudo cscli collections install crowdsecurity/wordpress

# Nach Installation neuer Collections neu laden
sudo systemctl reload crowdsec

Installierte Hub-Inhalte auflisten:

sudo cscli hub list
sudo cscli collections list
sudo cscli scenarios list
sudo cscli parsers list

Log-Erfassung

CrowdSec entdeckt Log-Quellen über /etc/crowdsec/acquis.yaml. Mehrere Erfassungsmethoden werden unterstützt:

Datei-Quelle

filenames:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log
labels:
  type: nginx
# --- (next source)
filenames:
  - /var/log/auth.log
labels:
  type: syslog

journald / systemd

source: journalctl
journalctl_filter:
  - "_SYSTEMD_UNIT=sshd.service"
labels:
  type: syslog

Docker-Container

source: docker
container_name:
  - nginx
  - myapp
labels:
  type: nginx

Nach Bearbeitung von acquis.yaml den Agenten neu starten:

sudo systemctl restart crowdsec

Szenarien und Parser

Szenario-Typen

TypBeschreibungAnwendungsfall
leakybucketZählt Ereignisse in einem gleitenden Fenster; Überlauf löst Entscheidung ausBrute-Force (N Fehler in T Sekunden)
triggerEin einzelnes Ereignis löst sofort ausEinzelne kritische Ereignisse
counterZählt unterschiedliche Werte (z.B. gescannte URLs)Scanner, Enumeratoren

Beispiel eines benutzerdefinierten Szenarios

Erstellen Sie /etc/crowdsec/scenarios/myapp-bruteforce.yaml:

type: leakybucket
name: myapp/bruteforce
description: "Brute-Force auf myapp-Login-Endpunkt erkennen"
filter: "evt.Meta.service == 'myapp' && evt.Meta.log_type == 'auth_failed'"
groupby: "evt.Meta.source_ip"
distinct: "evt.Meta.username"
capacity: 5
leakspeed: "10s"
blackhole: "5m"
labels:
  service: myapp
  type: bruteforce
  remediation: true

Schlüsselfelder:

FeldBedeutung
capacityMaximale Bucket-Füllung vor Überlauf
leakspeedRate, mit der der Bucket entleert wird
blackholeMindestzeit zwischen wiederholten Überläufen für dieselbe IP
groupbyGruppierungskriterium für Ereignisse (meist Quell-IP)
distinctZählt unterschiedliche Werte, um Ausweichen durch mehrere Benutzernamen zu verhindern
remediation: trueÜberlauf erzeugt eine Sperrentscheidung

Bouncer Installieren und Konfigurieren

Firewall-Bouncer (iptables/nftables)

# iptables-Backend
sudo apt install crowdsec-firewall-bouncer-iptables -y

# nftables-Backend
sudo apt install crowdsec-firewall-bouncer-nftables -y

sudo systemctl enable --now crowdsec-firewall-bouncer

Registrierung prüfen:

sudo cscli bouncers list

Nginx-Bouncer

sudo apt install crowdsec-nginx-bouncer -y

Konfiguration in /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf:

API_KEY=<automatisch-generiert>
API_URL=http://localhost:8080
MODE=ban          # ban | captcha | throttle
CAPTCHA_SITE_KEY=<recaptcha-v2-site-key>
CAPTCHA_SECRET_KEY=<recaptcha-v2-secret>
CAPTCHA_GRACE_TIME=1800

Cloudflare-Bouncer

sudo apt install crowdsec-cloudflare-bouncer -y
sudo crowdsec-cloudflare-bouncer -g <CF_API_TOKEN> -o /etc/crowdsec/bouncers/crowdsec-cloudflare-bouncer.yaml
sudo systemctl enable --now crowdsec-cloudflare-bouncer

cscli-Referenz

# Entscheidungen
sudo cscli decisions list                    # Alle aktiven Sperren
sudo cscli decisions add -i 203.0.113.42     # Manuelle Sperre
sudo cscli decisions add -r 10.0.0.0/8 -t ban -d 1h  # CIDR sperren
sudo cscli decisions delete -i 203.0.113.42  # Sperre entfernen

# Alarme
sudo cscli alerts list                       # Kürzlich ausgelöste Szenarien
sudo cscli alerts inspect <id>              # Vollständiger Alarmkontext

# Hub-Verwaltung
sudo cscli hub list
sudo cscli hub update
sudo cscli collections upgrade crowdsecurity/nginx

# Maschinenverwaltung (Multi-Server)
sudo cscli machines list
sudo cscli machines add agent-web-02 --auto

# Bouncer-Verwaltung
sudo cscli bouncers list
sudo cscli bouncers add mein-bouncer

# Metriken
sudo cscli metrics

Community-Blocklisten und Central API

Registrieren Sie sich bei der Central API, um Community-Blocklisten freizuschalten:

sudo cscli console enroll <ihr-token-von-app.crowdsec.net>
sudo systemctl restart crowdsec

Community-Listen umfassen:

  • CrowdSec IP-Reputationsliste — IPs, die CrowdSec-Deployments weltweit angreifen
  • Firehol Level 1 — bekannte bösartige IPs
  • Tor-Ausgangsnodes — optional, um anonymen Datenverkehr zu blockieren
  • Proxy/VPN-Listen — Cloud-Provider-Exit-IPs, die von Bots verwendet werden

Jede Entscheidung der Central API trägt einen type: ban (harte Sperre), captcha (CAPTCHA-Herausforderung) oder throttle (Ratenbegrenzung).

Whitelists

Parser-Whitelist (vor dem Szenario)

Erstellen Sie /etc/crowdsec/parsers/s02-enrich/whitelist.yaml:

name: meinunternehmen/whitelists
description: "Büro- und Monitoring-IPs"
whitelist:
  reason: "Interne und vertrauenswürdige IPs"
  ip:
    - "192.168.1.0/24"
    - "10.0.0.0/8"
  cidr:
    - "172.16.0.0/12"

Post-Overflow-Whitelist

name: meinunternehmen/postoverflow-whitelist
description: "Synthetisches Monitoring von bekannten IPs erlauben"
whitelist:
  reason: "Verfügbarkeits-Monitoring"
  expression:
    - "evt.Overflow.Alert.Source.IP in ['203.0.113.100', '203.0.113.101']"

Multi-Server-Setup

LAPI-Server

# /etc/crowdsec/config.yaml
api:
  server:
    listen_uri: 0.0.0.0:8080
    tls:
      cert_file: /etc/crowdsec/ssl/cert.pem
      key_file: /etc/crowdsec/ssl/key.pem

Registrierung zusätzlicher Agenten

Auf jedem weiteren Server:

sudo apt install crowdsec -y
sudo cscli lapi register -u https://lapi-server:8080
# Auf dem LAPI-Server validieren:
sudo cscli machines validate <machine-id>

Bouncer mit Remote-LAPI verbinden

# /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
api_url: https://lapi-server:8080
api_key: <bouncer-schluessel-vom-lapi-server>

Überwachung: Prometheus und Grafana

CrowdSec stellt Prometheus-Metriken unter http://localhost:6060/metrics bereit. Importieren Sie das offizielle CrowdSec Grafana-Dashboard (ID 14584) für eine visuelle Übersicht über:

  • Ausgegebene Entscheidungen pro Stunde
  • Am häufigsten angegriffene Dienste
  • Parser-Trefferquoten
  • Häufigkeit des Szenario-Überlaufs

Schnelle CLI-Überprüfung:

sudo cscli metrics

CrowdSec vs. Alternativen

ToolMechanismusSpracheMulti-ServerCommunity-IntelligenzBouncer
CrowdSecVerhaltensszenarienGoNativer LAPIJa (Central API)Firewall, Nginx, CF, benutzerdefiniert
Fail2BanLog-RegexPythonManuelle SyncNeiniptables, nftables, firewalld
SuricataNetzwerk-IDS/IPSCCluster-ModusRegelabonnementsNFQueue
OSSEC/WazuhHIDS + Log-AnalyseCManager-AgentWazuh Cloud-RegelnAktive Antwort
ModSecurityWAF (HTTP-Schicht)CReverse ProxyOWASP CRSNginx/Apache-Modul
Cloudflare WAFEdge-FirewallN/AGlobales CDNCF-Bedrohungs-IntelNur CF-Edge

Produktions-Deployment: Nginx + SSH

Schritt 1 — CrowdSec und Collections installieren:

curl -s https://install.crowdsec.net | sudo bash
sudo apt install crowdsec -y
sudo cscli collections install crowdsecurity/linux \
  crowdsecurity/sshd \
  crowdsecurity/nginx

Schritt 2 — Log-Erfassung konfigurieren in /etc/crowdsec/acquis.yaml:

filenames:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log
labels:
  type: nginx
# --- (next source)
source: journalctl
journalctl_filter:
  - "_SYSTEMD_UNIT=sshd.service"
labels:
  type: syslog

Schritt 3 — Firewall-Bouncer installieren:

sudo apt install crowdsec-firewall-bouncer-nftables -y
sudo systemctl enable --now crowdsec-firewall-bouncer

Schritt 4 — Vertrauenswürdige IPs auf die Whitelist setzen:

# /etc/crowdsec/parsers/s02-enrich/whitelist.yaml
name: meinserver/whitelist
description: "Vertrauenswürdige IPs"
whitelist:
  reason: "Büro und VPN"
  ip:
    - "192.168.1.0/24"

Schritt 5 — Bei der Central API registrieren:

sudo cscli console enroll <token-von-app.crowdsec.net>
sudo systemctl restart crowdsec

Schritt 6 — Prüfen, dass der Schutz aktiv ist:

sudo cscli decisions list
sudo cscli metrics
sudo cscli bouncers list

Sonderfälle und Warnungen

  • False Positives von Load Balancern: Wenn der gesamte Datenverkehr über einen Reverse Proxy ankommt, sieht CrowdSec nur die Proxy-IP. Konfigurieren Sie das X-Forwarded-For-Parsing oder fügen Sie die Proxy-IP zur Whitelist hinzu.
  • Docker-Logs: Docker-Logs erfordern den Erfassungstyp source: docker. Das Einbinden von /var/log funktioniert nicht für Container, die in stdout/stderr schreiben.
  • Parser-Abdeckungslücken: Prüfen Sie sudo cscli metrics auf hohe unparsed-Werte — diese zeigen Log-Zeilen ohne installierten Parser an.
  • Bouncer-API-Schlüssel: Falls Sie Schlüssel regenerieren (z.B. nach einer LAPI-Neuinstallation), aktualisieren Sie die Konfigurationsdatei jedes Bouncers und starten Sie den Dienst neu.

Zusammenfassung

CrowdSec bietet ein mehrschichtiges, community-gespeistes Intrusion-Prevention-System, das vom einzelnen VPS bis zur Multi-Datacenter-Flotte skaliert:

  • Der Agent analysiert Logs durch eine mehrstufige Parser-Pipeline und wertet Ereignisse mit YAML-Szenarien vom Typ Leaky-Bucket, Trigger und Zähler aus
  • Die Local API koordiniert Entscheidungen und verbindet Bouncer mit Agenten in Multi-Server-Deployments
  • Bouncer setzen Entscheidungen auf Firewall- (iptables/nftables), Anwendungs- (Nginx) oder CDN-Ebene (Cloudflare) durch
  • cscli verwaltet Collections, Entscheidungen, Alarme, Maschinen, Bouncer und Metriken über die Befehlszeile
  • Community-Blocklisten über die Central API ergänzen globale Bedrohungsintelligenz ohne zusätzlichen Konfigurationsaufwand
  • Benutzerdefinierte Szenarien und Whitelists ermöglichen präzise Schutzanpassungen für Ihre Umgebung

Verwandte Artikel