Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
snmp [Le 06/09/2009, 17:28]
YoBoY ancienne révision restaurée
snmp [Le 02/03/2023, 14:17] (Version actuelle)
217.114.205.206 [Installation]
Ligne 1: Ligne 1:
-{{tag>Breezy ​serveur supervision}}+{{tag>​serveur supervision}}
  
 ---- ----
  
-====== SNMP ou la supervision déquipements réseaux ======+====== SNMP (Simple Network Management Protocol) ​ou la supervision d'équipements réseaux ======
  
 ===== Introduction ===== ===== Introduction =====
  
-==== Quest ce que le SNMP ? ====+==== Qu'est-ce que le SNMP ? ====
  
-Le **SNMP** est un protocole qui permet aux administrateurs réseaux de gérer les équipements et de diagnostiquer les problèmes. Le sigle SNMP signifie //Simple Network Management Protocol// et la plupart des switchs, UPS, parefeux ​matériels, routeurs, etc. comprennent ce protocole pour les diagnostiques.+Le **SNMP** est un protocole qui permet aux administrateurs réseaux de gérer les équipements et de diagnostiquer les problèmes. Le sigle SNMP signifie //Simple Network Management Protocol// et la plupart des switchs, UPS, pare-feux ​matériels, routeurs, etc. comprennent ce protocole pour les diagnostics.
  
 <note tip>​Quand on dit « la plupart », on parle du matériel que l'on retrouve en entreprise ; pas forcément le routeur fourni par votre fournisseur d'​accès Internet. Pour savoir si votre matériel est compatible avec le SNMP, veuillez consulter les spécifications techniques livrées avec l'​appareil.</​note>​ <note tip>​Quand on dit « la plupart », on parle du matériel que l'on retrouve en entreprise ; pas forcément le routeur fourni par votre fournisseur d'​accès Internet. Pour savoir si votre matériel est compatible avec le SNMP, veuillez consulter les spécifications techniques livrées avec l'​appareil.</​note>​
  
-Le protocole SNMP est un standard défini par l'IETF dans la [[http://​www.ietf.org/​rfc/​rfc1157.txt|RFC 1157]] (mai 1990). Le SNMP est souvent vu comme quelque chose de compliqué et d'​assez confus. Les API permettant d'​interagir avec le protocole englobent tellement de choses qu'au final, on ne s'y retrouve plus. Les livres et la documentation disponibles sur le sujet ont tendance à compliquer les choses et à ne pas les démystifier. C'est ce que je vais essayer de faire dans cet article.+Le protocole SNMP est un standard défini par l'IETF dans la [[https://​www.ietf.org/​rfc/​rfc1157.txt|RFC 1157]] (mai 1990). Le SNMP est souvent vu comme quelque chose de compliqué et d'​assez confus. Les API permettant d'​interagir avec le protocole englobent tellement de choses qu'au final, on ne s'y retrouve plus. Les livres et la documentation disponibles sur le sujet ont tendance à compliquer les choses et à ne pas les démystifier. C'est ce que je vais essayer de faire dans cet article.
  
 ==== Généralités et vocabulaire ==== ==== Généralités et vocabulaire ====
  
-Le protocole SNMP est relativement simple… une fois qu'on a compris. Voyons comment se compose un ensemble d'​éléments communiquant //via// SNMP.+Le protocole SNMP (Simple Network Management Protocol) ​est relativement simple… une fois qu'on a compris. Voyons comment se compose un ensemble d'​éléments communiquant //via// SNMP.
  
-Un périphérique réseau (routeur, switch, ​parefeu, ​…) fait tourner un //agent SNMP// qui est en fait un processus //dæmon// qui réponds ​aux requêtes du réseau. L'​**agent SNMP** fournit un grand nombre d'​**identifiant d'​objets** (//Object Identifiers//​ ou **OID**). Un **OID** est une paire clé-valeur unique. L'​**agent SNMP** remplit ces valeurs et fait en sorte qu'​elles soient disponibles. Un **manager SNMP** (ou **client ​SNMP**) peut effectuer des requêtes aux agents avec ces paires clé-valeur à propos d'​informations spécifiques. Les **OID SNMP** peuvent être lus ou écrits.+Un périphérique réseau (routeur, switch, ​pare-feu…) fait tourner un //agent SNMP// qui est en fait un processus //daemon// qui répond ​aux requêtes du réseau. L'​**agent SNMP** fournit un grand nombre d'​**identifiant d'​objets** (//Object Identifiers//​ ou **OID**). Un **OID** est une paire clé-valeur unique. L'​**agent SNMP** remplit ces valeurs et fait en sorte qu'​elles soient disponibles. Un **manager SNMP** (ou **Serveur ​SNMP**) peut effectuer des requêtes aux agents avec ces paires clé-valeur à propos d'​informations spécifiques. Les **OID SNMP** peuvent être lus ou écrits.
  
