In der heutigen vernetzten Welt ist die Sicherheit unserer digitalen Infrastruktur wichtiger denn je. Ob Sie persönliche Daten in Vaultwarden speichern, geschäftskritische Anwendungen in Docker betreiben oder auf NPM-basierte Dienste angewiesen sind – die ständige Bedrohung durch Cyberangriffe erfordert proaktive Maßnahmen. Hier kommt Crowdsec ins Spiel: ein leistungsstarkes und quelloffenes Intrusion Prevention System, das automatisch bösartiges Verhalten erkennt und blockiert. Dieser umfassende Leitfaden zeigt Ihnen, wie Sie Crowdsec richtig konfigurieren, um Ihre Docker-Umgebung, Ihren Vaultwarden-Server und Ihre NPM-Anwendungen optimal zu schützen.
Warum Crowdsec? Eine Einführung
Stellen Sie sich vor, eine globale Gemeinschaft von Sicherheitsexperten arbeitet zusammen, um Cyberbedrohungen zu identifizieren und die Informationen in Echtzeit zu teilen. Das ist die Grundidee hinter Crowdsec. Es ist ein Community-basiertes IP-Reputationssystem, das Logdateien Ihrer Server analysiert, um Angriffsmuster wie Brute-Force-Angriffe, Port-Scans, Web-Scraping und DDoS-Versuche zu erkennen. Sobald eine Bedrohung identifiziert wurde, kann Crowdsec über sogenannte „Bouncer” automatische Gegenmaßnahmen einleiten, indem es Angreifer blockiert, zum Beispiel über Ihre Firewall, einen Reverse Proxy wie Nginx oder sogar über einen externen Dienst wie Cloudflare.
Die Hauptkomponenten von Crowdsec sind:
- Crowdsec Agent: Dieser Dienst läuft auf Ihrem Server und überwacht Logdateien. Er verwendet Parser, um relevante Informationen aus den Logs zu extrahieren, und Szenarien, um bösartiges Verhalten zu erkennen.
- Crowdsec Bouncer: Dies sind die Komponenten, die die vom Agenten getroffenen Entscheidungen umsetzen. Sie blockieren Angreifer an verschiedenen Punkten Ihrer Infrastruktur.
- Crowdsec Hub: Eine zentrale Plattform, auf der Sie zusätzliche Parser, Szenarien und Sammlungen finden und installieren können.
Crowdsec in einer Docker-Umgebung installieren
Die Integration von Crowdsec in eine Docker-Umgebung erfordert ein durchdachtes Setup, um sicherzustellen, dass Crowdsec Zugriff auf alle relevanten Logs hat und Bouncer effektiv arbeiten können. Wir empfehlen, Crowdsec selbst als Docker-Container zu betreiben.
Docker Compose Setup für Crowdsec
Erstellen Sie eine docker-compose.yml
-Datei für Crowdsec. Diese Konfiguration ermöglicht es Crowdsec, auf Host-Logs zuzugreifen und ggf. mit einem Firewall-Bouncer zu interagieren.
version: '3.8'
services:
crowdsec:
image: crowdsec/crowdsec:latest
container_name: crowdsec
ports:
- "8080:8080" # Für die API, wenn benötigt
volumes:
- ./crowdsec-config:/etc/crowdsec
- ./crowdsec-data:/var/lib/crowdsec
- /var/log:/var/log:ro # Zugriff auf Host-Logs
- /var/lib/docker/containers:/var/lib/docker/containers:ro # Optional: Für Docker-Container-Logs
- /etc/os-release:/etc/os-release:ro # Für OS-Erkennung
environment:
- TZ=Europe/Berlin # Oder Ihre Zeitzone
cap_add:
- NET_ADMIN # Erforderlich für den Firewall-Bouncer
- NET_RAW # Erforderlich für den Firewall-Bouncer
restart: unless-stopped
# Beispiel für einen Firewall-Bouncer
crowdsec-firewall-bouncer:
image: crowdsec/cs-firewall-bouncer:latest
container_name: crowdsec-firewall-bouncer
environment:
- TZ=Europe/Berlin
- CROWDSEC_AGENT_HOST=crowdsec:8080 # Verbindung zum Crowdsec Agent
- BOUNCER_KEY=YOUR_BOUNCER_API_KEY # Diesen Schlüssel müssen Sie generieren
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- /etc:/etc:ro # Erforderlich für nftables/iptables Konfiguration
- /lib/modules:/lib/modules:ro # Erforderlich für Kernel-Module
restart: unless-stopped
depends_on:
- crowdsec
Wichtige Schritte:
- Erstellen Sie die Verzeichnisse
crowdsec-config
undcrowdsec-data
. - Generieren Sie einen Bouncer-API-Schlüssel: Führen Sie nach dem Starten des Crowdsec-Containers (aber vor dem Bouncer)
docker exec crowdsec cscli bouncers add crowdsec-firewall-bouncer
aus. Ersetzen SieYOUR_BOUNCER_API_KEY
imdocker-compose.yml
mit dem generierten Schlüssel. - Stellen Sie sicher, dass die Host-Volumes für Logs und Firewall korrekt gemountet sind. Insbesondere
/var/log
ist entscheidend für allgemeine System-Logs und Reverse-Proxy-Logs.
Log-Sammlung aus Docker-Containern
Damit Crowdsec die Aktivitäten Ihrer Docker-Container überwachen kann, müssen die Logs der Container zugänglich gemacht werden. Es gibt mehrere Strategien:
- Reverse Proxy Logs: Dies ist oft die einfachste und effektivste Methode. Wenn Ihre Anwendungen (wie Vaultwarden oder NPM-Apps) hinter einem Reverse Proxy (Nginx, Caddy, Traefik) laufen, sammeln Sie die Logs des Reverse Proxys. Der Proxy sieht alle Client-IPs und Anfragen, was ideal für Crowdsec ist. Mounten Sie das Log-Verzeichnis Ihres Proxys in den Crowdsec-Container (z.B.
/var/log/nginx:/var/log/nginx:ro
). - Bind-Mounts für Anwendungs-Logs: Wenn eine Anwendung ihre Logs in einem spezifischen Verzeichnis innerhalb des Containers schreibt und Sie diese direkt überwachen möchten, können Sie dieses Verzeichnis als Volume auf den Host mounten und dann dieses Host-Verzeichnis wiederum in den Crowdsec-Container mounten. Beispiel:
- ./my-app-logs:/opt/my-app/logs:ro
im App-Container und dann- ./my-app-logs:/var/log/my-app:ro
im Crowdsec-Container. - Docker Log Driver (fortgeschritten): Sie können Crowdsec so konfigurieren, dass es direkt die Logs vom Docker-Daemon über den
docker.sock
liest. Dies ist komplexer und erfordert, dass der Crowdsec-Container Zugriff auf/var/run/docker.sock
erhält (z.B.- /var/run/docker.sock:/var/run/docker.sock:ro
). Hierfür gibt es spezielle Parser in Crowdsec, die Docker-Logs im JSON-Format verarbeiten können.
Für die meisten Webanwendungen ist die Überwachung der Reverse Proxy Logs der Goldstandard.
Crowdsec für Vaultwarden konfigurieren
Vaultwarden ist eine beliebte, selbstgehostete Alternative zu Bitwarden. Es wird typischerweise in einem Docker-Container betrieben und über einen Reverse Proxy zugänglich gemacht (z.B. Nginx, Caddy). Der Schutz von Vaultwarden mit Crowdsec konzentriert sich daher primär auf die Absicherung des vorgelagerten Reverse Proxys.
1. Reverse Proxy Logs sammeln
Stellen Sie sicher, dass Ihr Reverse Proxy seine Access Logs und Error Logs in einem Verzeichnis speichert, auf das Crowdsec zugreifen kann. Für Nginx könnte dies /var/log/nginx/access.log
und /var/log/nginx/error.log
sein. Wenn Nginx ebenfalls in Docker läuft, mounten Sie dessen Log-Verzeichnis auf den Host, und mounten Sie dann dieses Host-Verzeichnis in den Crowdsec-Container, wie oben beschrieben.
2. Crowdsec Parser und Szenarien aktivieren
Crowdsec verfügt über vorkonfigurierte Parser und Szenarien für gängige Webserver. Aktivieren Sie die relevanten Sammlungen:
docker exec crowdsec cscli collections install crowdsec/nginx
docker exec crowdsec cscli collections install crowdsec/http-cve
# Für weitere allgemeine Web-Bedrohungen
docker exec crowdsec cscli collections install crowdsec/apache # Auch wenn Nginx, da es allgemeine HTTP-Szenarien enthält
Diese Sammlungen enthalten Parser, die Nginx-Logs verstehen, und Szenarien, die typische Brute-Force-Angriffe, Scanning-Versuche und andere bösartige HTTP-Anfragen erkennen. Für Vaultwarden sind insbesondere Szenarien relevant, die sich auf wiederholte fehlgeschlagene Anmeldeversuche oder den Zugriff auf sensitive Endpunkte konzentrieren.
3. Spezifische Vaultwarden-Szenarien (optional)
Obwohl die allgemeinen HTTP-Szenarien viel abdecken, könnten Sie bei Bedarf spezifischere Szenarien für Vaultwarden entwickeln oder anpassen, falls Angreifer sich auf Vaultwarden-spezifische Endpunkte konzentrieren. Dies würde erfordern, dass Sie die HTTP-Anfragen, die an Vaultwarden gehen, genau analysieren und eigene, benutzerdefinierte Szenarien schreiben, die spezifische URL-Pfade oder Fehlercodes überwachen.
Crowdsec für NPM-basierte Anwendungen absichern
„NPM” bezieht sich oft auf den Node Package Manager, aber im Kontext der Absicherung meinen wir meist Node.js-Webanwendungen, die über NPM verwaltet werden (z.B. Express.js-Anwendungen, die über Nginx oder Caddy bereitgestellt werden). Der Schutzansatz ist hier dem von Vaultwarden sehr ähnlich, da die Angriffe ebenfalls auf die HTTP-Schnittstelle der Anwendung abzielen.
1. Log-Quellen identifizieren
Wie bei Vaultwarden ist der Reverse Proxy (Nginx, Caddy) die primäre Log-Quelle. Stellen Sie sicher, dass diese Logs von Crowdsec erfasst werden.
Wenn Ihre Node.js-Anwendung eigene, detaillierte Zugriffs- oder Fehlerlogs schreibt, können Sie diese ebenfalls in Crowdsec einbinden. Achten Sie darauf, dass die Logs in einem Format vorliegen, das von einem Crowdsec-Parser verstanden werden kann. Oft ist JSON ein gutes Format für Anwendungs-Logs, da es einfach zu parsen ist.
2. Crowdsec Parser und Szenarien für Node.js-Apps
Aktivieren Sie die gleichen allgemeinen Webserver- und HTTP-Szenarien wie für Vaultwarden:
docker exec crowdsec cscli collections install crowdsec/nginx
docker exec crowdsec cscli collections install crowdsec/http-cve
Diese Szenarien erkennen eine Vielzahl von Bedrohungen, die auch Node.js-Anwendungen betreffen können, wie z.B. Web-Scans, Injections-Versuche und Denial-of-Service-Angriffe.
3. Spezifische API-Absicherung
Node.js-Anwendungen sind oft APIs. APIs können spezifischen Missbrauch erfahren, wie z.B. zu viele Anfragen in kurzer Zeit (Rate Limiting), unautorisierte Zugriffsversuche auf Endpunkte oder das Ausnutzen von bekannten Schwachstellen in den verwendeten Frameworks.
- Rate Limiting mit Crowdsec: Wenn Ihre Anwendung keine eigene Rate-Limiting-Logik hat, können Sie Crowdsec-Szenarien verwenden, um wiederholte Anfragen an bestimmte API-Endpunkte zu erkennen und zu blockieren.
# Beispiel für ein Szenario zur Erkennung von zu vielen Anfragen an einen spezifischen API-Endpunkt name: custom/api-abuse description: "Detects too many requests to a specific API endpoint" filter: "evt.Meta.http_path starts_with '/api/v1/user/'" # Anpassung an Ihren API-Pfad capacity: 5 interval: 10s threshold: 10 # 10 Anfragen innerhalb von 10 Sekunden scope: ip labels: type: service_abuse
Dieses Beispiel müsste in eine
.yaml
-Datei gepackt und viacscli scenarios add <pfad/zur/datei>
hinzugefügt werden. - Monitoring von Anwendungsfehlern: Wenn Ihre Node.js-Anwendung Fehler wie 4xx oder 5xx Statuscodes loggt, können Sie Crowdsec-Parser schreiben, um diese zu überwachen. Ein Anstieg bestimmter Fehlercodes könnte auf einen Angriff hindeuten.
Bouncer-Konfiguration: Die Verteidigungslinie
Crowdsec ist nur so gut wie seine Bouncer, die die vom Agenten erkannten Bedrohungen in die Tat umsetzen. Es gibt verschiedene Arten von Bouncern, je nachdem, wo Sie die Blockierung durchführen möchten.
1. Firewall Bouncer (cs-firewall-bouncer
)
Dies ist der am häufigsten verwendete Bouncer und wurde bereits im Docker-Compose-Beispiel gezeigt. Er blockiert bösartige IPs direkt auf der Ebene Ihrer Server-Firewall (nftables oder iptables). Dies bietet einen umfassenden Schutz für alle Dienste auf dem Server, unabhängig davon, ob sie in Docker laufen oder nicht.
Aktivierung: Stellen Sie sicher, dass der Container mit den richtigen cap_add
-Berechtigungen und Volume-Mounts läuft. Der BOUNCER_KEY
muss mit dem von cscli bouncers add
generierten Schlüssel übereinstimmen.
2. Nginx Bouncer (crowdsec-nginx-bouncer
)
Dieser Bouncer integriert sich direkt in Nginx und ermöglicht eine feingranulare Blockierung auf HTTP-Ebene. Er ist nützlich, wenn Sie beispielsweise Cloudflare als zusätzlichen Schutz haben, aber dennoch eine schnelle Reaktion auf Ihrem Origin-Server wünschen.
Installation: Installieren Sie den Nginx Bouncer als eigenständigen Dienst oder innerhalb eines Containers. Er benötigt eine Konfiguration in Nginx (oft in nginx.conf
oder in einer vhost-Datei), die auf einen Socket des Bouncers verweist. Das offizielle Crowdsec-Dokumentation bietet hierfür detaillierte Anleitungen.
3. Cloudflare Bouncer (crowdsec-cloudflare-bouncer
)
Wenn Sie Cloudflare für Ihre Domains verwenden, ist der Cloudflare Bouncer äußerst effektiv. Er blockiert Angreifer bereits an der Edge von Cloudflare, bevor sie Ihren Server überhaupt erreichen. Dies reduziert die Last auf Ihrem Server erheblich.
Konfiguration: Sie müssen API-Token für Cloudflare bereitstellen und die Zone(n) konfigurieren, die geschützt werden sollen. Der Bouncer wird die IPs, die von Crowdsec gemeldet werden, direkt in die Cloudflare Firewall Rules einspeisen.
Überwachung und Wartung
Nachdem Crowdsec konfiguriert ist, ist es wichtig, die Funktionsweise zu überwachen und bei Bedarf Anpassungen vorzunehmen.
cscli
Befehle: Dies ist Ihr Hauptwerkzeug zur Interaktion mit Crowdsec.docker exec crowdsec cscli alerts list
: Zeigt erkannte Bedrohungen an.docker exec crowdsec cscli decisions list
: Zeigt aktive Blockierungsentscheidungen an.docker exec crowdsec cscli bouncers list
: Listet registrierte Bouncer auf.docker exec crowdsec cscli metrics
: Zeigt Statistiken über die Aktivität von Crowdsec.docker exec crowdsec cscli collections list
: Zeigt installierte Sammlungen an.
- Whitelisting: Manchmal werden legitime IPs fälschlicherweise blockiert. Sie können IP-Adressen (z.B. Ihre eigene) oder IP-Bereiche in der
/etc/crowdsec/custom_lapi_whitelists.yaml
-Datei whitelisten, um zu verhindern, dass sie blockiert werden. Nach Änderungen müssen Sie den Crowdsec-Container neu starten oder die Konfiguration neu laden. - Szenarien anpassen: Wenn Sie zu viele Fehlalarme (False Positives) erhalten oder bestimmte Angriffe nicht erkannt werden, können Sie die Schwellenwerte und Parameter der Szenarien anpassen. Kopieren Sie ein Standardszenario in Ihr
crowdsec-config/scenarios/
-Verzeichnis und ändern Sie die Werte.
Häufige Probleme und Tipps
- Log-Pfad-Probleme: Der häufigste Fehler ist, dass Crowdsec keine Zugriff auf die relevanten Logs hat. Überprüfen Sie die Volume-Mounts im
docker-compose.yml
und stellen Sie sicher, dass die Dateipfade innerhalb des Crowdsec-Containers korrekt sind (z.B./var/log/nginx/access.log
). - Berechtigungen: Stellen Sie sicher, dass Crowdsec die notwendigen Leseberechtigungen für die Logdateien hat.
- Bouncer-Schlüssel: Der Bouncer-API-Schlüssel muss korrekt generiert und im Bouncer-Container hinterlegt sein.
- Fehlende Parser/Szenarien: Wenn Angriffe nicht erkannt werden, stellen Sie sicher, dass die passenden Sammlungen und Szenarien über
cscli collections install
aktiviert wurden. - Performance: Bei sehr hohem Traffic kann Crowdsec CPU und RAM verbrauchen. Überwachen Sie die Ressourcen und passen Sie ggf. die Log-Verarbeitung an.
- Monitoring: Richten Sie Benachrichtigungen ein (z.B. E-Mail, Slack), wenn Crowdsec wichtige Entscheidungen trifft, um schnell auf Bedrohungen reagieren zu können.
Fazit
Die Absicherung Ihrer Docker-Container, Vaultwarden-Instanzen und NPM-basierten Anwendungen mit Crowdsec ist eine Investition in die Robustheit und Sicherheit Ihrer digitalen Infrastruktur. Durch die korrekte Konfiguration des Crowdsec Agents, die effektive Sammlung von Logs und den Einsatz passender Bouncer schaffen Sie eine leistungsstarke, automatisierte Verteidigung gegen eine Vielzahl von Cyberbedrohungen. Es mag anfangs etwas Konfigurationsaufwand erfordern, doch die gewonnenen Sicherheitsvorteile und die Gewissheit, dass Ihre Dienste geschützt sind, überwiegen diesen Aufwand bei Weitem. Bleiben Sie wachsam, bleiben Sie geschützt!