Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 417 minIntermédiaire

Déployer l'agent Wazuh sur Windows Server et Linux, jusqu'à la GPO

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • expliquer l'inscription d'un agent et la protéger par un mot de passe ;
  • installer l'agent sur Windows Server et sur Debian en ligne de commande ;
  • déployer l'agent sur tout un parc Windows par stratégie de groupe ;
  • centraliser la configuration des agents avec les groupes et agent.conf ;
  • dépanner un agent qui reste déconnecté.

3 exercices corrigés1 schéma

L'agent Wazuh est le programme installé sur chaque machine surveillée : il lit ses journaux, contrôle ses fichiers, fait son inventaire et envoie le tout au serveur Wazuh. Le déployer, c'est l'installer, l'inscrire auprès du serveur pour obtenir une clé, puis le ranger dans un groupe qui lui donne sa configuration. Ce chapitre le fait sur Windows Server en ligne de commande, sur tout un parc Windows par stratégie de groupe (GPO), puis sur Debian, et termine par le dépannage d'un agent qui ne remonte rien. Sur un grand parc Linux, Ansible installe l'agent et dépose agent.conf sur tous les serveurs d'un coup (rôles Ansible).

Comment un agent s'inscrit

Un agent ne parle au serveur qu'une fois inscrit (enrolled). L'inscription se fait en deux temps :

  1. L'inscription, une seule fois. L'agent contacte le service d'inscription du serveur (wazuh-authd) sur le port TCP 1515, dans une connexion TLS. Il donne son nom, éventuellement son groupe et le mot de passe d'inscription. Le serveur lui attribue un identifiant (001, 002…) et une clé, qu'il note dans /var/ossec/etc/client.keys ; l'agent garde la même clé dans son propre client.keys.
  2. La communication, ensuite et en permanence. L'agent se connecte au port TCP 1514 et chiffre chaque message avec sa clé (AES). Le serveur reconnaît l'agent à sa clé et rejette tout message qui ne correspond à aucune clé connue.
Agent srv-adclient.keys :001 + cléServeur Wazuhinscription : wazuh-authdréception : wazuh-remotedclient.keys :001 srv-ad + clé1. Inscription, TCP 1515, TLSnom, groupe, mot de passe d'inscription2. Identifiant 001 et clé3. Événements chiffrés en AES, TCP 1514Sans mot de passe d'inscription, toute machine qui jointle port 1515 peut s'inscrire comme agent.
L'inscription donne une clé à l'agent une fois pour toutes ; ensuite, chaque message est chiffré avec cette clé

Protéger l'inscription par un mot de passe

Sur srv-journaux, dans /var/ossec/etc/ossec.conf, la section <auth> existe déjà. Ajoute-y une ligne :

xml
<auth>
  <!-- ... les options existantes restent en place ... -->
  <use_password>yes</use_password>
</auth>

Écris ensuite le mot de passe dans un fichier lisible par le seul service, puis redémarre le serveur :

bash
echo "<MOT_DE_PASSE_INSCRIPTION>" | sudo tee /var/ossec/etc/authd.pass > /dev/null
sudo chmod 640 /var/ossec/etc/authd.pass
sudo chown root:wazuh /var/ossec/etc/authd.pass
sudo systemctl restart wazuh-manager

Si tu actives use_password sans créer le fichier, le serveur tire un mot de passe au hasard à chaque redémarrage et l'écrit dans ossec.log : les inscriptions échouent dès qu'il redémarre. Crée toujours le fichier.

Créer les groupes d'agents

Un groupe rassemble des agents qui reçoivent la même configuration centralisée. Chez Sorbier, trois groupes suffisent :

GroupeAgentsConfiguration particulière
windows-serveurssrv-ad, srv-ad2, srv-fichiers, srv-gestion, srv-collecteJournaux PowerShell et Sysmon, intégrité des dossiers sensibles
windows-postesLes postes Windows 11Journaux PowerShell et Sysmon
linuxsrv-webJournaux Apache, intégrité de /var/www

