Aller au contenu principal

RFC 1157 - Protocole Simple de Gestion de Réseau (A Simple Network Management Protocol, SNMP)

Groupe de travail réseau
Request for Comments : 1157
Rend obsolète : RFC 1098

Auteurs :
J. Case (SNMP Research)
M. Fedor (Performance Systems International)
M. Schoffstall (Performance Systems International)
J. Davin (MIT Laboratory for Computer Science)

Date de publication : Mai 1990


Résumé (Abstract)

Ce RFC définit un protocole simple permettant à des utilisateurs logiquement distants d'inspecter ou de modifier les informations de gestion d'un élément réseau. En particulier, avec ses mémos compagnons qui décrivent la structure des informations de gestion et la base d'information de gestion (Management Information Base), ces documents fournissent une architecture et un système simples et fonctionnels pour gérer les internets basés sur TCP/IP, et en particulier l'Internet.

Le Conseil des activités Internet (Internet Activities Board, IAB) recommande que toutes les implémentations IP et TCP soient gérables par réseau. Cela implique l'implémentation de la MIB Internet (RFC 1156) et d'au moins un des deux protocoles de gestion recommandés : SNMP (RFC 1157) ou CMOT (RFC 1095).


Table des matières (Table of Contents)


1. Statut de ce mémo

Il s'agit d'un protocole standard Internet. L'IAB recommande que toutes les implémentations IP et TCP soient gérables par réseau, ce qui implique l'implémentation de SNMP.


2. Introduction

Objectif de SNMP : Fournir un protocole simple pour gérer les équipements réseau dans l'Internet.

Caractéristiques principales :

  • 🔍 Surveillance (Monitoring) : Interroger l'état et les statistiques des équipements
  • ⚙️ Configuration : Modifier les paramètres de configuration des équipements
  • 🔔 Notifications : Recevoir des alertes d'anomalies des équipements (Traps)
  • 📊 Simplicité : Facile à implémenter et à déployer

Fonctionnement de SNMP :

Station de gestion (Manager)             Équipement géré (Agent)
| |
|------ GetRequest (requête) --------->|
|<----- GetResponse (réponse) ---------|
| |
|------ SetRequest (définir) --------->|
|<----- GetResponse (confirmation) ----|
| |
|<----- Trap (alerte non sollicitée) --|

3. Architecture SNMP

3.1 Objectifs de l'architecture

  1. Simplicité : Le protocole est simple et facile à implémenter
  2. Extensibilité : Support pour l'ajout de nouveaux objets de gestion
  3. Indépendance : Indépendant des architectures réseau spécifiques
  4. Impact minimal : Impact minimal sur les performances des équipements

3.2 Éléments de l'architecture

3.2.1 Portée des informations de gestion

Les informations gérées par SNMP incluent :

  • Statistiques d'interface (trafic, erreurs, etc.)
  • Tables de routage
  • Connexions TCP/UDP
  • Informations système

3.2.2 Représentation des informations de gestion

Utilise la représentation de base d'information de gestion (Management Information Base, MIB) :

Exemple d'objet MIB :

Identifiant d'objet (OID) : 1.3.6.1.2.1.1.1.0
Nom : sysDescr (description système)
Syntaxe : OCTET STRING
Accès : read-only
Valeur : "Cisco IOS Software, Version 15.2"

3.2.3 Opérations supportées

OpérationDescriptionDirection
GetRequestDemande d'obtenir une valeur d'objetManager → Agent
GetNextRequestDemande d'obtenir la valeur de l'objet suivant (pour parcourir)Manager → Agent
SetRequestDemande de définir une valeur d'objetManager → Agent
GetResponseRéponse à une demande Get/SetAgent → Manager
TrapNotification d'événement asynchroneAgent → Manager

3.2.4 Forme et signification des échanges de protocole

SNMP utilise le protocole UDP :

  • Port de la station de gestion : 162 (réception des Traps)
  • Port de l'agent : 161 (réception des Get/Set)

3.2.5 Définition des relations administratives

SNMP utilise un nom de communauté (Community Name) pour une authentification simple :

Nom de communauté : "public" (lecture seule par défaut)
Nom de communauté : "private" (lecture-écriture par défaut)

3.2.6 Identification des objets gérés

Identification des instances d'objets :

Objets scalaires :

