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
- 2. Introduction
- 3. Architecture SNMP
- 4. Spécification du protocole
- 5. Définitions
- 6. Remerciements
- 7. Références
- 8. Considérations de sécurité
- 9. Adresses des auteurs
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
- Simplicité : Le protocole est simple et facile à implémenter
- Extensibilité : Support pour l'ajout de nouveaux objets de gestion
- Indépendance : Indépendant des architectures réseau spécifiques
- 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ération | Description | Direction |
|---|---|---|
| GetRequest | Demande d'obtenir une valeur d'objet | Manager → Agent |
| GetNextRequest | Demande d'obtenir la valeur de l'objet suivant (pour parcourir) | Manager → Agent |
| SetRequest | Demande de définir une valeur d'objet | Manager → Agent |
| GetResponse | Réponse à une demande Get/Set | Agent → Manager |
| Trap | Notification d'événement asynchrone | Agent → 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 :
| Valeur | Nom | Description |
|---|---|---|
| 0 | noError | Succès |
| 1 | tooBig | Réponse trop grande |
| 2 | noSuchName | L'objet n'existe pas |
| 3 | badValue | Valeur invalide |
| 4 | readOnly | L'objet est en lecture seule |
| 5 | genErr | Erreur 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 :
| Trap | Description |
|---|---|
| coldStart | Démarrage à froid de l'équipement |
| warmStart | Démarrage à chaud de l'équipement |
| linkDown | Liaison interrompue |
| linkUp | Liaison rétablie |
| authenticationFailure | Échec d'authentification |
| egpNeighborLoss | Perte 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