Zurück zum Blog

Wazuh SIEM: Umfassende Container-Sicherheit mit Docker-Monitoring

Wazuh SIEM: Umfassende Container-Sicherheit mit Docker-Monitoring

Security & Infrastructure | 12. Januar 2026 | 12 Minuten Lesezeit

Einleitung

In einer Container-basierten Infrastruktur reicht klassisches Monitoring nicht aus. Wir brauchen Security Information and Event Management (SIEM), das nicht nur Verfügbarkeit, sondern auch Sicherheitsbedrohungen erkennt. In diesem Artikel zeige ich, wie wir Wazuh 4.9.2 für umfassende Container-Sicherheit eingerichtet haben – inklusive Docker-Event-Monitoring, Container-Log-Analyse, Vulnerability Detection und VirusTotal-Integration.

Warum Wazuh für Container-Sicherheit?

Unsere Infrastruktur besteht aus über 40 Docker-Containern:

  • Traefik (Reverse Proxy)
  • Mailcow (E-Mail-Server mit 15+ Containern)
  • Authentik (SSO)
  • Nextcloud (File-Sharing)
  • n8n (Workflow-Automation)
  • Directus CMS
  • Grafana, Prometheus (Monitoring)

Was Prometheus nicht kann:

  • Erkennung von Brute-Force-Attacken
  • Analyse von Container-Logs auf Sicherheitsprobleme
  • Vulnerability Scanning von installierten Paketen
  • File Integrity Monitoring
  • MITRE ATT&CK-Mapping für Threat Intelligence
Wazuh ergänzt Prometheus perfekt:

Prometheus überwacht Performance-Metriken, Wazuh überwacht Sicherheit. Zusammen bilden sie ein vollständiges Observability-Stack.

Architektur-Übersicht

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

Komponenten im Detail

1. Wazuh Indexer (OpenSearch)

Der Indexer speichert alle Security-Events in einer Zeitreihen-Datenbank. Er ist die Grundlage für Dashboards und Suche.

Ressourcen-Anforderungen:

Komponente RAM CPU
Wazuh Indexer 2-4 GB 1-2 Cores
Wazuh Manager 1-2 GB 1-2 Cores
Wazuh Dashboard 512 MB - 1 GB 0.5-1 Core
Gesamt 4-7 GB 3-5 Cores

2. Wazuh Manager

Das Herzstück des Systems. Der Manager:

  • Empfängt Daten von Agents
  • Wendet über 3.000 vordefinierte Regeln an
  • Generiert Alerts und sendet Benachrichtigungen
  • Führt Vulnerability Scans durch

3. Wazuh Agent mit Docker-Listener

Der Agent läuft direkt auf dem Host und überwacht:

  • System-Logs (auth.log, syslog, kern.log)
  • File Integrity (kritische Systemdateien)
  • Docker-Events (Container-Lifecycle)
  • Container-Logs (via Command-Monitoring)

Docker-Event-Monitoring

Der Docker-Listener erfasst alle Container-Events in Echtzeit:

Konfiguration in ossec.conf (Agent)

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

Erfasste Events

Event-Typ Beispiele Alert Level
Container start, stop, kill, die, restart, create, destroy 3-5
Image pull, push, delete, tag 3-4
Network connect, disconnect, create, destroy 3-4
Volume create, destroy, mount, unmount 3-4
Exec exec_start (Shell-Zugriff!) 5
Wichtig: Permission-Problem

Der DockerListener-Prozess muss Schreibzugriff auf den Wazuh-Queue-Socket haben. Lösung:

usermod -aG wazuh root
systemctl restart wazuh-agent

Beispiel-Alert: Shell-Zugriff auf Container

{
  "rule": {
    "level": 5,
    "description": "Docker: Started shell session in container grafana",
    "id": "87908",
    "mitre": {
      "id": ["T1059"],
      "tactic": ["Execution"]
    }
  },
  "data": {
    "docker": {
      "Type": "container",
      "Action": "exec_start: /bin/bash"
    }
  }
}

Container-Log-Monitoring

Zusätzlich zu Docker-Events überwachen wir die Logs sicherheitsrelevanter Container:

