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:
- dove recuperare le informazioni
- le informazioni amministrative associate alla richiesta
- 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:

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

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.