Présentation

Note Importante : Avant d'écrire cet article je ne savais pas grand chose de SNMP. à l'heure ou j'écris ces lignes j'en ai appris pas mal, j'ai beaucoup pratiqué et des fois j'ai du "deviner" comment cela fonctionne. Il se peut que cet article contiennent des erreurs ou des approximations, c'est normal. Ce n'est pas la vérité mais l'étendue de mes connaissances sur le sujet (ou l'idée que je m'en fais).

SNMP est comme tout service réseau divisé en 2 : un serveur et un client.

Le serveur (autrement appelé agent SNMP ou deamon SNMP) collecte les informations sur la machine et les mets a dispositions d'un ou des clients (la mise à disposition, ainsi que la sécurité des infos, la gestion des droits lectures/ecritures est entièrement paramètrable).

Le client (autrement appelé manager SNMP ou système de management réseau ou network management system NMS en anglais) recoit les informations du serveur snmp ou va les chercher en interrogeant directement le client.

SNMP a 2 modes de communication : passif actif

Le mode actif (ou appelé aussi Polling) est celui ou le client interroge le serveur, il est a l'origine de l'action.

Le mode passif (ou appelé aussi Trap ou notification ou Inform) est celui ou le serveur envoi automatiquement une information si un seuil est dépassé ou si un problème est détecté. La configuration du déclencheur doit être effectué sur le serveur.

SNMP a aussi son vocabulaire : MIB et OID

MIB  : Management Information Base : C'est une table ("ensemble d'informations structurés") qui recense tous les éléments interrogeable via SNMP. le CPU, la carte réseau, la mémoire, le disque dur,etc.. tous ses éléments sont définis dans la MIB. Et ses éléments ont plusieurs variables qu'on appellent OID. Les éléments référencé par la MIB ont une forme canoniale, c'est a dire du type .machine.catégorie.souscatégorie.éléments.souspartie.

OID : Object IDentifier : C'est une clé numérique unique qui identifie une variable d'un éléments décrit dans la MIB. Un OID peut par exemple être la valeur de sortie de la carte réseau en bytes ; un autre sera la charge système du CPU ; etc. Ces clés sont une suite de chiffre et de points qui correspondent a une arborescence exemple (complètement faux) : .1.3.4.23.5 le .1 est la racine, l'OID ainsi décrit est la valeur 5 de l'élément 23 de la sous catégorie 4 de la catégorie 3.

Bien entendu les chaines peuvent être beaucoup plus longue que ça.

SNMP a trois versions : V1, V2c, V3

V1 : C'est la première version de SNMP, elle est décrite par les RFC 1155, 1157 et 1212. Très simple elle ne gère pas les check passif mais juste les vérifications actives. Au niveau sécurité elle fonctionne avec un nom de communauté qui bien que secret passe en clair sur le réseau. Pour les autorisations ils en existent 2 : lecture seule ou lecture écriture

V2c : La deuxième version de SNMP . Elle améliore en tout point la version 1(sécurité, performances). La version 2c a quand même récupéré le système des "communautés" qui bien que peut sécurisé permet une grande flexibilité (et une implantation simplifié sur des matériels peu puissants comme les imprimantes). La V2 stricte existe mais n'est quasi pas utilisé.Elle est décrite par les RFC 1901 à 1908

V3 : La version Actuelle de SNMP. Elle est très particulièrement pratique au niveau de l'authentification, de la gestion des autorisations et de la sécurité des données (protocole chiffré). les RFC 3411 à 3418 decrivent cette version.

