Wazuh
Étude
L'étude se trouve dans un autre document.
Composants Wazuh
L'éco-système Wazuh peut être découpé en 4 éléments :
- l'indexer Wazuh qui s'exécute coté serveur
- le manager Wazuh qui s'exécute coté serveur
- le dashboard Wazuh qui s'exécute coté serveur
- l'agent Wazuh qui s'exécute sur la machine à surveiller
Dans ce document, lorsque l'on parle de "serveur Wazuh", on parle des 3 composants coté serveur confondus.
Wazuh server
NUO mets à disposition 1 serveur Wazuh de préprod pour des tests : wazuh-pp.in.nuonet.fr
. Cadoles a la main complète sur le serveur. Cadoles a installé un serveur Wazuh complet (indexer+server+dashboard) avec docker sur ce serveur.
NUO mets à disposition un service Wazuh de production découpé en 3 serveurs :
- xdr-dashboard.in.nuonet.fr pour la partie graphique, accessible en https
- xdr-server.in.nuonet.fr pour la communication avec les agents entre autre (API + remontées de logs)
- xdr-indexer.in.nuonet.fr pour l'inexdation (aucune interaction notable)
Ports
Les ports à ouvrir sont décrits dans la doc de Wazuh : https://documentation.wazuh.com/current/getting-started/architecture.html#required-ports
Le port 55000/tcp pour l'API et le port 1514/tcp pour l'envoie de logs sont les 2 ports à ouvrir pour les agents.
Le port 443/tcp pour l'accès à l'interface web est à ouvrir pour les utilisateurs.
Wazuh server PP
Pour faire des tests, le serveur de PP a été configuré. Tout est dans le dossier ~cadoles/wazuh-docker/single-node
(git diff pour voir les changements) ou dans le conteneur docker directement dans /var/ossec/etc/ossec.conf
. La documentation suivie est ici : https://documentation.wazuh.com/current/deployment-options/docker/wazuh-container.html
Une fois up, il est possible d'entrer dans le conteneur single-node-wazuh.manager-1
pour modifier des configs. Il est possible de voir ce que le serveur reçoit de la part des agents (dans /var/ossec/logs/archives/archives.json
) si les options
<ossec_config>
<global>
<logall>yes</logall>
<logall_json>yes</logall_json>
</global>
</ossec_config>
ont bien été ajoutées au fichier de configuration /var/ossec/etc/ossec.conf
.
/var/ossec/bin/wazuh-logtest
permet entre autre de tester les decoders
et les rules
(aussi utilisable depuis l'interface web).
Règles actuelles
Les règles, décodeurs, dashboards coté serveur sont mis en place par NUO avec l'assistance de Wazuh. Au 03 juillet 2025, il n'y a qu'une détection de comportement malicieux :
- détection de multiple création de comptes depuis une même IP
Ajout de règles
Cadoles n'a pas à créer de règles/decoder/dashboard. Cependant, NUO peut demander à Cadoles de produire des logs pour identifier des comportements suspects. Par exemple, il a été demandé des logs pour :
- création de compte
- tentative de connexion
Accès à l'interface web
Les accès sont nominatifs et contôlés par NUO (Nomena).
Wazuh agent
Sur les 2 clusters k8s (prod et PP) ont été déployé 1 DaemonSet avec l'agent Wazuh en conteneur.
L'intégration de l'agent Wazuh dans kubernetes se présente sous la forme de projets maintenus par Cadoles :
- https://forge.cadoles.com/Cadoles/wazuh-agent-k8s-autoadd : programme go pour enregistrer (via API) puis démarrer un agent Wazuh + Dockerfile
- https://forge.cadoles.com/CadolesKube/wazuh-agent-kustom : kustomization d'un DaemonSet pour déployer un agent Wazuh et wazuh-agent-k8s-autoadd sur chaque noeud d'un cluster k8s, d'une ConfigMap et d'un Secret
L'enregistrement de chaque agent Wazuh se fait par l'API avec un compte de service créé par NUO et partagé entre les 2 clusters k8s.
Configuration
Au 26 mai 2025, le fichier de configuration de l'agent, /var/ossec/etc/ossec.conf
est la suivante :
<ossec_config>
<client>
<server>
<address>{{ getenv "WAZUH_MANAGER_HOST" }}</address>
<port>{{ getenv "WAZUH_MANAGER_PORT" "1514" }}</port>
</server>
</client>
<localfile>
<location>/var/log/pods/*/*/*.log</location>
<log_format>syslog</log_format>
</localfile>
</ossec_config>
Les parties variables sont remplacées grâce à gomplate.
Ce fichier se trouve sur la forge. Pour modifier la conf sur les clusters k8s de prod et de PP, il faut donc modifier ce fichier template et suivre le workflow (voir partie "Workflow")
Workflow
En cas de changement de conf pour l'agent Wazuh ou d'upgrade de l'agent Wazuh, suivre la procédure suivante :
- Faire les changements dans le dépôt wazuh-agent-k8s-autoadd
- Commit et pousser ces changements
- Build et pousser une image Docker avec
make build-image
etdocker push
- Changer la ref dans le DaemonSet
- Faire une release (
git tag
,git push --tags
) - Changer la ref dans les dépôts git liés aux clusters ( k8s-deploy et k8s-pp-deploy ), fichier
kustomize/wazuh-agent/kustomization.yaml
- Commit et pousser ces changements
- Déployer les changements sur les clusters de la même manière que les ont été mis en place (voir partie "Mise en place / déploiement"
- Commit et pousser ces changements
Mise en place / déploiement
Dans les projet k8s-deploy et k8s-pp-deploy :
kustomize build --load-restrictor LoadRestrictionsNone kustomize/trust-manager/ --enable-helm
kustomize build --load-restrictor LoadRestrictionsNone kustomize/wazuh-agent
Ajout d'un agent
Une fois l'agent déployé, il faut demander à NUO (Nomena) d'ajouter le serveur dans le bon groupe (MSE-PP ou MSE-PROD) afin de le voir sur l'interface web du serveur Wazuh.
Mise à jour de l'agent Wazuh
Il est en théorie possible d'upgrade l'agent Wazuh depuis le serveur Wazuh. Cependant, dans le cadre de kubernetes, Cadoles ne recommande pas l'upgrade d'agent Wazuh depuis le serveur Wazuh car même si la mise-à-jour fonctionne (peu probable à cause de l'environnement conteneurisé), si le pod redémarre, il retournera à la version précédente. Il vaut mieux mettre à jour le Dockerfile du projet https://forge.cadoles.com/CadolesKube/wazuh-agent-kustom puis déployer sur les 2 clusters k8s. Attention à la compatibilité entre l'agent et le serveur Wazuh.
L'agent ne doit jamais être plus récent que le serveur.
Changement de CA
La CA utilisée pour signer le certificat du serveur Wazuh de NUO est dans le fichier kustomize/trust-manager/resources/wazuh-manager-ca.yaml
dans les dépôts git k8s-deploy et k8s-pp-deploy. Pour changer de CA, il suffit d'éditer le fichier puis de déployer le changement en suivant les dernières étapes du Workflow.