Chapitre 315 minIntermédiaire
Installer Wazuh : le serveur tout-en-un sur Proxmox
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- dimensionner le serveur Wazuh selon le nombre d'agents ;
- créer la machine virtuelle sur Proxmox VE et configurer Ubuntu ;
- installer Wazuh avec l'assistant et récupérer les mots de passe ;
- vérifier les services et sécuriser l'accès au tableau de bord.
3 exercices corrigés
Installer Wazuh en tout-en-un, c'est placer l'indexeur, le serveur et le tableau de bord sur une seule machine Linux, avec l'assistant d'installation fourni par l'éditeur, qui génère aussi les certificats et les mots de passe. Ce chapitre installe Wazuh 4.14 sur srv-journaux, une machine virtuelle Ubuntu 24.04 LTS hébergée par Proxmox VE, puis vérifie l'installation, change les mots de passe et ferme ce qui doit l'être.
Préparer l'installation
Avant de créer la machine, fixe cinq choses.
| Décision | Valeur pour Sorbier | Pourquoi |
|---|---|---|
| Système | Ubuntu 24.04 LTS (Server) | Dans la liste des systèmes pris en charge par l'assistant de Wazuh 4.14, avec Red Hat Enterprise Linux 9 et 10, Amazon Linux 2023 et CentOS Stream 10 |
| Ressources | 4 vCPU, 8 Gio de mémoire, 120 Go de disque pour le laboratoire ; 8 vCPU et 200 Go pour 45 agents en production | Tableau du chapitre 2 ; l'indexeur est gourmand en mémoire |
| Adresse | 192.168.10.180/28, passerelle 192.168.10.190 | Plan d'adressage du VLAN 20 |
| Nom | srv-journaux.ad.sorbier.example | Enregistrement A dans le DNS de l'annuaire |
| Heure | NTP sur srv-ad et srv-ad2 | Des alertes mal horodatées ne se corrèlent pas avec les autres journaux |
Créer la machine virtuelle sur Proxmox VE
Les étapes ci-dessous suivent l'interface web de Proxmox VE 9, en anglais ; l'interface française reprend les mêmes onglets. La création de machines virtuelles, les ponts réseau et les VLAN sur Proxmox sont détaillés dans le cours Virtualisation.
- Télécharge l'image
ubuntu-24.04.x-live-server-amd64.iso(la dernière révision 24.04) et dépose-la dans un stockage de type ISO du nœud (local > ISO Images > Upload). - Clique sur Create VM, en haut à droite.
- General : un identifiant libre (par exemple
180, pour retrouver l'adresse), le nomsrv-journaux. - OS : l'image ISO d'Ubuntu, type Linux.
- System : contrôleur VirtIO SCSI single, coche Qemu Agent.
- Disks : bus SCSI, 120 Gio, coche Discard si le stockage est en allocation fine.
- CPU : 1 socket, 4 cœurs, type host si tous les nœuds du cluster ont le même processeur.
- Memory : 8192 Mio ; dans les options avancées, décoche Ballooning Device : l'indexeur réserve sa mémoire au démarrage et supporte mal qu'on la lui reprenne.
- Network : pont
vmbr0, VLAN Tag 20 (le VLAN des serveurs), modèle VirtIO. - Confirm, puis démarre la machine et ouvre sa Console.
Installe Ubuntu Server avec les choix par défaut, en cochant Install OpenSSH server. Crée un compte d'administration nominatif (pas admin). Une fois le système démarré, installe l'agent invité pour que Proxmox voie l'adresse et arrête proprement la machine :
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
Configurer le réseau, le nom et l'heure
L'installeur d'Ubuntu propose de fixer l'adresse ; si tu as laissé le DHCP, remplace la configuration Netplan. Repère d'abord le nom de l'interface avec ip -br link (souvent ens18 sur Proxmox), puis écris /etc/netplan/50-cloud-init.yaml (ou un fichier à toi, en supprimant l'ancien) :
network:
version: 2
ethernets:
ens18:
dhcp4: false
addresses: [192.168.10.180/28]
routes:
- to: default
via: 192.168.10.190
nameservers:
addresses: [192.168.10.177, 192.168.10.181]
search: [ad.sorbier.example]
sudo chmod 600 /etc/netplan/*.yaml # Netplan avertit si le fichier est lisible par tous
sudo netplan try # applique, et revient en arrière sans confirmation sous 120 s
sudo hostnamectl set-hostname srv-journaux
sudo timedatectl set-timezone Europe/Paris
netplan try est plus sûr que netplan apply quand tu travailles en SSH : si la nouvelle adresse te coupe, la configuration précédente revient d'elle-même.
Pour l'heure, Ubuntu utilise systemd-timesyncd. Dans /etc/systemd/timesyncd.conf, sous [Time], indique les contrôleurs de domaine, qui sont les serveurs NTP de Sorbier :
[Time]
NTP=192.168.10.177 192.168.10.181
sudo systemctl restart systemd-timesyncd
timedatectl timesync-status # le serveur utilisé et l'écart mesuré
Enfin, sur srv-ad, ajoute l'enregistrement DNS pour joindre le serveur par son nom (la gestion du DNS de l'annuaire est dans le cours Windows Server) :
Add-DnsServerResourceRecordA -ZoneName "ad.sorbier.example" -Name "srv-journaux" -IPv4Address "192.168.10.180"
Lancer l'assistant d'installation
L'assistant de Wazuh installe les trois composants, génère une autorité de certification interne et les certificats de chaque composant, crée les comptes et leurs mots de passe, puis démarre tout :
curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh
sudo bash ./wazuh-install.sh -a
L'option -a (all-in-one) installe l'indexeur, le serveur et le tableau de bord sur la machine. Compte une dizaine de minutes. L'assistant affiche ses étapes : vérification du système et du matériel, ajout du dépôt de paquets Wazuh, installation et configuration de l'indexeur, initialisation de son cluster, installation du serveur et de Filebeat, puis du tableau de bord. Il se termine par un résumé qui donne l'adresse du tableau de bord, l'utilisateur admin et son mot de passe.
Note ce mot de passe tout de suite, dans le gestionnaire de mots de passe du service. Tous les mots de passe générés (indexeur, API, tableau de bord) sont aussi dans l'archive wazuh-install-files.tar, créée dans le dossier où tu as lancé l'assistant :
sudo tar -O -xvf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt
Vérifier l'installation
Quatre services doivent être actifs :
systemctl is-active wazuh-indexer wazuh-manager filebeat wazuh-dashboard
La commande affiche active quatre fois. Pour le détail d'un service récalcitrant, systemctl status wazuh-indexer et journalctl -u wazuh-indexer -n 50.
Vérifie ensuite les ports en écoute :
sudo ss -tlnp | grep -E ':(443|1514|1515|9200|55000)\b'
Tu dois voir le tableau de bord sur 443, le serveur sur 1514, 1515 et 55000, l'indexeur sur 9200. Le dernier contrôle est la chaîne complète : le serveur envoie-t-il bien ses alertes à l'indexeur ?
sudo filebeat test output
Filebeat se connecte à l'indexeur, vérifie le certificat et répond talk to server... OK.
Premier accès au tableau de bord
Depuis le poste d'administration (192.168.10.209), ouvre https://srv-journaux.ad.sorbier.example. Le navigateur affiche un avertissement : le certificat a été signé par l'autorité interne créée par l'assistant, que ton poste ne connaît pas. En laboratoire, accepte l'exception. En production, deux solutions propres : faire signer le certificat du tableau de bord par l'autorité de certification de l'entreprise (AD CS, cours Windows Server), ou distribuer le certificat racine de Wazuh (root-ca.pem) aux postes d'administration par GPO.
Connecte-toi avec admin et le mot de passe noté. La page d'accueil présente des cartes par grand thème ; le menu (☰, en haut à gauche) donne accès à tout :
| Rubrique du menu | Ce qu'elle contient | Chapitres |
|---|---|---|
| Endpoint security | Configuration Assessment, Malware Detection, File Integrity Monitoring | 8 et 9 |
| Threat intelligence | Threat Hunting, Vulnerability Detection, MITRE ATT&CK | 9 à 11 |
| Security operations | IT Hygiene (inventaire), PCI DSS, GDPR, HIPAA, NIST 800-53, TSC | 9 et 10 |
| Agents management | Summary (la liste des agents, le bouton de déploiement), les groupes | 4 |
| Server management | Rules, Decoders, CDB lists, Status, Logs, Settings, Ruleset Test | 7 et 13 |
| Indexer management | Gestion des index, sécurité (comptes et rôles), outils | 13 |
Pour l'instant, aucun agent n'est inscrit : seul le serveur lui-même remonte ses propres événements, sous le nom de l'agent 000.
Changer les mots de passe et sécuriser le serveur
Les mots de passe. Le mot de passe d'admin généré par l'assistant est solide, mais il a été affiché à l'écran et écrit dans une archive. Change-le avec l'outil fourni, qui met à jour tous les composants concernés :
sudo bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/wazuh-passwords-tool.sh \
-u admin -p '<NOUVEAU_MOT_DE_PASSE>'
Le mot de passe doit faire de 8 à 64 caractères, avec au moins une majuscule, une minuscule, un chiffre et un des symboles .*+?-. L'outil indique ensuite les services à redémarrer. Pour les comptes des collègues, on ne partage pas admin : on crée des comptes nominatifs (chapitre 13).
Les mises à jour automatiques. Une mise à jour des paquets Wazuh lancée par un apt upgrade de routine peut désynchroniser les composants et casser l'installation. La documentation recommande de désactiver le dépôt Wazuh et de le réactiver uniquement pour une mise à jour planifiée (chapitre 13) :
sudo sed -i "s/^deb /#deb /" /etc/apt/sources.list.d/wazuh.list
sudo apt update
Le reste du système, lui, continue de recevoir ses mises à jour de sécurité Ubuntu.
Le pare-feu local. Le pare-feu pfSense filtre déjà entre les zones, mais les machines du VLAN 20 joignent srv-journaux sans le traverser. Le pare-feu d'Ubuntu, ufw, ajoute une seconde barrière : seuls les flux du chapitre 2 sont acceptés.
sudo ufw default deny incoming
sudo ufw allow from 192.168.10.208/28 to any port 22 proto tcp # SSH depuis le VLAN d'administration
sudo ufw allow from 192.168.10.208/28 to any port 443 proto tcp # tableau de bord
sudo ufw allow from 192.168.10.64/26 to any port 1514:1515 proto tcp # agents des postes
sudo ufw allow from 192.168.10.176/28 to any port 1514:1515 proto tcp # agents des serveurs
sudo ufw allow from 192.168.10.225 to any port 1514:1515 proto tcp # agent de srv-web (DMZ)
sudo ufw allow from 192.168.10.190 to any port 514 proto udp # syslog du pare-feu
sudo ufw enable
sudo ufw status numbered
Les autres façons d'installer
- Installation pas à pas : la documentation détaille l'installation de chaque composant séparément (indexeur, puis serveur, puis tableau de bord), avec un fichier
config.ymlqui décrit les nœuds. C'est la voie du déploiement réparti. - Image OVA : une machine virtuelle prête à l'emploi, importable dans Proxmox. Pratique pour une démonstration, mais tu n'apprends rien de l'installation et tu hérites de ses mots de passe par défaut.
- Docker : des images officielles et un fichier Compose pour un ou plusieurs nœuds ; il faut alors exploiter des volumes persistants pour ne pas perdre les alertes (cours Docker).
Pour une réalisation d'examen, l'assistant sur une Ubuntu que tu as installée toi-même est le meilleur choix : tu peux expliquer chaque étape au jury.
Dépanner l'installation
| Symptôme | Cause probable | Que faire |
|---|---|---|
| L'assistant s'arrête au contrôle du matériel | Processeur ou mémoire sous le minimum exigé | Augmente les ressources de la VM, redémarre-la, relance |
| Le tableau de bord affiche longtemps qu'il n'est pas prêt | L'indexeur démarre encore, ou n'a pas pu démarrer | systemctl status wazuh-indexer, puis journalctl -u wazuh-indexer ; souvent un manque de mémoire |
| Erreurs de certificat entre composants | Horloge fausse au moment de la génération, ou nom de machine changé après l'installation | Corrige l'heure et le nom, puis réinstalle depuis l'instantané |
| Le port 443 est déjà pris | Un serveur web (Apache, Nginx) installé sur la même machine | Retire-le : le tableau de bord a besoin du 443 |
| Plus aucune alerte n'arrive dans l'indexeur après quelques semaines | Disque presque plein : l'indexeur bloque les écritures pour se protéger | Libère de la place et fixe une durée de conservation (chapitre 13) |
Exercices
Exercice 1 sur 3 Le fichier Netplan qui ne marche pas Réussi À revoir
Un collègue a écrit ce fichier pour srv-journaux. Après sudo netplan try, le serveur répond au ping depuis le VLAN 20, mais pas depuis le poste d'administration, et apt update échoue. Trouve les deux erreurs.
network:
version: 2
ethernets:
ens18:
dhcp4: false
addresses: [192.168.10.180/24]
nameservers:
addresses: [192.168.10.177]
Voir la réponseMasquer la réponse de l'exercice 1
- Le masque :
/24au lieu de/28. Le serveur croit que tout192.168.10.0/24est sur son lien, y compris le VLAN 99 : il envoie ses réponses au poste.209directement, par ARP, au lieu de passer par la passerelle. Elles n'arrivent jamais, puisque le poste est dans un autre VLAN. - La route par défaut manque : sans
routes: - to: default via: 192.168.10.190, le serveur ne sait pas joindre Internet, d'où l'échec d'apt update(il ne joint pas non plus les autres réseaux).
On peut ajouter le second DNS (192.168.10.181) et le domaine de recherche, mais ce ne sont pas des erreurs bloquantes.
Tu avais trouvé ?
Exercice 2 sur 3 Remettre de l'ordre Réussi À revoir
Remets ces étapes dans le bon ordre : (a) changer le mot de passe d'admin ; (b) prendre un instantané avant-wazuh ; (c) fixer l'adresse, le nom et l'heure ; (d) lancer wazuh-install.sh -a ; (e) désactiver le dépôt Wazuh ; (f) créer la VM avec 8 Gio de mémoire ; (g) vérifier les quatre services et filebeat test output ; (h) supprimer wazuh-install-files.tar du serveur après l'avoir mis à l'abri.
Voir la réponseMasquer la réponse de l'exercice 2
f, c, b, d, g, a, h, e (les trois dernières peuvent s'échanger). On crée la machine, on règle le réseau et l'heure avant l'installation (les certificats portent le nom et dépendent de l'heure), on prend l'instantané juste avant l'assistant, on vérifie avant de toucher aux mots de passe, puis on range les secrets et on bloque les mises à jour accidentelles.
Tu avais trouvé ?
Exercice 3 sur 3 Les règles ufw de Marseille Réussi À revoir
Les deux serveurs Windows de l'agence de Marseille (10.30.1.161 et 10.30.1.162) doivent avoir un agent qui remonte à srv-journaux. Écris la ou les règles ufw à ajouter, au plus juste.
Voir la réponseMasquer la réponse de l'exercice 3
sudo ufw allow from 10.30.1.161 to any port 1514:1515 proto tcp
sudo ufw allow from 10.30.1.162 to any port 1514:1515 proto tcp
On autorise les deux adresses plutôt que tout 10.30.1.160/28 : seuls ces deux serveurs ont un agent. On peut retirer le 1515 une fois les agents inscrits (sudo ufw status numbered, puis sudo ufw delete <numéro>). Il faut bien sûr que le pare-feu et les routeurs entre les sites laissent passer ces flux.
Tu avais trouvé ?