En pratique les trois version sont couramment utilisées (en fonction des appareils et de l'environnement) la RFC3584 décrit la coexistence des 3 version sur un même client.

Installation

Installation du serveur/agent

On se contentera de parler principalement de l'installation du serveur/agent SNMP sur une machine GNU/linux de type debian ou dérivé. L'installation sur une autre machine GNU/linux ou sur un autre système est hors contexte.

Debian

Et pour cause, comme à chaque fois la configuration du serveur SNMP est simple :

aptitude snmpd

Windows XP

A FAIRE (des que j'ai une machine XP disponible sous la main)

Configuration

Fichiers de conf

/etc/snmp/snmp.conf Configuration du client SNMP (donc hors de propos pour notre sujet) /etc/snmp/snmpd.conf Configuration du serveur/agent SNMP (Autorisations, ACL, object a surveiller) /etc/snmp/snmpd.local.conf Configuration du serveur/agent SNMP (les 2 fichiers sont lus) /usr/share/snmp/mibs/ Emplacement des tables MIB /etc/default/snmpd Configuration du comportement du serveur/agent SNMP (démarrer ou pas et comment).

snmpd.conf

Ce fichier configure les autorisations d'accès, les utilisateurs ou les communautés, autorisées à lire et/ou écrire sur le serveur via SNMP. Ce fichier peut contenir aussi tous les check passifs qui sont exécutés sur le serveur.

snmpd.local.conf

Ce fichier est l'équivalent de snmpd.conf : il est lu de la même manière et accepte les mêmes options de configurations. Un avantage cependant : il ne fait pas partie du paquet snmpd (il n'est pas créer par défaut) et donc n'est pas mis à jour en cas de nouvelle version (avantage tout relatif mais je n'en vois pas d'autres).

En fait il y a bien une logique derrière le partage entre un snmpd.conf et un snmpd.local.conf. Le snmpd.conf gère tout l'aspect protocole, version, autorisation etc... le snmpd.local.conf gère ce qui est a surveiller spécifiquement sur la machine, avec des paramètres adaptés et variables. Cela permet de copier un snmpd.conf sur une machine neuve et de mettre la partie variable dans un autre fichier. En cas de modification de version snmp, par exemple le passage en V3 sécurisé et chiffré, il suffit de copier le fichier snmpd.conf sur toutes les machines infogéré.

MIBDIRS=/usr/share/snmp/mibs/

Ce n'est pas à proprement parler d'un fichier mais une variable système qui indique ou ce trouve les fichier MIB. Cette variable est défini au démarrage du service snmpd.

/etc/default/snmpd

Ce fichier donnes les options de lancement du daemon/service snmpd. Elles sont relativement peut nombreuses on va donc les lister ici :

  • export MIBDIRS=/usr/share/snmp/mibs

pour avoir l'emplacement des fichiers MIBs. Une autre façon de faire serait de les mettres dans le /etc/environnement en dur.

  • SNMPDRUN=yes

Indique que snmpd se lance en mode daemon.

  • SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1 '

Indique les options a donné au daemon snmpd :

  1. -Lsd : indique de logger les informations dans syslog
  2. -LF indique aussi de logger les informations dans le fichier /dev/null
  3. -u Change l'UID du daemon (il est démarrer en tant que root) en snmp
  4. -l indique qu'il faut logger les informations dans le fichier dans le fichier suivant (si il n'y a pas de fichier spécifié il est loggé dans /var/log/snmpd.log
  5. -smux options non référencé dans la page man (je pense que c'est pour activer la compatibilité avec les agents relais
  6. -p /var/run/snmpd.pid indique le fichier ou il faut sauver le pid
  7. 127.0.0.1 indique l'adresse IP ou il faut écouter les requêtes du client SNMP (donc en l'état toute requête d'une machine distante est ignoré).

Se référer a la page man pour plus d'informations.

  • TRAPDRUN=no

indique si la réception des trap (check passif) est active ou pas.

  • TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'

indique les options spécifique au trap

  1. -Lsd ndique de logger les informations dans syslog
  2. -p /var/run/snmptrapd.pid indique le fichier ou il faut sauver le pid

Se référer a la page man pour plus d'informations.

Cas détaillé

On va maintenant détaillé l'installation et la configuration d'un serveur/agent SNMP sur une machine. La machine est un serveur dont on veut superviser l'état via un NMS (donc un client distant).

On installe le serveur :

aptitude install snmpd

On commence par éditer le fichier /etc/default/snmpd

vi /etc/default/snmpd

et on modifie l'adresse 127.0.0.1 par l'adresse ip de l'interface ou l'on écoute les requêtes soit l'adresse IP de l'interface concerné (pratique quand la machine fait le lien entre 2 réseaux). Sinon on peut laisser vide pour répondre sur touts les interfaces.

On va maintenant paramétrer les options de /etc/snmp/snmpd.conf (ou snmpd.local.conf) (penser éventuellement a faire une copie de sauvegarde de l'originale cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.ori vi /etc/snmp/snmpd.conf

On s'assure d'avoir les lignes

#Utilisation de l'utilisateur readonly, seulement en provenance de l'adresse ip 192.168.0.1 avec le nom de communauté public
#       sec.name  source          community
com2sec readonly 192.168.0.1 public
# On définit le groupe "MyROGroup" en mettant l'utilisateur "readonly" dedans (3 déclarations  pour les 3 version V1 V2c et usm(User-based Security Mode)) 
#               sec.model  sec.name
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
# on définit la vue "all" qui inclus tout depuis la racine .1
#           incl/excl subtree                          mask
view all    included  .1
# On donnes les accès  read au groupe "MyROGroup"  sur la vue all
#                context sec.model sec.level match  read   write  notif
access MyROGroup ""      any       noauth    exact  all    none   none

La configuration des accès sur la supervision de la machine sont terminées.

Configuration des accès en version 3

A FAIRE

Ajout de surveillance spécifique a snmpd.local.conf

  1. Localisation et contact

syslocation Pontchateau, France syscontact Nyquist <root@localhost>

  1. surveillance des process, premier chiffre limite haute, 2eme chiffre limite basse

proc apache2 15 10 proc noip2 1 1 proc inadyn 1 1 proc ddclient 1 1 proc sshd 3 1

  1. Surveillance de la taille du fichier syslog (ont peut aussi mettre des options d'alarme sur la taille min et max

file /var/log/syslog

  1. surveillance de l'espace disk avec un seuil d'alarme à 1 Go

disk / 1000000

  1. surveillance de la charge CPU sur la machine avec les différents seuils a 1min, 5min et 15 minutes

load 5 2 1

  1. la ont lance la commande ps -ef et ont récupère le resultat via snmp (cad consultable à distance en regardant la valeur .1.3.6.1.4.1.2021.50).

extend .1.3.6.1.4.1.2021.50 ps /bin/ps -ef

tous ces exemples (réel) ne touche qu'une petite parti de ce que snmp est capable de faire :

extend MIBOID NAME PROG ARGS extendfix NAME PROG ARGS file FILE MAXSIZE swap MIN load MAX1 MAX5 [MAX15] includeAllDisks MINPERCENT% disk PATH MINSPACE proc NAME MAX [MIN] procfix NAME PROG ARGS interface NAME TYPE SPEED skipNFSInHostResources true

Configuration des Trap et personnification.

On peut aussi configurer des trap. A FAIRE

Liens sur le sujet

wikipédia

wikipédia en anglais beaucoup plus complet

la doc d'ubuntu-fr.org sur le sujet (qui vulgarise très bien le sujet)

la page sur snmp de christian caleca qui est didactique et donnes des exemples

Un cours sur snmp au format PDF (qui date un peu, pas de V3 dans celle là)

Un blog qui défini la configuration sous debian (il m'a aidé donc je le cite mais je pense apporter plus d'infos sur le coup

Un how-to pour le logiciel loriotpro qui donnes beaucoup d'info sur snmp et particulièrement la configuration V3 (qui sont dans les pages man aussi)