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
Inhaltsverzeichnis
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.
- 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
root-ca.pem- Root Certificate Authorityadmin.pem / admin-key.pem- Admin-Zertifikatwazuh.indexer.pem- Indexer-Zertifikatwazuh.manager.pem- Manager-Zertifikatwazuh.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
| 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
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 |
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
Lösung: Healthcheck anpassen, sodass HTTP 401 als "erreichbar" gilt.
Problem 2: Dashboard i18n Error
[I18n] A locale must be a non-empty stringLösung: In opensearch_dashboards.yml hinzufügen:
i18n.locale: "en"
Problem 3: API Connection "Offline"
Lösung: wazuh.yml mit korrektem API-Passwort aktualisieren und Dashboard neu starten.
Problem 4: wazuh-maild startet nicht
Lösung: In ossec.conf ändern und Manager neu starten:
<email_notification>yes</email_notification>
Problem 5: Docker-Listener "Invalid element"
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
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
- 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