Licence d'Informatique - Projet tutoré
SNMPHP : une plate-forme de supervision
Résumé :
On se propose de réaliser une plate-forme d'administration réseau,
articulée autour des protocoles SNMP et RMON, en utilisant des pages
dynamiques en PHP (ou n'importe quel autre langage aussi répandu,
facile à installer et déployer, et disposant d'une bonne
bibliothèque SNMP). Les principaux atouts de cette plate-forme face
aux produits commerciaux (HP/OV, TopTools, Tivoli...) seront ses besoins
modestes, et sa modularité - le principe étant de fournir
des briques de base en PHP, suffisamment simples pour qu'un administrateur
réseau puisse constituer facilement son propre tableau de bord de
supervision.
Mots clefs :
SNMP - RMON - HPOV - TOPTOOLS - TIVOLI - PHP - APACHE - PYTHON - MIB -
TRAP - COMMUNITY - PUBLIC - MANAGER - SUPERVISION - RESEAU
Connaissances requises :
-
Notions de PHP, de Perl, ou d'un bon langage de scripting (tcl,
python...)
-
Bonne connaissance du langage HTML (formulaires et tableaux principalement
; javascript serait un plus)
-
Comprendre le principe des CGI (traitement d'un formulaire HTML et génération
d'une page de réponse)
-
Anglais lu et écrit couramment (toutes les docs à lire, ainsi
qu'à rédiger, sont en anglais)
-
Concepts de base de réseaux : qu'est-ce qu'un switch, un
hub, un câble réseau ; le principe client/serveur,
requête/réponse
Intérêt
Pour des étudiants intéressés par l'administration
réseau, ce projet les place directement au coeur du problème. De
plus, savoir utiliser le langage PHP est aujourd'hui un atout non négligeable,
permettant de réaliser des sites Web dynamiques (ce qui se monnaye
assez bien aujourd'hui), ou bien de construire des petites applications
pratiques de façon extrêmement rapide.
Le projet pourra être testé sur des commutateurs HP Procurve
(qui disposent de nombreuses fonctionalités avancées : VLAN,
QOS...) ; puis, en travaillant avec le CRI, sur le réseau de l'Université.
Enfin, aucune plate-forme open source satisfaisante n'est disponible
à ce jour : ce projet est l'occasion d'apporter une contribution
utile au mouvement du libre.
Description détaillée :
Les réseaux locaux les plus répandus actuellements sont les
réseaux Ethernet. Un réseau Ethernet est constitué
de matériels comme des commutateurs (switches), des concentrateurs
(hubs) ; qui servent à relier entre eux les équipements
(ordinateurs, routeurs, imprimantes...). Certains de ces matériels
sont "administrables", c'est-à-dire qu'on peut les interroger à
distance, depuis n'importe quel point du réseau, afin de consulter
divers compteurs de traffics ou l'état de tel ou tel paramètre
du matériel.
Le protocole standard de fait pour l'administration du matériel
réseau est SNMP (Simple Network Management Protocol). Il
repose sur UDP/IP. On peut résumer SNMP à quelques principes
:
-
Dans la version 1, les échanges de données se font toujours
sous la forme requête/réponse : la station de supervision
SNMP, qui joue le rôle de client, va envoyer une requête à
un matériel, pour lui demander la valeur de tel ou tel paramètre.
Le matériel va renvoyer la valeur du paramètre.
-
Dans la version 2, le matériel peut émettre des "trappes",
c'est-à-dire envoyer un message lorsqu'un événement
particulier survient (débranchement d'un câble, saturation
du réseau...). C'est le seul cas où le matériel émet
un message qui n'est pas une réponse à une requête.
-
Les données consultables sont organisées de façon
hiérarchique, dans un arbre dont les noeuds sont numérotés.
On peut par exemple demander à accéder à la donnée
1.3.3.2.8.13.5.3.12.1 ; afin d'établir une correspondance entre
ces numéros et des noms compréhensibles pour un administrateur
systèmes, il existe des MIB, qui sont des fichiers obéissant
à une grammaire stricte, et décrivant des portions de l'arborescence.
Il existe plusieurs MIB, adaptées aux divers composants réseau. Par
exemple : MIB pour les concentrateurs Ethernet, MIB pour les routeurs,
MIB pour les ordinateurs (qui peuvent eux aussi être supervisés
par SNMP, en installant un petit logiciel)... Chaque constructeur fournit
en général un matériel respectant quelques MIB standard,
et ajoute en général sa propre MIB permettant d'accéder
aux paramètres spécifiques de son matériel, ou bien
à des paramètres qui n'ont pas encore été standardisés.
-
L'accès aux données peut se faire en lecture, mais aussi
en écriture : on peut consulter l'état d'un port d'un commutateur
(actif/inactif), et on peut activer/désactiver ce port, par exemple.
-
La sécurité est assurée par l'utilisation d'un nom
de "communauté", qui joue le rôle d'une sorte de mot de passe.
Lorsqu'on accède à un paramètre, on indique le nom
de communauté, et le commutateur vérifie que la communauté
spécifié est effectivement autorisée à accéder
à ce paramètre.
Sous Linux, il est possible de se familiariser avec SNMP en installant
un démon SNMP (par exemple, le package Debian snmpd),
et les outils SNMP snmpwalk, snmpget, snmpput
(disponibles dans le package Debian snmp). L'outil tkmib
est aussi très pratique, car il permet de se promener graphiquement
dans une MIB.
Une station de supervision réseau sert à plusieurs choses
: surveiller l'activité et le traffic réseau, détecter
les problèmes réseau (saturation, problèmes de matériel...),
mais aussi lorsque le matériel le permet, établissement d'une
carte du réseau, en incluant non seulement le matériel réseau
mais aussi ordinateurs, imprimantes... Parfois, on peut l'utiliser pour
réaliser la configuration avancée du matériel (par
exemple, la division en VLANs).
Comme les administrateurs réseau ont tous des besoins très
différents, aucun programme de supervision n'est vraiment adapté
à toutes les situations. Le but de ce projet n'est pas de créer
la plate-forme à tout faire, mais plutôt d'en fournir une
qui soit très modulaire, de façon à ce qu'il soit
très simple d'ajouter des fonctionalités.
C'est pour cette raison qu'elle devra utiliser un système de
génération dynamique de pages HTML : il est beaucoup plus
courant de savoir écrire des pages HTML que de savoir utiliser une
bibliothèque graphique ; et même si la plupart des administrateurs
connaissent un toolkit, ce ne sera pas toujours le même ;
alors que la plupart d'entre eux connaissent HTML.
Le langage utilisé pourrait être PHP, car il ressemble
beaucoup au shell et à Perl, mais il est mieux adapté au
Web. Un autre langage peut être choisi (python ou tcl, par exemple),
du moment que ce langage dispose d'une bibliothèque SNMP. Une mini-application
utilisant PHP et SNMP a déjà été écrite,
permettant de visualiser graphiquement sur un switch quels sont
les ports occupés et libres, et la vitesse du lien (10 ou 100 mégabits/seconde,
half ou full duplex).
Travail à effectuer :
-
se familiariser avec PHP, en particulier la gestion des formulaires HTML
-
manipuler SNMP à travers les outils en ligne de commande (snmpget,
snmpwalk)
-
étudier les plate-formes "concurrentes" (du matériel sera
fourni), ainsi que les outils annexes, comme MRTG
ou rrdtool (qui permettent de réaliser des graphes de trafic), dia
ou tkined (qui permettent de faire des schémas de son réseau)
-
poser les bases de la plate-forme, en définissant ses différents
éléments, et comment elle pourra être personalisée
-
dialoguer avec des administrateurs réseau, utiliser des plate-formes
de supervision existantes, afin de comprendre les fonctionalités
typiques
-
réaliser quelques modules correspondant à ces fonctionalités
-
une fois quelques modules disponibles, proposer un moyen de faire communiquer
les modules entre eux, par exemple : si un module de surveillance du traffic
détecte qu'un commutateur est saturé, il faut qu'il puisse
faire remonter l'information, et par exemple demander au module de contrôle
des ports de couper les ports générant trop de traffic
Ce dernier point constitue la clef de voûte de l'application, et
nécessite une réflexion dès le début du projet
: comment faire dialoguer des modules entre eux, et accessoirement : comment
permettre à l'utilisateur de visualiser les différents modules
et les connexions possibles entre eux ? Il peut être intéressant
de s'inspirer d'outils de développement visuels (Visual XXX, mais
surtout les builders qt et gtk, qui utilisent des concepts - signaux
et slots - plus avancés).