sysDescr.0  (ajouter .0 pour l'instance)

Objets de table :

ifDescr.1   (description de l'interface 1)
ifDescr.2 (description de l'interface 2)

4. Spécification du protocole

4.1 Éléments de procédure

Format de message SNMP

Message SNMP ::= SEQUENCE {
version INTEGER, -- Version SNMP (0 = SNMPv1)
community OCTET STRING, -- Nom de communauté
data PDUs -- Unité de données de protocole
}

4.1.1 Constructions communes

Champs partagés par tous les PDU :

  • request-id : Identifiant de requête
  • error-status : Statut d'erreur
  • error-index : Index d'erreur
  • variable-bindings : Liste de liaisons de variables

4.1.2 GetRequest-PDU

Objectif : Récupérer les valeurs d'un ou plusieurs objets de gestion.

Exemple :

GetRequest {
request-id: 1234,
error-status: 0,
error-index: 0,
variable-bindings: [
{name: 1.3.6.1.2.1.1.1.0, value: NULL}, -- sysDescr
{name: 1.3.6.1.2.1.1.3.0, value: NULL} -- sysUpTime
]
}

4.1.3 GetNextRequest-PDU

Objectif : Récupérer le successeur lexicographique de chaque nom de variable dans la liste de liaisons de variables.

Exemple de parcours de table :

Étape 1 : GetNextRequest(ifDescr)
Réponse : ifDescr.1 = "eth0"

Étape 2 : GetNextRequest(ifDescr.1)
Réponse : ifDescr.2 = "eth1"

Étape 3 : GetNextRequest(ifDescr.2)
Réponse : ifType.1 = 6 (objet suivant)

4.1.4 GetResponse-PDU

Objectif : Réponse à GetRequest, GetNextRequest ou SetRequest.

Statut d'erreur :

ValeurNomDescription
0noErrorSuccès
1tooBigRéponse trop grande
2noSuchNameL'objet n'existe pas
3badValueValeur invalide
4readOnlyL'objet est en lecture seule
5genErrErreur générique

4.1.5 SetRequest-PDU

Objectif : Modifier les valeurs d'un ou plusieurs objets de gestion.

Exemple :

SetRequest {
request-id: 1235,
error-status: 0,
error-index: 0,
variable-bindings: [
{name: 1.3.6.1.2.1.1.6.0, value: "New Location"} -- sysLocation
]
}

4.1.6 Trap-PDU

Objectif : L'agent envoie des notifications asynchrones au gestionnaire.

Types de Trap :

TrapDescription
coldStartDémarrage à froid de l'équipement
warmStartDémarrage à chaud de l'équipement
linkDownLiaison interrompue
linkUpLiaison rétablie
authenticationFailureÉchec d'authentification
egpNeighborLossPerte de voisin EGP
enterpriseSpecificÉvénement spécifique au fournisseur

Format de message Trap :

Trap-PDU ::= SEQUENCE {
enterprise OBJECT IDENTIFIER, -- OID d'entreprise
agent-addr NetworkAddress, -- Adresse de l'agent
generic-trap INTEGER, -- Type de trap générique
specific-trap INTEGER, -- Code de trap spécifique
time-stamp TimeTicks, -- Horodatage
variable-bindings VarBindList -- Liaisons de variables
}

5. Définitions

Définitions ASN.1 (version simplifiée) :

RFC1157-SNMP DEFINITIONS ::= BEGIN

IMPORTS
ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks
FROM RFC1155-SMI;

-- Types de PDU
PDUs ::= CHOICE {
get-request GetRequest-PDU,
get-next-request GetNextRequest-PDU,
get-response GetResponse-PDU,
set-request SetRequest-PDU,
trap Trap-PDU
}

-- GetRequest, GetNextRequest, SetRequest partagent cette structure
GetRequest-PDU ::= [0] IMPLICIT PDU
GetNextRequest-PDU ::= [1] IMPLICIT PDU
SetRequest-PDU ::= [3] IMPLICIT PDU

PDU ::= SEQUENCE {
request-id INTEGER,
error-status INTEGER,
error-index INTEGER,
variable-bindings VarBindList
}

GetResponse-PDU ::= [2] IMPLICIT PDU

Trap-PDU ::= [4] IMPLICIT SEQUENCE {
enterprise OBJECT IDENTIFIER,
agent-addr NetworkAddress,
generic-trap INTEGER,
specific-trap INTEGER,
time-stamp TimeTicks,
variable-bindings VarBindList
}

VarBindList ::= SEQUENCE OF VarBind

VarBind ::= SEQUENCE {
name ObjectName,
value ObjectSyntax
}

END

6. Remerciements

Le développement de SNMP a bénéficié de la large participation et des contributions de la communauté Internet.


7. Références

  • [RFC1155] - Structure and Identification of Management Information for TCP/IP-based Internets
  • [RFC1156] - Management Information Base for Network Management of TCP/IP-based internets
  • [RFC1098] - A Simple Network Management Protocol (rendu obsolète par ce RFC)

8. Considérations de sécurité

Limitations de sécurité de SNMPv1 :

⚠️ Authentification faible : Les noms de communauté sont transmis en clair
⚠️ Pas de chiffrement : Toutes les données sont transmises en clair
⚠️ Pas de protection d'intégrité : Les messages peuvent être altérés

Mesures d'atténuation :

  • Utiliser des noms de communauté forts
  • Restreindre l'accès SNMP par adresse IP
  • Utiliser des noms de communauté en lecture seule pour la surveillance
  • Déployer des pare-feu pour protéger les ports SNMP

Améliorations des versions ultérieures :

  • SNMPv2c : Opérations de protocole améliorées
  • SNMPv3 : Ajout d'authentification, de chiffrement et de contrôle d'accès (RFC 3414)

9. Adresses des auteurs

(Le document original contient les informations de contact des auteurs)


SNMP est le protocole fondamental de la gestion de réseau. Bien que SNMPv1 ait une sécurité faible, il est encore largement utilisé en raison de sa simplicité.

Outils SNMP courants :

# Interroger la description système
snmpget -v1 -c public 192.168.1.1 sysDescr.0

# Parcourir la table d'interface
snmpwalk -v1 -c public 192.168.1.1 ifTable

# Définir l'emplacement système
snmpset -v1 -c private 192.168.1.1 sysLocation.0 s "Beijing"

OID courants :

  • 1.3.6.1.2.1.1.1.0 - sysDescr (description système)
  • 1.3.6.1.2.1.1.3.0 - sysUpTime (temps de fonctionnement système)
  • 1.3.6.1.2.1.2.2.1.2 - ifDescr (description d'interface)
  • 1.3.6.1.2.1.2.2.1.10 - ifInOctets (octets entrants d'interface)

RFC connexes :

  • RFC 1155 - SMI (Structure des informations de gestion)
  • RFC 1156 - MIB-I
  • RFC 1213 - MIB-II
  • RFC 3414 - Sécurité SNMPv3