Einleitung
E-Mail-Alerts sind in Wazuh ein bewährter „Last Mile“-Kanal für kritische Events – besonders, wenn ein SOC nicht permanent im Dashboard arbeitet oder bestimmte Betriebsgruppen (z. B. Business Units) eigene Benachrichtigungswege brauchen. Häufig lautet die Anforderung: „Sende Alerts nur für Agent-Gruppe X an Empfänger A und nur für Gruppe Y an Empfänger B.“
Genau hier stößt das klassische Manager-basierte <email_alerts>-Routing schnell an eine harte Grenze: Wazuh kann zwar nach Severity, Rule-Group/Rule-ID und Event Location filtern – aber nicht nativ nach Agent-Gruppen.
Ausgangslage / Problemstellung
Es existieren zwei <email_alerts>-Blöcke in ossec.conf, die E-Mails abhängig von event_location an unterschiedliche Empfänger schicken sollen:
- TS-BU →
ABC@gmail.com - EA-BU →
Help@gmail.com
Der Ansatz scheitert, weil event_location nur bestimmte Werte akzeptiert und „TS-BU/EA-BU“ als Agent-Gruppen (nicht Agent-Name/Hostname/IP/Logfile) nicht matchen können. Die Folge: Keine oder unerwartete Benachrichtigung.
Wazuh dokumentiert explizit, dass event_location nur Agent-Name, Hostname, IP-Adresse oder Logfile unterstützt.
Technische Analyse
1) event_location ist kein Gruppenfilter
Die Manager-Funktion „Email alert based on event location“ prüft die Location des Events, nicht die Agent-Gruppenzugehörigkeit. Zulässige Werte sind Agent/Host/IP/Datei – Gruppen sind nicht Teil dieser Matching-Logik.
2) Warum Gruppen im Manager-Alerting nicht „einfach“ gehen
Agent-Gruppen in Wazuh sind primär ein Mechanismus für zentrale Konfigurationsverteilung (Group-based config via agent.conf). Die Rule Engine ist historisch nicht „gruppenbewusst“ – das wurde auch als Feature-Request diskutiert.
3) Was stattdessen zuverlässig funktioniert
Für „Routing nach organisatorischer Zugehörigkeit“ braucht es ein Feld im Alert, das wirklich filterbar ist, z. B.:
- Agent Labels (z. B.
agent.labels.bu = TS-BU)
Labels sind ausdrücklich dafür gedacht, Alert-Daten um eigene Metadaten zu erweitern. - Danach entweder:
- Manager-seitig per Integrator (Custom Script) routen, oder
- Indexer-seitig per OpenSearch Alerting/Notifications (Query-Monitore) routen.
Lösung / Best Practices
Im Betrieb haben sich zwei Muster etabliert – je nach Anforderung an Wartbarkeit, Skalierung und Zustelllogik.
Option 1: Group-/BU-Routing per Agent Labels + Wazuh Integrator (Manager-seitig, sehr flexibel)
Wann sinnvoll: Wenn Routing-Logik komplex ist (mehrere Empfängerregeln, Template-Logik, Escalation, eigene SMTP-Mechanik), oder wenn ihr die Zustellung nicht vom Indexer abhängig machen wollt.
- Labels pro Gruppe setzen (zentral via
agent.conf)
Für die GruppeTS-BUz. B. in der Gruppen-Konfiguration:
<labels>
<label key="bu">TS-BU</label>
</labels>
Für EA-BU entsprechend bu=EA-BU.
Wazuh beschreibt Labels als Mechanismus, Alert-Informationen um benutzerdefinierte Daten zu erweitern.
- Custom Integration über den Integrator
Der Integrator ist genau dafür da, Alerts an externe Tools/APIs oder eigene Skripte zu übergeben.
Best-Practice-Pattern:
- Integrator triggert ein Skript bei Alerts ab einem bestimmten Level / Rule-ID / Rule-Group
- Skript liest das Alert-JSON (inkl.
agent.labels.bu) - Skript entscheidet Empfänger:
TS-BU→ ABC@gmail.comEA-BU→ Help@gmail.com
- Skript versendet E-Mail (SMTP) oder übergibt an MTA/Relay
Vorteile:
- Echtzeitnah (ohne Query-Scheduling)
- Voll kontrollierbares Routing/Format
- Unabhängig von Dashboards/Alerting-Plugins
Nachteile:
- Eigenentwicklung und Pflege des Skripts
- SMTP/Secrets müssen sauber betrieben werden
Option 2: Group-/BU-Routing über OpenSearch Alerting + Notifications (Indexer-seitig, „SIEM-typisch“)
Wann sinnvoll: Wenn ihr ohnehin über den Indexer arbeitet und routingfähige Alerts über Queries bauen wollt (und ggf. zusätzliche Filter wie Rule-Level, MITRE, Data Source, Compliance).
OpenSearch Alerting arbeitet mit Monitoren, die periodisch Queries ausführen (z. B. „alle Alerts der letzten Minute“), und löst bei Treffern Aktionen über Notifications aus.
- Voraussetzung: Alerts sind im Indexer
Wazuh schreibt Alerts lokal u. a. nachalerts.jsonund leitet sie standardmäßig in den Indexer weiter (typischer Wazuh-Stack). - Notification Channel (E-Mail) anlegen
In OpenSearch Dashboards über Notifications einen E-Mail-Channel/Sender konfigurieren (oder per API). Das Notifications-Plugin ist die zentrale Stelle für Ausgabekanäle. - Pro BU einen Monitor (Per query)
- Index: typischerweise
wazuh-alerts-4.x-*(abhängig von eurem Stack) - Filter:
- Zeitfenster:
@timestamp now-1m..now agent.labels.bu = TS-BU- optional:
rule.level >= 9oder konkreterule.id/rule.groups
- Zeitfenster:
Die Monitor-Logik „per query“ ist Standard im Alerting-Plugin.
Vorteile:
- Kein eigenes Script nötig
- Sehr gute Filterbarkeit (Query-DSL)
- Routing über mehrere Channels/Empfängergruppen
Nachteile:
- Polling-Charakter (z. B. minütlich)
- Abhängig von Alerting/Notifications-Setup
- Feldnamen müssen konsistent im Index ankommen (Labels vorher sauber ausrollen)
Warum „Dashboard-Level Filtering“ allein keine Lösung ist
Dashboard/Discover-Filter regeln Sichtbarkeit für Nutzer, nicht Manager-seitiges E-Mail-Routing. Wenn das Ziel „E-Mails nach BU“ ist, braucht ihr ein routingfähiges Feld im Alert und eine serverseitige Benachrichtigungslogik (Integrator oder Indexer Alerting).
Lessons Learned / Best Practices
event_locationnur verwenden, wenn ihr wirklich nach Agent-Name/Host/IP/Logfile routen wollt – nicht als Gruppenersatz.- Agent-Gruppen sind kein Routing-Primitive der Rule Engine – sie sind primär für zentrale Konfiguration gedacht.
- Labels sind der saubere Weg, um Organisations- oder Betriebszugehörigkeit in Alerts zu tragen (
agent.labels.*). - Für E-Mail-Routing nach Gruppen:
- Integrator wählen, wenn ihr maximale Kontrolle/Custom Logik braucht.
- OpenSearch Alerting/Notifications wählen, wenn ihr Query-basiertes SIEM-Alerting mit Channels nutzen wollt.
Fazit
Group-basierte E-Mail-Alerts lassen sich mit den klassischen <email_alerts>-Mechanismen des Wazuh Managers nicht sauber umsetzen, weil event_location keine Gruppen kennt. Der praxistaugliche Best-Practice-Weg ist: Gruppenzugehörigkeit als Label in den Alerts verankern und anschließend entweder managerseitig über den Integrator oder indexerseitig über OpenSearch Alerting/Notifications zu routen. Damit wird aus einer „unmatchbaren“ Konfiguration ein robustes, skalierbares Alert-Routing.
Mehr zu Wazuh …
https://wazuh.com/?utm_source=ambassadors&utm_medium=referral&utm_campaign=ambassadors+program
Mehr zum Wazuh Ambassador Program …
https://wazuh.com/ambassadors-program/?utm_source=ambassadors&utm_medium=referral&utm_campaign=ambassadors+program
https://wazuh.slack.com/archives/C0A933R8E/p1768973529909969