Konfiguration

<!-- Traefik Access Logs -->
<localfile>
  <log_format>command</log_format>
  <command>docker logs --tail 50 traefik 2>&1</command>
  <alias>traefik-logs</alias>
  <frequency>120</frequency>
</localfile>

<!-- Authentik Authentication Logs -->
<localfile>
  <log_format>command</log_format>
  <command>docker logs --tail 50 authentik-server 2>&1</command>
  <alias>authentik-logs</alias>
  <frequency>120</frequency>
</localfile>

<!-- Postfix Mail Logs -->
<localfile>
  <log_format>command</log_format>
  <command>docker logs --tail 50 mailcowdockerized-postfix-mailcow-1 2>&1</command>
  <alias>postfix-logs</alias>
  <frequency>120</frequency>
</localfile>

<!-- Dovecot IMAP Logs -->
<localfile>
  <log_format>command</log_format>
  <command>docker logs --tail 50 mailcowdockerized-dovecot-mailcow-1 2>&1</command>
  <alias>dovecot-logs</alias>
  <frequency>120</frequency>
</localfile>

Erkannte Sicherheitsereignisse

  • Brute-Force-Attacken: Fehlgeschlagene Logins in Authentik, Dovecot
  • Spam-Versuche: Rejected connections in Postfix
  • Verdächtige Requests: SQL-Injection, XSS-Versuche in Traefik
  • Unauthorized Access: 401/403 Fehler in kritischen Services

Vulnerability Detection

Wazuh scannt automatisch alle installierten Pakete auf bekannte Schwachstellen (CVEs):

Konfiguration im Manager

<vulnerability-detection>
  <enabled>yes</enabled>
  <index-status>yes</index-status>
  <feed-update-interval>60m</feed-update-interval>
</vulnerability-detection>

Beispiel-Ergebnis

{
  "vulnerability": {
    "id": "CVE-2025-8941",
    "severity": "High",
    "score": 7.8,
    "package": "libpam-runtime",
    "version": "1.5.3-5ubuntu5.5",
    "description": "Privilege escalation via symlink attack"
  },
  "agent": {
    "name": "your-server",
    "os": "Ubuntu 24.04.3 LTS"
  }
}
Ergebnis unseres Scans:

1.727 CVEs gefunden auf dem Host-System. Die meisten sind Low/Medium Severity, aber einige High-Severity CVEs erfordern Aufmerksamkeit.

MITRE ATT&CK Integration

Wazuh mappt Sicherheitsereignisse automatisch auf das MITRE ATT&CK Framework:

Tactic Technique Beispiel-Event
Initial Access T1190 (Exploit Public-Facing App) SQL-Injection in Web-Logs
Execution T1059 (Command & Scripting) Shell-Session in Container
Credential Access T1110 (Brute Force) Failed SSH/IMAP logins
Defense Evasion T1070 (Indicator Removal) Log-Dateien gelöscht
Impact T1561 (Disk Wipe) Container destroyed

VirusTotal Integration

Bei Dateiänderungen (File Integrity Monitoring) wird der Hash automatisch bei VirusTotal geprüft:

Konfiguration im Manager

<integration>
  <name>virustotal</name>
  <api_key>YOUR_VIRUSTOTAL_API_KEY</api_key>
  <group>syscheck</group>
  <alert_format>json</alert_format>
</integration>
VirusTotal API-Key:

Kostenlos erhältlich unter virustotal.com. Free Tier erlaubt 500 Abfragen/Tag.

Workflow

  1. Syscheck erkennt Dateiänderung in überwachtem Verzeichnis
  2. Hash der Datei wird berechnet (SHA256)
  3. Hash wird an VirusTotal API gesendet
  4. Ergebnis wird als Alert angezeigt (Malware gefunden / Clean)

E-Mail-Alerting

Kritische Sicherheitsereignisse werden per E-Mail gemeldet:

Konfiguration

<global>
  <email_notification>yes</email_notification>
  <smtp_server>smtp-relay</smtp_server>
  <email_from>wazuh@example.com</email_from>
  <email_to>admin@example.com</email_to>
  <email_maxperhour>12</email_maxperhour>
