RFC 1157 - Protocollo Semplice di Gestione di Rete (A Simple Network Management Protocol, SNMP)
Network Working Group
Request for Comments: 1157
Rende obsoleto: RFC 1098
Autori:
J. Case (SNMP Research)
M. Fedor (Performance Systems International)
M. Schoffstall (Performance Systems International)
J. Davin (MIT Laboratory for Computer Science)
Data di pubblicazione: Maggio 1990
Sommario (Abstract)
Questo RFC definisce un protocollo semplice tramite il quale le informazioni di gestione per un elemento di rete possono essere ispezionate o modificate da utenti logicamente remoti. In particolare, insieme ai suoi documenti complementari che descrivono la struttura delle informazioni di gestione e la Management Information Base, questi documenti forniscono un'architettura e un sistema semplici e funzionali per la gestione degli internet basati su TCP/IP e in particolare di Internet.
L'Internet Activities Board (IAB) raccomanda che tutte le implementazioni IP e TCP siano gestibili in rete. Questo implica l'implementazione della MIB Internet (RFC 1156) e di almeno uno dei due protocolli di gestione raccomandati: SNMP (RFC 1157) o CMOT (RFC 1095).
Indice (Table of Contents)
- 1. Stato di questo Memo
- 2. Introduzione
- 3. Architettura SNMP
- 4. Specifica del Protocollo
- 5. Definizioni
- 6. Ringraziamenti
- 7. Riferimenti
- 8. Considerazioni sulla Sicurezza
- 9. Indirizzi degli Autori
1. Stato di questo Memo
Questo è un protocollo standard Internet. L'IAB raccomanda che tutte le implementazioni IP e TCP siano gestibili in rete, il che implica l'implementazione di SNMP.
2. Introduzione
Obiettivo di SNMP: Fornire un protocollo semplice per gestire i dispositivi di rete in Internet.
Caratteristiche principali:
- 🔍 Monitoraggio (Monitoring): Interrogare lo stato e le statistiche dei dispositivi
- ⚙️ Configurazione: Modificare i parametri di configurazione dei dispositivi
- 🔔 Notifiche: Ricevere avvisi di eccezioni dai dispositivi (Trap)
- 📊 Semplicità: Facile da implementare e distribuire
Funzionamento di SNMP:
Stazione di gestione (Manager) Dispositivo gestito (Agent)
| |
|------ GetRequest (query) ----------->|
|<----- GetResponse (risposta) --------|
| |
|------ SetRequest (imposta) --------->|
|<----- GetResponse (conferma) --------|
| |
|<----- Trap (avviso non richiesto) ---|
3. Architettura SNMP
3.1 Obiettivi dell'Architettura
- Semplicità: Il protocollo è semplice e facile da implementare
- Estensibilità: Supporto per l'aggiunta di nuovi oggetti di gestione
- Indipendenza: Indipendente da architetture di rete specifiche
- Impatto minimo: Impatto minimo sulle prestazioni dei dispositivi
3.2 Elementi dell'Architettura
3.2.1 Ambito delle Informazioni di Gestione
Le informazioni gestite da SNMP includono:
- Statistiche delle interfacce (traffico, errori, ecc.)
- Tabelle di routing
- Connessioni TCP/UDP
- Informazioni di sistema
3.2.2 Rappresentazione delle Informazioni di Gestione
Utilizza la rappresentazione della Management Information Base (MIB):
Esempio di oggetto MIB:
Identificatore di oggetto (OID): 1.3.6.1.2.1.1.1.0
Nome: sysDescr (descrizione del sistema)
Sintassi: OCTET STRING
Accesso: read-only
Valore: "Cisco IOS Software, Version 15.2"
3.2.3 Operazioni Supportate
| Operazione | Descrizione | Direzione |
|---|---|---|
| GetRequest | Richiesta di ottenere il valore di un oggetto | Manager → Agent |
| GetNextRequest | Richiesta di ottenere il valore dell'oggetto successivo (per attraversamento) | Manager → Agent |
| SetRequest | Richiesta di impostare il valore di un oggetto | Manager → Agent |
| GetResponse | Risposta a richiesta Get/Set | Agent → Manager |
| Trap | Notifica di evento asincrona | Agent → Manager |
3.2.4 Forma e Significato degli Scambi di Protocollo
SNMP utilizza il protocollo UDP:
- Porta della stazione di gestione: 162 (ricezione Trap)
- Porta dell'agente: 161 (ricezione Get/Set)
3.2.5 Definizione delle Relazioni Amministrative
SNMP utilizza un nome di comunità (Community Name) per l'autenticazione semplice:
Nome di comunità: "public" (di default sola lettura)
Nome di comunità: "private" (di default lettura-scrittura)
3.2.6 Identificazione degli Oggetti Gestiti
Identificazione dell'istanza di oggetto:
Oggetti scalari:
sysDescr.0 (aggiungere .0 per l'istanza)
Oggetti di tabella:
ifDescr.1 (descrizione dell'interfaccia 1)
ifDescr.2 (descrizione dell'interfaccia 2)
4. Specifica del Protocollo
4.1 Elementi di Procedura
Formato del messaggio SNMP
Messaggio SNMP ::= SEQUENCE {
version INTEGER, -- Versione SNMP (0 = SNMPv1)
community OCTET STRING, -- Nome di comunità
data PDUs -- Protocol Data Unit
}
4.1.1 Costrutti Comuni
Campi condivisi da tutti i PDU:
- request-id: Identificatore di richiesta
- error-status: Stato di errore
- error-index: Indice di errore
- variable-bindings: Lista di associazioni di variabili
4.1.2 GetRequest-PDU
Scopo: Recuperare i valori di uno o più oggetti di gestione.
Esempio:
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
Scopo: Recuperare il successore lessicografico di ciascun nome di variabile nella lista di associazioni di variabili.
Esempio di attraversamento di tabella:
Passo 1: GetNextRequest(ifDescr)
Risposta: ifDescr.1 = "eth0"
Passo 2: GetNextRequest(ifDescr.1)
Risposta: ifDescr.2 = "eth1"
Passo 3: GetNextRequest(ifDescr.2)
Risposta: ifType.1 = 6 (oggetto successivo)
4.1.4 GetResponse-PDU
Scopo: Risposta a GetRequest, GetNextRequest o SetRequest.
Stato di errore:
| Valore | Nome | Descrizione |
|---|---|---|
| 0 | noError | Successo |
| 1 | tooBig | Risposta troppo grande |
| 2 | noSuchName | L'oggetto non esiste |
| 3 | badValue | Valore non valido |
| 4 | readOnly | L'oggetto è in sola lettura |
| 5 | genErr | Errore generico |
4.1.5 SetRequest-PDU
Scopo: Modificare i valori di uno o più oggetti di gestione.
Esempio:
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
Scopo: L'agente invia notifiche asincrone al manager.
Tipi di Trap:
| Trap | Descrizione |
|---|---|
| coldStart | Avvio a freddo del dispositivo |
| warmStart | Avvio a caldo del dispositivo |
| linkDown | Collegamento interrotto |
| linkUp | Collegamento ripristinato |
| authenticationFailure | Fallimento dell'autenticazione |
| egpNeighborLoss | Perdita di vicino EGP |
| enterpriseSpecific | Evento specifico del fornitore |
Formato del messaggio Trap:
Trap-PDU ::= SEQUENCE {
enterprise OBJECT IDENTIFIER, -- OID dell'impresa
agent-addr NetworkAddress, -- Indirizzo dell'agente
generic-trap INTEGER, -- Tipo di trap generico
specific-trap INTEGER, -- Codice di trap specifico
time-stamp TimeTicks, -- Timestamp
variable-bindings VarBindList -- Associazioni di variabili
}
5. Definizioni
Definizioni ASN.1 (versione semplificata):
RFC1157-SNMP DEFINITIONS ::= BEGIN
IMPORTS
ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks
FROM RFC1155-SMI;
-- Tipi di 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 condividono questa struttura
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. Ringraziamenti
Lo sviluppo di SNMP ha beneficiato dell'ampia partecipazione e dei contributi della comunità Internet.
7. Riferimenti
- [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 (reso obsoleto da questo RFC)
8. Considerazioni sulla Sicurezza
Limitazioni di sicurezza di SNMPv1:
⚠️ Autenticazione debole: I nomi di comunità sono trasmessi in chiaro
⚠️ Nessuna crittografia: Tutti i dati sono trasmessi in chiaro
⚠️ Nessuna protezione dell'integrità: I messaggi possono essere manomessi
Misure di mitigazione:
- Utilizzare nomi di comunità forti
- Limitare l'accesso SNMP per indirizzo IP
- Utilizzare nomi di comunità in sola lettura per il monitoraggio
- Implementare firewall per proteggere le porte SNMP
Miglioramenti nelle versioni successive:
- SNMPv2c: Operazioni di protocollo migliorate
- SNMPv3: Aggiunta di autenticazione, crittografia e controllo degli accessi (RFC 3414)
9. Indirizzi degli Autori
(Il documento originale contiene le informazioni di contatto degli autori)
SNMP è il protocollo fondamentale per la gestione di rete. Sebbene SNMPv1 abbia una sicurezza debole, è ancora ampiamente utilizzato grazie alla sua semplicità.
Strumenti SNMP comuni:
# Interrogare la descrizione del sistema
snmpget -v1 -c public 192.168.1.1 sysDescr.0
# Attraversare la tabella delle interfacce
snmpwalk -v1 -c public 192.168.1.1 ifTable
# Impostare la posizione del sistema
snmpset -v1 -c private 192.168.1.1 sysLocation.0 s "Beijing"
OID comuni:
1.3.6.1.2.1.1.1.0- sysDescr (descrizione del sistema)1.3.6.1.2.1.1.3.0- sysUpTime (tempo di attività del sistema)1.3.6.1.2.1.2.2.1.2- ifDescr (descrizione dell'interfaccia)1.3.6.1.2.1.2.2.1.10- ifInOctets (ottetti in ingresso dell'interfaccia)
RFC correlati:
- RFC 1155 - SMI (Structure of Management Information)
- RFC 1156 - MIB-I
- RFC 1213 - MIB-II
- RFC 3414 - Sicurezza SNMPv3