SNMP
| Fiche express | |
|---|---|
| Domaine | Supervision réseau (SNMP) |
| Protocole | SNMP v1 / v2c / v3 — UDP 161 (requêtes), UDP 162 (traps) |
| Implémentation | net-snmp (anciennement ucd-snmp) |
| Fichiers clés | /etc/snmp/snmpd.conf · /usr/share/snmp/mibs/
|
| Voir aussi | Snmpd.conf (configuration agent) · Snmptrap (réception des traps) |
SNMP (Simple Network Management Protocol) est le protocole standard de supervision des équipements réseau et serveurs. Un agent (snmpd) tourne sur l'équipement supervisé et expose des valeurs (charge, interfaces, processus, espace disque...) sous forme d'objets identifiés par un OID ; un manager de supervision (Nagios, Centreon, EyesOfNetwork, Zabbix...) interroge ces agents périodiquement, ou reçoit des alertes asynchrones (traps).
Architecture agent / manager
- Agent (
snmpd) : tourne sur la machine supervisée, écoute en UDP/161, répond aux requêtes GET/GETNEXT/GETBULK/SET selon les droits définis danssnmpd.conf. Voir Snmpd.conf. - Manager : logiciel de supervision qui interroge les agents, via Snmpget, Snmpwalk, Snmptable..., ou qui écoute les traps envoyées spontanément par l'agent (voir Snmptrap).
- Trap : notification asynchrone envoyée par l'agent vers le manager (UDP/162) lors d'un évènement (redémarrage, seuil dépassé, lien réseau down...), sans requête préalable du manager.
MIB et OID
Une MIB (Management Information Base) décrit, sous forme d'arbre, l'ensemble des objets qu'un agent peut exposer. Chaque objet est identifié par un OID (Object Identifier), une suite de nombres séparés par des points représentant le chemin depuis la racine de l'arbre ISO :
.1.3.6.1.2.1... branche MIB-II standard (system, interfaces, ip, tcp, udp...)
.1.3.6.1.4.1... branche "entreprise" : MIB spécifiques à un éditeur (ex. UCD-SNMP-MIB sous .1.3.6.1.4.1.2021)
.1.3.6.1.6.3... branche de l'architecture SNMPv3 (USM, VACM...)
Les fichiers de définition de MIB sont installés dans /usr/share/snmp/mibs/. Snmptranslate permet de passer d'une forme numérique à une forme littérale (et inversement), et d'afficher l'arbre complet des OID connus.
Quelques tables usuelles exposées par l'extension UCD (alimentées par les directives décrites dans Snmp conf avancee) :
| Table | Contenu |
|---|---|
dskTable |
partitions surveillées (directive disk)
|
prTable |
processus surveillés (directive proc)
|
fileTable |
tailles de fichiers surveillées (directive file)
|
laTable |
charge processeur (directive load)
|
extTable |
sorties de scripts externes (directive exec)
|
hrStorageTable / hrSWRunTable |
tables standard HOST-RESOURCES-MIB (stockage, processus) — indépendantes de l'extension UCD |
ifTable |
interfaces réseau (MIB-II standard) |
Versions SNMP
- v1 : la plus ancienne, authentification par une simple community string transmise en clair. À proscrire au-delà d'un réseau de confiance strict.
- v2c : ajoute l'opération GETBULK (récupération en masse, plus efficace pour Snmpwalk) mais garde des community strings en clair — mêmes limites de sécurité que v1.
- v3 : introduit une authentification par utilisateur (MD5/SHA) et un chiffrement des trames (DES/AES), plus une gestion de droits fine par utilisateur (VACM). C'est la seule version recommandée dès que le trafic SNMP traverse un réseau non totalement maîtrisé. Voir Snmpd v3.
Installation
yum install -y net-snmp net-snmp-utils net-snmp-libs # RHEL/CentOS
apt install -y snmpd snmp # Debian/Ubuntu
systemctl enable --now snmpd
Le fichier de configuration se place dans /etc/snmp/snmpd.conf (voir Snmpd.conf pour le détail des directives). Pour réduire la verbosité dans les journaux système, ajuster les options de démarrage du service plutôt que le niveau de log par défaut.
Test rapide une fois l'agent démarré :
snmpwalk -v2c -c public monitoring-server IP-MIB::ipAdEntIfIndex
Étendre l'agent : directives exec / pass
Deux mécanismes permettent de brancher un script externe sous un OID personnalisé :
exec: exécute une commande et expose sa sortie brute (une ligne = un objet de la tableextTable).pass: délègue totalement la gestion d'une sous-branche de la MIB à un programme externe, qui doit alors répondre lui-même au protocole GET/GETNEXT/SET sur cette branche.
Exemple : superviser l'état d'un bonding réseau (non exposé nativement par net-snmp) via un script shell qui lit /proc/net/bonding/.
1. Déclarer le script dans /etc/snmp/snmpd.conf (et non snmp.conf, qui est la configuration cliente des commandes Snmpget/Snmpwalk, pas celle de l'agent — confusion fréquente à éviter) :
exec .1.3.6.1.4.1.2021.170 bonding /opt/bin/snmp_bond.sh
# autoriser la lecture de cette branche (et plus généralement de tout .1 en lecture) :
view all included .1
view systemview included .1.3.6.1.4.1.2021.170
chmod +x /opt/bin/snmp_bond.sh
chown nagios /opt/bin/snmp_bond.sh
systemctl restart snmpd
2. Le script (adapté d'un script communautaire classique de supervision du bonding Linux, largement republié dans des kits de checks Nagios/net-snmp) :
#!/bin/bash
# Expose l'état des interfaces bonding (/proc/net/bonding) via SNMP,
# une ligne de sortie par interface bonding (consommable par un check Nagios).
BONDING_STAT_DIR=/proc/net/bonding/
for BONDING_INTERFACE in $(ls "$BONDING_STAT_DIR"); do
RETURN="$BONDING_INTERFACE"
while read -r LINE; do
case "$LINE" in
"Bonding Mode: "*)
RETURN="$RETURN ${LINE##Bonding Mode: }" ;;
"Currently Active Slave: "*)
RETURN="$RETURN ${LINE##Currently Active Slave: }" ;;
"Slave Interface: "*)
RETURN="$RETURN ${LINE##Slave Interface: }" ;;
"MII Status: "*)
RETURN="$RETURN ${LINE##MII Status: }" ;;
esac
done < "$BONDING_STAT_DIR/$BONDING_INTERFACE"
echo "$RETURN"
done
3. Requête :
snmpwalk -v2c -c public monitoring-target .1.3.6.1.4.1.2021.170
Voir aussi
Configuration de l'agent
- Snmpd.conf — modèle de configuration commenté, contrôle d'accès (com2sec/group/view/access)
- Snmpd v2.conf — exemple concret de configuration v2c
- Snmpd v3 — utilisateurs authentifiés et chiffrés
- Snmp conf avancee — supervision disque/process/fichiers/services via l'extension UCD
- Snmptrap config — configuration de l'envoi des traps côté agent
Commandes clientes
- Snmpget · Snmpgetnext · Snmpwalk · Snmptable — lecture
- Snmpset — écriture
- Snmptrap — réception/émission de traps
- Snmptranslate · Tkmib — exploration des MIB
- Snmptest — test interactif de requêtes
- Snmpstatus · Snmpdf · Snmpnetstat — équivalents SNMP de commandes système courantes