Wazuh Dashboard Custom Branding: Logos funktionieren per IP, aber nicht per DNS

Einleitung

Custom Branding im Wazuh Dashboard ist ein häufiger Wunsch in produktiven SIEM-Umgebungen. Eigene Logos, Titel und Ladebilder verbessern die Wiedererkennbarkeit der Plattform. Wenn Branding über die IP-Adresse korrekt angezeigt wird, über den DNS-Namen aber Standardlogos oder leere Platzhalter erscheinen, liegt die Ursache meist nicht im Branding selbst, sondern in URL-Auflösung, Routing oder statischer Dateiauslieferung.

Ausgangslage / Problemstellung

Das Wazuh Dashboard wurde gemäß Custom-Branding-Dokumentation angepasst. Über die IP-Adresse funktioniert der Zugriff inklusive Branding:

https://IPADDRESS/app/wz-home

Über den DNS-Namen erscheint jedoch zunächst eine andere Login-Seite oder später ein Dashboard ohne Logos:

https://DNSNAME/app/login?nextUrl=%2F

Die Branding-Konfiguration enthielt absolute URLs mit IP-Adresse:

opensearchDashboards.branding:
loadingLogo:
defaultUrl: "https://IPADDRESS/ui/logos/logo.png"
darkModeUrl: "https://IPADDRESS/ui/logos/logo.png"
mark:
defaultUrl: "https://IPADDRESS/ui/logos/logo.png"
darkModeUrl: "https://IPADDRESS/ui/logos/logo.png"

Technische Analyse

Wenn der Zugriff über IP funktioniert, über DNS aber eine andere Login-Seite erscheint, ist das ein starkes Indiz dafür, dass DNS nicht auf denselben Dashboard-Service zeigt. Ein einfacher Test bestätigt das:

systemctl stop wazuh-dashboard

Wenn danach der IP-Zugriff fehlschlägt, der DNS-Zugriff aber weiterhin eine Dashboard-Seite öffnet, erreicht der DNS-Name nicht den Wazuh-Dashboard-Service, sondern einen anderen Webdienst oder Reverse-Proxy-Zielpunkt.

Wichtig ist auch: Agent Enrollment und Agent-Kommunikation sind davon unabhängig. Agenten sprechen mit dem Wazuh Manager, nicht mit dem Wazuh Dashboard. Ein funktionierender DNS-Name für Agent-Enrollment beweist daher nicht automatisch, dass derselbe DNS-Name korrekt auf die Dashboard-UI zeigt.

Nach Korrektur des DNS-Routings trat ein zweites Problem auf: Die Logos wurden über externe DNS-Zugriffe nicht geladen. Ursache war die Verwendung absoluter IP-basierter Logo-URLs. Von außen kann der Browser diese interne IP oder diesen Pfad möglicherweise nicht erreichen.

Lösung / Best Practices

Zuerst muss geprüft werden, ob DNS wirklich auf den richtigen Dashboard-Service zeigt:

systemctl stop wazuh-dashboard

Danach testen:

https://IPADDRESS
https://DNSNAME

Beide Zugriffe müssen sich gleich verhalten. Wenn DNS weiterhin eine Seite liefert, obwohl wazuh-dashboard gestoppt ist, muss DNS, Load Balancer oder Reverse Proxy korrigiert werden.

Für Branding-Dateien sollten möglichst relative Pfade genutzt werden, damit sie unabhängig von IP oder DNS vom gleichen Dashboard-Host geladen werden:

opensearchDashboards.branding.applicationTitle: "Team SIEM"

opensearchDashboards.branding:
loadingLogo:
defaultUrl: "/ui/logos/logo.png"
darkModeUrl: "/ui/logos/logo.png"
mark:
defaultUrl: "/ui/logos/star_icon.png"
darkModeUrl: "/ui/logos/star_icon.png"

Die Dateien müssen im statisch ausgelieferten Asset-Pfad des Dashboards liegen, zum Beispiel:

/usr/share/wazuh-dashboard/src/core/server/core_app/assets/logos/

Dann können sie typischerweise über diesen URL-Pfad referenziert werden:

/ui/logos/logo.png

Nach Änderungen ist ein Neustart erforderlich:

systemctl restart wazuh-dashboard

Falls der Dienst nicht startet, sollten Syntax und Einrückung in der YAML-Datei geprüft werden:

systemctl status wazuh-dashboard
journalctl -u wazuh-dashboard --no-pager

Zusätzlich sollten Dateipfade, Berechtigungen und Dateigrößen validiert werden:

ls -lh /usr/share/wazuh-dashboard/src/core/server/core_app/assets/logos/
file /usr/share/wazuh-dashboard/src/core/server/core_app/assets/logos/logo.png

Wenn relative Pfade in einer konkreten Installation nicht zuverlässig funktionieren, ist ein pragmatischer Workaround, die originalen Dashboard-Logo-Dateien im bestehenden Asset-Verzeichnis zu ersetzen. Das ist weniger sauber als eine getrennte Branding-Struktur, funktioniert aber, weil Wazuh Dashboard diese Standardpfade bereits korrekt ausliefert.

Lessons Learned / Best Practices

DNS-Zugriff und IP-Zugriff müssen denselben Dienst erreichen. Unterschiedliche Login-Seiten oder unterschiedliche Logos sind kein Branding-Problem, sondern meist ein Routing-, Proxy- oder DNS-Hinweis.

Absolute IP-basierte Logo-URLs sind für externe Zugriffe anfällig. Relative Pfade sind robuster, weil der Browser die Assets vom aktuell verwendeten Host lädt.

YAML-Branding-Blöcke sollten schrittweise aktiviert werden. Zuerst nur applicationTitle, dann mark, danach loadingLogo und logo. So lässt sich schnell erkennen, welche Zeile den Dienststart verhindert.

Agent-Kommunikation, Enrollment-DNS und Dashboard-Zugriff sind getrennte Themen. Ein Agent kann korrekt mit dem Manager kommunizieren, während der Browser über DNS trotzdem auf den falschen Dashboard-Endpunkt zeigt.

Fazit

Wenn Wazuh Dashboard Branding per IP funktioniert, per DNS aber nicht, sollte zuerst das Routing geprüft werden. Sobald DNS korrekt auf denselben Dashboard-Service zeigt, sollten Logo-Dateien bevorzugt über relative Pfade oder über die bestehenden Asset-Verzeichnisse eingebunden werden. Entscheidend sind konsistente URL-Pfade, gültige YAML-Syntax und ein eindeutig erreichbarer Dashboard-Endpunkt.

Quellen

Wazuh Dokumentation: Custom Branding im Wazuh Dashboard
https://documentation.wazuh.com/current/user-manual/wazuh-dashboard/custom-branding.html

Wazuh Dokumentation: Wazuh Dashboard Settings
https://documentation.wazuh.com/current/user-manual/wazuh-dashboard/settings.html#enrollment-dns

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/C07CNG3M11N/p1772156166408709