Administration des réseaux avec SNMP & LDAP
Architecture
Environnement SNMP
L'environnement de gestion SNMP est constitué de plusieurs composantes : La station de supervision (Manager), les éléments actifs du réseau, les variables MIB et des agents SNMP.

Figure 1 - Environnement SNMP
Les différentes composantes du protocole SNMP sont les suivantes :
- Manager : Il exécute les applications de gestion qui contrôlent les éléments réseaux. Physiquement, la station est un poste de travail. Le manager va aller récupérer les informations auprès des agents et les centraliser
- Elément du réseau : Ce sont les équipements (Ex : Routeur, Switch, Poste de travail, imprimante, …) que l'on cherche à gérer
- Agent SNMP : Chaque élément du réseau dispose d’un agent SNMP qui est répond aux requêtes du manager. Ils vont chercher l’information requise dans la MIB et la retransmette ensuite au manager
- MIB (Management Information Base) : C’est une collection d'objets représentant les caractéristiques du terminal administré
Récupération d'informations
Deux méthodes complètements différentes pour la récupération des informations :
- Question / Réponse
- Alertes (Traps)

Figure 2 - Question / Réponse
Avec cette méthode, c'est le manager qui prend l'initiative d'aller demander (GetRequest / SetRequest) une information aux éléments du réseau. Ensuite, l'agent SNMP qui reçoit la requête va aller récupérer ou modifier l'information dans la MIB pour ensuite retourner un GetResponse au manager qui traitera l'information comme bon lui semble.

Figure 3 - Alertes (Traps)
Dans cette méthode, les alertes sont envoyées quand un événement non attendu se produit sur l'agent SNMP. Celui-ci en informe le manager via une trap. Il existe plusieurs types d'alertes, comme :
- ColdStart : L'équipement est trop froid
- WarmStart : L'équipement est trop chaud
- LinkDown : Un des liens de l'équipement est tombé
- ...
Requêtes & Réponses
Il existe quatre types de requêtes SNMP :
- GetRequest : Recherche d’une variable sur un agent
- GetNextRequest : Recherche de la variable suivante
- GetBulkRequest : Recherche d’un ensemble de variables regroupées
- SetRequest : Change la valeur d’une variable sur un agent
Quel que soit la requête, l’agent répond toujours avec GetResponse. Si la variable demandée n’existe pas, la réponse sera accompagnée d’une erreur noSuchObjet.
Management Information Base
La MIB (Management Information base) est la base de données des informations maintenue par l'agent, auprès de laquelle le manager va venir pour s'informer.
Un fichier MIB est un document texte écrit en langage ASN.1 (Abstract Syntax Notation 1) qui décrit les variables, les tables et les alarmes gérées au sein d'une MIB. Le problème des MIB est qu’elles diffèrent en fonction du constructeur et de l’équipement que l’on souhaite administrer. Cela peut donc devenir compliquer lorsque l’on souhaite récupérer des informations un peu « exotiques ».
La MIB est une structure arborescente dont chaque noeud est défini par un nombre ou OID (Object Identifier). Cette OID est très utile car il permet d’accéder à une information grâce à la suite de tous les index.

Figure 4 - Exemple de structure de MIB
Dans une MIB, il existe deux sortes d’objets :
- Les objets simples : L’agent va retourner une seule et unique variables (Ex : Nom de l’équipement, description de l’équipement, …)
- Les objets complexes : L’agent va retourner un tableau de variables (Ex : La liste des ports UP sur l’équipement, la liste des adresses IP de l’équipement)
Si vous souhaitez accéder à un objet simple comme, par exemple, la description d’un équipement, vous pouvez utiliser la méthode GetRequest qui a été présentée plus haut dans l’exposé. Sur des postes de travail (Windows, Unix, …), la commande snmpget permet d’utiliser cette méthode.
> _server$ snmpget -v 1 -c COMMUNITY @IP .1.3.6.1.2.1.1.1.0
system.sysDescr.0 : DISPLAY STRING- (ascii): Cisco IOS Software, Catalyst 4500 L3 Switch Software (cat4500e-IPBASE-M), Version 15.1(2)SG, RELEASE SOFTWARE (fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2012 by Cisco Systems, Inc.
Compiled Wed 05-Dec-12 05:55 by prod_
Si vous souhaitez accéder à un objet complexe, comme, par exemple, la liste des interfaces d’un équipement avec leurs états (UP, Down, …), vous pouvez utiliser la méthode GetBulkRequest (Elle est plus optimisée que la méthode GetNextRequest). Sur des postes de travail, la commande snmpwalk permet d’utiliser cette méthode.
> _server$ snmpwalk -v 2c -c COMMUNITY @IP .1.3.6.1.2.1.2.2.1.7
interfaces.ifTable.ifEntry.ifAdminStatus.2 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.3 : INTEGER: down
interfaces.ifTable.ifEntry.ifAdminStatus.4 : INTEGER: down
interfaces.ifTable.ifEntry.ifAdminStatus.5 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.6 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.7 : INTEGER: down
interfaces.ifTable.ifEntry.ifAdminStatus.8 : INTEGER: down
interfaces.ifTable.ifEntry.ifAdminStatus.153 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.154 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.155 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.156 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.157 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.158 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.159 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.160 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.161 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.162 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.163 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.164 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.169 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.170 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.171 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.173 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.174 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.179 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.180 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.181 : INTEGER: up
interfaces.ifTable.ifEntry.ifAdminStatus.182 : INTEGER: up