SNMP : Le protocole de gestion réseaux
Contents
1 Introduction
Les systèmes de gestion de réseau sont basés sur trois éléments principaux : un superviseur, des nœuds (ou nodes) et des agents. Dans la terminologie SNMP, le synonyme manager est plus souvent employé que superviseur. Le superviseur est la console qui permet à l'administrateur réseau d'exécuter des requêtes de management. Les agents sont des entités qui se trouvent au niveau de chaque interface, connectant au réseau l'équipement géré (nœud) et permettant de récupérer des informations sur différents objets.
Switchs, hubs, routeurs, postes de travail et serveurs (physiques ou virtuels) sont des exemples d'équipements contenant des objets gérables. Ces objets gérables peuvent être des informations matérielles, des paramètres de configuration, des statistiques de performance et autres objets qui sont directement liés au comportement en cours de l'équipement en question. Ces objets sont classés dans une sorte de base de données arborescente appelée MIB (« Management Information Base »). SNMP permet le dialogue entre le superviseur et les agents afin de recueillir les objets souhaités dans la MIB.
L'architecture de gestion du réseau proposée par le protocole SNMP est donc fondée sur trois principaux éléments :
- Les équipements gérés (managed devices) sont des éléments du réseau (ponts, switchs, hubs, routeurs ou serveurs), contenant des « objets de gestion » (managed objects) pouvant être des informations sur le matériel, des éléments de configuration ou des informations statistiques
- Les agents, c'est-à-dire les applications de gestion de réseau résidant dans un périphérique, sont chargés de transmettre les données locales de gestion du périphérique au format SNMP
- Les systèmes de gestion de réseau (network management systems notés NMS), c'est-à-dire les consoles à travers lesquelles les administrateurs peuvent réaliser des tâches d'administration
2 Les versions
Il existe 3 versions du protocole SNMP :
- V1 : La première version utilise les communautés pour avoir des accès au protocole
- V2 : Cette version souffre d'implémentations incompatible (pas de normes, chaque constructeur fait comme il souhaite)
- V3 : Utilise USM (User Security Model) pour améliorer la sécurité sur :
- Authentification des utilisateurs hashé
- Encryptage des données qui transitent
3 Gestion des bases d'information
Le SNMP contient des informations hiérarchique dans une base de donnée pour chaque appareils. Les données sont encapsulées comme des objets appelés OID représentées par :
- Un tableau qui peut contenir plusieurs valeurs
- Un scalaire pour une seule valeur
- 2 types d'entier pour :
- Les compteurs : entier non négatif, augmente jusqu'au max, puis les valeurs sont remise à zero
- Les gauges : négatif ou entier non négatif, reste à la valeur max
4 Installation
4.1 Client
4.1.1 Debian
Sur Debian, nous allons avoir besoin du package snmp :
aptitude |
aptitude install snmp |
4.1.2 Red Hat
Sur Red Hat, nous allons devoir installer le package net-snmp-utils :
yum |
yum install net-snmp-utils |
4.2 Serveur
4.2.1 Debian
Sur Debian, nous allons avoir besoin du package snmp :
aptitude |
aptitude install snmpd |
4.2.2 Red Hat
Sur Red Hat, nous allons devoir installer le package net-snmp-utils :
yum |
yum install net-snmp |
5 Configuration
5.1 Serveur v1
Pour un serveur en configuration v1, vous pouvez configurer les accès à l'aide de la commande snmpconf ou du fichier de configuration :
/etc/snmp/snmpd.conf |
# read only(ro) or write community(rw) | shared secret | source | oid | # oid : ".1" = everythings rocommunity public rwcommunity password 192.168.0.0/24 .1 |
The first line allow anybody to access to the rocommunity. The second allow write to 192.168.0.0/24 range.
Si vous utilisez la commande snmpconf, créer un fichier de configuration. Mais d'abord, il va falloir déplacer l'actuel car la commande risque de poser des problèmes sinon.
5.2 Serveur v3
La version 3 du protocole SNMP est différente de la version 1 sur son fonctionnement. Avant de commencer, nous allons couper le serveur snmp et c'est très important qu'il soit arrêter pour la suite :
service |
/etc/init.d/snmpd stop |
Nous allons ensuite installer le package de developpement pour disposer d'un outil fort pratique sur Red Hat :
yum |
yum install net-snmp-devel |
Il va falloir créer un utilisateur a qui nous irons attribuer des droits (le mot de passe doit être >= 8 caractères) :
Ici nous voyons donc que l'outil net-snmp-config nous a modifier le fichier de configuration en rajoutant l'utlisateur username. Il a également été enregister d'autres informations dans le fichier /var/lib/net-snmp/snmpd.conf.
Créons maintenant les droits pour cet utilisateur. Pour cela nous allons avoir besoin de créer :
- Un groupe : on va définir un groupe pour y intégrer des utilisateurs
- Une vue : cette vue va service à dire quelle est la vue que le groupe définit est autorisé à voir (par rapport à un arbre SNMP)
- Un access : on a mapper l'accès et les méthodes d'authneitification au groupe à la la vue choisie
Faites attention à l'ordre d'insertion des lignes, elles ont de l'importance pour que la configuration focntionne.
Démarrez ensuite le service SNMP :
service |
/etc/init.d/snmpd start |
6 Les MIBs
Les MIBs se traduisent sous cette forme :
La définition d'une MIB est donc sous la forme suivante :
- De préfix : IP-MIB::ipForwarding.0 (le 0 est obligatoire pour les valeurs scalaires, sinon ça ne fonctionne pas)
- ID numérique : .1.3.6.1.2.1.4.1.0
- Le nom complet de l'objet : .iso.org.dod.internet.mgmt.mib-2.ip.ipForwarding.0
Le dernier numéro est un index correspondant à la valeur de l'OID (les indexes fonctionnant comme les tableaux en Perl) :
6.1 Lire une MIB
Pour la lecture, prenons par exemple les MIB d'un Linux :
- ip OBJECT IDENTIFIER ::= { mib-2 4 } : Correspond au préfix SNMP
- ipForwarding OBJECT-TYPE : importation des dépendances, tel que les OBJECT-TYPE
- DESCRIPTION : on a une description
6.1.1 snmpget
6.1.1.1 SNMP v1
Pour récupérer la valeur de cet objet, nous allons utiliser la commande snmpget qui sert à récupérer une seule valeur :
snmpget |
snmpget -v1 -c public localhost IP-MIB::ipForwarding.0 |
- -v : On spécifie ici la version du protocole (1)
- -c : la communauté à utiliser (regardez la configuration du serveur pour la connaitre)
Note : Si vous ne récupérez rien, c'est certainement que vous avez un problème de droit côté serveur.
6.1.1.2 SNMP v3
On vient de voir ici pour la version 1, maintenant pour une version 3 :
snmpget |
snmpget -v3 localhost IP-MIB::ipForwarding.0 -l authPriv -u username -A auth_passphrase -a sha -X private_passphrase -x AES |
- -l : C'est le type de sécurité que l'on souhaites pour le SNMPv3
- auth : mot de passe pour une authentification hashé et donc cryptée
- priv : mot de passe pour une encryption des donnés
- authPriv : permet d'utiliser les 2 types d'encryptions (authentification + datas)
- authNoPriv : Avoir de l'authentification sans cryptage des données.
- -u : le nom d'utilisateur à utiliser pour s'authentifier
- -A : la pass phrase pour l'authentification de l'utilisateur
- -a : l'algorithme de hash à utiliser pour l'authentification
- -X : la pass phrase partagée avec le serveur
- -x : l'algorithme de cryptage a utiliser pour le secret partagé
Note : Si vous ne récupérez rien, c'est certainement que vous avez un problème de droit côté serveur.
Si vous avez souvent plusieurs requêtes à effectuer vers le même host, vous pouvez créer un fichier qui ne peut contenir qu'un seul host dans ~/.snmp/snmp.conf ou /etc/snmp/snmp.conf :
~/.snmp/snmp.conf |
defversion 3 defsecurityname username defsecuritylevel authPriv defhtype SHA defauthpassphrase auth_passphrase defprivtype AES defprivpassphrase private_passphrase |
Maintenant, vous n'avez plus à passer tous vos arguments, simplement le serveur avec la MIB.
6.1.2 snmpwalk
Snmpwalk va récupérer toutes les valeurs. Il va donc falloir utiliser grep pour trouver la valeur que l'on souhaites :
6.1.3 snmpnetstat
Cet outil va récupérer les OID et les afficher comme la commande netstat :
snmpwalk |
snmpnetstat -v1 -c public -Cs localhost |
6.2 Trouver des objets de MIB
La commande snmptranslate va nous aider à trouver des objets de MIBs installé localement sur la machine (/usr/share/snmp/mibs/*). Par exemple pour effectuer une recherche en arbre :
Si l'on veut une version numérique :
snmptranslate |
> snmptranslate -On IP-FORWARD-MIB::ipForward .1.3.6.1.2.1.4.24 |
Pour avoir une version en arbre complète :