Zurück zum Blog

Wazuh SIEM 4.9.2 - Komplettes Security Monitoring Setup

Wazuh SIEM 4.9.2 - Komplettes Security Monitoring Setup

Wazuh SIEM 4.9.2: Komplettes Security Monitoring mit Docker, E-Mail-Alerting und Host-Agent

Aktualisiert 11. Januar 2026
Kategorie Sicherheit & Monitoring
Version Wazuh 4.9.2
Lesezeit 15 Minuten

Einleitung & Architektur

Wazuh ist ein leistungsstarkes Open-Source SIEM (Security Information and Event Management) System, das Sicherheitsereignisse aus verschiedenen Quellen sammelt, analysiert und korreliert. Diese Dokumentation beschreibt das komplette Setup von Wazuh 4.9.2 auf einer Docker-basierten Infrastruktur mit allen Features: Host-Monitoring, Docker-Container-Überwachung und E-Mail-Alerting.

Was bietet Wazuh?
  • Log Analysis: Zentrale Sammlung und Auswertung von System-Logs
  • File Integrity Monitoring (FIM): Erkennung von Dateiänderungen
  • Rootkit Detection: Automatische Malware-Erkennung
  • Vulnerability Detection: Prüfung auf bekannte Schwachstellen
  • Docker Monitoring: Überwachung von Container-Events
  • Compliance: PCI-DSS, GDPR, HIPAA Reports

Architektur-Übersicht

                    ┌─────────────────────────────────────┐
                    │         Wazuh Dashboard              │
                    │      https://siem.ihre-domain.de       │
                    │         (via Traefik)                │
                    └──────────────┬──────────────────────┘
                                   │
                    ┌──────────────▼──────────────────────┐
                    │         Wazuh Manager               │
                    │    (Rules, Analysis, Alerting)      │
                    │         Port 55000 (API)            │
                    │         Port 1514/1515 (Agents)     │
                    └──────────────┬──────────────────────┘
                                   │
          ┌────────────────────────┼────────────────────────┐
          │                        │                        │
┌─────────▼─────────┐   ┌─────────▼─────────┐   ┌─────────▼─────────┐
│   Wazuh Indexer   │   │   Wazuh Agent     │   │   SMTP-Relay      │
│   (OpenSearch)    │   │   (your-server)       │   │   (E-Mail Alerts) │
│   Port 9200       │   │   Docker-Listener │   │                   │
└───────────────────┘   └───────────────────┘   └───────────────────┘

Deployment mit offiziellem Wazuh-Docker

Das Deployment basiert auf dem offiziellen Wazuh Docker Repository (Tag v4.9.2). Dies gewährleistet korrekte SSL-Zertifikate, Security-Initialisierung und stabile Konfiguration.

Deployment-Schritte

1. Repository klonen

cd /opt/docker
git clone https://github.com/wazuh/wazuh-docker.git security
cd security
git checkout v4.9.2

2. SSL-Zertifikate generieren

cd single-node
docker compose -f generate-indexer-certs.yml run --rm generator
Generierte Zertifikate:
  • root-ca.pem - Root Certificate Authority
  • admin.pem / admin-key.pem - Admin-Zertifikat
  • wazuh.indexer.pem - Indexer-Zertifikat
  • wazuh.manager.pem - Manager-Zertifikat
  • wazuh.dashboard.pem - Dashboard-Zertifikat

3. Sichere Passwörter generieren

# .env Datei erstellen
cat > .env << EOF
DOMAIN=ihre-domain.de
WAZUH_INDEXER_PASSWORD=$(openssl rand -base64 32)
WAZUH_API_USERNAME=wazuh-wui
WAZUH_API_PASSWORD=$(openssl rand -base64 32)
WAZUH_DASHBOARD_PASSWORD=$(openssl rand -base64 32)
EOF

4. Password-Hashes für internal_users.yml generieren

# Admin-Password Hash generieren
docker run --rm -e "PASS=$WAZUH_INDEXER_PASSWORD" wazuh/wazuh-indexer:4.9.2 \
  bash -c "plugins/opensearch-security/tools/hash.sh -p \"\$PASS\""

# Hash in internal_users.yml eintragen
vim config/wazuh_indexer/internal_users.yml

Komponenten & Status

