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 :

Récupération d'informations

Deux méthodes complètements différentes pour la récupération des informations :


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 :

Requêtes & Réponses

Il existe quatre types de requêtes SNMP :

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 :

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