Abbiamo già parlato di SNMP e di come non sia la scelta giusta nella maggior parte dei casi d'uso. Nonostante i problemi, la mancanza di miglioramenti delle prestazioni del protocollo e il crescente elenco di alternative, SNMP non ci lascia ancora. Le ragioni sono varie e vanno oltre lo scopo di questo articolo. È sufficiente dire che SNMP è ben consolidato e presente in molte reti ancora oggi. Anche il supporto da parte dei fornitori non è destinato a diminuire presto, costringendo gli amministratori ad affrontare la configurazione di SNMP prima o poi (o meglio, volenti o nolenti).

Fortunatamente, la configurazione di SNMP su Linux non è un compito gravoso.  Consiste principalmente nella configurazione di SNMP, parte relativa al demone, e nell'apprendimento di una manciata di comandi, parte relativa agli strumenti. Nessuna delle due cose richiede molto tempo.

Monitoraggio SNMP su Linux

L'implementazione di riferimento per il monitoraggio SNMP su Linux è il pacchetto net-snmp. Risale al 1992, net-snmp è disponibile per tutte le principali distribuzioni Linux. Supporta tutte le versioni del protocollo SNMP, di cui la versione 3 è quella raccomandata. È sviluppato attivamente, con più commit al mese da molti anni.

Il pacchetto è solitamente composto da due componenti separati: gli strumenti per utilizzare il protocollo e il demone per installarlo su un host Linux e per configurarlo e monitorarlo. Su Ubuntu e altre distribuzioni basate su Debian, gli strumenti si chiamano snmp e il demone snmpd. Su Red Hat, gli strumenti sono contenuti nel pacchetto net-snmp-utils e il demone in net-snmp. In altre distribuzioni, entrambi i componenti possono trovarsi nello stesso pacchetto, in genere semplicemente in . net-snmp.

Il demone consente all'host locale di essere monitorato da un host esterno tramite SNMP, mentre gli strumenti fanno l'inverso. A seconda delle necessità di monitoraggio SNMP su Linux, potrebbe essere necessario installare entrambi.

In alternativa all'uso di uno strumento CLI, potete provare Checkmk Trial per monitorare i vostri server Linux con approfondimenti più ampi di quelli ottenibili con il solo SNMP.

Una parola sulle versioni di SNMP

Per configurare SNMP su Linux è necessaria una breve digressione sulle diverse versioni del protocollo. La versione originale del protocollo SNMP era la v1, sviluppata negli anni Ottanta. La v2 ha due versioni, v2c e v2u. La v2c offre un modello di sicurezza basato sulla comunità, mentre la v2u opera su un modello basato sull'utente (come specificato in RFC1910).

SNMP v2u non è mai decollato, ma parte delle sue caratteristiche sono state utilizzate per sviluppare la v3. La v2c è molto più comune ed è quella a cui ci riferiamo quando usiamo "v2" in questo articolo.

La v3 è l'ultima versione del protocollo SNMP, la cui differenza principale è l'aggiunta del supporto alla crittografia, con i suoi pro e contro.

Che cos'è snmpd?

snmpd su Linux è la parte del demone net-snmp. Una volta installato, crea un host SNMP in grado di accettare richieste da un altro host e di rispondere ad esse, di emettere notifiche (TRAP e INFORM nel linguaggio SNMP) e di eseguire alcune attività di auto-monitoraggio. Il protocollo SNMP consente la configurazione di base degli host e snmpd è necessario per sfruttare queste capacità.

Quali sono gli strumenti per il monitoraggio SNMP su Linux?

Essendo snmpd è il demone, la maggior parte delle operazioni attraverso SNMP sono eseguite con una serie di strumenti nel file snmp (Ubuntu/Debian) o net-snmp-utils (Red Hat). Questi sono il cuore dell'implementazione SNMP e ciò che un amministratore usa abitualmente per monitorare una rete.

Vediamo come funzionano e a cosa servono.

snmptranslate

snmptranslate esegue la traduzione dell'OID nel nome del MIB corrispondente:

 # snmptranslate .1.3.6.1.2.1.1.3.0
 SNMPv2-MIB::sysUpTime.0

Oppure il contrario, da una MIB per avere l'OID numerico:

 # snmptranslate **-On** SNMPv2-MIB::sysUpTime.0
 .1.3.6.1.2.1.1.3.0

snmpget

snmpget recupera dati da un host SNMP. Fa una semplice richiesta che consiste in tre elementi:

  1. dove recuperare le informazioni
  2. le informazioni amministrative associate alla richiesta
  3. quali informazioni sono richieste:

# snmpget -v 2c -c demopublic test.net-snmp.org SNMPv2-MIB::sysUpTime.0 SNMPv2-MIB::sysUpTime.0 = Timeticks: (586731977) 67 days, 21:48:39.77

snmpgetnext

L'altra operazione principale del protocollo SNMP per recuperare informazioni è GETNEXT, implementata dallo strumento snmpgetnext. Recupera tipi di informazioni simili a snmpget ma dall'OID successivo. È utile per passare attraverso una serie di host SNMP e ottenere progressivamente informazioni da ciascun dispositivo. La sua sintassi è identica a snmpget:

# snmpgetnext -v 2c -c demopublic test.net-snmp.org sysUpTime
SNMPv2-MIB::sysUpTime.0 = Timeticks: (586978184) 67 days, 22:29:41.84

snmpwalk

Come ausilio per la navigazione in rete, invece di lanciare il comando snmpgetnext per ogni host SNMP, snmpwalk può essere usato per farlo automaticamente:

Esempio di comando Snmpwalk

snmptable

snmptable restituisce il contenuto di una tabella SNMP, visualizzandola una riga alla volta:

Esempio di comando snmptable

snmpset

L'operazione SET del protocollo SNMP è utilizzata per modificare le informazioni di un host SNMP, aggiornarne la configurazione o controllarne il comportamento. È implementata nello strumento snmpset.

Uno dei tanti esempi possibili è quello di impostare una stringa casuale da restituire quando viene interrogata:

$ snmpset -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0 s "hi there!"

$ snmpget -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0
UCD-DEMO-MIB::ucdDemoPublicString.0 = "hi there!"

snmpbulkget

L'operazione GETBULK, disponibile da SNMP v2 in poi, è implementata nello strumento snmpbulkget. Viene utilizzata per interrogare una rete di host SNMP piuttosto che uno singolo.

$ snmpbulkget -v2c -Cn1 -Cr5 -Os -c public zeus system ifTable

Recupera la variabile system.sysDescr.0 e i primi 5 oggetti del file ifTable.

Per recuperare più variabili con un solo comando, snmpbulkwalk è uno strumento che consente di eseguire tutte le variabili di un sistema:

$ snmpbulkwalk -v2c -Os -c public zeus system

snmptrap

I TRAP sono generalmente inviati dagli agenti SNMP per segnalare condizioni anomale a una stazione di gestione (nel nostro caso, un server Linux). Per generare da soli i TRAP, è disponibile lo strumento snmptrap è disponibile. Per v2/v3 la sintassi è:

$ snmptrap -v 2c -c public host "" UCD-NOTIFICATION-TEST-MIB::demoNotif \
   SNMPv2-MIB::sysLocation.0 s "Just here"

Sostituite 2c con v3 quando si comunica con un agente SNMP v3.

Come configurare SNMP su Linux

Abbiamo visto cosa è disponibile in net-snmp per utilizzare SNMP per il monitoraggio dei server Linux. Ora dobbiamo vedere come configurare SNMP su Linux.

snmpd La configurazione di solito risiede in /etc/snmp/snmpd.conf per v1 e v2 del protocollo SNMP. Se si utilizza la v3, come raccomandato, la configurazione aggiuntiva si trova in /var/lib/net-snmp/snmpd.conf. Questo file non salva le modifiche mentre il demone è in esecuzione, quindi il demone deve essere fermato prima di modificare il file.

Entrambi i file sono pesantemente commentati per facilitare la configurazione di SNMP su Linux. snmpd.conf ha una grande quantità di opzioni e non è facile da configurare, né su Linux né altrove. Tuttavia, per la maggior parte delle necessità, sono sufficienti poche modifiche per farlo funzionare. I comandi per semplificare la configurazione di SNMP su Linux esistono per facilitare il lavoro degli amministratori di rete e di sistema.

Prima di iniziare a configurare SNMP su Linux, aprite la sua porta sul firewall. snmpd Per impostazione predefinita utilizza la porta UDP 161. Con iptables, aprirla con:

$ iptables -A INPUT -s <ip addr> -p udp -m udp --dport 161 -j ACCEPT
$ iptables -A OUTPUT -p udp -m udp --sport 161 -j ACCEPT

Per firewalld, il comando è:

$ firewall-cmd --permanent --add-port=161/udp

Questo è per l'esecuzione snmpd su un host e consentirne l'interrogazione. Se si vuole monitorare solo un host esterno, è sufficiente assicurarsi che l'host sia raggiungibile.

Configurare SNMP su Linux (v1 e v2)

