Le SNMP (Simple Network Management Protocol) permet de monitorer son matériel informatique. Qu’il s’agisse d’un serveur Linux, un serveur Windows, un routeur, un firewall, etc.

Il est intéressant de savoir comment récupérer ces informations brutes, afin d’identifier les objets à intégrer à notre système de monitoring par exemple.

Linux

Le client pour récupérer les données

J’utilise Debian Wheezy pour ces notes. Voici de quoi récupérer toutes les informations SNMP, que ce soit en SNMP v1 ou v2c. La version sécurisée de SNMP sera vue plus tard.

Les paquets nécessaires :

#apt-get install snmp snmp-mibs-downloader

Éditer le fichier /etc/snmp/snmp.conf et commenter la ligne « mibs: »
Les MIB ne sont pas sélectionnées par défaut lorsque l’on interroge un périphérique. Il faut le spécifier avec l’option -m

# snmpwalk -m UPS-MIB -c public -v 2c ups2 1.3.6.1.2.1.33.1.2.5
UPS-MIB::upsBatteryVoltage.0 = INTEGER: 857 0.1 Volt DC
# snmpwalk -v 1 -c public 192.168.29.5

Afin d’obtenir l’OID, numéro unique permettant d’identifier la variable SNMP, voici un exemple pour l’uptime :

# snmpwalk -On -v 1 -c public 192.168.56.21 .1.3.6.1.2.1.25.1
    .1.3.6.1.2.1.25.1.1.0 = Timeticks: (705809) 1:57:38.09

Cet OID sert à créer le service dans un logiciel de monitoring comme Centreon par exemple.

-On  permet d’avoir l’OID et pas la translation du nom

Pour avoir les noms d’affichés au lieu des OID, on spécifie les MIB à utiliser :

# snmpwalk -v 2c -c monitor -m UPS-MIB 10.184.4.250
UPS-MIB::upsIdentManufacturer.0 = STRING: AEG Power Solutions GmbH
UPS-MIB::upsIdentModel.0 = STRING: Protect D.
UPS-MIB::upsIdentUPSSoftwareVersion.0 = STRING: n/a
UPS-MIB::upsIdentAgentSoftwareVersion.0 = STRING: CS121 v 4.42.2
UPS-MIB::upsIdentName.0 = STRING: CS121 SNMP/WEB Adapter
UPS-MIB::upsIdentAttachedDevices.0 = STRING: UPS protected devices
UPS-MIB::upsBatteryStatus.0 = INTEGER: batteryNormal(2)
UPS-MIB::upsSecondsOnBattery.0 = INTEGER: 0 seconds
UPS-MIB::upsEstimatedMinutesRemaining.0 = INTEGER: 75 minutes
UPS-MIB::upsEstimatedChargeRemaining.0 = INTEGER: 100 percent

Autre commande :

# snmpbulkget -c public -v 2c 192.168.56.21 system ifTable

Traducteur d’OID en nom compréhensible :

# snmptranslate -m ups-mib 1.3.6.1.2.1.33.1.2

Plus d’infos sur les MIB existantes sur le site oidview.com. Par exemple pour les MIB d’UPS voir ce lien direct.

Ces commandes servent surtout à vérifier le « background » de notre installation. Il faut installer un vrai système d’alertes comme Nagios ou Centreon. Ce dernier gère également la métrique. Un article sera prochainement consacré à celui-ci.

L’installation du daemon

Afin de monitorer un serveur Linux, on installe un service snmpd et ses dépendances. Cela permettra à notre serveur de monitoring de récupérer les données du serveur Linux.

C’est notre serveur de monitoring (ou le serveur ayant snmpwalk) qui fera la demande au serveur à surveiller de manière régulière. On appelle ça un « pull ».

# apt-get install snmpd

Éditer le fichier /etc/snmp/snmpd.conf pour modifier les points essentiels de la configuration :

# diff /etc/snmp/snmpd.conf.ori /etc/snmp/snmpd.conf 
15c15 
< agentAddress  udp:127.0.0.1:161 
--- 
> #agentAddress  udp:127.0.0.1:161 
18a19,28 
> # SECNAME SOURCE COMMUNITY nom de sécurité    réseau    communauté SNMP 
> com2sec    localnetwork    192.168.56.20/32    public 
> # groupe en ro v1 
> group    rogroup    v1    localnetwork 
> 
> # vue pour préciser ce qui est accessible pour le groupe (ici all) 
> ## on déclare la vue 
> view all included .1 80 
> ## on fait l'association avec le groupe 
> access rogroup "" any noauth exact all none none 
45,46c55,56 
< view   systemonly  included   .1.3.6.1.2.1.1 
< view   systemonly  included   .1.3.6.1.2.1.25.1 
--- 
> #view   systemonly  included   .1.3.6.1.2.1.1 
> #view   systemonly  included   .1.3.6.1.2.1.25.1 
51c61 
<  rocommunity public  default    -V systemonly 
--- 
> # rocommunity public  default    -V systemonly 
60c70 
<  rouser   authOnlyUser 
--- 
> # rouser   authOnlyUser

Si besoin, éditer /etc/default/snmpd et rajouter les IP qui doivent écouter à la fin de la ligne suivante :

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

On redémarre le service snmpd et notre système est prêt 😉

Il faut savoir qu’il existe aussi des traps SNMP, qui permettent de faire un « push ». C’est le serveur à surveiller qui va informer le serveur de monitoring d’un problème immédiatement au lieu d’attendre que le serveur de monitoring l’interroge.

Windows

Dans cet article, je ne verrai que le SNMP v2c, pas la version sécurisée SNMP v3.

Étape 1 facultatif

Pour windows Seven uniquement,il faut d’abord ajouter le composant windows dans le panneau de configuration :

Control Panel > Programs and Features. > "Turn Windows features on or off" > Windows Features > select "Simple Network Management Protocol (SNMP)"

Pour un windows serveur, on passe directement à l’étape suivante.

Étape 2 Firewall

On configure le firewall pour autoriser le port SNMP (161) en entrée :

Control Panel > System and Security > Windows Firewall > Advanced Settings

De là, on déroule « Windows Firewall with Advenceds Security » pour atteindre « Inbound Rules »

Dans le menu de droite :

"New Rules..." > Predefined Rules > SNMP service

On active la règle souhaitée selon le profil (Généralement la première « Domain »).

Étape 3 Activer le service SNMP

Il faut directement aller dans les services windows :

Manage computer > Service and Applications > Services > SNMP Agent > Enabled Automatic.

Pour plus d’infos :https://docs.microsoft.com/fr-FR/troubleshoot/windows-server/networking/configure-snmp-service

Ensuite, dans l’onglet Agent, on rempli le champ Contact et Location, on coche tous les services à monitorer.

Dans l’onglet Security :

  • Dans Accpeted community names, on clique sur Add pour mettre en READ ONLY le community name « public »
  • Dans Accept SNMP packets from these hosts, on ajoute l’IP de Centreon en cliquant sur Add
  • On applique et on redémarre le service

Dans Centreon, il y a par défaut : l’espace disque, la RAM, le CPU. Voir pour d’autres via interrogation direct selon l’OID ou via scripts Nagios.