Étendre les possibilités de SNMP avec SNMP extend

I. Présentation de SNMP Extend

Dans un précédent article, nous avons vu comment installer SNMP sous Linux pour que nos serveurs puissent être surveillés et monitorés par ce protocole très utile. Toutefois, tout ne peut pas être questionné via des OID. Certains besoins spécifiques de l'utilisation de Linux et de la supervision peuvent nous amener à vouloir monitorer une valeur qui n'est pas proposée par un OID. Dès lors, on peut se servir de ce qui appelé "extend" en SNMP, comme son nom l'indique, "extend" est une possibilité de configuration dans SNMP permettant d'étendre les fonctionnalités de ce protocole.

Le principe est simple, configurer un extend va consister à positionner une commande Linux en correspondance avec un ensemble d'OID prévus pour notre besoin ! Pour ceux qui ont un peu de mal à visualiser la chose :

snmp-extend-linux-01En orange, nous avons les OID standards de Linux, qui répondront une valeur précise et prédéterminée par ce que l'on appelle le MIB (Management Information Base). Mais quelques OIDs dans le MIB sont laissés "libre" afin que l'on puisse positionner les commandes ou scripts que l'on souhaite derrière (ce qui est en bleu). Nous allons voir leurs OID un peu plus loin, cas elles ne sont pas fixes, mais pas de panique ! 🙂

Pour voir large, et plaire à tout le monde, je vais spécifier les configurations en SNMP Extend pour Debian 8 et CentOS 7, qui sont les versions stables de ces deux OS (en 2015 du moins 😉 ).

Toujours comme dans mon précédent article sur le sujet, il est important de noter que les versions des dépôts sont différents sous Debian 8 (version 5.7.2.1 de net-snmp) et sous CentOS 7 (version 5.7.2 de net-snmp). Je vais détailler pour chaque étape, les différences de configuration entre les deux.

II. Une commande, un script

Comme je vous l'ai dit, avec un extend en SNMP, on peut exécuter un script ou une commande. L'exécution d'une simple commande est pratique et rapide à configurer, mais la possibilité d'exécuter un script python, perl ou bash donne des possibilités quasi infinies à l'utilisation de SNMP.

Dans le cadre de notre tutoriel, nous allons mettre notre script dans le répertoire /srv/scripts, avec les droits 750 et root en propriétaire. Dans un environnement de production, je ne saurai vous conseiller d'être prudent sur le propriétaire de ce script et les droits qui lui sont affectés :

mkdir /srv/scripts
touch /src/scripts/extend.sh

Le nom du script est ici libre, ce script va contenir quelques lignes simples :

#!/bin/bash
cat /etc/passwd | wc -l

On retourne un sheebang, permettant d'initier un bash, suivi de la commande "cat" listant le contenu du fichier /etc/passwd et enfin "wc -l" qui va nous retourner le nombre de ligne de la sortie précédente (le nombre de ligne dans le fichier "/etc/passwd" donc). Le tout nous donneras le nombre d'entrée dans /etc/passwd, correspondant au nombre total d'utilisateur. Cela n'aura probablement que peut d’utilité dans un contexte de production, mais nous ira bien pour nous entraîner dans ce tutoriel. Pour finir, on donne les droits d'exécution sur ce script :

chmod +x /srv/scripts/nbcompte.sh

 III. Configuration Extends sous Debian 8 (net-snmp 5.7.2.1)

Nous allons dans un premier temps voir comment effectuer cette extension SNMP sous Linux sur une Debian 8, avec la version 5.7.2.1 de net-snmp.

Dans un premier temps il peut être nécessaire d'ajouter des informations SNMP, on va pour cela mettre à jour notre MIB. On commence par aller dans notre fichier source (/etc/apt/sources.list) pour rajouter "non-free" à la fin des lignes suivantes :

deb http://ftp.fr.debian.org/debian/ jessie main non-free
deb-src http://ftp.fr.debian.org/debian/ jessie main non-free

On met ensuite à jour nos dépôts :

apt-get update

Ensuite, on installe "snmp-mibs-downloader" , qui nous permettra via la commande "download-mibs" de mettre à jour notre MIB :

apt-get install snmp-mibs-downloader

Dès que snmp-mibs-downloader s'installe, vous allez voir qu'il va télécharger les dernières MIB existantes. Puis dans /etc/snmp/snmpd.conf, à la ligne 49, il nous faut ouvrir une partie de notre MIB, une "branche" , sur laquelle se situe les OID "extend" précisément, on peut faire cela en ajoutant la ligne suivante :