Status: Alle Komponenten aktiv
Komponente Container Status Port
Indexer wazuh-indexer healthy 9200
Manager wazuh-manager healthy 1514, 1515, 55000
Dashboard wazuh-dashboard healthy 5601 (intern)
Exporter wazuh-exporter running 9201

Wazuh Indexer (OpenSearch)

Der Indexer speichert alle Security-Events in einer OpenSearch-Datenbank. Er verwendet SSL/TLS für sichere Kommunikation und hat einen eigenen Security-Index für Benutzerauthentifizierung.

Wazuh Manager

Der Manager ist das Herzstück - er empfängt Daten von Agents, wendet Regeln an, erkennt Anomalien und sendet Alerts. Er kommuniziert mit dem Indexer via Filebeat.

Wazuh Dashboard

Das Dashboard (basierend auf OpenSearch Dashboards) bietet eine webbasierte Oberfläche für Visualisierung, Agent-Management und Compliance-Reports.

Traefik Integration

Das Wazuh Dashboard ist über Traefik reverse proxy erreichbar unter https://siem.ihre-domain.de. Die Integration erforderte spezielle Konfiguration wegen des HTTPS-Backends.

Docker Compose Labels

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.wazuh.rule=Host(`siem.ihre-domain.de`)"
  - "traefik.http.routers.wazuh.entrypoints=websecure"
  - "traefik.http.routers.wazuh.tls.certresolver=letsencrypt"
  - "traefik.http.services.wazuh.loadbalancer.server.port=5601"
  - "traefik.http.services.wazuh.loadbalancer.server.scheme=https"
  - "traefik.http.services.wazuh.loadbalancer.serversTransport=wazuh-transport@file"
  - "traefik.docker.network=frontend"

Traefik Transport Configuration

Da das Dashboard intern HTTPS verwendet, muss Traefik das selbst-signierte Zertifikat akzeptieren:

# /opt/docker/compose/traefik/dynamic/wazuh-transport.yml
http:
  serversTransports:
    wazuh-transport:
      insecureSkipVerify: true
Wichtig: Healthcheck-Problem
Traefik ignoriert Container mit Status "unhealthy". Der Standard-Healthcheck des Dashboards schlug fehl (401 Unauthorized), weshalb der Healthcheck angepasst werden musste:
healthcheck:
  test: ["CMD-SHELL", "curl -k -s https://localhost:5601 -o /dev/null -w '%{http_code}' | grep -qE '401|200|302'"]

Host-Agent Installation

Für vollständige Überwachung des Host-Systems wurde ein Wazuh Agent direkt auf dem Server installiert.

Installation

# Agent herunterladen und installieren
wget https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.9.2-1_amd64.deb
WAZUH_MANAGER='MANAGER_IP' WAZUH_AGENT_NAME='your-hostname' dpkg -i wazuh-agent_4.9.2-1_amd64.deb

# Manager-Adresse konfigurieren
sed -i 's/
MANAGER_IP<\/address>/
127.0.0.1<\/address>/' /var/ossec/etc/ossec.conf # Agent starten systemctl enable --now wazuh-agent

Agent Status

Agent ID 001
Name your-server
OS Ubuntu 24.04 LTS
Status Active
Version Wazuh v4.9.2

Überwachte Ressourcen

  • System Logs: /var/log/auth.log, syslog, kern.log
  • File Integrity: /etc, /boot, /usr/bin, /usr/sbin
  • Rootkit Detection: Automatische Scans
  • Vulnerability Detection: Paket-Schwachstellen

Docker Container Monitoring

Der Docker-Listener überwacht alle Container-Events in Echtzeit und meldet sicherheitsrelevante Aktivitäten.

Konfiguration in ossec.conf

<wodle name="docker-listener">
  <disabled>no</disabled>
  <interval>10m</interval>
  <attempts>5</attempts>
  <run_on_start>yes</run_on_start>
</wodle>

Überwachte Events

Event-Typ Beispiele Alert Level
Container start, stop, kill, die, restart 3-5
Image pull, push, delete, tag 3-4
Network connect, disconnect, create, destroy 3-4
Volume create, destroy, mount, unmount 3-4
Beispiel Docker Alert:
Rule: Docker: Network bridge disconnected (Level 4)
  Action: disconnect
  Type: network
  Container: bridge

E-Mail Alerting via SMTP-Relay

Bei kritischen Sicherheitsereignissen werden automatisch E-Mail-Benachrichtigungen über das interne SMTP-Relay versendet.

Konfiguration

SMTP Server smtp-relay (internes Netzwerk)
Absender wazuh@ihre-domain.de
Empfänger admin@ihre-domain.de
Alert Level ≥ 7
Max pro Stunde 12

ossec.conf E-Mail-Konfiguration

<global>
  <email_notification>yes</email_notification>
  <smtp_server>smtp-relay</smtp_server>
  <email_from>wazuh@ihre-domain.de</email_from>
  <email_to>admin@ihre-domain.de</email_to>
  <email_maxperhour>12</email_maxperhour>
</global>

<alerts>
  <log_alert_level>3</log_alert_level>
  <email_alert_level>7</email_alert_level>
</alerts>

Netzwerk-Verbindung

Der Wazuh Manager muss mit dem smtp-internal Netzwerk verbunden sein:

# In docker-compose.yml
networks:
  - security
  - monitoring
  - smtp-internal  # Für E-Mail-Versand

Alert-Level Übersicht

Level Beschreibung E-Mail?
3-6 Informational (Login, Docker Events) Nein
7-9 Warning (Failed Logins, Brute-Force) Ja
10-12 High (Multiple Failures, Firewall) Ja
13-15 Critical (Rootkit, System Compromise) Ja

Troubleshooting & Lessons Learned

Problem 1: Traefik zeigt 404

Ursache: Traefik ignoriert Container mit Healthcheck-Status "unhealthy".
Lösung: Healthcheck anpassen, sodass HTTP 401 als "erreichbar" gilt.

Problem 2: Dashboard i18n Error

Fehler: [I18n] A locale must be a non-empty string
Lösung: In opensearch_dashboards.yml hinzufügen:
i18n.locale: "en"

Problem 3: API Connection "Offline"

Ursache: wazuh.yml enthielt Default-Passwort statt generiertem Passwort.
Lösung: wazuh.yml mit korrektem API-Passwort aktualisieren und Dashboard neu starten.

Problem 4: wazuh-maild startet nicht

Ursache: email_notification war auf "no" gesetzt.
Lösung: In ossec.conf ändern und Manager neu starten:
<email_notification>yes</email_notification>

Problem 5: Docker-Listener "Invalid element"

Ursache: <wodle> außerhalb von <ossec_config> platziert.
Lösung: wodle-Block innerhalb der ossec_config-Tags platzieren.

Wichtige Befehle

Status prüfen

# Container Status
cd /pfad/zu/wazuh/single-node && docker compose ps

# Agent Status
docker exec wazuh-manager /var/ossec/bin/agent_control -l

# Manager Services
docker exec wazuh-manager /var/ossec/bin/wazuh-control status

# Cluster Health
docker exec wazuh-manager curl -sk -u admin:$PASSWORD \
  https://wazuh.indexer:9200/_cluster/health?pretty

Logs anzeigen

# Manager Logs
docker logs wazuh-manager --tail 100

# Dashboard Logs
docker logs wazuh-dashboard --tail 100

# Agent Logs (auf Host)
tail -f /var/ossec/logs/ossec.log

Neustart

# Kompletten Stack neu starten
cd /pfad/zu/wazuh/single-node && docker compose restart

# Nur Manager neu starten
docker exec wazuh-manager /var/ossec/bin/wazuh-control restart

# Agent neu starten (auf Host)
systemctl restart wazuh-agent

Zugangsdaten

WICHTIG: Diese Passwörter sicher aufbewahren!

Dashboard Login

URL https://siem.ihre-domain.de
Username admin
Password (siehe .env Datei)

API Credentials

Username wazuh-wui
Password (siehe .env Datei)

Passwörter auslesen

# Passwörter sind in der .env Datei im Wazuh-Verzeichnis gespeichert
cat /pfad/zu/wazuh/single-node/.env

Zusammenfassung

Wazuh SIEM 4.9.2 - Vollständig eingerichtet
  • Indexer, Manager, Dashboard: Alle healthy
  • Host-Agent (your-server): Aktiv und verbunden
  • Docker-Monitoring: Container-Events werden erfasst
  • E-Mail-Alerting: Bei Level ≥7 via SMTP-Relay
  • Traefik-Integration: https://siem.ihre-domain.de