Chapitre 615 minIntermédiaire
Superviser Linux et Windows Server avec l'agent 2
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- installer et configurer l'agent 2 sous Debian et sous Windows Server ;
- chiffrer les échanges entre l'agent et le serveur avec une clé PSK ;
- superviser les services d'Active Directory, du DNS et du DHCP ;
- ajouter une mesure personnalisée avec un
UserParameter; - enregistrer automatiquement les nouveaux serveurs.
3 exercices corrigés
Pour superviser un serveur Linux ou Windows avec Zabbix, on installe sur lui l'agent 2, on lui indique l'adresse du serveur Zabbix, puis on crée l'hôte dans l'interface avec le modèle Linux by Zabbix agent ou Windows by Zabbix agent. Ce chapitre fait l'installation sous Debian 13 et sous Windows Server 2025, chiffre les échanges avec une clé PSK, supervise Active Directory, le DNS et le DHCP de Sorbier, ajoute des mesures personnalisées et automatise l'enregistrement des nouveaux serveurs.
Installer l'agent 2 sous Debian
Sur srv-gestion (192.168.10.179), ajoute le même dépôt que pour le serveur, puis installe l'agent :
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian13_all.deb
sudo dpkg -i zabbix-release_latest_7.0+debian13_all.deb
sudo apt update
sudo apt install zabbix-agent2
Sur Ubuntu 24.04 LTS, le principe est le même avec le paquet zabbix-release du dépôt zabbix/7.0/ubuntu. Règle ensuite trois lignes de /etc/zabbix/zabbix_agent2.conf :
# /etc/zabbix/zabbix_agent2.conf
Server=192.168.10.180 # qui a le droit d'interroger l'agent (contrôles passifs)
ServerActive=192.168.10.180 # où envoyer les contrôles actifs
Hostname=srv-gestion # le nom de l'hôte, identique dans l'interface de Zabbix
Le fichier livré contient Server=127.0.0.1, ServerActive=127.0.0.1 et Hostname=Zabbix server : une seule commande les remplace.
sudo sed -i -e 's/^Server=127.0.0.1$/Server=192.168.10.180/' \
-e 's/^ServerActive=127.0.0.1$/ServerActive=192.168.10.180/' \
-e 's/^Hostname=Zabbix server$/Hostname=srv-gestion/' /etc/zabbix/zabbix_agent2.conf
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2
sudo ss -lntp | grep 10050
Depuis srv-journaux, teste avant de créer l'hôte (paquet zabbix-get) :
zabbix_get -s 192.168.10.179 -k agent.version
zabbix_get -s 192.168.10.179 -k 'vfs.fs.size[/,pused]'
Puis crée l'hôte srv-gestion avec le modèle Linux by Zabbix agent (chapitre 5).
Ce qu'il faut regarder sur un serveur Linux
Le modèle Linux by Zabbix agent collecte tout ce qui suit. Encore faut-il savoir lire les valeurs.
| Ressource | Indicateur | Lecture | Commande pour vérifier à la main |
|---|---|---|---|
| Processeur | system.cpu.util (%), et sa part iowait | Au-dessus de 90 % pendant des minutes : surcharge. Un iowait élevé signifie que le processeur attend les disques, pas qu'il calcule | top, mpstat 1 (paquet sysstat) |
| Charge | system.cpu.load[all,avg5] | Nombre moyen de tâches qui veulent tourner. À comparer au nombre de cœurs : 6 sur 4 cœurs, c'est 1,5 par cœur, le seuil d'avertissement du modèle | uptime, cat /proc/loadavg |
| Mémoire | vm.memory.size[available] | La mémoire disponible compte, pas la mémoire « libre » : Linux remplit la mémoire inutilisée de cache, qu'il rend à la demande | free -h (colonne available) |
| Swap | system.swap.size[,pfree] | Un swap qui se remplit et se vide en permanence (activité de pagination) ralentit tout | vmstat 1 (colonnes si, so) |
| Disques | vfs.fs.dependent.size[/,pused], inodes | Espace et inodes : un disque peut être « plein » à 60 % s'il n'a plus d'inodes (des millions de petits fichiers) | df -h, df -i |
| Entrées-sorties | Temps d'attente des disques ({$VFS.DEV.READ.AWAIT.WARN}) | Des dizaines de millisecondes par opération : disque saturé ou défaillant | iostat -x 1 |
| Réseau | Débit, erreurs, paquets rejetés par interface | Des erreurs qui augmentent : câble, carte, duplex | ip -s link, ss -s |
| Système | Durée de fonctionnement, heure, nombre de processus, paquets installés | Un redémarrage non prévu, une horloge décalée | uptime, timedatectl, chronyc tracking |
Installer l'agent 2 sous Windows Server
Sur srv-ad (192.168.10.177, Windows Server 2025), télécharge l'installeur MSI de l'agent 2 depuis la page de téléchargement de Zabbix (zabbix_agent2-7.0.32-windows-amd64-openssl.msi), puis :
Avec l'assistant. Accepte la licence, puis renseigne Host name (srv-ad), Zabbix server IP/DNS (192.168.10.180), Agent listen port (10050) et Server or Proxy for active checks (192.168.10.180). Coche Enable PSK si tu chiffres dès l'installation : l'écran suivant demande Pre-shared key identity et Pre-shared key value. La case Add agent location to the PATH permet de lancer zabbix_agent2.exe depuis n'importe quel dossier. Installe. L'installeur ajoute de lui-même une exception au pare-feu Windows pour le port 10050 (le paramètre SKIP=fw l'en empêche). L'agent s'installe dans C:\Program Files\Zabbix Agent 2\, avec son fichier zabbix_agent2.conf, et devient le service Zabbix Agent 2.
En ligne de commande, sans interaction (pratique pour plusieurs serveurs ou un script de démarrage par GPO), dans une invite PowerShell lancée en administrateur :
msiexec.exe /l*v C:\Temp\zabbix_agent2.log /i C:\Temp\zabbix_agent2-7.0.32-windows-amd64-openssl.msi /qn `
SERVER=192.168.10.180 SERVERACTIVE=192.168.10.180 HOSTNAME=srv-ad
Get-Service "Zabbix Agent 2"
Get-NetTCPConnection -LocalPort 10050 -State Listen
L'installeur ajoute une règle au pare-feu Windows pour le port 10050 (le paramètre SKIP=fw l'en empêche). Teste ensuite depuis srv-journaux : zabbix_get -s 192.168.10.177 -k agent.version.
Pour déployer l'agent sur tous les serveurs Windows d'un coup, deux méthodes : un script de démarrage lié par GPO à l'unité d'organisation des serveurs, qui lance la commande msiexec ci-dessus si le service n'existe pas encore ; ou un outil de déploiement. Le cours Windows Server explique la création et le lien des GPO ; sur un parc mixte, Ansible installe l'agent et son fichier de configuration sur tous les serveurs en une commande (écrire un playbook Ansible).
Ce qu'apporte le modèle Windows
Lie l'hôte srv-ad au modèle Windows by Zabbix agent. Il collecte le processeur, la mémoire, les volumes, les interfaces, les compteurs de performance (perf_counter_en["\System\Processor Queue Length"]), et surtout découvre les services : une règle de découverte liste les services Windows dont le démarrage est automatique (macro {$SERVICE.STARTUPNAME.MATCHES} = ^(?:automatic|automatic delayed)$) et crée pour chacun un élément service.info["NOM",state] et un déclencheur :
min(/Windows by Zabbix agent/service.info["{#SERVICE.NAME}",state],#3)<>0
Le service n'est pas en marche lors des trois dernières mesures : gravité Average. Sur un contrôleur de domaine, ce sont donc automatiquement supervisés les services de l'annuaire :
| Nom du service | Nom affiché | Rôle |
|---|---|---|
NTDS | Services de domaine Active Directory | L'annuaire lui-même |
DNS | Serveur DNS | La résolution des noms du domaine |
DHCPServer | Serveur DHCP | La distribution des adresses du LAN |
Netlogon | Accès réseau | L'authentification des ouvertures de session |
Kdc | Centre de distribution de clés Kerberos | Les tickets Kerberos |
W32Time | Temps Windows | L'heure, indispensable à Kerberos |
ADWS | Services web Active Directory | Les consoles et le module PowerShell ActiveDirectory |
Superviser le DHCP : remplissage des étendues
Le risque principal d'un serveur DHCP n'est pas l'arrêt du service, c'est l'étendue pleine : plus aucune adresse à distribuer, et les nouveaux postes restent sans réseau. Aucun élément standard ne mesure le remplissage d'une étendue ; on l'ajoute avec un paramètre utilisateur (UserParameter), une commande que l'agent exécute pour fournir une valeur.
Dans C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf de srv-ad, ajoute :
UserParameter=dhcp.scope.pused[*],powershell.exe -NoProfile -NonInteractive -Command "(Get-DhcpServerv4ScopeStatistics -ScopeId $1).PercentageInUse"
Redémarre le service (Restart-Service "Zabbix Agent 2"). La clé dhcp.scope.pused[192.168.10.64] renvoie le pourcentage d'adresses utilisées de l'étendue des postes : $1 est remplacé par le premier paramètre de la clé. Crée l'élément (type Zabbix agent, Numeric (float), intervalle 5m) en réglant son champ Timeout sur 10s : PowerShell met une ou deux secondes à démarrer, plus que le délai global de 3 secondes. Puis le déclencheur :
min(/srv-ad/dhcp.scope.pused[192.168.10.64],15m)>90
Le basculement DHCP entre srv-ad et srv-ad2 se supervise de la même façon (Get-DhcpServerv4Failover, propriété State, qui doit valoir Normal). La mise en place de ce basculement est dans le cours Windows Server.
Les paramètres utilisateur sous Linux
Le même mécanisme existe sous Linux. Pour compter les mises à jour en attente sur srv-gestion, crée /etc/zabbix/zabbix_agent2.d/sorbier.conf (le fichier principal inclut tous les *.conf de ce dossier) :
# /etc/zabbix/zabbix_agent2.d/sorbier.conf
UserParameter=apt.updates.pending,apt-get -s upgrade 2>/dev/null | grep -c '^Inst' || true
UserParameter=apt.updates.security,apt-get -s upgrade 2>/dev/null | grep -c '^Inst.*-security' || true
apt-get -s simule la mise à jour sans rien installer et sans droits d'administrateur ; grep -c compte les lignes Inst, une par paquet. || true évite un code de retour en erreur quand il n'y a aucune mise à jour (grep renvoie alors 1, avec un affichage 0). Redémarre l'agent, teste avec zabbix_get -s 192.168.10.179 -k apt.updates.security, et collecte toutes les heures : la liste des paquets ne change qu'après un apt update.
Chiffrer avec une clé PSK
Par défaut, les échanges entre l'agent et le serveur circulent en clair : les valeurs, les noms des services, les lignes de journaux. Un attaquant sur le réseau pourrait aussi se faire passer pour le serveur. Zabbix chiffre en TLS, avec une clé prépartagée (PSK) ou des certificats. La PSK est la plus simple.
Sur srv-gestion :
openssl rand -hex 32 | sudo tee /etc/zabbix/zabbix_agent2.psk
sudo chown zabbix:zabbix /etc/zabbix/zabbix_agent2.psk
sudo chmod 600 /etc/zabbix/zabbix_agent2.psk
openssl rand -hex 32 produit 32 octets aléatoires, écrits en 64 chiffres hexadécimaux (256 bits). Puis, dans zabbix_agent2.conf :
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK-srv-gestion
TLSPSKFile=/etc/zabbix/zabbix_agent2.psk
TLSAccept concerne les contrôles passifs (les connexions que l'agent accepte), TLSConnect les contrôles actifs (les connexions qu'il ouvre). Redémarre l'agent. Dans Zabbix, hôte srv-gestion, onglet Encryption : Connections to host = PSK, Connections from host = PSK seulement, PSK identity = PSK-srv-gestion, PSK = les 64 caractères du fichier. L'icône ZBX repasse au vert après la mesure suivante, et la colonne Agent encryption de la liste des hôtes affiche PSK.
Le test à la main, depuis srv-journaux, demande une copie de la clé dans un fichier lisible par root seulement :
zabbix_get -s 192.168.10.179 -k agent.ping --tls-connect psk \
--tls-psk-identity PSK-srv-gestion --tls-psk-file /root/psk-srv-gestion.psk
Sous Windows, l'installeur accepte les mêmes réglages (TLSCONNECT=psk TLSACCEPT=psk TLSPSKIDENTITY=PSK-srv-ad TLSPSKVALUE=…). Utilise une clé par hôte : une clé volée ne compromet alors qu'un agent.
Enregistrer automatiquement les nouveaux serveurs
Créer chaque hôte à la main est source d'oublis : le serveur installé un vendredi soir n'est jamais ajouté à la supervision. L'enregistrement automatique (autoregistration) retourne le problème : c'est l'agent actif qui se présente au serveur, et une action crée l'hôte.
- Sur chaque nouvel agent, renseigne
ServerActive=192.168.10.180, unHostname=unique et des métadonnées :HostMetadata=Linux sorbierouHostMetadata=Windows sorbier. - Dans Zabbix, Alerts > Actions > Autoregistration actions, bouton Create action :
- nom : « Enregistrement des serveurs Windows » ;
- condition : Host metadata contains
Windowset Host metadata containssorbier; - opérations : Add host, Add to host groups
Serveurs Windows, Link templatesWindows by Zabbix agent active.
- Une seconde action fait de même pour
LinuxavecLinux by Zabbix agent active.
Le mot sorbier sert de mot de passe faible : il évite qu'une machine inconnue qui pointe vers le serveur soit enregistrée. Pour une vraie protection, impose le chiffrement PSK de l'enregistrement (Administration > General > Autoregistration, Encryption level PSK) : seuls les agents qui connaissent la clé commune pourront se présenter. Comme l'agent se présente en contrôle actif, choisis les variantes … active des modèles : il n'y a même pas besoin d'ouvrir le port 10050.
Exercices
Exercice 1 sur 3 Configurer l'agent de srv-fichiers Réussi À revoir
srv-fichiers (192.168.10.178) est un Windows Server 2025. Il doit être interrogé en passif par srv-journaux et envoyer aussi des contrôles actifs (pour lire le journal des événements). Ses échanges seront chiffrés en PSK avec l'identité PSK-srv-fichiers.
- Écris la commande
msiexecd'installation silencieuse. - Quel modèle lies-tu, et quel déclencheur surveillera le service
LanmanServer(le partage de fichiers) ? - Le serveur affiche l'agent en rouge avec le message
Received empty response from Zabbix Agent … Assuming that agent dropped connection because of access permissions. Quelle est la cause la plus probable ?
Voir la réponseMasquer la réponse de l'exercice 1
-
Par exemple, la clé ayant été produite avec
openssl rand -hex 32:msiexec.exe /l*v C:\Temp\zabbix_agent2.log /i C:\Temp\zabbix_agent2-7.0.32-windows-amd64-openssl.msi /qn ` SERVER=192.168.10.180 SERVERACTIVE=192.168.10.180 HOSTNAME=srv-fichiers ` TLSCONNECT=psk TLSACCEPT=psk TLSPSKIDENTITY=PSK-srv-fichiers TLSPSKVALUE=<les 64 caractères de la clé> -
Windows by Zabbix agent(contrôles passifs).LanmanServerdémarre automatiquement : la découverte des services créeservice.info["LanmanServer",state]et le déclencheurWindows: "LanmanServer" (Serveur) is not running, avec l'expressionmin(…,#3)<>0. -
Le serveur et l'agent ne parlent pas le même chiffrement : l'agent exige la PSK (
TLSAccept=psk) mais l'hôte, dans Zabbix, est resté sur No encryption dans l'onglet Encryption (ou l'identité ou la clé diffèrent). L'agent ferme la connexion sans répondre. Il faut renseigner l'onglet Encryption avec la même identité et la même clé.
Tu avais trouvé ?
Exercice 2 sur 3 Une étendue DHCP presque pleine Réussi À revoir
Le jeudi à 8 h 40, l'élément dhcp.scope.pused[192.168.10.64] de srv-ad vaut 98 %. L'étendue des postes compte 50 adresses distribuables (le reste du réseau 192.168.10.64/26 est réservé aux imprimantes et à la passerelle).
- Combien d'adresses restent libres ?
- Quelles causes envisages-tu, et comment les vérifier ?
- Pourquoi le déclencheur utilise-t-il
min(…,15m)>90plutôt quelast(…)>90?
Voir la réponseMasquer la réponse de l'exercice 2
- 98 % de 50 adresses font 49 adresses attribuées : il en reste une seule.
- Des causes possibles : une arrivée de nouveaux postes ou d'appareils personnels sur le mauvais VLAN, des baux trop longs qui gardent les adresses de postes partis, un appareil qui demande des adresses en boucle, ou une attaque par épuisement DHCP. Vérifications : la liste des baux (
Get-DhcpServerv4Lease -ScopeId 192.168.10.64), les adresses MAC qui reviennent, la durée des baux, la date des derniers baux attribués. L'épuisement par un attaquant se prévient par le DHCP snooping des switchs (cours Cybersécurité des infrastructures). - Pour ignorer un pic bref : au moment des arrivées du matin, l'étendue peut passer quelques minutes au-dessus de 90 % puis redescendre quand d'anciens baux expirent. Le seuil sur 15 minutes ne garde que les situations durables.
Tu avais trouvé ?
Exercice 3 sur 3 Un hôte actif qui ne remonte rien Réussi À revoir
Le serveur web de la DMZ (192.168.10.225) a été ajouté avec le modèle Linux by Zabbix agent active. Aucune donnée n'arrive. Son journal d'agent contient :
2026/11/03 10:22:31.118011 [101] active check configuration update from [192.168.10.180:10051] started to fail (cannot connect to [[192.168.10.180]:10051]: dial tcp 192.168.10.180:10051: i/o timeout)
- Que s'est-il passé ?
- Que fais-tu ?
- Si le message avait été
no active checks on server [192.168.10.180:10051]: host [srv-web] not found, qu'aurais-tu corrigé ?
Voir la réponseMasquer la réponse de l'exercice 3
- L'agent n'arrive pas à ouvrir la connexion vers le port 10051 de srv-journaux : le délai expire (i/o timeout), signe d'un paquet bloqué en route plutôt que d'un refus.
- Vérifier la règle de pfSense sur l'interface DMZ :
192.168.10.225vers192.168.10.180, TCP 10051, autorisée et placée avant le blocage de la DMZ vers le réseau interne. Status > System Logs > Firewall montre le paquet bloqué. Depuis srv-web,nc -vz 192.168.10.180 10051(paquetnetcat-openbsd) teste le port. Vérifier aussi que srv-journaux n'a pas de pare-feu local qui refuse ce port. - La connexion passerait, mais le serveur ne connaît pas d'hôte nommé
srv-web: soit l'hôte a été créé sous un autre nom (SRV-WEB,srv-web.dmz), soitHostname=de l'agent est faux. On aligne les deux noms, exactement.
Tu avais trouvé ?