</global>

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

Alert-Level-Übersicht

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

Traefik Integration

Das Wazuh Dashboard ist über Traefik mit HTTPS erreichbar:

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.wazuh.rule=Host(`siem.example.com`)"
  - "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"
Wichtig: HTTPS Backend

Da das Wazuh Dashboard intern HTTPS verwendet, muss ein serversTransport mit insecureSkipVerify: true konfiguriert werden.

Troubleshooting

Problem 1: Traefik zeigt 404

Ursache: Traefik ignoriert Container mit Healthcheck-Status "unhealthy".

Lösung: Healthcheck anpassen:

healthcheck:
  test: ["CMD-SHELL", "curl -k -s https://localhost:5601 -o /dev/null -w '%{http_code}' | grep -qE '401|200|302'"]
  interval: 30s
  timeout: 10s
  retries: 5

Problem 2: Docker-Events werden nicht erfasst

Ursache: DockerListener-Prozess kann nicht auf Queue-Socket schreiben.

Lösung:

usermod -aG wazuh root
systemctl restart wazuh-agent

Problem 3: Vulnerability Scanner findet nichts

Ursache: Syscollector auf dem Agent nicht aktiviert.

Lösung: In Agent-ossec.conf:

<wodle name="syscollector">
  <disabled>no</disabled>
  <interval>1h</interval>
  <packages>yes</packages>
</wodle>

Wichtige Befehle

Status prüfen

# Container Status
docker compose ps

# Agent Status (auf Host)
systemctl status wazuh-agent

# Agent-Verbindung prüfen (im Manager)
docker exec wazuh-manager /var/ossec/bin/agent_control -l

# 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

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

# Alerts
docker exec wazuh-manager tail -f /var/ossec/logs/alerts/alerts.json

Dashboard-Module

Modul Beschreibung Datenquelle
Threat Hunting Alle Security Alerts durchsuchen Alle Regeln
Vulnerability Detection CVEs in installierten Paketen Syscollector + NVD Feed
MITRE ATT&CK Taktiken & Techniken Framework Regeln mit MITRE-Mapping
VirusTotal Malware-Analyse von Dateien Syscheck + VT API
File Integrity Änderungen an Systemdateien Syscheck
Security Events Docker Events, Logins, etc. Docker-Listener, Logs

Zusammenfassung

Was wir eingerichtet haben:
  • Wazuh SIEM 4.9.2 mit Indexer, Manager, Dashboard
  • Host-Agent mit Docker-Listener
  • Container-Log-Monitoring (Traefik, Authentik, Postfix, Dovecot, Nextcloud)
  • Vulnerability Detection mit NVD Feeds
  • MITRE ATT&CK Mapping
  • VirusTotal Integration
  • E-Mail-Alerting via SMTP-Relay

Ergebnis:

  • 225+ Security Alerts im Dashboard
  • 1.727 CVEs auf dem Host identifiziert
  • Docker-Events werden in Echtzeit erfasst
  • Container-Logs werden alle 2 Minuten analysiert
  • Kritische Alerts per E-Mail (Level >= 7)

Fazit

Mit Wazuh haben wir ein Enterprise-Grade SIEM für unsere Container-Infrastruktur aufgebaut. Die Kombination aus:

  • Docker-Event-Monitoring für Container-Lifecycle
  • Container-Log-Analyse für Anwendungs-Security
  • Vulnerability Detection für Patch-Management
  • MITRE ATT&CK für Threat Intelligence
  • VirusTotal für Malware-Erkennung

...bietet umfassende Sicherheitsüberwachung für moderne Container-Infrastrukturen.

Wazuh ist Open Source und kostenlos. Die einzigen Kosten sind Infrastruktur (4-7 GB RAM) und Zeit für die Einrichtung.

Weiterführende Links


Dieser Artikel beschreibt die Implementierung eines Wazuh SIEM-Systems für eine self-hosted Docker-Infrastruktur mit umfassender Container-Sicherheitsüberwachung.

Tags: #Wazuh #SIEM #Docker #Security #ContainerSecurity #VulnerabilityManagement #MITRE #VirusTotal #OpenSource