view systemonly included .1.3.6.1.4.1

Nous irons ensuite à la ligne 163, nous pourront d'ailleurs voir différents exemples de règle SNMP extend déjà en place. A noter que vous pouvez ici mettre la commande que vous souhaitez !

extend nbcompte cat /etc/passwd |wc -l

A noter que l'on aurait aussi pu demander l'exécution de notre script si la valeur à retourner est produite par quelque chose de plus complexe qu'une seule ligne de commande, on voit alors ici la puissance de SNMP extend :

extend nbcompte /srv/script/extend.sh

Ici "nbcompte" est l'alias, ou le nom, que je donne à mon SNMP extend, cela est utile dans les cas ou plusieurs SNMP Extend sont configurés. Après avoir mis en place ces lignes de configuration, nous pourrons redémarrer notre service snmpd puis passer à la phase de test :

systemctl restart snmpd

IV. Configuration Extends sous CentOS7 (net-snmp 5.7.2)

Passons à présent à la configuration CentOS 7, ou plus précisément sur la version 5.7.2 de net-snmp. Nous allons toujours aller dans notre fichier de configuration "/etc/snmp/snmpd.conf" , puis nous allons y ajouter les lignes suivantes, en général je préfère les mettre à la fin :

rocommunity it-connect
extend nbcompte "cat /etc/passwd | wc -l"

Je créé un community en read-only pour mon extend, puis je la déclare avec le mot "extend" suivi de son nom qui permet d’identifier un extend d'un autre (car oui, on peut en faire plusieurs !), puis de la commande qui sera exécutée, dans mon cas un script.

Toujours dans ce fichier de configuration, il nous faut ouvrir une partie de notre MIB, une "branche" , sur laquelle se situe les OID "extend" précisément, on peut faire cela en ajoutant la ligne suivante :

view    systemview    included   .1.3.6.1.4.1

La branche ".1.3.6.1.4.1" du MID permet donc de pouvoir questionner les OID extends dans SNMP. Via la modification précédente, nous avons positionné une commande en face d'une de nos SNMP extend, il va donc maintenant être possible de l'utiliser.

Note : Sous une machine CentOS, le système de sécurité SElinux est par défaut actif. Si vous ne l'utilisez pas, il est préférable de le désactiver en remplacent "enforcing" par "disabled" dans /etc/selinux/config, suivi d'un redémarrage

Après avoir effectué cette modification de configuration, nous allons redémarrer notre service snmp :

systemctl restart snmpd

La configuration est maintenant prise en compte.

V. Tester notre SNMP extend

Nous allons maintenant tester notre SNMP Extend, avec la commande snmpwalk qui n'est rien de plus qu'un client SNMP.

Note : Les tests sont ici fait sous CentOS 7, mais le résultat sera sensiblement le même sous Debian 8.

Le faire en localhost suffira amplement. Il faut commencer par trouver notre commande :

snmpwalk -v 1 127.0.0.1 -c masociete .1.3.6 |grep "nbcompte"

Ici, j'utilise "masociete" qui est ma community, puis je filtre le résultat avec grep puis le nom de mon extend car la branche .1.3.6 va nous retourner beaucoup de valeur sinon, voici ce que j’obtiens :

snmp-extend-linux-10

On peut voir plusieurs sorties relatives à mon extension SNMP. Certaines concernent le chemin d'exécution du script, d'autres son résultat, comme c'est le cas de la ligne  "nsExtendOutputFull" qui, comme son nom l'indique, retourne l'intégralité de la sortie du script en question. On peut alors faire une requête uniquement vers cette OID :

snmp-extend-linux-11

Une autre possibilité aurait été d'utiliser "nsExtendOutput1Line" qui ne retourne que la première ligne. Vous remarquerez que sur la ligne ci-dessus, j'ai utilisé l'option "-On" permettant d'afficher l'OID dans sa forme numérique, plus facile à utiliser dans un système de supervision. Voici à quoi ressemblera une requête SNMP au final :

snmp-extend-linux-12

Nous avons vu dans cet article comment étendre les possibilités de SNMP, c'est une possibilité à manier avec prudence et en toute connaissance de cause, pensez à toujours limiter les informations sortant de vos serveurs !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d’IT-Connect.fr et d’Information-security.fr.
Auditeur sécurité chez Amossys.

    mickael a publié 478 articles sur IT-Connect.See all posts by mickael

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *