Einleitung
Bei einer Migration des Wazuh-Servers (z. B. von CentOS 8 auf Rocky Linux) sind Custom Decoders und Rules oft der Teil, der am schnellsten „still“ kaputtgeht: Die Dateien sind zwar kopiert, aber Wazuh lädt sie nicht – und im Dashboard erscheinen kryptische Meldungen wie „No decoder was returned (1502)“ oder „No rule was returned (1414)“. In Security-Operations ist das besonders kritisch, weil damit genau die umgebungsspezifischen Detection-Regeln (z. B. Fortigate-Events) ausfallen und relevante Logs wieder als „unbekannt“ oder gar nicht korreliert werden.
Der Thread zeigt ein sehr typisches Muster: Dateien werden per scp übertragen, landen im richtigen Pfad – aber wazuh-analysisd kann sie nicht lesen.
Ausgangslage / Problemstellung
Nach der Migration wurden Custom-Dateien für Fortigate-Decoders und -Rules manuell auf den neuen Server kopiert und in folgende Verzeichnisse gelegt:
/var/ossec/etc/decodersund/var/ossec/etc/rules(erstes Ziel)- später testweise auch
/var/ossec/ruleset/decodersund/var/ossec/ruleset/rules
Im Wazuh Dashboard traten danach Fehler beim Anzeigen/Lesen der Dateien auf, u. a.:
Error: No decoder was returned (1502) - Error reading decoders file: ...Error: No rule was returned (1414) - Error reading rules file: ...
Der entscheidende Hinweis kam aus ossec.log:
wazuh-analysisd: WARNING: (1103): Could not open file ... [(13)-(Permission denied)]
Damit ist klar: Nicht XML-Syntax oder Pfad sind das Kernproblem, sondern Dateirechte/Ownership.
Technische Analyse
Warum „No decoder/rule was returned“ häufig ein Symptom ist
Die Dashboard-Fehlercodes (1502/1414) entstehen oft nicht, weil die Dateien fachlich falsch sind, sondern weil das Backend die Datei nicht öffnen kann. Der Wazuh-Manager (insb. wazuh-analysisd) muss die Decoder-/Rule-Dateien lesen, parsen und laden. Wenn das Lesen scheitert, bekommt das Dashboard keine Inhalte zurück und meldet „No decoder/rule was returned“.
Root-Ursache: scp + neue Systemhärtung = Ownership/Permissions passen nicht
In der Praxis gibt es bei OS-Migrationen drei typische Permission-Fallen:
- Ownership nicht mehr
wazuh:wazuh
Nach Copy/Restore (oder bei unterschiedlichen Defaults) liegen Dateien schnell beiroot:rootoder anderen Usern. - Dateimodus zu restriktiv oder inkonsistent
Wazuh erwartet im Regelfall, dass seine Ruleset-Dateien für denwazuh-User lesbar sind. In vielen Setups ist660(rw-rw—-) der Standard, zusammen mitwazuh:wazuh. - SELinux-Kontexte (Rocky Linux!)
Selbst bei korrekten Unix-Rechten kann SELinux den Zugriff blockieren. Das äußert sich ebenfalls als „Permission denied“. (Im Thread war bereits Ownership/Mode die Ursache – aber nach CentOS→Rocky ist SELinux als zweite Ebene unbedingt im Blick zu behalten.)
Best Practice: Updatesichere Ablage für Custom Content
Wazuh empfiehlt für Customizing typischerweise die lokalen Dateien:
- Custom Decoders:
/var/ossec/etc/decoders/local_decoder.xmlWazuh Dokumentation - Custom Rules:
/var/ossec/etc/rules/local_rules.xmlWazuh Dokumentation
Das reduziert Upgrade-Risiken, weil eigene Dateien nicht durch Ruleset-Updates überschrieben werden. Alternativ kann man eigene Dateien auch über den <ruleset>-Block in ossec.conf gezielt includen (Decoder/Rule Include/Dir/Exclude), was besonders bei größeren Custom-Rulesets sinnvoll ist. wazuh-documentation-49-master.readthedocs.io
Lösung / Best Practices
1) Fehlerbild korrekt verifizieren
Auf dem Manager:
sudo grep wazuh-analysisd /var/ossec/logs/ossec.log | grep -i "permission\|could not open\|1103"
Wenn dort (13)-(Permission denied) steht, ist der Fix in der Regel unmittelbar: Ownership/Mode korrigieren (und ggf. SELinux).
2) Ownership und Rechte sauber setzen
Für die betroffenen Custom-Dateien (Beispielpfade aus dem Thread):
sudo chown wazuh:wazuh /var/ossec/ruleset/decoders/*.xml /var/ossec/ruleset/rules/*.xml
sudo chmod 660 /var/ossec/ruleset/decoders/*.xml /var/ossec/ruleset/rules/*.xml
Wenn die Dateien in /var/ossec/etc/decoders bzw. /var/ossec/etc/rules liegen:
sudo chown wazuh:wazuh /var/ossec/etc/decoders/*.xml /var/ossec/etc/rules/*.xml
sudo chmod 660 /var/ossec/etc/decoders/*.xml /var/ossec/etc/rules/*.xml
Hinweis: Diese Ownership/Permission-Kombination taucht auch in Wazuh-eigenen Automatisierungsbeispielen auf (z. B. beim „Ruleset as Code“-Ansatz, der nach dem Pull bewusst chown wazuh:wazuh und chmod 660 setzt). Wazuh
3) (Rocky Linux) SELinux als zweite Ebene prüfen
Wenn nach chown/chmod weiterhin „Permission denied“ auftaucht:
- Temporär prüfen, ob SELinux beteiligt ist:
getenforce - Kontexte für die betroffenen Dateien wiederherstellen (konservativ):
sudo restorecon -Rv /var/ossec
In gehärteten Umgebungen ist das oft der fehlende Schritt nach Migration oder manuellen Dateioperationen.
4) Wazuh Manager neu starten und Ladevorgang kontrollieren
sudo systemctl restart wazuh-manager
sudo tail -n 200 /var/ossec/logs/ossec.log
Achte darauf, dass keine neuen Parser-/Load-Fehler auftauchen.
5) Updatesichere Ablagestrategie für Fortigate-Decoders/Rules
Wenn die Fortigate-Customizations in mehreren Dateien gepflegt werden (z. B. fortigateV7_decoders.xml, fortigate-firewall-v7_rules.xml), sind zwei robuste Wege üblich:
Variante A: Konsolidieren in local_decoder.xml / local_rules.xml (simpel und upgradefest)
- Custom Decoders in
/var/ossec/etc/decoders/local_decoder.xmlWazuh Dokumentation - Custom Rules in
/var/ossec/etc/rules/local_rules.xmlWazuh Dokumentation
Variante B: Eigene Dateien behalten und über <ruleset> gezielt einbinden (skalierbar)
- Eigene
decoder_include/rule_includeoder*_dirim<ruleset>konfigurieren, inkl. Pattern-Steuerung. wazuh-documentation-49-master.readthedocs.io
Das ist besonders sinnvoll, wenn Fortigate-Regeln als Paket/Repo versioniert werden.
Lessons Learned / Best Practices
- Dashboard-Fehler (1502/1414) sind häufig nur „Folgefehler“ – die Wahrheit steht meist in
ossec.logbeiwazuh-analysisd. - Nach Migrationen immer Ownership/Permissions prüfen, bevor man XML-Debugging betreibt.
- Rocky Linux bringt SELinux realistisch ins Spiel:
restorecongehört in die Standard-Checkliste. - Custom Content updatefest halten: lokale Dateien oder kontrollierte
<ruleset>-Includes statt „wild“ im Standard-Ruleset verteilen. Wazuh Dokumentation+2Wazuh Dokumentation+2 - Automatisiere den Ruleset-Deploy (Git/CI/CD) und setze am Ende konsequent
chown/chmod, wie es auch im „Ruleset as Code“-Ansatz vorgesehen ist. Wazuh
Fazit
Wenn nach einer OS-Migration Custom Fortigate-Decoders und -Rules in Wazuh „verschwinden“, liegt es sehr häufig nicht an der Logik der Regeln, sondern an Dateirechten und Ownership. Der klare Indikator ist wazuh-analysisd mit (13)-(Permission denied) in ossec.log. Mit chown wazuh:wazuh und chmod 660 (plus ggf. restorecon unter Rocky Linux) ist das Problem in der Regel sofort behoben.
Wer die Gelegenheit nutzt, die Customizations anschließend updatesicher über local_decoder.xml/local_rules.xml oder einen sauberen <ruleset>-Include-Mechanismus zu organisieren, reduziert langfristig Betriebskosten und vermeidet Regressionen bei Upgrades.
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/p1766767083619599