Relecture/mise au propre

This commit is contained in:
jdubois 2023-04-07 16:13:57 +02:00
parent b31d0b575e
commit e1f49882ad

View file

@ -1,143 +1,88 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
* <http://www.kill-9.org/mbrowse/>
* Nagios
* <http://www.zabbix.org/>
* cacti
* jffnms
* <http://www.opennms.org>
* NetDisco
* Cricket
* BigBrother
* BigSister
* REMSTATS
* Sysmon
* Ntop
---
categories: network monitoring
title: Howto SNMP
...
## Principe de fonctionnement
SNMP (pour Simple Network Management Protocol) est un protocole qui permet la supervision d'équipements réseau (serveurs, routeurs, switchs...). Il utilise le protocole de transort UDP sur le port 161.
SNMP (pour Simple Network Management Protocol) est un protocole qui permet la supervision d'équipements réseau (serveurs, routeurs, switchs...). Il utilise le protocole de transport UDP sur les ports 161 et 162 pour les traps.
Il se base sur 3 éléments :
* Le manager (ou superviseur) : Il centralise tous les données qu'il collecte sur les nœuds ;
* Le manager (ou superviseur) : il centralise toutes les données qu'il collecte sur les nœuds ;
* Les nœuds sont les équipements informatiques à superviser ;
* Les agents sont des démons qui tournent en permanence sur les nœuds pour répondre aux requêtes du manager.
Toutes les données qu'un agent fournit sont référencés dans une MIB, accessible grâce à un OID. Une MIB (Management Information Base) est une base de données dans laquelle les informations sont classées sous forme d'arbre. Chaque information est alors accessible par son OID (Object Identifier), qui est en fait le chemin hiérarchique de l'élément.
Par exemple, 1.3.6.1.2.1.2.2.1.2 est l'OID ifDescr qui est la chaîne de caractères décrivant une interface réseau.
Le protocole SNMP peut également être utilisé pour modifier des valeurs dans la MIB (donc plus seulement superviser, mais administrer).
Du point de vue de la sécurité, la version 3 du protocole permet d'utiliser une communauté (utilisé comme mot de passe) pour pouvoir lire ou écrire dans la MIB.
Le protocole SNMP peut également être utilisé pour modifier des valeurs dans la MIB (donc plus seulement superviser, mais administrer). Enfin, il existe un concept d'interruption (traps), grâce auquel une notification est envoyée par l'agent au manager SNMP lorsqu'un évènement particulier se produit.
Du point de vue de la sécurité, les versions 1 et 2 du protocoles permettent d'utiliser une communauté comme mot de passe pour pouvoir lire ou écrire dans la MIB, mais celle-ci transite en clair sur le réseau. La version 3 est plus sécurisé puisqu'elle se base sur du chiffrement DES avec des mots de passes ou des clés partagées entre l'agent et le manager.
## Mise en place
Le principe est d'installer sur toutes les machines un agent SNMP (SNMPD = NET SNMP Agent)
Et sur le poste de contrôle du réseau, on installera un client/manager SNMP
destiné à recueillir les informations des agents SNMP...
~~~
,-- (SNMP) ---> Agent 1
Client/manager <---- (SNMP) ---> Agent 2
`-- (SNMP) ---> Agent 3
...
~~~
Le principe est d'installer un agent SNMP (SNMPD = NET SNMP Agent) sur toutes les machines à superviser. Sur la machine de supervision, on installera un client/manager SNMP destiné à recueillir les informations des agents SNMP.
### Configuration de l'agent
Par défault, snmpd n'écoute que sur 127.0.0.1. Cela peut se changer dans le fichier /etc/default/snmpd :
Par défaut, snmpd n'écoute que sur 127.0.0.1 et [::1].
La configuration se trouve dans `/etc/snmp/snmpd.conf` :
~~~
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid IP'
# Écouter sur 192.0.2.1
agentaddress 192.0.2.1
# Indiquer la localisation et le contact de l'équipement
sysLocation Marseille, France
sysContact Me <me@example.org>
# Views : limiter l'accès à certains OID uniquement
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
# Communautés IPv4 et IPv6 : communauté read-only `public` accessible par tout le monde, avec limitation sur le view `systemonly`
rocommunity public default -V systemonly
rocommunity6 public default -V systemonly
~~~
IP peut même être omis pour écouter sur toutes les interfaces.
Fichier snmpd.conf :
Puis on redémarre l'agent SNMP :
~~~
# read-only de tout sur le reseau local
com2sec local 192.168.0.0/16 public
group ROGroup v1 local
view all included .1
access ROGroup "" any noauth exact all none none
syslocation DTC
syscontact Gregory Colpart <reg@gcolpart.com>
~~~
~~~
/etc/init.d/snmpd restart
# systemctl restart snmpd
~~~
### Interrogation de la MIB de l'agent
Le paquet `snmp` doit être installé sur la machine de supervision.
Avec `snmpget`, on obtient le résultat de l'OID exact demandé. Avec `snmpwalk`, on obtient le résultat de toute une arborescence de plusieurs OID.
~~~
8:~$ snmpget -v 1 -c public routeur system.sysContact.0
SNMPv2-MIB::sysContact.0 = STRING: Gregory Colpart <reg@gcolpart.com>
8:~$ snmpget -v 1 -c public routeur system.sysLocation.0
SNMPv2-MIB::sysLocation.0 = STRING: DTC
$ snmpget -v 1 -c public routeur system.sysDescr.0
$ snmpget -v2c -c public 192.0.2.1 system.sysContact.0
SNMPv2-MIB::sysContact.0 = STRING: Me <me@example.org>
$ snmpget -v2c -c public 192.0.2.1 system.sysLocation.0
SNMPv2-MIB::sysLocation.0 = STRING: Marseille, France
$ snmpget -v2c -c public 192.0.2.1 system.sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux routeur 2.4.31-grsec-fw-i386 #1 Tue Aug 23 12:18:10 CEST 2005 i586
$ snmpwalk -v2c -c public 192.0.2.1
~~~
OID pour l'uptime = .1.3.6.1.2.1.1.3.0
L'OID peut être indiquée de plusieurs manières : l'OID numérique, l'OID textuel abrégé, ou encore l'OID textuel complet.
~~~
8:~$ snmpget -v 1 -c public routeur .1.3.6.1.2.1.1.3.0
$ snmpget -v 1 -c public 192.0.2.1 .1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (88640) 0:14:46.40
8:~$ snmpget -v 1 -c public routeur system.sysUpTime.0
$ snmpget -v 1 -c public 192.0.2.1 system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (102902) 0:17:09.02
8:~$ snmpget -v 1 -c public routeur .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.0
$ snmpget -v 1 -c public 192.0.2.1 .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (107510) 0:17:55.10
~~~
Affichage des OID system :
## Intégration à Icinga
~~~
$ snmptranslate -Tp -IR system
~~~
Lister les interfaces :
~~~
8:~$ snmpwalk -OX -c public -v 1 routeur .1.3.6.1.2.1.2
~~~
Lister les variables system :
~~~
8:~$ snmpwalk -v 1 -c public routeur system
~~~
Lister les disques :
~~~
snmpwalk -v 1 -c public routeur .1.3.6.1.4.1.2021.9
~~~
Lister load :
~~~
8:~$ snmpwalk -v 1 -c public routeur .1.3.6.1.4.1.2021.10
~~~
SNMPv2-SMI::enterprises = .1.3.6.1.4.1
Lister toutes les variables :
~~~
8:~$ snmpwalk -v 1 -c public <IP> .1
~~~
## Intégration à Nagios
Le plugin `check_snmp` de Nagios permet de réaliser des requêtes SNMP et d'interpréter le résultat comme étant _OK_, _Warning_ ou _Critical_.
Le plugin NRPE `check_snmp` permet de réaliser des requêtes SNMP et d'interpréter le résultat comme étant _OK_, _Warning_ ou _Critical_.
### Utilisation
@ -145,18 +90,18 @@ Les paramètres les plus utiles du plugin sont :
* `-H` : machine à surveiller ;
* `-P` : version du protocole à utiliser (1, 2c ou 3) ;
* `-o` : OID sur lequel vers la requête ;
* `-u` : unité de la valeur de l'OID (utilisé comme suffixe) ;
* `-o` : OID sur lequel faire la requête ;
* `-u` : unité de la valeur de l'OID (utilisé comme suffixe).
Définitions des seuils :
* `-w` : plage de valeur du résultat (sous la forme `"x:y"`) qui ne sera pas considéré comme un _Warning_ (Les valeurs x et y sont compris dans la plage) ;
* `-c` : idem, mais pour le _Critical_ ;
* `-w` : plage de valeur du résultat (sous la forme `"x:y"`) qui ne sera pas considéré comme un _Warning_ (les valeurs x et y sont compris dans la plage) ;
* `-c` : idem, mais pour le _Critical_.
Exemple :
~~~
/usr/lib/nagios/plugins/check_snmp -H san -P 2c -o 1.3.6.1.4.1.1714.1.2.1.11.1 -u "failed hard drive" -w "0:0" -c"0:1"
$ /usr/lib/nagios/plugins/check_snmp -H 192.0.2.1 -P 2c -o 1.3.6.1.4.1.1714.1.2.1.11.1 -u "failed hard drive" -w "0:0" -c "0:1"
~~~
Dans ce cas, le résultat de la requête sera considéré comme _OK_ si il vaut _0_, _Warning_ si il vaut _1_, et _Critical_ si il est supérieur à _1_.