SNMP

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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 dans snmpd.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 table extTable).
  • 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