Wazuh mit Docker installieren: Einheitliche XDR- und SIEM-Plattform für KMU
Wazuh vereint XDR und SIEM in einer Open-Source-Plattform. Die Anleitung zeigt die Installation des Single-Node-Stacks 4.14.8 per Docker Compose mit Zertifikaten, geänderten Standardpasswörtern, Agenten-Anbindung, Updates und Backup.
Geprüft am 30.09.2026 · für wazuh 4.14.8
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Wazuh ist eine Open-Source-Plattform, die Extended Detection and Response (XDR) und Security Information and Event Management (SIEM) vereint: Bedrohungserkennung, Dateiintegritäts-Monitoring (FIM), Schwachstellenanalyse, Compliance-Berichte (PCI DSS, HIPAA, GDPR, CIS) und Active Response mit Weboberfläche. Diese Anleitung installiert den Single-Node-Stack von Wazuh 4.14.8 per Docker Compose. Die Installation ohne Docker direkt auf Ubuntu beschreibt Wazuh 4.14 SIEM auf Ubuntu 24.04 installieren.
Voraussetzungen
- Docker Engine (ab Version 20.10) und Docker Compose Plugin v2 auf dem Host, siehe Docker und Docker Compose auf Linux installieren
- Linux-Host (empfohlen: Ubuntu 22.04/24.04 oder Debian 12), x86_64 oder ARM64 (laut offizieller Dokumentation beide unterstützt)
- Mindestens 4 CPU-Kerne, 8 GB RAM, 50 GB freier Festplattenplatz für Single-Node
- Git zum Klonen des Wazuh-Docker-Repositories
- curl und ein Browser, Internetzugang für den Image-Download
- Optional: Reverse Proxy (nginx, Traefik, Caddy) für eigene Domain und Zertifikate; Ports 1514/1515 bleiben direkt erreichbar
| Komponente | Image | Interne Port(s) | Externer Port |
|---|---|---|---|
| Wazuh Manager + Filebeat | wazuh/wazuh-manager:4.14.8 | 1514, 1515, 514/udp, 55000 | 1514, 1515, 514/udp; 55000 nur 127.0.0.1 |
| Wazuh Indexer (OpenSearch) | wazuh/wazuh-indexer:4.14.8 | 9200 | 9200 nur 127.0.0.1 |
| Wazuh Dashboard | wazuh/wazuh-dashboard:4.14.8 | 5601 | 443 |
| Zertifikat-Generator (einmalig) | wazuh/wazuh-certs-generator:0.0.4 | – | – |
Schritt 1: Repository klonen und Projektverzeichnis vorbereiten
Das offizielle wazuh-docker-Repository enthält den vollständigen Single-Node-Stack inklusive Konfigurations-Templates und der generate-indexer-certs.yml für die SSL-Zertifikate. Das Tag muss zu den Image-Versionen passen, hier v4.14.8.
git clone https://github.com/wazuh/wazuh-docker.git -b v4.14.8
cd wazuh-docker/single-nodeAlle folgenden Befehle laufen im Verzeichnis wazuh-docker/single-node/.
Verifizieren:
ls -la
# Erwartete Ausgabe: docker-compose.yml, generate-indexer-certs.yml, config/Schritt 2: vm.max_map_count setzen (Pflicht)
Wazuh Indexer basiert auf OpenSearch, das eine erhöhte Kernel-Einstellung für virtuelle Speicherbereiche benötigt. Ohne diesen Schritt startet der Indexer-Container nicht und zeigt den Fehler „max virtual memory areas vm.max_map_count [65530] is too low“. Setzen Sie den Wert sofort und dauerhaft:
# Sofort wirksam (bis zum nächsten Reboot):
sudo sysctl -w vm.max_map_count=262144
# Dauerhaft persistieren:
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-wazuh.confVerifizieren:
sysctl vm.max_map_count
# Erwartete Ausgabe: vm.max_map_count = 262144Schritt 3: SSL-Zertifikate generieren
Wazuh verwendet für die interne Kommunikation zwischen Manager, Indexer und Dashboard gegenseitige TLS-Authentifizierung. Die Zertifikate werden mit einem kurzlebigen Hilfs-Container einmalig erzeugt und in ./config/wazuh_indexer_ssl_certs/ abgelegt. Dieser Schritt muss vor dem ersten docker compose up erfolgen, sonst starten die Container mit „No such file or directory“.
docker compose -f generate-indexer-certs.yml run --rm generatorDer Generator-Container läuft wenige Sekunden und beendet sich dann selbst. Er legt unter anderem root-ca.pem, wazuh.manager.pem, wazuh.indexer.pem und wazuh.dashboard.pem samt zugehöriger Schlüssel an.
Verifizieren:
ls config/wazuh_indexer_ssl_certs/
# Erwartete Dateien: root-ca.pem, root-ca.key, admin.pem, admin-key.pem,
# wazuh.manager.pem, wazuh.manager-key.pem,
# wazuh.indexer.pem, wazuh.indexer-key.pem,
# wazuh.dashboard.pem, wazuh.dashboard-key.pemSchritt 4: Standardpasswörter ersetzen
Die offizielle docker-compose.yml enthält feste Standardwerte: admin/SecretPassword für Indexer und Dashboard, kibanaserver/kibanaserver und wazuh-wui/MyS3cr37P450r.*- für die API. Die Compose-Datei liest keine .env-Variablen, und der Indexer prüft Passwörter gegen Hashes in config/wazuh_indexer/internal_users.yml. Ändern Sie deshalb alle drei Stellen, wie in der offiziellen Dokumentation beschrieben.
docker-compose.yml: Ersetzen Sie jedes Vorkommen vonSecretPassword,kibanaserver(nur beiDASHBOARD_PASSWORD) undMyS3cr37P450r.*-durch Ihre Passwörter. Ein$im Passwort schreiben Sie als$$.- Hashes erzeugen für das neue
admin- undkibanaserver-Passwort (Passwort eingeben, Hash kopieren):
docker run --rm -ti wazuh/wazuh-indexer:4.14.8 bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/hash.shconfig/wazuh_indexer/internal_users.yml: Tragen Sie die Hashes beiadminundkibanaserverunterhash:ein.config/wazuh_dashboard/wazuh.yml: Setzen Sie beipassword:das neue API-Passwort. Es braucht 8 bis 64 Zeichen mit Groß- und Kleinbuchstaben, Ziffer und Sonderzeichen, sonst startet der Manager nicht.
Binden Sie außerdem Indexer und API an 127.0.0.1; Agenten brauchen nur 1514 und 1515, das Dashboard erreicht beide intern:
# docker-compose.yml (Auszug, geänderte Zeilen)
wazuh.manager:
ports:
- "1514:1514"
- "1515:1515"
- "514:514/udp"
- "127.0.0.1:55000:55000"
wazuh.indexer:
ports:
- "127.0.0.1:9200:9200"Schützen Sie die Dateien mit Passwörtern:
chmod 600 docker-compose.yml config/wazuh_dashboard/wazuh.ymlVerifizieren:
grep -c -e SecretPassword -e 'MyS3cr37P450r' docker-compose.yml config/wazuh_dashboard/wazuh.yml
# Erwartete Ausgabe: jeweils 0Schritt 5: Stack starten und Passwörter anwenden
docker compose up -dDer erste Start dauert 2 bis 5 Minuten. Meldungen „Failed to connect to Wazuh indexer port 9200“ sind in dieser Zeit normal. Wenden Sie danach die neuen Indexer-Passwörter an:
docker exec -it single-node-wazuh.indexer-1 bash
# im Container:
export INSTALLATION_DIR=/usr/share/wazuh-indexer
export CONFIG_DIR=$INSTALLATION_DIR/config
export JAVA_HOME=$INSTALLATION_DIR/jdk
bash $INSTALLATION_DIR/plugins/opensearch-security/tools/securityadmin.sh -cd $CONFIG_DIR/opensearch-security/ \
-nhnv -cacert $CONFIG_DIR/certs/root-ca.pem -cert $CONFIG_DIR/certs/admin.pem -key $CONFIG_DIR/certs/admin-key.pem -p 9200 -icl
exitVerifizieren:
docker compose ps
# Erwartete Ausgabe: alle drei Container im Status "Up" oder "running"
# NAME STATUS
# single-node-wazuh.manager-1 Up X minutes
# single-node-wazuh.indexer-1 Up X minutes
# single-node-wazuh.dashboard-1 Up X minutesSchritt 6: Dashboard aufrufen und Erst-Login
Sobald alle drei Container laufen, ist das Dashboard per HTTPS erreichbar. Der Browser zeigt eine Zertifikatswarnung für das selbst signierte Zertifikat aus Schritt 3. Bestätigen Sie die Ausnahme oder binden Sie später ein eigenes Zertifikat ein.
- URL:
https://<IP-des-Hosts>oderhttps://localhost - Benutzername:
admin - Passwort: Ihr neues
admin-Passwort aus Schritt 4
Nach dem Login zeigt das Dashboard Übersichten zu Agenten, Sicherheitsereignissen und Compliance-Status.
Verifizieren:
# HTTPS-Erreichbarkeit prüfen (selbst-signiertes Zertifikat -k ignorieren):
curl -k -s -o /dev/null -w "%{http_code}" https://localhost
# Erwartete Ausgabe: 200 oder 302
# Wazuh REST API auf Port 55000:
curl -k -u wazuh-wui:IHR_API_PASSWORT "https://localhost:55000/security/user/authenticate?raw=true"
# Erwartete Ausgabe: ein JWT-Token (langer Zeichenstring)
# Standardpasswort darf nicht mehr gelten:
curl -k -s -o /dev/null -w "%{http_code}" -u admin:SecretPassword https://localhost:9200
# Erwartete Ausgabe: 401Schritt 7: Wazuh-Agenten auf Endpoints installieren
Agenten laufen auf den überwachten Systemen und senden Ereignisse an den Manager. Die Agentenversion darf nicht neuer sein als der Manager; installieren Sie daher 4.14.8.
Linux (Debian/Ubuntu):
# Wazuh-Repository einbinden:
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --dearmor -o /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" \
| sudo tee /etc/apt/sources.list.d/wazuh.list
sudo apt update
sudo WAZUH_MANAGER="<IP-des-Docker-Hosts>" apt install -y wazuh-agent=4.14.8-1
sudo apt-mark hold wazuh-agent
sudo systemctl enable --now wazuh-agentWindows: MSI-Installer 4.14.8 von packages.wazuh.com mit dem Parameter WAZUH_MANAGER=<IP> installieren. Der Agent registriert sich über Port 1515 und sendet über Port 1514. Die Installation auf weiteren Systemen beschreibt auch die native Wazuh-Anleitung.
Verifizieren:
# Manager-Logs auf neue Agenten-Registrierungen prüfen:
docker compose logs wazuh.manager | grep "registration"
# Erwartete Ausgabe: Zeilen zur Registrierung des neuen AgentenIm Dashboard steht der Agent nach wenigen Minuten unter Agents mit Status „Active“.
Schritt 8: Updates und Backup
Die Image-Tags sind fest. Ein Update erfolgt nach offizieller Dokumentation über das nächste Repository-Tag; sichern Sie vorher Volumes und config/:
docker compose down
git stash # eigene Änderungen sichern
git fetch --all --tags
git checkout v4.14.9 # Beispiel: gewünschtes neues Tag
git stash pop # Änderungen wieder einspielen, Konflikte prüfen
docker compose up -dLesen Sie vorher die Release Notes. Daten und Zertifikate bleiben in den Volumes und in config/ erhalten.
Die kritischen Daten für ein Backup sind die Named Volumes (insbesondere wazuh-indexer-data, wazuh_etc, wazuh_logs) und das Verzeichnis config/ mit den Zertifikaten und Konfigurationsdateien. Zu Backup-Strategien siehe 3-2-1-Backup-Strategie umsetzen.
Verifizieren:
docker compose ps
# Nach dem Update: alle Container im Status "Up" mit neuem Image-Tag
docker compose logs wazuh.indexer --tail=20
# Keine Fehler zu Zertifikaten oder VerbindungenTroubleshooting / Typische Fehler
- „vm.max_map_count [65530] is too low“: Der Indexer startet nicht. Lösung:
sudo sysctl -w vm.max_map_count=262144, danachdocker compose restart wazuh.indexer; dauerhaft wie in Schritt 2. - „No such file or directory“ für Zertifikatspfade: Schritt 3 fehlt. Lösung:
docker compose down, Generator ausführen, danndocker compose up -d. - „port is already allocated“ für Port 443: Ein anderer Webserver belegt den Port. Lösung: In
docker-compose.ymlden Dashboard-Port auf"8443:5601"ändern, danach erreichbar unterhttps://HOST:8443. - „Failed to connect to Wazuh indexer port 9200“: Normal während der Initialisierung (2 bis 5 Minuten).
- Indexer bricht mit OutOfMemoryError ab: Java-Heap zu klein. In
docker-compose.ymlOPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2gsetzen (höchstens die Hälfte des RAM), danndocker compose up -d. - „exec format error“ beim Zertifikat-Generator: Ältere Generator-Versionen gab es nur für x86_64.
generate-indexer-certs.ymlaus Tagv4.14.8nutztwazuh-certs-generator:0.0.4mit ARM64-Unterstützung. - Zertifikatswarnung im Browser: Erwartet beim selbst signierten Zertifikat. Ausnahme bestätigen oder eigenes Zertifikat einbinden.
- Login mit neuem Passwort scheitert,
SecretPasswordfunktioniert noch: Hash ininternal_users.ymlfehlt odersecurityadmin.shwurde nicht ausgeführt. Schritt 4 und 5 wiederholen; vorher im Dashboard abmelden.
Häufige Fragen
Wie verbinde ich einen Wazuh-Agenten mit dem Manager im Docker-Stack?
Installieren Sie den Agenten (Linux-Paket, Windows-MSI, macOS-PKG) in Version 4.14.8 mit WAZUH_MANAGER=<IP des Docker-Hosts>. Er registriert sich über Port 1515 und sendet über Port 1514.
Kann ich das Dashboard auf einem anderen Port als 443 betreiben?
Ja. Ändern Sie beim Service wazuh.dashboard den Port auf "8443:5601" und führen Sie docker compose up -d aus. Das Dashboard ist dann unter https://HOST:8443 erreichbar.
Wie ändere ich die Standard-Passwörter nach der Installation?
Nach dem Verfahren aus Schritt 4 und 5: Passwort in docker-compose.yml, Hash in internal_users.yml, API-Passwort zusätzlich in wazuh.yml, dann docker compose down, up -d und securityadmin.sh. Ändern Sie immer nur einen Benutzer auf einmal und melden Sie sich vorher im Dashboard ab.
Wie viel Festplattenplatz brauche ich langfristig?
Das Volume wazuh-indexer-data wächst mit Agenten und Ereignissen; messen Sie das Wachstum in den ersten Wochen. Legen Sie im Dashboard unter Index Management Aufbewahrungsrichtlinien (Index State Management) an, die alte Indizes automatisch löschen.
Welche Compliance-Frameworks sind out-of-the-box enthalten?
Wazuh liefert vorkonfigurierte Regelsets und Dashboards für PCI DSS, HIPAA, GDPR, NIST 800-53, TSC und CIS Benchmarks. Compliance-Ereignisse erscheinen nach der Agenteninstallation im Dashboard ohne eigene Regeln.
Kann Wazuh hinter einem Reverse Proxy betrieben werden?
Ja, das Dashboard (intern Port 5601) läuft hinter nginx, Traefik oder Caddy. Die Agenten-Ports 1514 und 1515 sprechen kein HTTP und müssen direkt erreichbar bleiben. Grundlagen: Traefik als Docker-Reverse-Proxy mit automatischem HTTPS.
Single-Node oder Multi-Node – wann lohnt sich der Aufwand?
Single-Node genügt für kleinere Umgebungen. Multi-Node (drei Indexer, zwei Manager, nginx) lohnt sich bei hohem Log-Volumen oder Hochverfügbarkeitsbedarf und braucht laut Dokumentation mindestens 16 GB RAM und 100 GB Speicher. Beide Varianten können wegen Portkonflikten nicht gleichzeitig auf einem Host laufen.
Fazit
Wazuh per Docker Compose bietet KMU Bedrohungserkennung, Dateiintegritäts-Monitoring, Schwachstellenanalyse und Compliance-Dashboards in einem Stack. Entscheidend ist die Reihenfolge: vm.max_map_count setzen, Zertifikate erzeugen, Standardpasswörter an allen drei Stellen ersetzen, starten und securityadmin.sh ausführen. Zur Härtung siehe Docker Compose absichern, zur Einordnung EDR/XDR für KMU auswählen und einführen.
Weiterführende Anleitungen und Quellen
- Docker und Docker Compose auf Linux installieren – die Self-Hosting-Grundlage
- Docker Compose absichern: Secrets, Healthchecks, Non-Root und Read-Only
- EDR/XDR für KMU auswählen und einführen: Vergleich und Einführungsleitfaden
- Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten
- Wazuh 4.14 SIEM auf Ubuntu 24.04 nativ installieren
- CrowdSec mit Docker installieren: Community-basiertes Intrusion Prevention System
Offizielle Quellen: Wazuh Docker Deployment – offizielle Dokumentation | Changing the default password (Docker) | wazuh/wazuh-docker – GitHub Repository


