Supervision Cours 3 SNMP Eric Garcia 2002 IUT GTR, Montbéliard
Références ? : Modèle de communication François Spies, Julien Bourgeois : Supervision de réseaux Mentor Technologies : Configuring SNMP in Cisco Routers
Plan SNMP : fonctionnement SNMP sous linux SNMP sur un routeur
Principe de SNMP
Définition Simple Network Management Protocol Adopté par tous les constructeurs Langage commun à tous les appareils réseaux modem, PC, routeur, commutateurs, etc. Architecture agent/superviseur
Rôle et architecture Quelle information est intéressante ? Comment nommer les éléments ? Comment obtenir et fixer des valeurs ? Architecture agent/superviseur Communication basées sur UDP Agent attend des ordres du superviseur Agent peut "désobéir" avec un trap
Les requêtes UDP, port 161 get-request : lecture get-next-request : lecture séquentielle set-request : écriture get-response : attente réponse UDP, port 162 trap : alarme récupération par le superviseur
Service de gestion Trois primitives de service GET : lecture d ’une valeur d ’objet géré SET : écriture d ’une valeur d ’objet géré GET-NEXT : lecture du « suivant » Une primitive de notification TRAP : un événement prédéfini
GET Question / Lecture /Réponse
Accès aux objets gérés Requête d’un Gestionnaire lecture ou écriture, … paramètre : l ’oid (le type de l ’objet géré) si variable simple oid.0 si variable dans une table oid.<valeur index 1>.….<valeur index n>
Exemple de lecture
Le service GET Requête : une liste d’oid .0 Réponses : une liste de (oid,valeur) ou erreur
Le service SET Requête / Recherche / Mise à jour / Notification
Le service SET Requête : une liste de couple oid, valeur Réponse : la même liste ou erreur
Le service GET-NEXT Question / Recherche du suivant /Lecture /Réponse
Le service GET-NEXT Requête : un oid o Réponse : l ’oid et la valeur de l ’objet géré suivant o
Parcours
Parcours d’une MIB
Parcours d’une table
Parcours d’une table
Parcours d’une table
Parcours d’une table
Notification Trap ou alarme
Les traps 7 différents types d'alarmes coldStart, warmStart linkDown, linkUp authetificationFailure egpNeighborLoss enterpriseSpecific 5 destinataires maximum
Les erreurs Champs : Error status Error index Codes d'erreur : 0 : noError 1 : tooBig 2 : noSuchName 3 : badValue 4 : readOnly 5 : genErr
Les droits d’accès Les types de droits d'accès : read-only read-write write-only not-accessible Connaissance du nom de la communauté Restriction par sous-arbres de la MIB (MIB view)
La sécurité : communauté Relation N-N entre Gestionnaires et Agents Un agent doit pouvoir contrôler son accès suivant les Gestionnaires Solution de mots de passe Un Agent définit des noms de communautés (public) Toute requête de Gestionnaire contient un nom (public)
Profil de communauté Une communauté a une vue partielle de la MIB a des droits sur cette vue (mode d ’accès) droits à confronter avec ceux des objets gérés
Illustration
Plan SNMP : fonctionnement SNMP sous linux SNMP sur un routeur
Installation et configuration Installation Debian : client snmp : apt-get install snmp serveur snmp = agent snmp : apt-get install snmpd Fichiers de configuration Serveur /etc/snmp/snmpd.conf ~/snmpd.conf Client /usr/share/snmp/snmpconf-data/snmp.conf
Fichier de configuration ########################################################################### # snmpd.conf # # - created by the snmpconf configuration program # SECTION: Access Control Setup # This section defines who is allowed to talk to your running # snmp agent. #rocommunity: a SNMPv1/SNMPv2c read-only access community name #arguments: community [default|hostname|network/bits] [oid] rocommunity public #rwcommunity: a SNMPv1/SNMPv2c read-write access community name rwcommunity public ...
Fichiers MIB Après l’installation du package snmp /usr/share/snmp/mibs fichiers des différentes parties de mib RFC1213-MIB.txt, RMON-MIB.txt… Fichiers ASN.1 accès en lecture écriture, types (SNMPV2-SMI.txt) explications (SNMPV2-MIB.txt)…
Fichiers MIB SNMPv2-SMI Fichier SNMPv2-SMI Définition de la partie de l’arbre de référence Définition des types utilisés dans cet arbre SNMPv2-SMI DEFINITIONS ::= BEGIN -- the path to the root org OBJECT IDENTIFIER ::= { iso 3 } -- "iso" = 1 dod OBJECT IDENTIFIER ::= { org 6 } internet OBJECT IDENTIFIER ::= { dod 1 } directory OBJECT IDENTIFIER ::= { internet 1 } mgmt OBJECT IDENTIFIER ::= { internet 2 } mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } transmission OBJECT IDENTIFIER ::= { mib-2 10 } experimental OBJECT IDENTIFIER ::= { internet 3 } private OBJECT IDENTIFIER ::= { internet 4 } enterprises OBJECT IDENTIFIER ::= { private 1 } ...
Fichiers MIB Vérification d’une requête avant son émission impossible d’envoyer un SET avec un mauvais type MIB présente sur le gestionnaire et la ressource (ceci n’est pas obligatoire mais semble être la solution la plus souvent utilisée) Ouvrir SNMPv2-MIB
Fichiers MIB
snmpwalk Parcours de la MIB snmpwalk –v 1 –c public 172.20.168.254 system.sysDescr.0 = Cisco Internetwork Operating System Software IOS (tm) 1600 Software (C1600-SY-M), Version 12.0(5)T, RELEASE SOFTWARE (fc1) Copyright (c) 1986-1999 by cisco Systems, Inc. Compiled Fri 23-Jul-99 06:04 by kpma system.sysObjectID.0 = OID: enterprises.9.1.172 system.sysUpTime.0 = Timeticks: (575148278) 66 days, 13:38:02.78 system.sysContact.0 = system.sysName.0 = moi system.sysLocation.0 = system.sysServices.0 = 78 system.sysORLastChange.0 = Timeticks: (0) 0:00:00.00 interfaces.ifNumber.0 = 4 interfaces.ifTable.ifEntry.ifIndex.1 = 1 ...
Snmpwalk : syntaxe Utilise la requête SNMP GET-NEXT pour parcourir l’arbre d’une entité réseau Un OID peut être donné en ligne de commande pour spécifier la portion de l’arbre devant être parcourue snmpwalk -Os -c public -v 1 zeus system will retrieve all of the variables under system: sysDescr.0 = STRING: "SunOS zeus.net.cmu.edu 4.1.3_U1 1 sun4m" sysObjectID.0 = OID: enterprises.hp.nm.hpsystem.10.1.1 sysUpTime.0 = Timeticks: (155274552) 17 days, 23:19:05 sysContact.0 = STRING: "" sysName.0 = STRING: "zeus.net.cmu.edu" sysLocation.0 = STRING: "" sysServices.0 = INTEGER: 72
snmpget Demande la valeur d’une variable correspondant à l’OID donné en ligne de commande snmpget –v 1 –c public 172.20.168.254 1.1.0 ou snmpget –v 1 –c public 172.20.168.254 system.sysDescr.0 system.sysDescr.0 = Cisco Internetwork Operating System Software IOS (tm) 1600 Software (C1600-SY-M), Version 12.0(5)T, RELEASE SOFTWARE (fc1) Copyright (c) 1986-1999 by cisco Systems, Inc. Compiled Fri 23-Jul-99 06:04 by kpma snmpget -v 1 -c public localhost 1.3.6.1.2.1.2.1.0 IF-MIB::ifNumber.0 = INTEGER: 2
Snmpget : syntaxe et erreurs Différence d’écriture au niveau des raccourcis d’OID en fonction des version du client SNMP Paramétrage pour ne pas à avoir à taper tous les numéros jusqu’à MIBII (1.3.6.1.2.1) snmpget -v1 -c public localhost system.sysUpTime system.sysContact.0 Error in packet Reason: (noSuchName) There is no such variable name in this MIB. This name doesn't exist: system.sysUpTime system.sysContact.0 = STRING: root@localhost
snmpset Met à jour la valeur d’une variable correspondant à l’OID donné en ligne de commande Commande snmpset -v 1 -c public 194.57.88.50 interfaces.ifTable.ifEntry.ifAdminStatus.2 i 1 Réponse interfaces.ifTable.ifEntry.ifAdminStatus.2 = up(1)
Snmpset : syntaxe Types i INTEGER n NULLOBJ u UNSIGNED o OBJID s STRING t TIMETICKS x HEX STRING a IPADDRESS d DECIMAL STRING b BITS Exemple snmpset -c private -v 1 test-hub system.sysContact.0 s dpz@noc.rut-gers.edu ip.ipforwarding.0 = 2 will set the variables sysContact.0 and ipForwarding.0: system.sysContact.0 = STRING: "dpz@noc.rutgers.edu" ip.ipForwarding.0 = INTEGER: not-forwarding(2)
snmpcmd man snmpcmd snmpcmd [-h|-H|-V] [-v (1 | 2c | 3) ] [-O <OUTOPTS> ] [-I <INOPTS> ] [-P <PARSEROPTS> ] [-m mibs] [-M mibdirs] [-d] [-D <TOKEN[,TOKEN,...]> ] [-r retries] [-t timeout] [-p port] [-T UDP|TCP] [-c community] [-e engineid] [-Z boots time] [-n contextname] [-l seclevel] [-u secname] [-a authproto][-A authpasswd][-x privproto][-X priv- passwd] agent [community] commandparams
Sécurité Des tests effectués à l'université de OULU mettent en évidence que de nombreuses vulnérabilités ( débordement de mémoire, chaîne de format, ...) existent dans les routines de décodage et de traitement des messages SNMP. utiliser les capacités de filtrage que possèdent que possèdent certains agent SNMP (ACL) ne pas utiliser les noms de communautés positionnés lors de l'installation par défaut (public …) filtrer les ports 161/udp et 162/udp utilisés par le protocole SNMP V1 au niveau du garde-barrière afin d'empêcher l'exploitation de ces vulnérabilités depuis l'Internet
Différentes versions 3 versions du protocole SNMP : SNMPv1, SNMPv2 et SNMPv3. La version 1 est encore la plus utilisée. La version 2 est beaucoup plus complexe que la version 1 elle contient un niveau hiérarchique d’administration, ce qui permet d’avoir un administrateur central et de petits NMS dans le réseau. elle incorpore aussi un niveau plus élevé de sécurité, elle contient une gamme de messages d’erreurs plus vaste, elle utilise un nouveau type de tables MIB, les MIB II, qui contiennent plus d’éléments.
Différentes versions pas un standard complet (Full Standard) La version 2 n’a cependant pas remplacé la version 1 du protocole, pas un standard complet (Full Standard) la version 1 est simple et fonctionne très bien. La version 3 pour sa part n’est pas encore au point devrait éventuellement remplacer la version 1 Cette version comprend : un module de sécurité plus élevée un module de traitements de messages des modules d’application et du répartiteur de paquets elle permet aussi d’interagir avec les anciennes versions.
Défauts / Avantages SNMP V1 authentification simpliste car le nom de la communauté circule en clair sur le réseau. consultation des tables fastidieuse SNMP V2 Mécanisme d'authentification incompatible avec SNMP v1 Peut s'appuyer sur IP, IPX, OSI Primitives d'interrogation de tables Encore peu utilisé Sécurité : notion de Party (échange) 1 adresse réseau, mot de passe, protocole de chiffrement, l'agent restreint l'accès à une partie de l'arborescence, une requête a une durée de vie limitée.
Options V2 et V3 -e engineid sets the authoritative(security) engineID used for SNMP v3 Request messages. This is the engineID of the agent or proxy (e.g., 800000020109840301). will be discovered if not supplied) -n contextname sets the destination contextName used for SNMP v3 messages. Default contextName is the empty string "". -l seclevel sets the securityLevel used for SNMP v3 messages (noAuthNoPriv|authNoPriv|authPriv). Appropriate pass phrase(s) must provided when using any level higher than noAuthNoPriv. -u secname sets the securityName used for authenticated SNMP v3 messages.
Options V2 et V3 -a authproto sets the authentication protocol (MD5|SHA) used for authenticated SNMP v3 messages. -A authpasswd sets the authentication pass phrase used for -X privpasswd sets the privacy pass phrase used for encrypted SNMP v3 messages.
MIB Privée
Snmpwalk privé snmpwalk -Os -c public -v 1 –m all zeus private enterprises.cisco.local.1.1.0 = "..System Bootstrap, Version 12.0(3)T, RELEASE SOFTWARE (fc1)..Copyright (c) 1999 by cisco Systems, Inc..." enterprises.cisco.local.1.2.0 = "bus error at PC 0x266BBAA, address 0x65656569" enterprises.cisco.local.1.3.0 = "LaCultureDeLaBettrave" enterprises.cisco.local.1.4.0 = "univ-fcomte.fr" ... enterprises.cisco.ciscoMgmt.ciscoImageMIB.ciscoImageMIBObjects.ciscoImageTable.ciscoImageEntry.ciscoImageString.3 = CW_FAMILY$C1600$ enterprises.cisco.ciscoMgmt.ciscoImageMIB.ciscoImageMIBObjects.ciscoImageTable.ciscoImageEntry.ciscoImageString.4 = CW_FEATURE$BASIC-IP PLUS$ enterprises.cisco.ciscoMgmt.ciscoImageMIB.ciscoImageMIBObjects.ciscoImageTable.ciscoImageEntry.ciscoImageString.5 = CW_VERSION$12.0(5)T, $
MIB Privée Cisco = branche 9 de entreprises (voir CISCO-SMI) CISCO-SMI DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-IDENTITY, enterprises FROM SNMPv2-SMI; cisco MODULE-IDENTITY LAST-UPDATED "200001110000Z" ORGANIZATION "Cisco Systems, Inc." CONTACT-INFO ... ... DESCRIPTION "Initial version of this MIB module." ::= { enterprises 9 } -- assigned by IANA
MIB Privée snmpget -v 1 -c public -m all 194.57.88.50 1.2.0 system.sysObjectID.0 = OID: enterprises.9.1.172 CISCO-PRODUCTS-MIB.my ajoutée dans /usr/share/snmp/mibs (branche 1 de cisco) system.sysObjectID.0 = OID: enterprises.cisco.ciscoProducts.cisco1605
MIB Privée Cisco MIB privée = morceau d’une branche d’une entreprise Attention aux erreurs si une partie de branche est utilisée sans avoir importer la partie qui permet de la relier à la racine cisco-bus.mib cisco-lecs.mib cisco-les.mib lane-client.mib cisco-vlan-bridge.mib atm-forum.mib Fichier cisco-smi.mib Définition de la partie CISCO de l’arbre
Cisco.com et MIBs Pour télécharger des MIBs pour des plate-formes particulières, utiliser la MIB Locator http://tools.cisco.com/ITDIT/MIBS/servlet/index Pour accéder à la MIB Locator = compte chez Cisco.com : http://www.cisco.com/register MIBs Courantes : liste, informations par plate-forme, téléchargement : http://www.cisco.com/public/sw-center/netmgmt/cmtk/mibs.shtml
Cisco MIB Locator
L’arbre de référence
MIB Privée QoS Fichier MIB CISCO-QUEUE-MIB ciscoQueueObjects OBJECT IDENTIFIER ::= { ciscoQueueMIB 1 } ciscoQueueTraps OBJECT IDENTIFIER ::= { ciscoQueueMIB 2 } ciscoQueueConformance OBJECT IDENTIFIER ::= { ciscoQueueMIB 3 } CQAlgorithm ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "The type of queuing algorithm used on the interface." SYNTAX INTEGER { fifo(1), -- First In First Out priority(2), -- Priority Queuing custom(3), -- Custom Queuing weightedFair(4) -- Weighted Fair Queuing } ...
MIB Privée QoS snmpwalk -v 1 -c public -m all 194.57.88.50 internet.private enterprises.cisco.local.1.1.0 = "..System Bootstrap, Version 12.0(3)T, RELEASE SOFTWARE (fc1)..Copyright (c) 1999 by cisco Systems, Inc...“ ... enterprises.cisco.ciscoMgmt.ciscoQueueMIB.ciscoQueueObjects.cQIfTable.cQIfEntry.cQIfQType.1 = fifo(1) enterprises.cisco.ciscoMgmt.ciscoQueueMIB.ciscoQueueObjects.cQIfTable.cQIfEntry.cQIfQType.2 = fifo(1) enterprises.cisco.ciscoMgmt.ciscoQueueMIB.ciscoQueueObjects.cQIfTable.cQIfEntry.cQIfQType.3 = weightedFair(4)
Plan SNMP : fonctionnement SNMP sous linux SNMP sur un routeur
Configurer les accès au routeur Activer l’agent SNMP du routeur RO, RW Configuration d’une community string équivalent à un mot de passe public, private, secret… snmp-server community public ro snmp-server community ourCommStr ro
Sécurité : mot de passe Utilisation possible de serveurs centralisés de mots de passes (SNMPv2 ou v3) XTACACS TACACS+ Voir cours de sécurité tacacs-server host A.B.C.D enable use-tacacs tacacs-server authenticate enable ...
Sécurité : access list Éviter les noms de communauté classiques pour un agent RW Le paramètre 60 restreint l’accès en écriture aux machines autorisées par l’ACL 60 ici deux machines dites gestionnaires possibilité de wildcard aux machines d’un sous-réseau snmp-server community topsecret rw 60 access-list 60 permit 10.1.1.1 access-list 60 permit 10.2.2.2
Sécurité : view Paramètre view = restreint l’accès à une partie de la MIB Création de la vue noRouteTable avec les 4 dernières lignes snmp-server community hideit ro view noRouteTable snmp-server view noRouteTable internet included snmp-server view noRouteTable ip.21 excluded snmp-server view noRouteTable ip.22 excluded snmp-server view noRouteTable ifMIB excluded
Traps : configuration Configuration d’alarmes envoyées à l’initiative de l’agent vers une ou plusieurs stations d’administration dédiées différentes alarmes en fonction de l’IOS utilisé snmp-server enable traps snmp-server enable traps frame-relay snmp-server enable traps envmon temperature
Traps : syslogd sur PC Configuration de la ou des stations d’administration dédiées à la réception des alarmes 1) 10.1.1.1 reçoit toutes les alarmes 2) 10.1.1.1 reçoit les traps snmp et bgp et 10.1.1.2 les traps snmp et frame-relay snmp-server host 10.1.1.1 public snmp-server host 10.1.1.1 public snmp bgp snmp-server host 10.2.2.2 public snmp frame-relay Configuration sur la station NMS Lancer le démon syslogd sur la station pour pouvoir utiliser les fichiers de logs
Les types d’alarmes authentication : échecs d’authentification pour SNMPv1 = mauvaise community string Pour v2 et v3 mauvais mot de passe linkup : activation d’un lien linkdown : désactivation d’un lien coldstart : réinitialisation du périphérique avec possibilité de modification de la configuration de l’agent warmstart : réinitialisation du périphérique sans modification de la configuration de l’agent
Traps : versions d’IOS Release Modification 11.3 La commande snmp-server enable traps snmp authentication à été introduite à la place de snmp-server trap-authentication 12.1(3)T Les traps suivantes ont été ajoutées : • linkup • linkdown • coldstart 12.1(5)T Ajout de la commande warmstart
Autres commandes Permettre le redémarrage d’un routeur par une requête SNMP utilisé par le logiciel CiscoWork lors de téléchargement d’un nouvel IOS snmp-server system-shutdown Champs souvent non renseignés snmp-server contact XXXX snmp-server location YYYY
Bonus : Host et DNS Host table utile même si le DNS est configuré : risques de pannes mettre les routeurs les plus importants ou les noms des serveurs TFTP pour les fichiers de conf. dans cette table ip host new_york_router a.b.c.d e.f.g.h i.j.k.l ip host chicago_router a.b.c.g m.n.o.p DNS ip domain-name univ-fcomte.fr ip name-server 194.57.91.200 ip name-server 194.57.91.201 no ip domain-lookup : pour invalider la rechetrche d’un DNS
Bonus : Accès Telnet Activer l’accès en telnet au routeur on peut améliorer un peu la sécurité avec les ACL access-list 1 permit a.b.c.0 0.0.0.255 access-list 1 permit a.b.g.0 0.0.0.255 line vty 0 4 access-class 1 in login password xxx : password telnet exec-timeout 5 0 : logout auto si inactivité 5 minutes : (10 minutes par défaut) : exec-timeout 0 0 si on n’en veut pas
Exemple de config access-list 60 permit a.b.c.d 0.0.0.0 access-list 60 permit e.f.g.h 0.0.0.0 access-list 60 deny 0.0.0.0 255.255.255.255 snmp-server community password1 RO snmp-server community password2 RO 60 snmp-server community password3 RW 60 snmp-server system-shutdown snmp-server chassis-id YYYY snmp-server packetsize 4000 snmp-server host a.b.c.d snmp-server host a.b.c.g snmp-server contact XXXX snmp-server location YYYY snmp-server trap-authentication
Configurer l’agent sur un AP
Configurer l’agent sur un AP
Snmpwalk snmpwalk sur un Acces Point Cisco Aironet 350 [garcia@zelda ~]$ snmpwalk -v 1 -c root 194.57.88.51 system system.sysDescr.0 = Cisco 350 Series AP 11.21 system.sysObjectID.0 = OID: enterprises.9.1.380 system.sysUpTime.0 = Timeticks: (6419600) 17:49:56.00 system.sysContact.0 = Aironet Wireless Communications, Inc. system.sysName.0 = AP350-58b47c system.sysLocation.0 = Besancon system.sysServices.0 = 79