-Notons qu'il est rare d'​écrire des informations sur un périphérique SNMP. Le SNMP est surtout utilisé par de nombreuses applications de management pour contrôler l'​état des périphériques réseaux (comme une interface graphique administrative pour les switches). Un système d'​authentification basique existe dans le SNMP ; il permet au manager d'​envoyer un //community name// (qui est en fait un mot de passe en clair) pour autoriser la lecture ou l'​écriture des OID. La plupart des périphériques utilisent le //community name// non sécurisé « public ». Les communications SNMP se font //via// les ports UDP 161 et 162.+Notons qu'il est rare d'​écrire des informations sur un périphérique SNMP. Le SNMP est surtout utilisé par de nombreuses applications de management pour contrôler l'​état des périphériques réseaux (comme une interface graphique administrative pour les switchs). Un système d'​authentification basique existe dans le SNMP ; il permet au manager d'​envoyer un //community name// (qui est en fait un mot de passe en clair) pour autoriser la lecture ou l'​écriture des OID. La plupart des périphériques utilisent le //community name// non sécurisé « public ». Les communications SNMP se font //via// les ports UDP 161 et 162.
  
  
Ligne 29: Ligne 29:
 Si vous avez déjà effectué quelques recherches sur le SNMP, vous avez sûrement été confronté aux **MIB** (//​Management Information Base//). L'​importance des MIB est très surfaite et vous allez comprendre pourquoi. Au premier coup d'​œil,​ une MIB peut paraître très complexe ; en réalité, c'est très simple. Si vous avez déjà effectué quelques recherches sur le SNMP, vous avez sûrement été confronté aux **MIB** (//​Management Information Base//). L'​importance des MIB est très surfaite et vous allez comprendre pourquoi. Au premier coup d'​œil,​ une MIB peut paraître très complexe ; en réalité, c'est très simple.
  
-Les **OID** sont numériques et globaux. Un **OID** est très similaire à une adresse IPv6 et les différents ​fabriquants ​ont différents préfixes, chaque ​fabriquant ​a sa gamme de produit (un autre préfixe) et ainsi de suite. Les OID peuvent très vite être long et c'est compliqué pour un humain de se rappeler la signification de cet ensemble de nombre. C'est pour cela qu'une méthode a été mise au point pour traduire un OID numérique dans une forme lisible pour un humain. Cette carte de traduction est stockée dans un fichier texte appelé //​Management Information Base// ou **MIB**.+Les **OID** sont numériques et globaux. Un **OID** est très similaire à une adresse IPv6 et les différents ​fabricants ​ont différents préfixes, chaque ​fabricant ​a sa gamme de produit (un autre préfixe) et ainsi de suite. Les OID peuvent très vite être longs et c'est compliqué pour un humain de se rappeler la signification de cet ensemble de nombres. C'est pour cela qu'une méthode a été mise au point pour traduire un OID numérique dans une forme lisible pour un humain. Cette carte de traduction est stockée dans un fichier texte appelé //​Management Information Base// ou **MIB**.
  
-Vous n'avez pas besoin d'un MIB pour utiliser SNMP ou effectuer des requêtes sur des périphériques SNMP mais sans la MIB, vous n'​allez pas savoir facilement ce que signifient les données retournées par le périphérique. Dans certains cas, c'est facile comme le nom de l'​hôte,​ l'​usage des disques ou les informations d'​état des ports. Dans d'​autres cas, cela peut être plus difficile et une MIB peut être d'une grande aide. Notez qu'il est assez inhabituel pour la plupart des applications d'​écrire des requêtes uniquement numériques ; la plupart des applications permettent l'​installation de MIB complémentaires. Cette installation consiste en fait de placer les MIB à un endroit où l'​application cliente SNMP peut les trouver pour effectuer la traduction.+Vous n'avez pas besoin d'un MIB pour utiliser SNMP ou effectuer des requêtes sur des périphériques SNMP mais sans la MIB, vous n'​allez pas savoir facilement ce que signifient les données retournées par le périphérique. Dans certains cas, c'est facile comme le nom de l'​hôte,​ l'​usage des disques ou les informations d'​état des ports. Dans d'​autres cas, cela peut être plus difficile et une MIB peut être d'une grande aide. Notez qu'il est assez inhabituel pour la plupart des applications d'​écrire des requêtes uniquement numériques ; la plupart des applications permettent l'​installation de MIB complémentaires. Cette installation consiste en fait à placer les MIB à un endroit où l'​application cliente SNMP peut les trouver pour effectuer la traduction.
  
 ==== Techniques de supervision avec SNMP ==== ==== Techniques de supervision avec SNMP ====
Ligne 37: Ligne 37:
 SNMP peut être utilisé de deux manières distinctes : le //polling// et les //traps//. SNMP peut être utilisé de deux manières distinctes : le //polling// et les //traps//.
  
-Le **polling** consiste simplement à envoyer une requête à intervalles réguliers pour obtenir une valeur particulière. Cette technique est appelée « vérification active ». Vous pouvez, par programme ou script, vérifier si les valeurs sont correctes. Si la requête échoue, il est possible qu'il y ai un problème avec le périphérique. Cependant, vu que le SNMP s'​appuie sur UDP, il est conseillé de réitérer la requête pour confirmer le problème (surtout dans le cas d'une vérification au travers d'​Internet).+Le **polling** consiste simplement à envoyer une requête à intervalles réguliers pour obtenir une valeur particulière. Cette technique est appelée « vérification active ». Vous pouvez, par programme ou script, vérifier si les valeurs sont correctes. Si la requête échoue, il est possible qu'il y ait un problème avec le périphérique. Cependant, vu que le SNMP s'​appuie sur UDP, il est conseillé de réitérer la requête pour confirmer le problème (surtout dans le cas d'une vérification au travers d'​Internet).
  
-Les **traps** consistent à faire de la vérification passive ; en gros, on configure l'​agent SNMP pour qu'il contacte un autre agent SNMP en cas de problème. C'​est-à-dire que l'on peut configurer un périphérique réseau (comme un routeur) pour qu'il envoie un **trap SNMP** lors de certains événements. Par exemple, le routeur peut envoyer un **trap** lorsqu'​il détecte que la ligne est coupée (//down//). Quand un **événement trap** apparait, l'​agent sur le périphérique va envoyer le **trap** vers une destination pré-configurée communément appelé **trap host**. Le //trap host// possède son propre agent SNMP qui va accepter et traiter les //traps// lorsqu'​ils arrivent. Le traitement des //traps// est effectués ​par des **trap handlers**. Le **handler** peut faire ce qui est approprié pour répondre au //trap//, comme envoyer un courriel d'​alerte ou faire ce qu'on veut.+Les **traps** consistent à faire de la vérification passive ; en gros, on configure l'​agent SNMP pour qu'il contacte un autre agent SNMP en cas de problème. C'​est-à-dire que l'on peut configurer un périphérique réseau (comme un routeur) pour qu'il envoie un **trap SNMP** lors de certains événements. Par exemple, le routeur peut envoyer un **trap** lorsqu'​il détecte que la ligne est coupée (//down//). Quand un **événement trap** apparait, l'​agent sur le périphérique va envoyer le **trap** vers une destination pré-configurée communément appelé **trap host**. Le //trap host// possède son propre agent SNMP qui va accepter et traiter les //traps// lorsqu'​ils arrivent. Le traitement des //traps// est effectué ​par des **trap handlers**. Le **handler** peut faire ce qui est approprié pour répondre au //trap//, comme envoyer un courriel d'​alerte ou faire ce qu'on veut.
  
 ==== Les différentes versions de SNMP ==== ==== Les différentes versions de SNMP ====
Ligne 48: Ligne 48:
   * SNMP v3 (RFC 3411 à 3418).   * SNMP v3 (RFC 3411 à 3418).
  
-La co-existence ​des trois versions est détaillée dans la RFC 3584. +La coexistence ​des trois versions est détaillée dans la RFC 3584.
  
  
 ===== Installation ===== ===== Installation =====
  
-Pour installer un manager SNMP, vous pouvez utiliser //​Net-SNMP//​. L'​application Net-SNMP est un ensemble de programme ​console permettant de tout faire avec le protocole SNMP. L'​avantage d'​utiliser des programmes console est que vous pouvez facilement écrire des petits scripts de vérifications ​que vous pourrez intégrer dans [[:​Nagios]],​ par exemple.+Pour installer un manager SNMP, vous pouvez utiliser //​Net-SNMP//​. L'​application Net-SNMP est un ensemble de programmes ​console permettant de tout faire avec le protocole SNMP. L'​avantage d'​utiliser des programmes console est que vous pouvez facilement écrire des petits scripts de vérification ​que vous pourrez intégrer dans [[:​Nagios]],​ par exemple.
  
-Pour installer le paquet client SNMP, [[:​tutoriel:​comment_installer_un_paquet|installez le paquet]] ​**snmpd**.+Pour installer le paquet client SNMP, [[:​tutoriel:​comment_installer_un_paquet|installez le paquet]] ​[[apt>snmpd]].
  
-L'​étape suivante consiste à vous procurer les MIB concernant votre matériel (en général, sur le site web du constructeur) et de les copier dans le répertoire « /​usr/​share/​snmp/​mibs/​ », répertoire par défaut sous Debian/​Ubuntu.+[[https://​thejoyofstick.com/​blog/​2019/​05/​28/​installing-snmp-mib-files-in-linux-ubuntu-12-04-lts/​|A partir d'​Ubuntu 12.04, il faut aussi installer les MIBs]] en [[:​tutoriel:​comment_installer_un_paquet|installant le paquet]] [[apt>​snmp-mibs-downloader]] 
 +et charger les MIBs en commentant la ligne **mibs :** dans le fichier **/​etc/​snmp/​snmp.conf** : 
 +<​code>​ 
 +grep ^mibs /​etc/​snmp/​snmp.conf -q && sudo sed -i '​s/​\(^mibs.*$\)/#​\1/'​ /​etc/​snmp/​snmp.conf 
 +</​code>​ 
 + 
 +===== Configuration ===== 
 +Attention : certains paramètres sont à modifier dans le fichier ** /​etc/​default/​snmpd ** 
 +Ils ne seront pas pris en compte dans ** /​etc/​snmp/​snmpd.conf ** 
 +==== Paramétrage du service ==== 
 + 
 +Sauvegardez le fichier de configuration : 
 +<​code>​ 
 +sudo cp /​etc/​snmp/​snmpd.conf /​etc/​snmp/​snmpd.conf.bak 
 +</​code>​ 
 + 
 +[[:​tutoriel:​comment_modifier_un_fichier|Editez le fichier]] de configuration du service SNMP : 
 + 
 +<​code>​ 
 +sudo nano /​etc/​snmp/​snmpd.conf 
 +</​code>​ 
 + 
 +Afin qu'il contienne ceci (à adapter selon vos besoins) : 
 + 
 +<​code>​ 
 +# This file controls the activity of snmpd and snmptrapd 
 + 
 +# MIB directories. ​ /​usr/​share/​snmp/​mibs is the default, but 
 +# including it here avoids some strange problems. 
 +export MIBDIRS=/​usr/​share/​snmp/​mibs 
 + 
 +# snmpd control (yes means start daemon). 
 +SNMPDRUN=yes 
 + 
 +# snmpd options (use syslog, close stdin/​out/​err). 
 +SNMPDOPTS='​-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /​var/​run/​snmpd.pid ' 
 + 
 +# snmptrapd control (yes means start daemon). ​ As of net-snmp version 
 +# 5.0, master agentx support must be enabled in snmpd before snmptrapd 
 +# can be run.  See snmpd.conf(5) for how to do this. 
 +TRAPDRUN=no 
 + 
 +# snmptrapd options (use syslog). 
 +TRAPDOPTS='​-Lsd -p /​var/​run/​snmptrapd.pid'​ 
 + 
 +# create symlink on Debian legacy location to official RFC path 
 +SNMPDCOMPAT=yes 
 + 
 +# Alerte pour le disque dur : 
 +disk / 100000 
 + 
 +rocommunity ​ public # public à remplacer par sa communauté 
 +syslocation ​ Mon_Ordinateur 
 +syscontact ​ mon_courriel@fai.fr 
 +</​code>​ 
 + 
 +  * **export MIBDIRS=** définit le répertoire où sont stocké les MIBs 
 + 
 +  * **SNMPDRUN=** active ou désactive le service SNMP 
 + 
 +  * **SNMPDOPTS=** options de démarrage du daemon SNMPD 
 + 
 +  * **TRAPDRUN=** active ou désactive le service de capture des traps SNMP 
 + 
 +  * **TRAPDOPTS=** options de démarrage de daemon SNMPTRAPD 
 + 
 +Valider les changements,​ et redémarrer le service SNMP 
 +<​code>​ 
 +sudo /​etc/​init.d/​snmpd restart 
 +</​code>​ 
 + 
 +==== Gestion des MIBs avec tkmib ==== 
 +Pour visualiser les MIBs nous allons installer [[apt://​tkmib]]. Pour le lancement il vous suffit de taper la [[:​commande_shell|commande]] : 
 +  tkmib 
 + 
 +{{:​snmp:​tkmib_5421_01.png?​492x600|}} 
 + 
 +L'​étape suivante consiste à vous procurer les MIB concernant votre matériel (en général, sur le site web du constructeur) et à les copier dans le répertoire « /​usr/​share/​snmp/​mibs/​ », répertoire par défaut sous Debian/​Ubuntu.
  
 Il est toujours possible de les installer dans un autre répertoire de votre choix mais ce faisant, il devient nécessaire de renseigner ce dernier en assignant la variable d'​environnement « ''​$MIBDIRS''​ » de la manière suivante (à introduire dans une console) : Il est toujours possible de les installer dans un autre répertoire de votre choix mais ce faisant, il devient nécessaire de renseigner ce dernier en assignant la variable d'​environnement « ''​$MIBDIRS''​ » de la manière suivante (à introduire dans une console) :
Ligne 76: Ligne 153:
   mibs +DISMAN-EVENT-MIB   mibs +DISMAN-EVENT-MIB
  
 +==== Gestion des MIBs avec SNMPb ====
  
 +Voir [[https://​blog.cedrictemple.net/​257-snmpb-faire-des-requetes-snmp-avec-un-outil-graphique/​|https://​blog.cedrictemple.net/​257-snmpb-faire-des-requetes-snmp-avec-un-outil-graphique/​]]
 ===== Utilisation ===== ===== Utilisation =====
  
-Pour une utilisation de base du SNMP, vous avez besoin de 2 commandes principales : +Pour une utilisation de base du SNMP, vous avez besoin de 2 commandes principales :
   * ''​snmpwalk''​ : pour sortir des informations par lots.   * ''​snmpwalk''​ : pour sortir des informations par lots.
   * ''​snmpget''​ : pour obtenir une information sur un OID précis.   * ''​snmpget''​ : pour obtenir une information sur un OID précis.
  
-Il existe bien d'​autres commandes SNMP disponible ​dans le paquet //​Net-SNMP//​. Je vous encourage à lire la manpage principale : ''​man snmpcmd''​.+Il existe bien d'​autres commandes SNMP disponibles ​dans le paquet //​Net-SNMP//​. Je vous encourage à lire la manpage principale : ''​man snmpcmd''​.
  
 ==== snmpwalk ==== ==== snmpwalk ====
  
-Lorsqu'​on décide de superviser un périphérique,​ il est important de connaître ce qui est disponible. Pour ce faire, il existe la commande « ''​snmpwalk''​ ». Cette commande permet de sortir sur la console toutes les informations accessibles sur le périphériques. Voici un exemple avec un switch 3com SuperStack3 :+Lorsqu'​on décide de superviser un périphérique,​ il est important de connaître ce qui est disponible. Pour ce faire, il existe la commande « ''​snmpwalk''​ ». Cette commande permet de sortir sur la console toutes les informations accessibles sur le périphérique. Voici un exemple avec un switch 3com SuperStack3 :
  
   snmpwalk -v1 -c private 192.168.0.232   snmpwalk -v1 -c private 192.168.0.232
Ligne 96: Ligne 175:
   * ''​192.168.0.232''​ : indique l'​adresse IP du périphérique.   * ''​192.168.0.232''​ : indique l'​adresse IP du périphérique.
  
-Une telle commande retourne quelque chose de similaire à ce qui suit : +Une telle commande retourne quelque chose de similaire à ce qui suit :
 <​code>​ <​code>​
 SNMPv2-MIB::​sysDescr.0 = STRING: 3Com SuperStack 3 SNMPv2-MIB::​sysDescr.0 = STRING: 3Com SuperStack 3
Ligne 119: Ligne 198:
 </​code>​ </​code>​
  
-Cette liste peut être très longue et dépend du périphérique supervisé. Vous constatez que les informations sont classées par MIB suivi du OID. +Cette liste peut être très longue et dépend du périphérique supervisé. Vous constatez que les informations sont classées par MIB suivi du OID.
  
 Dans l'​exemple ci-dessus, nous avons « ''​IF-MIB::​ifOperStatus.117 = INTEGER: down(2)''​ ». Ce qui signifie que l'OID « ''​ifOperStatus.117''​ » (qui correspond à l'​état du port 17 du switch) est repris dans la MIB « ''​IF-MIB''​ » (qui est une MIB standard). Cet OID (clé) est associé à une valeur entière (type ''​INTEGER''​) qui vaut 2 (qui indique que l'​état est ''​down''​). Dans l'​exemple ci-dessus, nous avons « ''​IF-MIB::​ifOperStatus.117 = INTEGER: down(2)''​ ». Ce qui signifie que l'OID « ''​ifOperStatus.117''​ » (qui correspond à l'​état du port 17 du switch) est repris dans la MIB « ''​IF-MIB''​ » (qui est une MIB standard). Cet OID (clé) est associé à une valeur entière (type ''​INTEGER''​) qui vaut 2 (qui indique que l'​état est ''​down''​).
Ligne 131: Ligne 210:
 ==== snmpget ==== ==== snmpget ====
  
-Si vous avez compris ​le principe de ''​snmpwalk'',​ vous comprendrez très rapidement comment fonctionne le ''​snmpget''​. L'​application ''​snmpget''​ permet d'​obtenir l'​information concernant un OID précis. Reprenons notre exemple, imaginons que nous voulons connaître uniquement l'​état du port 22 du switch, il nous suffit d'​entrer la commande suivante :+Si vous avez compris ​ ''​snmpwalk'',​ vous comprendrez très rapidement comment fonctionne le ''​snmpget''​. L'​application ''​snmpget''​ permet d'​obtenir l'​information concernant un OID précis. Reprenons notre exemple, imaginons que nous voulons connaître uniquement l'​état du port 22 du switch, il nous suffit d'​entrer la commande suivante :
  
   snmpget -v1 -c private 192.168.0.232 IF-MIB::​ifOperStatus.122   snmpget -v1 -c private 192.168.0.232 IF-MIB::​ifOperStatus.122
Ligne 144: Ligne 223:
  
  
-===== Note(s) ​=====+===== Note·s ​=====
  
 La gestion des //traps// se fait avec le serveur SNMP et fera l'​objet d'un autre article. La gestion des //traps// se fait avec le serveur SNMP et fera l'​objet d'un autre article.
Ligne 152: Ligne 231:
 ---- ----
  
-//​Contributeurs : [[utilisateurs:​ostaquet|ostaquet]].//​+//​Contributeurs : [[utilisateurs:​ostaquet|ostaquet]], [[utilisateurs:​sefran|Franc SERRES]], [[utilisateurs:​Yannis.B|Yannis BRISOT]], [[utilisateurs:​HacKurx|HacKurx]].// 
  • snmp.1252250886.txt.gz
  • Dernière modification: Le 18/04/2011, 14:46
  • (modification externe)