Was ist CrowdSec und warum brauchen wir es?
CrowdSec ist eine moderne, Open-Source Security-Engine, die speziell für dynamische Umgebungen entwickelt wurde. Es analysiert Logs in Echtzeit, erkennt verdächtige Aktivitäten und teilt Bedrohungsdaten mit der Community.
Im Gegensatz zu traditionellen Fail2Ban-Lösungen bietet CrowdSec:
- Community Intelligence: Profitiert von weltweit geteilten Bedrohungsdaten
- Verhaltensanalyse: Erkennt komplexe Angriffsmuster, nicht nur einfache Brute-Force-Attacken
- Multi-Layer-Schutz: Blockt auf Anwendungs- und Netzwerkebene
- Cloud-native: Perfekt für containerisierte Umgebungen
Voraussetzungen
Bevor wir starten, stellt sicher, dass folgende Voraussetzungen erfüllt sind:
Traefik für Logging konfigurieren
Zuerst müssen wir sicherstellen, dass Traefik ordentlich loggt. CrowdSec benötigt Zugriff auf die Access-Logs.
nano /opt/containers/traefik/config/traefik.yaml
Fügt diese Zeilen zu eurer traefik.yaml
hinzu:
# Logging-Konfiguration für CrowdSec
log:
level: INFO
filePath: /var/log/traefik/traefik.log
accessLog:
filePath: /var/log/traefik/access.log
docker-compose.yaml anpassen
Erweitert euren Traefik-Container um Log-Volumes:
nano /opt/containers/traefik/docker-compose.yaml
Fügt diese Zeile zu den Volumes hinzu:
services:
traefik:
# ...existing configuration...
volumes:
- /run/docker.sock:/run/docker.sock:ro
- ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro
- ./data/certs/:/var/traefik/certs/:rw
- ./config/conf.d/:/etc/traefik/conf.d/:ro
- ./logs/:/var/log/traefik:rw # <-- Diese Zeile hinzufügen
Log-Verzeichnis erstellen und Traefik neustarten
mkdir -p /opt/containers/traefik/logs
# Traefik neustarten
cd /opt/containers/traefik
docker compose down && docker compose up -d
Prüft, ob die Logs erstellt werden:
ls -la /opt/containers/traefik/logs/
tail -f /opt/containers/traefik/logs/access.log
Logrotate für Traefik einrichten
Da Traefik-Logs schnell groß werden können, richten wir Logrotate ein:
sudo nano /etc/logrotate.d/traefik
/opt/containers/traefik/logs/*.log {
# Rotation bei 10MB
size 10M
# 7 rotierte Dateien aufbewahren
rotate 7
# Neue Dateien mit diesen Berechtigungen erstellen
create 644 root root
# Nicht rotieren wenn Datei leer
notifempty
# Kein Fehler wenn Datei fehlt
missingok
# Komprimierung aktivieren
compress
delaycompress
# Datum zu rotiertem Dateinamen hinzufügen
dateext
dateformat -%Y%m%d-%s
# copytruncate für Docker-Container
copytruncate
postrotate
# Signal an Traefik senden um Logs neu zu öffnen
/usr/bin/docker kill --signal="USR1" traefik 2>/dev/null || true
endscript
}
Logrotate testen:
sudo logrotate -d /etc/logrotate.d/traefik
CrowdSec-Verzeichnisstruktur erstellen
Erstellt die benötigten Verzeichnisse für CrowdSec:
# CrowdSec-Verzeichnis erstellen
mkdir -p /opt/containers/crowdsec
cd /opt/containers/crowdsec
# Unterverzeichnisse für persistente Daten
mkdir -p crowdsec/db
mkdir -p crowdsec/config
CrowdSec-Konfigurationsdateien erstellen
acquis.yaml erstellen
Diese Datei teilt CrowdSec mit, welche Log-Dateien überwacht werden sollen:
nano /opt/containers/crowdsec/acquis.yaml
filenames:
- /var/log/traefik/access.log
labels:
type: traefik
compose.yaml erstellen
Dies ist die Docker Compose-Hauptkonfiguration:
nano /opt/containers/crowdsec/compose.yaml
services:
crowdsec:
image: crowdsecurity/crowdsec:latest
container_name: crowdsec
environment:
GID: "${GID-1000}"
COLLECTIONS: "crowdsecurity/linux crowdsecurity/traefik"
volumes:
- /opt/containers/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
- ./crowdsec/db:/var/lib/crowdsec/data/
- ./crowdsec/config:/etc/crowdsec/
- /opt/containers/traefik/logs:/var/log/traefik/:ro
networks:
- frontend
security_opt:
- no-new-privileges:true
restart: unless-stopped
bouncer-traefik:
image: docker.io/fbonalair/traefik-crowdsec-bouncer:latest
container_name: bouncer-traefik
environment:
# Wird nach der Registrierung aktualisiert
CROWDSEC_BOUNCER_API_KEY: PLACEHOLDER_API_KEY
CROWDSEC_AGENT_HOST: crowdsec:8080
networks:
- frontend
depends_on:
- crowdsec
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
frontend:
external: true
CrowdSec starten (ohne Bouncer)
Startet zunächst nur CrowdSec, um den Bouncer zu registrieren:
cd /opt/containers/crowdsec
docker compose up -d crowdsec
Wartet, bis CrowdSec vollständig gestartet ist:
sleep 10
docker logs crowdsec --tail 20
Bouncer registrieren
Generiert einen API-Schlüssel für den Traefik-Bouncer:
# Bouncer registrieren und API-Schlüssel erhalten
API_KEY=$(docker exec crowdsec cscli bouncers add bouncer-traefik | grep "API key" -A1 | tail -1 | awk '{print $1}')
echo "Generierter API-Schlüssel: $API_KEY"
# compose.yaml mit echtem API-Schlüssel aktualisieren
sed -i "s/PLACEHOLDER_API_KEY/$API_KEY/g" compose.yaml
Bouncer-Registrierung überprüfen:
docker exec crowdsec cscli bouncers list
Traefik-Middleware konfigurieren
CrowdSec-Middleware zu dynamischer Konfiguration hinzufügen
Bearbeitet eure Traefik-Konfiguration:
# CrowdSec-Middleware hinzufügen
nano /opt/containers/traefik/config/conf.d/dynamic_conf.yml
Fügt diese Middleware-Konfiguration hinzu:
http:
middlewares:
# CrowdSec Bouncer Middleware
crowdsec-bouncer:
forwardauth:
address: http://bouncer-traefik:8080/api/v1/forwardAuth
trustForwardHeader: true
authResponseHeaders:
- X-Crowdsec-Decision
# ...eure anderen Middlewares...
Komplettes System starten
Startet jetzt CrowdSec und den Bouncer:
cd /opt/containers/crowdsec
docker compose up -d
Überprüft, ob alle Services laufen:
docker compose ps
CrowdSec-Entscheidungssystem testen
# Test-Sperre erstellen
docker exec crowdsec cscli decisions add --ip 1.2.3.4 --duration 5m --reason "Test-Sperre"
# Überprüfen, ob die Entscheidung erstellt wurde
docker exec crowdsec cscli decisions list
# Test-Entscheidung wieder löschen
docker exec crowdsec cscli decisions delete --ip 1.2.3.4
Middleware zu bestehenden Services hinzufügen
Um bestehende Services zu schützen, fügt die CrowdSec-Middleware hinzu:
# Beispiel: Zu einem bestehenden Service hinzufügen
labels:
- "traefik.http.routers.meinservice.middlewares=crowdsec-bouncer@file"
Nützliche Befehle
# CrowdSec-Metriken anzeigen
docker exec crowdsec cscli metrics
# Verfügbare Collections anzeigen
docker exec crowdsec cscli collections list
# Aktuelle Alerts anzeigen
docker exec crowdsec cscli alerts list --limit 5
# Entscheidungssystem testen
docker exec crowdsec cscli decisions add --ip 192.168.1.100 --duration 1m --reason "Test"
docker exec crowdsec cscli decisions list
docker exec crowdsec cscli decisions delete --ip 192.168.1.100
Fazit
Eure CrowdSec-Integration mit Traefik ist jetzt vollständig! Das System wird:
- ✅ Traefik Access-Logs in Echtzeit überwachen
- ✅ Verdächtige Verhaltensmuster erkennen
- ✅ Automatisch bösartige IP-Adressen blockieren
- ✅ Alle Services mit der
crowdsec-bouncer@file
Middleware schützen - ✅ Detaillierte Metriken und Alerting bereitstellen
[ˌtuːˌtæpˈtoːbi]