In informatica e telecomunicazioni Simple Network Management Protocol (SNMP) è un protocollo di rete senza connessione che appartiene alla suite di protocolli Internet definito dalla IETF (Internet Engineering Task Force). Opera al livello 7 del modello OSI, utilizzando come protocollo del livello trasporto UDP sulle porte 161 e 162, consentendo di semplificare la configurazione, gestione e supervisione (monitoraggio) di apparati collegati in una rete (siano essi nodi interni di commutazione come i dispositivi di rete o nodi terminali di utenza), riguardo a tutti quegli aspetti che richiedono azioni di tipo amministrativo (management).

Architettura

[modifica | modifica wikitesto]
Interazione Manager-Agent in SNMP

Il protocollo SNMP assume che la gestione di un dispositivo di rete sia possibile attraverso la lettura/scrittura di informazioni elementari (nel seguito riferite con il termine inglese "managed objects") che rappresentano la configurazione corrente di un sistema. Il framework concettuale definito dall'IETF per la gestione di reti TCP/IP prevede tre componenti fondamentali[1]:

  1. sistema di gestione (manager);
  2. agente di gestione (agent o master agent), attivo nel dispositivo, ed eventuali subagent;
  3. collezione di managed object.

Ogni sistema gestito (per esempio un semplice nodo, un router, una stampante o qualsiasi altro dispositivo che fornisca un'interfaccia di gestione SNMP) ospita un agente di gestione (master agent) e solitamente un certo numero di subagent. Il master agent ha almeno il ruolo di intermediario fra il manager, applicazione remota che prende le decisioni di gestione, per esempio sotto il controllo diretto dell'operatore umano, e i subagent, esecutori di tali decisioni. Ciascun subagent è incaricato di attuare le decisioni di gestione impartite dal manager nel contesto di un particolare sottosistema o relativamente a un particolare aspetto del sistema gestito. In sistemi che forniscono meccanismi di gestione particolarmente semplici, master agent e subagent possono confluire in un unico componente software capace sia di dialogare con il manager che di attuarne le decisioni; in questo caso si parlerà semplicemente di agent.

SNMP utilizza quindi una chiara separazione fra il protocollo di gestione e la struttura dell'oggetto gestito. Nell'architettura SNMP, per ogni sottosistema è definita una base di dati detta MIB (Management Information Base), gestita dal corrispondente subagent, la quale rappresenta lo stato del sottosistema gestito, o meglio, una proiezione di tale stato limitata agli aspetti di cui si vuole consentire la gestione. Si tratta di una base dati che si potrebbe definire, mutuando un termine dalla riflessione, "causalmente connessa": in altre parole, ogni modifica alla MIB causa un corrispondente mutamento nello stato del sottosistema rappresentato, e viceversa. Garantire questa proprietà della MIB è la funzione principale del subagent che la gestisce.

Esempio di albero MIB

L'accesso alla MIB (in lettura e scrittura) rappresenta l'interfaccia fornita al manager per gestire il sistema. Ogni MIB, pur variando nei contenuti specifici, ha la medesima struttura generale a forma di albero ed i medesimi meccanismi generali di accesso da parte del manager (lettura e scrittura dei dati). Ogni oggetto nella MIB è identificato da un object ID (OID). Un OID si rappresenta mediante una sequenza di numeri interi separati da punti. Esso rappresenta il percorso all'interno dell'albero MIB per giungere dalla radice ad esso. I nodi foglia della MIB rappresentano i managed objects. Ad esempio, il nodo system della MIB SNMP è rappresentato dall'OID 1.3.6.1.2.1.1.

Grazie alla connessione causale della MIB, è quindi possibile al manager agire sullo stato del sottosistema in un modo che è largamente indipendente dalle procedure concrete che devono poi essere messe in atto (dal subagent) per estrarre le informazioni di stato rappresentate nella MIB, o attuare le modifiche di stato a seguito di cambiamenti dei contenuti della MIB. Così, per esempio, si potrebbe avere un dato di MIB che rappresenta l'indirizzo IP del sistema gestito; per modificare tale indirizzo, al manager è sufficiente accedere alla MIB sovrascrivendo il dato corrispondente, prescindendo dei dettagli di come una tale modifica venga poi concretamente "attuata" sul sistema gestito attraverso l'agent o il subagent.

SNMP versione 1

[modifica | modifica wikitesto]

Il protocollo SNMP nella sua prima versione (SNMPv1) è stato definito inizialmente nel 1988 in RFC 1067 ed approvato come Internet Standard nel 1990 in RFC 1157. Lo schema di interazione fondamentale è di tipo richiesta-risposta. Il protocollo prevede tre tipi di messaggi di richiesta, inviati dal manager agli agent dei sistemi gestiti:

Ai tre tipi di messaggi di richiesta corrisponde un unico formato di messaggio di risposta: Get-response.

Il protocollo prevede un ulteriore tipo di messaggio, Trap, inviato da un agent SNMP ad un manager predefinito per la notifica asincrona di eventi:

I messaggi SNMPv1 sono costituiti da due parti: un'intestazione ed una Protocol Data Unit (PDU). L'intestazione è costituita da:

Il nome di comunità è usato in SNMPv1 come forma elementare di autenticazione. SNMP assume che i dispositivi di una rete siano raggruppati in comunità, ciascuna identificata da una stringa di 32 byte. Un singolo dispositivo può appartenere a più di una comunità. L'agent SNMP accetta richieste solo da un manager della stessa comunità che si identifica con la medesima stringa. Siccome la stringa comunità è trasmessa in chiaro nei messaggi SNMP, di fatto il protocollo SNMPv1 è considerato essere non sicuro e la maggior parte dei dispositivi impedisce operazioni di Set attraverso SNMPv1.

Formato dei messaggi SNMPv1

[modifica | modifica wikitesto]

Il formato generale dei messaggi SNMPv1 è il seguente.

Version Community SNMP PDU

Formato PDU per i messaggi di richiesta SNMPv1 (Get-request/Get-next-request/Set-request):

PDU Type Request ID 0 0 Variable Bindings

Formato PDU per i messaggi di risposta SNMPv1 (Get-response):

PDU Type Request ID Error status Error index Variable Bindings

Formato per le PDU SNMPv1 di tipo Trap:

PDU Type Enterprise Agent address Generic trap type Specific trap code Time stamp Variable bindings
Messaggi SNMPv1

RFC relativi ad SNMPv1

[modifica | modifica wikitesto]

Le specifiche del protocollo SNMPv1, definite dall'IETF, hanno subito numerosi aggiornamenti nel corso degli anni. Esse sono contenute in una serie di documenti RFC. I primi RFC riguardanti SNMPv1 risalgono al 1988:

Tali documenti sono stati successivamente (1990) resi obsoleti da:

Infine dopo un breve lasso di tempo, l'RFC 1156 è stato rimpiazzato dal documento:

SNMP versione 2

[modifica | modifica wikitesto]

La versione 2 del protocollo SNMP (SNMPv2) fu proposta nel 1993 (RFC 1448), revisionata nel 1996 (RFC 1905) e successivamente modificata nel 2002 (RFC 3416).

SNMPv2 aggiunge nuovi meccanismi per la sicurezza, il supporto ad una nuova architettura di gestione distribuita ed introduce due nuovi tipi di messaggi[2]:

Formato dei messaggi SNMPv2

[modifica | modifica wikitesto]

I messaggi SNMPv2 hanno un diverso formato rispetto a quello definito per SNMPv1.

Version Header Security Context-ID Context-Name SNMP PDU

Il formato della PDU dei messaggi di tipo Inform è lo stesso di quello dei messaggi Get, Get-next e Set, mentre quello dei messaggi Get-bulk è differente, ed è riportato di seguito.

Formato PDU di tipo Get-bulk:

PDU type Request ID Non-repeaters Max-repetitions Variable bindings

Architettura di Gestione

[modifica | modifica wikitesto]

SNMPv2 supporta sia la gestione della rete centralizzata di SNMPv1, sia una nuova strategia distribuita, basate su interazioni manager-to-manager. In un'architettura distribuita, alcuni sistemi possono operare sia nel ruolo di manager sia nel ruolo di agent. Quando un sistema agisce da agent accetta comandi da un manager di livello superiore. Questi comandi possono richiedere informazioni memorizzate localmente nel manager che sta agendo come agent, oppure richiedere informazioni di un agent subordinato così da operare come intermediario (proxy).

Sicurezza

[modifica | modifica wikitesto]

SNMPv2 risolve il problema della mancanza d'autenticazione, la carenza di sicurezza più seria di SNMPv1. La mancanza di autenticazione costituisce un grave problema di sicurezza di SNMPv1, per effetto del quale SNMPv1 è utilizzato nelle reti aziendali per soli scopi monitoraggio (sole operazioni di tipo Get).

SNMPv2 introduce meccanismi per prevenire i seguenti tipi di minacce alla sicurezza[3]:

SNMPv2 consente la cifratura dei messaggi per garantire la riservatezza del contenuto ed aggiunge al formato dei messaggi un campo digest per garantire l'autenticazione tra due entità.

SNMPv2c

[modifica | modifica wikitesto]

Community-Based Simple Network Management Protocol versione 2 (SNMPv2c), definito in RFC 1901, rimuove il complesso sistema di sicurezza introdotto da SNMPv2 riutilizzando la community-string della versione 1. SNMPv2c, così come descritto, è incompatibile con SNMPv1 per due motivi fondamentali: formato dei messaggi e operazioni. I messaggi di SNMPv2c, infatti, utilizzano un header e PDU differenti rispetto alla versione 1. Inoltre, SNMPv2c utilizza le operazioni GetBulk ed Inform non presenti nella versione precedente. Due possibili strategie per la coesistenza tra le due versioni sono: proxy agent e bilingual Network Management System.[4]

Proxy Agent

[modifica | modifica wikitesto]

La soluzione tramite proxy deve essere utilizzata per abilitare la comunicazione tra entità che supportano differenti versioni dei messaggi SNMP. La comunicazione è garantita effettuando una traduzione delle PDU dei messaggi.

Nel caso in cui un messaggio SNMPv2 debba essere inviato ad un agente che supporta SNMPv1, si utilizzano le seguenti regole di traduzione:

SNMP versione 3

[modifica | modifica wikitesto]

SNMPv3 è stato definito dall'IETF in una serie di RFC prodotti a partire dal 1998. SNMPv3 non stravolge le precedenti versioni, ma aggiunge in RFC 3414 dei meccanismi che consentono i seguenti tre livelli di sicurezza nella comunicazione manager-agent[5]:

Attraverso questi meccanismi, il protocollo è in grado di garantire:

La tabella di seguito riporta le possibili combinazioni dei modelli di sicurezza[6].

Livello Autenticazione Crittografia Conseguenze
NoAuthNoPriv Username No Utilizza una stringa (Username) per

l'autenticazione

AuthNoPriv Message Digest Algorithm 5 (MD5)

o Secure Hash Algorithm (SHA)

No Effettua l'autenticazione attraverso

Hashed Message Authentication Code (HMAC)-MD5 o

HMAC-SHA algorithms

AuthPriv MD5 or SHA Data Encryption Standard

(DES)

Aggiunge al modello authNoPriv una crittografia DES

56-bit basata sul Cipher Block Chaining (CBC)-DES (DES-56)

RFC relativi ad SNMPv3

[modifica | modifica wikitesto]

Gli RFC relativi ad SNMPv3 sono molteplici. Le specifiche del protocollo sono racchiuse in sequenze di RFC standard, che sono state soggette a modifiche nel corso degli anni. Una prima serie di RFC relativi ad SNMPv3 fu prodotta nel 1998:

Si noti che RFC 2271 rimpiazzò a distanza di pochi giorni il precedente RFC 2261. Una seconda serie di RFC relativi ad SNMPv3 fu prodotta già nel 1999:

Infine, una nuova sequenza di RFC fu prodotta nel 2002:

Il documento sulla coesistenza tra le diverse versioni di SNMP (originariamente RFC 2576) fu aggiornato come RFC 3584 nel 2003. Infine, nel 2009 altri RFC riguardanti SNMPv3 sono stati prodotti dall'IETF:

Implementazioni

[modifica | modifica wikitesto]

Del protocollo SNMP esistono diverse implementazioni sia per il ruolo di manager che per quello di agent.

Librerie SNMP

[modifica | modifica wikitesto]

Svariate implementazioni sono nella forma di libreria di programmazione, concepite per l'uso di SNMP in programmi più complessi. Queste librerie sono disponibili per i più comuni linguaggi di programmazione.

Tool SNMP

[modifica | modifica wikitesto]

Altre implementazioni sono nella forma di tool a riga di comando o con interfaccia grafica.

Una suite di tool open-source è Net-SNMP. Net-SNMP è una collezione di tool usabili a riga di comando sia in ambiente Unix/Linux che in Windows. Essa supporta le versioni v1-v2c-v3 del protocollo SNMP. Di seguito è riportato un semplice esempio di uso del comando snmpget incluso nel package Net-SNMP.

snmpget -v 2c -c public 149.144.21.254 system.sysDescr.0

Il comando permette di recuperare il valore della variabile sysDescr dell'host 149.144.21.254. L'opzione -v specifica la versione del protocollo (in questo caso 2c), mentre l'opzione -c setta la community string per l'accesso al dispositivo (in questo caso public). È importante notare che system e sysDescr sono solo degli alias che permettono di accedere al valore della variabile, infatti ricordiamo che una MIB ha sempre una struttura ad albero e per accedere ad un nodo bisogna specificare il percorso per arrivare ad esso.

Il comando quindi può essere riscritto come segue specificando l'intero percorso utilizzando gli object-ID delle variabili.

snmpget -v 2c -c public 149.144.21.254 1.3.6.1.2.1.1.1.0

Lo zero finale va sempre specificato perché le variabili potrebbero essere dei semplici scalari o delle tabelle (in tal caso andrebbe specificata la riga alla quale si vuole accedere).

Prodotti commerciali

[modifica | modifica wikitesto]

Applicazioni

[modifica | modifica wikitesto]

SNMP monitoring

[modifica | modifica wikitesto]

Uno dei principali impieghi del SNMP è la sensoristica di monitoraggio ovvero la rilevazione continua di parametri relativi ad apparecchiature o servizi mediante sensori sia fisici che virtuali. Tale applicazione è ad esempio utilizzata nel monitoraggio di risorse informatiche.

Note

[modifica | modifica wikitesto]
  1. ^ (EN) RFC 3411 — An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks, su Internet Engineering Task Force.
  2. ^ (EN) RFC 3416 — Version 2 of the Protocol Operations for the Simple Network Management Protocol (SNMP), su Internet Engineering Task Force.
  3. ^ http://www.net130.com/tutorial/other/Internet%20Overview.pdf– Chapter8-Network Management
  4. ^ (EN) RFC 3584 — Coexistence between Version 1, Version 2, and Version 3 of the Internet-standard Network Management Framework, su Internet Engineering Task Force.
  5. ^ (EN) RFC 3414 — User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3), su Internet Engineering Task Force.
  6. ^ https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/snmp/configuration/xe-3se/3850/snmp-xe-3se-3850-book/nm-snmp-snmpv3.pdf - CISCO SNMP Version 3
  7. ^ http://netsnmpj.sourceforge.net/ netsnmpj: Open source SNMP for Java
  8. ^ http://www.snmp4j.org/ SNMP4J - The Object Oriented SNMP API for Java Managers and Agents
  9. ^ http://pysnmp.sourceforge.net/ PySNMP
  10. ^ https://www.nuget.org/packages/Lextm.SharpSnmpLib/ #SNMP Library
  11. ^ https://docs.oracle.com/cd/E19957-01/802-4523/802-4523.pdf SunNet Manager 2.2.3 Reference Manual
  12. ^ https://www.ibm.com/us-en/marketplace/ibm-tivoli-netview-for-zos IBM Tivoli NetView for z/OS

Bibliografia

[modifica | modifica wikitesto]

Request for Comments

[modifica | modifica wikitesto]

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh93003801 · J9U (ENHE987007561043205171
  Portale Telematica: accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e protocolli di rete