Le prime due versioni del protocollo prevedono una semplice autenticazione tramite community string. Si tratta di un segreto condiviso che viene passato in chiaro o in hash attraverso la rete, in modo palesemente non sicuro. Questa stringa deve essere impostata prima di comunicare tra host e dispositivi SNMP.

La direttiva rocommunity o rwcommunity nel file snmpd.conf dichiarano questa stringa:

community [source [OID]]

Mentre community è la stringa utilizzata, source è un indirizzo IP o una sottorete e OID è un albero SNMP a cui fornire l'accesso. Questo è fondamentalmente tutto ciò che serve per comunicare attraverso SNMP tra gli host.

Si consiglia di aggiungere una posizione e informazioni di contatto al file snmpd.conf per informare gli altri nodi della rete su dove si trova l'host SNMP e chi ne è responsabile. Aggiungere un paio di righe dopo community:

syslocation Somewhere (In the World)
syscontact Admin <admin@somewhere.com>

Riavviate il demone snmpd con systemctl restart snmpd e l'host SNMP Linux è pronto a rispondere alle richieste SNMP.

Configurare SNMP su Linux (v3)

La configurazione snmpd su Linux con l'ultima versione del protocollo è leggermente più complessa rispetto a quelle precedenti. Tanto per cominciare, i file di configurazione sono ora due: non più solo/etc/snmp/snmpd.conf ma anche /var/lib/net-snmp/snmpd.conf. Fortunatamente, il pacchetto net-snmp è dotato di un comando di aiuto, net-snmp-create-v3-user per configurare l'utente sotto il quale verrà eseguito il server SNMP Linux.

Assicuratevi di fermare il demone e di creare l'utente SNMP con:

$ net-snmp-create-v3-user
Enter a SNMPv3 user name to create:
admin
Enter authentication pass-phrase:
yourpassphraseofchoice
Enter encryption pass-phrase:
  [press return to reuse the authentication pass-phrase]

  adding the following line to /var/lib/net-snmp/snmpd.conf:
     createUser admin MD5 "yourpassphraseofchoice" DES
  adding the following line to /etc/snmp/snmpd.conf:
     rwuser admin 

La direttiva finale rwuser ha un formato simile a quello della comunità di cui sopra:

  user [noauth|auth|priv] [OID]

user è un nome utente e OID è l'albero a cui fornire l'accesso. Per impostazione predefinita, nella v3 il demone snmpd consente solo richieste autenticate(auth), mentre noauth consente qualsiasi richiesta e l'opzione priv impone la crittografia. Le stringhe possono essere combinate. L'opzione consigliata per la massima sicurezza è authpriv, che specifica che le richieste devono essere autenticate e le risposte criptate.

Per migliorare il non elevato livello di sicurezza predefinito di snmpd, si possono aggiungere alcune opzioni all'opzione net-snmp-create-v3-user. Possono essere aggiunte:

  • -a SHA: utilizza il più moderno algoritmo di hashing SHA invece di MD5.
  • -x AES: utilizza la crittografia AES invece della deprecata DES.

Entrambe le opzioni dovrebbero essere impostate in quanto passano le fasi di comunicazione e autenticazione a protocolli più sicuri. Sfortunatamente, nessuno dei due è all'altezza degli standard moderni e SNMP non dovrebbe essere una scelta per un'organizzazione moderna che voglia monitorare host e dispositivi in un ambiente sicuro, privato ed efficiente.

Configurare SNMP su Linux non è difficile... ma ne vale la pena?

La configurazione di SNMP non è certo tra le più complesse. Tuttavia, rappresenta comunque un altro componente software da gestire, nel caso di snmpd, o da padroneggiare, nel caso dei vari strumenti inclusi in net-snmp.

E chi controlla il controllore? Soprattutto quando è installato su dispositivi forniti da un vendor. Si tratta di un ulteriore rischio di fallimento che può essere evitato — specialmente quando si ha a che fare con un protocollo che con ogni probabilità sarà presto completamente obsoleto.

Con numerose alternative disponibili e i principali vendor che si stanno allontanando da SNMP, sembra inutile complicarsi la vita configurandolo insieme a strumenti di monitoraggio moderni. Sconsigliamo decisamente il suo utilizzo, quando può essere evitato.

Ma spesso non è una decisione che possiamo prendere: che sia per l’infrastruttura già esistente o perché alcuni host supportano esclusivamente SNMP, a volte siamo costretti a usarlo. Per ancora un po’, sarà sicuramente con noi. E, fortunatamente, dal punto di vista di un host Linux, configurarlo non è affatto complicato.

SNMP dispone di moltissimo materiale formativo utile per aiutare l’amministratore inesperto a iniziare a configurare un host Linux con SNMP. Incluso questo articolo.