* Explorateur de MIB : <https://cric.grenoble.cnrs.fr/Administrateurs/Outils/MIBS/> ou <http://www.circitor.fr/Mibs/Mibs.php> (peut donner plus de détails sur l'interprétation des valeurs)
SNMP (pour Simple Network Management Protocol) est un protocole qui permet la supervision d'équipements réseau (serveurs, routeurs, switchs...). Il utilise le protocole de transport UDP sur les ports 161 et 162 pour les traps.
* Les nœuds sont les équipements informatiques à superviser ;
* Les agents sont des démons qui tournent en permanence sur les nœuds pour répondre aux requêtes du manager.
Toutes les données qu'un agent fournit sont référencés dans une MIB, accessible grâce à un OID. Une MIB (Management Information Base) est une base de données dans laquelle les informations sont classées sous forme d'arbre. Chaque information est alors accessible par son OID (Object Identifier), qui est en fait le chemin hiérarchique de l'élément.
Par exemple, 1.3.6.1.2.1.2.2.1.2 est l'OID ifDescr qui est la chaîne de caractères décrivant une interface réseau.
Le protocole SNMP peut également être utilisé pour modifier des valeurs dans la MIB (donc plus seulement superviser, mais administrer). Enfin, il existe un concept d'interruption (traps), grâce auquel une notification est envoyée par l'agent au manager SNMP lorsqu'un évènement particulier se produit.
Du point de vue de la sécurité, les versions 1 et 2 du protocoles permettent d'utiliser une communauté comme mot de passe pour pouvoir lire ou écrire dans la MIB, mais celle-ci transite en clair sur le réseau. La version 3 est plus sécurisé puisqu'elle se base sur du chiffrement DES avec des mots de passes ou des clés partagées entre l'agent et le manager.
Le principe est d'installer un agent SNMP (SNMPD = NET SNMP Agent) sur toutes les machines à superviser. Sur la machine de supervision, on installera un client/manager SNMP destiné à recueillir les informations des agents SNMP.
Cependant, l'installation de ce paquet installe également le paquet `snmpd`, ce qui installe donc un agent SNMP sur notre manager SNMP. Si l'on souhaite que notre manager reste uniquement manager, il faut désactiver les fonctionnalités de l'agent, en éditant `/etc/snmp/snmpd.conf`. On indique à l'agent de n'écouter sur aucune IP :
~~~
agentaddress none
~~~
Tout le reste peut être commenté, puis on finit par redémarrer l'agent :
La configuration se fait dans `/etc/snmp/snmptrapd.conf` :
~~~
# Écouter sur l'IP 192.0.2.5
snmpTrapdAddr 192.0.2.5
# Autoriser à recevoir des traps sur la communauté private, et à uniquement logger ces traps
authCommunity log private
~~~
Par défaut le format dans lequel s'ecrivent les trap SNMP en version 2c correspond à `%.4y-%.2m-%.2l %.2h:%.2j:%.2k %B [%b]:\n%v\n` (soit la date, l'heure, l'hostname de la machine source, les IPs et ports source et destination, puis le contenu de la trap ; voir les explications du format dans [man snmptrapd(8)](https://manpages.debian.org/bullseye/snmptrapd/snmptrapd.8.en.html#FORMAT_SPECIFICATIONS). Il n'est pas très lisible et on peut le modifier pour simplement ajouter un saut de ligne entre chaque champs de la trap :
~~~
# Format des traps SNMPv2 : ajouter un saut de ligne entre chaque champs de la trap
format print2 %.4y-%.2m-%.2l %.2h:%.2j:%.2k %B [%b]:\n%V\n%v\n\n
~~~
Si on veut exécuter une action à la réception d'une trap en particulier, on peut utiliser l'option `traphandle`. Le paquet `traptoemail` est inclus avec `snmptrapd` et permet d'envoyer le contenu de la trap SNMP par email. Les autorisations doivent alors être changées pour rajouter le droit d'exécution :
~~~
# Autoriser à recevoir des traps sur la communauté private, et à logger ces traps puis exécuter une action
authCommunity log,execute private
# Envoyer un mail quand on reçoit certaines trap SNMP
traphandle IF-MIB::linkDown /usr/bin/traptoemail -s 127.0.0.1 me@example.org # Link Down
traphandle IF-MIB::linkUp /usr/bin/traptoemail -s 127.0.0.1 me@example.org # Link Up
Si `default` est indiqué dans le champ OID, alors le programme sera invoqué pour chaque OID ne correspondant pas aux autres OID pour lesquels une `traphandle` est définie.
#### Astuce : obtenir le hostname de la machine source de la trap SNMP sans DNS
Le champ "hostname" (correspondant à `%B` dans le format de la trap) est déduit de l'IP source par résolution DNS. Si l'IP n'a pas de résolution DNS (et que l'on ne souhaite pas en configurer), on peut utiliser le fichier `/etc/hosts` sur la machine recevant les traps :
Ainsi, le nom `SW01` sera affiché comme hostname source si l'IP source est 192.0.2.1, et ainsi de suite pour les autres IP. S'il n'y a aucune résolution, alors le champ sera noté `<Unknown>`.
*`-w` : plage de valeur du résultat (sous la forme `"x:y"`) qui ne sera pas considéré comme un _Warning_ (les valeurs x et y sont compris dans la plage) ;