Tout agent appartient aussi au groupe default. Crée les groupes avant d'y inscrire des agents : depuis le tableau de bord (Agents management, rubrique des groupes, Add new group) ou en ligne de commande sur le serveur :

bash
sudo /var/ossec/bin/agent_groups -a -g windows-serveurs -q
sudo /var/ossec/bin/agent_groups -a -g windows-postes -q
sudo /var/ossec/bin/agent_groups -a -g linux -q
sudo /var/ossec/bin/agent_groups -l            # liste des groupes

Installer l'agent sur Windows Server

Sur srv-ad, dans une console PowerShell lancée en administrateur. Le nom du paquet comporte la version : il doit correspondre à celle du serveur, ou lui être antérieur, jamais plus récent.

powershell
$Msi = "$env:TEMP\wazuh-agent-4.14.9-1.msi"
Invoke-WebRequest -Uri "https://packages.wazuh.com/4.x/windows/wazuh-agent-4.14.9-1.msi" -OutFile $Msi

$Arguments = "/i `"$Msi`" /q " +
             'WAZUH_MANAGER="192.168.10.180" ' +
             'WAZUH_REGISTRATION_SERVER="192.168.10.180" ' +
             'WAZUH_REGISTRATION_PASSWORD="<MOT_DE_PASSE_INSCRIPTION>" ' +
             'WAZUH_AGENT_GROUP="windows-serveurs"'
Start-Process -FilePath "msiexec.exe" -ArgumentList $Arguments -Wait

Start-Service -Name WazuhSvc
Get-Service -Name WazuhSvc

Le paquet MSI se pilote par des variables de déploiement :

VariableRôleValeur chez Sorbier
WAZUH_MANAGERAdresse (ou nom) du serveur auquel envoyer les événements192.168.10.180
WAZUH_REGISTRATION_SERVERAdresse du service d'inscription, si elle diffère192.168.10.180
WAZUH_REGISTRATION_PASSWORDMot de passe d'inscriptionCelui de authd.pass
WAZUH_AGENT_GROUPGroupe(s) existant(s), séparés par des virguleswindows-serveurs
WAZUH_AGENT_NAMENom de l'agent, par défaut le nom de l'ordinateurLaisser par défaut

Sans variable, l'agent s'installe mais ne s'inscrit pas : il faut alors renseigner l'adresse du serveur dans C:\Program Files (x86)\ossec-agent\ossec.conf et l'inscrire à la main. Le tableau de bord propose aussi un assistant, Agents management > Summary > Deploy new agent, qui génère la commande d'installation pour un système donné à partir de tes réponses : pratique pour vérifier une syntaxe.

Au bout d'une minute, srv-ad apparaît dans Agents management > Summary, avec l'identifiant 001, l'état Active, son système et son groupe.

Déployer l'agent sur tout le parc par GPO

Installer l'agent poste par poste ne passe pas l'échelle. Dans un domaine Active Directory, une stratégie de groupe (GPO) l'installe sur toutes les machines d'une unité d'organisation, y compris celles qui y arriveront plus tard. La création et la liaison des GPO sont expliquées dans le cours Windows Server.

Le paquet d'installation logicielle des GPO ne sait pas passer de variables à un MSI sans fichier de transformation (MST). La méthode la plus simple est un script de démarrage : il s'exécute au démarrage de chaque ordinateur, avec le compte système, avant toute ouverture de session.

1. Le partage. Sur srv-fichiers, un partage caché Deploiement$ contient Wazuh\wazuh-agent-4.14.9-1.msi. Le groupe Ordinateurs du domaine y a le droit de lecture (le script tourne sous le compte de l'ordinateur, pas d'un utilisateur), les administrateurs le contrôle total.

2. Le script Installer-AgentWazuh.ps1, déposé dans \\ad.sorbier.example\NETLOGON\ :

powershell
# Installe l'agent Wazuh au démarrage s'il est absent (script de démarrage d'ordinateur, GPO)
$Msi     = "\\srv-fichiers.ad.sorbier.example\Deploiement$\Wazuh\wazuh-agent-4.14.9-1.msi"
$Journal = "$env:SystemRoot\Temp\wazuh-agent-installation.log"

# Déjà installé : on ne fait rien (le script s'exécute à chaque démarrage)
if (Get-Service -Name WazuhSvc -ErrorAction SilentlyContinue) { exit 0 }

# ProductType vaut 1 pour un poste de travail, 2 pour un contrôleur de domaine, 3 pour un serveur
$Type   = (Get-CimInstance -ClassName Win32_OperatingSystem).ProductType
$Groupe = if ($Type -eq 1) { "windows-postes" } else { "windows-serveurs" }

$Arguments = "/i `"$Msi`" /q /l*v `"$Journal`" " +
             'WAZUH_MANAGER="192.168.10.180" ' +
             'WAZUH_REGISTRATION_SERVER="192.168.10.180" ' +
             'WAZUH_REGISTRATION_PASSWORD="<MOT_DE_PASSE_INSCRIPTION>" ' +
             "WAZUH_AGENT_GROUP=`"$Groupe`""
$Installation = Start-Process -FilePath "msiexec.exe" -ArgumentList $Arguments -Wait -PassThru

# 0 : succès ; 3010 : succès, redémarrage demandé
if ($Installation.ExitCode -in 0, 3010) { Start-Service -Name WazuhSvc }

3. La GPO. Dans la console Gestion des stratégies de groupe, crée la GPO ORD - Agent Wazuh et lie-la aux unités d'organisation des serveurs et des ordinateurs. Modifie-la :

  • Configuration ordinateur > Stratégies > Paramètres Windows > Scripts (démarrage/arrêt) > Démarrage, onglet Scripts : Ajouter, nom du script powershell.exe, paramètres -NoProfile -ExecutionPolicy Bypass -File "\\ad.sorbier.example\NETLOGON\Installer-AgentWazuh.ps1". Passer par powershell.exe avec -ExecutionPolicy Bypass évite que la stratégie d'exécution des postes (restreinte par défaut sous Windows 11) bloque le script.
  • Configuration ordinateur > Stratégies > Modèles d'administration > Système > Ouverture de session > Toujours attendre le réseau lors du démarrage et de l'ouverture de session de l'ordinateur : Activé. Sans ce réglage, le script peut s'exécuter avant que le réseau soit prêt, et ne pas trouver le partage.

4. La vérification. Sur une machine de test, gpupdate /force puis redémarrage. Après le démarrage, Get-Service WazuhSvc doit répondre et l'agent apparaître dans le tableau de bord. En cas d'échec, lis le journal C:\Windows\Temp\wazuh-agent-installation.log et le résultat de gpresult /r (la GPO est-elle appliquée ?).

Installer l'agent sur Debian

Sur srv-web (Debian 13), en root ou avec sudo. On ajoute le dépôt de Wazuh et sa clé de signature, puis on installe le paquet en lui passant les mêmes variables que sous Windows :

bash
sudo apt-get install -y gnupg curl
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --no-default-keyring \
  --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import
sudo chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" \
  | sudo tee /etc/apt/sources.list.d/wazuh.list
sudo apt-get update

sudo WAZUH_MANAGER="192.168.10.180" WAZUH_REGISTRATION_PASSWORD="<MOT_DE_PASSE_INSCRIPTION>" \
  WAZUH_AGENT_GROUP="linux" apt-get install -y wazuh-agent

sudo systemctl daemon-reload
sudo systemctl enable --now wazuh-agent

Comme sur le serveur, bloque les mises à jour accidentelles de l'agent : une mise à jour ne doit jamais rendre l'agent plus récent que le serveur.

bash
echo "wazuh-agent hold" | sudo dpkg --set-selections

srv-web est dans la DMZ : la matrice des flux du chapitre 2 doit autoriser 192.168.10.225 vers 192.168.10.180 en TCP 1514 et, le temps de l'inscription, TCP 1515. Le téléchargement du paquet passe par le flux HTTPS vers Internet déjà prévu pour les mises à jour.

La configuration centralisée : agent.conf

Chaque agent a son ossec.conf local. Plutôt que de le modifier machine par machine, on écrit la configuration d'un groupe dans /var/ossec/etc/shared/<groupe>/agent.conf sur le serveur : elle est envoyée automatiquement à tous les agents du groupe, qui l'appliquent en plus de leur configuration locale (et la font passer avant en cas de conflit).

Pour le groupe windows-serveurs, /var/ossec/etc/shared/windows-serveurs/agent.conf ajoute deux canaux d'événements, PowerShell et Sysmon, que l'agent ne lit pas par défaut (chapitre 5) :

xml
<agent_config>
  <localfile>
    <location>Microsoft-Windows-PowerShell/Operational</location>
    <log_format>eventchannel</log_format>
  </localfile>
  <localfile>
    <location>Microsoft-Windows-Sysmon/Operational</location>
    <log_format>eventchannel</log_format>
  </localfile>
</agent_config>

Vérifie la syntaxe avant que les agents la reçoivent :

bash
sudo /var/ossec/bin/verify-agent-conf -f /var/ossec/etc/shared/windows-serveurs/agent.conf

Le tableau de bord permet aussi de modifier ce fichier, depuis la page du groupe ; il refuse un XML mal formé. Les agents récupèrent la nouvelle configuration dans les minutes qui suivent et redémarrent leurs modules d'eux-mêmes.

Vérifier et dépanner un agent

Un agent a l'un de ces états dans le tableau de bord :

ÉtatSensQue vérifier
ActiveConnecté, il envoie ses événementsRien
DisconnectedInscrit, mais plus de nouvelles depuis un délai fixé dans la configuration du serveur (agents_disconnection_time)Machine éteinte, service arrêté, flux 1514 coupé
PendingInscrit, connexion en cours d'établissementAttendre ; si cela dure, flux 1514 ou clés
Never connectedInscrit, mais jamais connectéLe flux 1514, l'adresse du serveur dans ossec.conf de l'agent

Sur le serveur, la liste des agents et leur état :

bash
sudo /var/ossec/bin/agent_control -l

Sur l'agent, le journal de fonctionnement dit presque toujours ce qui ne va pas : C:\Program Files (x86)\ossec-agent\ossec.log sous Windows, /var/ossec/logs/ossec.log sous Linux.

Ce que dit ossec.log de l'agentCauseRemède
Échec de connexion vers 192.168.10.180:1515Port d'inscription fermé (pare-feu, ufw)Ouvre TCP 1515 le temps de l'inscription
Mot de passe d'inscription refuséMauvais mot de passe, ou serveur redémarré sans authd.passCompare avec /var/ossec/etc/authd.pass
L'inscription est refusée pour un nom déjà utiliséUne machine réinstallée reprend le nom d'un agent encore inscrit et récemment actifSupprime l'ancien agent sur le serveur, puis réinscris
Groupe invalideLe groupe demandé n'existe pasCrée-le, réinscris
Connexion au port 1514 impossiblePare-feu, ou mauvaise adresse dans <client><server><address>Teste avec Test-NetConnection 192.168.10.180 -Port 1514

Pour supprimer un agent (machine détruite, réinstallation), utilise le tableau de bord ou, sur le serveur, sudo /var/ossec/bin/manage_agents -r 004 : sa clé est retirée, il ne peut plus envoyer d'événements.

Exercices

Exercice 1 sur 3 La commande d'installation Réussi À revoir

Écris la commande PowerShell qui installe l'agent Wazuh 4.14.9 sur le poste PC-COMPTA-03 (déjà téléchargé dans C:\Install\), l'inscrit auprès de srv-journaux avec le mot de passe d'inscription Inscription.2026 et le range dans le groupe windows-postes, puis démarre le service.

Voir la réponseMasquer la réponse de l'exercice 1
powershell
$Arguments = '/i "C:\Install\wazuh-agent-4.14.9-1.msi" /q ' +
             'WAZUH_MANAGER="192.168.10.180" ' +
             'WAZUH_REGISTRATION_SERVER="192.168.10.180" ' +
             'WAZUH_REGISTRATION_PASSWORD="Inscription.2026" ' +
             'WAZUH_AGENT_GROUP="windows-postes"'
Start-Process -FilePath "msiexec.exe" -ArgumentList $Arguments -Wait
Start-Service -Name WazuhSvc

WAZUH_AGENT_NAME est inutile : par défaut, l'agent prend le nom de l'ordinateur, PC-COMPTA-03. Le groupe doit exister sur le serveur avant l'inscription. Dans un vrai déploiement, le mot de passe ne s'écrit pas dans une copie d'écran de compte rendu.

Tu avais trouvé ?

Exercice 2 sur 3 Diagnostiquer un agent Réussi À revoir

Le poste PC-LOGI-07 a reçu la GPO de déploiement. Le service WazuhSvc existe et tourne, mais le poste n'apparaît pas dans le tableau de bord. Le fichier ossec.log du poste répète une erreur de connexion vers 192.168.10.180 sur le port 1515. Le poste est dans le VLAN 10. Que se passe-t-il, et comment le prouves-tu ?

Voir la réponseMasquer la réponse de l'exercice 2

L'agent est installé mais n'a pas pu s'inscrire : il n'atteint pas le service d'inscription (TCP 1515). Sans inscription, pas de clé, donc pas d'apparition dans le tableau de bord. Causes possibles : le port 1515 a été refermé au pare-feu (pfSense entre le VLAN 10 et le VLAN 20, ou ufw sur srv-journaux) après le déploiement initial, ou le service d'inscription du serveur est arrêté. Preuve : depuis le poste, Test-NetConnection 192.168.10.180 -Port 1515 échoue ; depuis le serveur, sudo ss -tlnp | grep 1515 montre (ou non) l'écoute ; sudo ufw status et les journaux de blocage de pfSense montrent la règle en cause. On rouvre 1515 depuis le VLAN 10 le temps de l'inscription.

Tu avais trouvé ?

Exercice 3 sur 3 Un groupe par rôle Réussi À revoir

Sorbier ajoute un second serveur web, srv-web2, et veut que les deux serveurs web reçoivent la même configuration : journaux Apache et intégrité de /var/www. Les contrôleurs de domaine, eux, doivent surveiller le dossier SYSVOL. Propose une organisation des groupes, et dis dans quel groupe ranger chaque machine Linux et Windows du laboratoire.

Voir la réponseMasquer la réponse de l'exercice 3

Un groupe par système pour ce qui est commun, un groupe par rôle pour ce qui est spécifique, un agent pouvant être dans plusieurs groupes :

GroupeContenu de son agent.confMembres
windows-serveursPowerShell, Sysmonsrv-ad, srv-ad2, srv-fichiers, srv-gestion, srv-collecte
controleurs-domaineIntégrité de C:\Windows\SYSVOLsrv-ad, srv-ad2
windows-postesPowerShell, SysmonPostes Windows 11
linuxRéglages communs aux serveurs Debiansrv-web, srv-web2
serveurs-webJournaux Apache, intégrité de /var/wwwsrv-web, srv-web2

srv-web2 s'inscrit avec WAZUH_AGENT_GROUP="linux,serveurs-web" et reçoit tout seul la bonne configuration.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Quels journaux collecter : Windows, Sysmon, Linux et pfSenseRevoir le sommaire du cours