Wazuh Container Monitoring

Aus Xinux Wiki
Version vom 27. Juni 2026, 16:14 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Dieser Artikel baut auf dem Docker-Stack mit Traefik auf und integriert ihn in das SIEM. Der Wazuh-Agent läuft dabei auf dem '''Docke…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Dieser Artikel baut auf dem Docker-Stack mit Traefik auf und integriert ihn in das SIEM. Der Wazuh-Agent läuft dabei auf dem Docker-Host, nicht in den Containern. Drei Telemetriequellen werden eingebunden: Docker-Engine-Events, die Anwendungslogs und Datei-Integritätsüberwachung auf den Volumes.

Konzept

Agent auf dem Host
  • Der Wazuh-Agent wird auf dem Docker-Host installiert. Über das docker-listener-Modul liest er die Events der Docker-Engine direkt vom Socket.
Was im SIEM ankommt
  • Container start, stop und die
  • Image-Pulls
  • docker exec in laufende Container (jemand klettert in den Container)
  • Netzwerk- und Volume-Events
Drei Quellen
  • Engine-Events (docker-listener), Anwendungslogs (Traefik, Nextcloud, MediaWiki) und FIM auf den Daten-Volumes.

Voraussetzung: Python-Modul docker

Das docker-listener-Modul benötigt das Python-docker-SDK in der Wazuh-eigenen Python-Umgebung. Ohne dieses Modul startet der Listener still nicht.

SDK in die Wazuh-Python-Umgebung installieren
  • /var/ossec/framework/python/bin/pip3 install docker
Installation prüfen
  • /var/ossec/framework/python/bin/pip3 show docker

Agent-Konfiguration (ossec.conf)

Der folgende Block kommt in die /var/ossec/etc/ossec.conf des Agents auf dem Docker-Host.

docker-listener aktivieren

<wodle name="docker-listener">
  <interval>10m</interval>
  <attempts>5</attempts>
  <run_on_start>yes</run_on_start>
  <disabled>no</disabled>
</wodle>
interval / attempts
  • Der Listener verbindet sich beim Start mit dem Docker-Socket. attempts regelt, wie oft er es bei Nichterreichbarkeit erneut versucht.
run_on_start
  • Startet das Modul direkt beim Hochfahren des Agents, nicht erst nach dem ersten Intervall.

Anwendungslogs einsammeln

Die Container loggen auf stdout. Bei json-file-Logtreiber liegen die Logs auf dem Host und können direkt als Datei eingelesen werden. Einfacher und stabiler ist es, die relevanten Anwendungslogs auf ein gemountetes Verzeichnis zu schreiben und dieses zu überwachen.

<localfile>
  <log_format>json</log_format>
  <location>/var/lib/docker/containers/*/*-json.log</location>
</localfile>
json-Logtreiber
  • Docker schreibt pro Container eine *-json.log. Wazuh kann diese als json einlesen und die Felder direkt auswerten.

FIM auf den Volumes

Datei-Integritätsüberwachung auf den Daten-Volumes der Anwendungen. Veränderungen an hochgeladenen Dateien oder an der Wiki-Konfiguration lösen ein FIM-Event aus (Rule 554 bei neuen Dateien).

<syscheck>
  <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/docker-stack_nextcloud_data/_data/data</directories>
  <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/docker-stack_mediawiki_data/_data</directories>
</syscheck>
realtime
  • realtime="yes" meldet Änderungen sofort über inotify, statt erst beim nächsten Scan-Durchlauf.
Volume-Pfade
  • Die genauen Pfade hängen vom Compose-Projektnamen ab (Präfix des Verzeichnisses). Mit dem folgenden Befehl ermitteln.
  • docker volume inspect docker-stack_nextcloud_data

Kompletter ossec.conf-Block

Alle drei Bausteine (docker-listener, Anwendungslogs, FIM) am Stück zum Einfügen in die /var/ossec/etc/ossec.conf des Agents auf dem Docker-Host. Die Volume-Pfade ggf. an den eigenen Compose-Projektnamen anpassen.

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

<localfile>
  <log_format>json</log_format>
  <location>/var/lib/docker/containers/*/*-json.log</location>
</localfile>

<syscheck>
  <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/docker-stack_nextcloud_data/_data/data</directories>
  <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/docker-stack_mediawiki_data/_data</directories>
</syscheck>

Agent neu starten

systemctl restart wazuh-agent

Funktionsprüfung

Modul-Status im Agent-Log

ossec.log auf dem Agent prüfen
  • tail -f /var/ossec/logs/ossec.log
Auf docker-listener-Meldungen achten
  • grep docker-listener /var/ossec/logs/ossec.log

Erscheint hier eine Meldung über ein fehlendes Python-Modul, wurde das docker-SDK nicht in die Wazuh-Python-Umgebung installiert (siehe oben).

Event auslösen

Test-Container starten und wieder entfernen
  • docker run --rm hello-world
In einen laufenden Container klettern
  • docker exec -it nextcloud sh

Im Manager prüfen

archives.json mitlesen (alle Events)
  • tail -f /var/ossec/logs/archives/archives.json
alerts.json mitlesen (nur Alerts)
  • tail -f /var/ossec/logs/alerts/alerts.json

Die Docker-Events erscheinen mit dem Decoder docker. Das docker exec ist didaktisch der interessanteste Fall: Es zeigt, dass ein Eindringen in einen laufenden Container im SIEM sichtbar wird.

Hinweis zum Datenfluss

Engine-Events vs. Anwendungslogs
  • Der docker-listener meldet, dass ein Container gestartet oder betreten wurde – nicht, was innerhalb der Anwendung passiert. Für Angriffe auf die Webanwendung (z.B. gegen MediaWiki oder Nextcloud) liefern die Anwendungslogs und FIM die Telemetrie.
Zusammenspiel
  • Erst die Kombination macht das Bild vollständig: Engine-Ebene (Container-Lifecycle), Anwendungs-Ebene (Logs) und Datei-Ebene (FIM).