Abbiamo già discusso di SNMP (Simple Network Management Protocol) 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 suo crescente elenco di alternative, SNMP non ci sta lasciando ancora. Ci sono varie ragioni per questo che vanno oltre lo scopo di questo articolo. Basti dire che SNMP è ben consolidato e presente in molte reti ancora oggi. Anche il supporto da parte dei fornitori non diminuirà presto, costringendo gli amministratori ad affrontare la configurazione di SNMP prima o poi (o meglio, volenti o nolenti).
Fortunatamente, impostare SNMP su Linux non è un compito arduo. La maggior parte consiste nel configurare SNMP, la parte del demone, e nell'imparare una manciata di comandi, la parte degli strumenti. Nessuna delle due richiede troppo tempo.
TL;DR:
Il tutorial spiega come configurare SNMP su Linux in modo rapido e semplice per monitorare i sistemi Linux.
- SNMP è ancora ampiamente utilizzato ed è supportato dalla maggior parte dei produttori: i team IT non possono ignorarlo.
- La configurazione prevede due passaggi principali:
- Configurare il servizio SNMP (daemon)
- Utilizzare i comandi SNMP essenziali (strumenti)
- Lo sforzo richiesto è minimo: con poche configurazioni e comandi, SNMP funziona in modo affidabile su Linux.
- Gli usi comuni di SNMP in Linux includono il monitoraggio delle prestazioni dei dispositivi di rete, la gestione degli errori tramite avvisi e la gestione della configurazione.
Monitoraggio SNMP su Linux
L'implementazione di riferimento per il monitoraggio SNMP su Linux è il pacchetto net-snmp. Risalente al 1992, net-snmp è disponibile per tutte le principali distribuzioni Linux. Supporta tutte le versioni del protocollo SNMP, con la versione 3 che è quella consigliata. È attivamente sviluppato, con diversi commit ogni mese da molti anni.
Il pacchetto è solitamente composto da due componenti separate: gli strumenti per utilizzare il protocollo e il demone da installare su un host Linux per configurarlo e monitorarlo. Su Ubuntu e altre distribuzioni basate su Debian, gli strumenti sono chiamati snmp e il demone snmpd. Su Red Hat, gli strumenti si trovano nel pacchetto net-snmp-utils e il demone in net-snmp. In altre distribuzioni, entrambi i componenti possono essere nello stesso pacchetto, generalmente chiamato semplicemente net-snmp.
Il demone consente all'host locale di essere monitorato da un host esterno tramite SNMP, mentre gli strumenti fanno il contrario. A seconda delle necessità per il monitoraggio SNMP su Linux, potrebbe essere richiesto di installare entrambi.
In alternativa all'utilizzo di uno strumento CLI, è possibile attivare la prova di Checkmk per monitorare i server Linux con approfondimenti più dettagliati di quelli ottenibili tramite il solo SNMP.
Due parole sulle versioni SNMP
È necessaria una breve digressione sulle diverse versioni del protocollo per configurare SNMP su Linux. La versione originale del protocollo SNMP era la v1, sviluppata negli anni '80. Successivamente è stata sostituita dalla v2 che offriva principalmente maggiori meccanismi di sicurezza e autenticazione. La v2 ha due varianti, v2c e v2u. La v2c offre un modello di sicurezza SNMP basato sulla comunità, community-based, mentre la v2u opera su un modello di sicurezza SNMP basato sull'utente, user-based (come specificato in RFC1910). SNMP v3 espande ulteriormente questo concetto consentendo agli amministratori di creare e gestire utenti con specifiche impostazioni di autenticazione e crittografia.
SNMP v2u non ha mai avuto un grande successo, ma alcune delle sue funzionalità sono state utilizzate per sviluppare la v3. La v2c è molto più comune ed è ciò a cui ci riferiamo effettivamente quando usiamo "v2" in questo articolo.
La v3 è l'ultima versione del protocollo SNMP, la cui principale differenza è l'aggiunto supporto per la crittografia, con i suoi pro e contro.
Che cos'è snmpd?
snmpd su Linux è la parte demone di net-snmp. Quando installato, crea un host SNMP che può accettare richieste da un altro host,rispondere ad esse ed emettere notifiche (TRAPs e INFORMs nel gergo SNMP). Con snmpd, gli amministratori possono raccogliere dati sulle prestazioni e sullo stato del sistema tramite SNMP. Le TRAP SNMP sono notifiche asincrone inviate dall'agente SNMP a una stazione di gestione per avvisare gli amministratori di eventi o condizioni specifici. 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 tramite SNMP viene eseguita con una serie di strumenti nel pacchetto snmp (Ubuntu/Debian) o net-snmp-utils (Red Hat). Questi sono il cuore dell'implementazione SNMP e ciò che un amministratore utilizzerebbe abitualmente per monitorare una rete. Questi strumenti consentono agli amministratori di interrogare, modificare e monitorare vari oggetti MIB definiti all'interno del framework SNMP. Inoltre, questi strumenti possono essere utilizzati per eseguire un poll SNMP per raccogliere informazioni dai dispositivi di rete.
Vediamo come funzionano e a cosa servono.
snmptranslate
snmptranslate esegue una traduzione dell'OID nel corrispondente nome MIB:
# snmptranslate .1.3.6.1.2.1.1.3.0 SNMPv2-MIB::sysUpTime.0
O l’opposto, da un 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. Effettua una semplice richiesta composta da tre elementi:
- dove recuperare le informazioni
- le informazioni amministrative associate alla richiesta
- quali informazioni sono richieste
Ad esempio, una metrica comune recuperata utilizzando gli OID SNMP è l'uptime del sistema, a cui è possibile accedere con l'OID sysUpTime:
# 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
snmpget si basa sulle community string per l'autenticazione ed è essenziale che le community string corrispondano tra il client e l'agente SNMP per il successo del recupero dei dati.
snmpgetnext
L'altra operazione principale del protocollo SNMP per il recupero di informazioni è GETNEXT, implementata dallo strumento snmpgetnext. Questi recupera tipi di informazioni simili a snmpget, ma dal successivo OID. È utile per attraversare 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 aiuto per attraversare una rete, invece di lanciare snmpgetnext per ciascun host SNMP, si può usare snmpwalk per farlo automaticamente.
È possibile utilizzare il seguente comando per eseguire una 'walk' attraverso l'albero SNMP:

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

snmpset
L'operazione SET del protocollo SNMP viene utilizzata per modificare le informazioni di un host SNMP, aggiornarne la configurazione o controllarne il comportamento. Viene implementata nello strumento snmpset. Per utilizzare snmpset, l'agente SNMP deve essere configurato per consentire l'accesso in lettura e scrittura al client richiedente. Gli agenti SNMP possono anche essere configurati per fornire l'accesso di sola lettura, che limita i client alla visualizzazione delle informazioni senza apportare modifiche, per una maggiore sicurezza e una best practice di gestione.
Uno dei tanti possibili esempi è come impostare una stringa casuale da restituire quando 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 host.
$ snmpbulkget -v2c -Cn1 -Cr5 -Os -c public zeus system ifTable
Recupererà la variabile system.sysDescr.0 e i primi 5 oggetti della ifTable.
Per recuperare più variabili con un singolo comando, snmpbulkwalk è uno strumento che ti permette di eseguire tutte le variabili sotto un sistema:
$ snmpbulkwalk -v2c -Os -c public zeus system
snmptrap
Le TRAP sono generalmente inviate dagli agenti SNMP per segnalare condizioni anomale a una stazione di gestione (nel nostro caso, un server Linux). Per generare delle TRAP da soli, è disponibile lo strumento snmptrap. Per v2/v3 la sintassi è:
$ snmptrap -v 2c -c public host "" UCD-NOTIFICATION-TEST-MIB::demoNotif \ SNMPv2-MIB::sysLocation.0 s "Just here"
Quando si inviano trap SNMP, la community SNMP specificata viene utilizzata per autenticare la trap con la stazione di gestione ricevente.
Sostituire 2c con v3 quando si comunica con un agente SNMP v3.
Installazione del demone e delle utilità SNMP
Per iniziare con SNMP sul tuo sistema Linux, devi prima installare il pacchetto Net-SNMP, che fornisce l'essenziale demone e le utilità SNMP. L'installazione dei pacchetti SNMP richiede i privilegi sudo per assicurarsi di avere le autorizzazioni necessarie per modificare i file di sistema. Sulle distribuzioni basate su Debian come Ubuntu, puoi installare il demone e le utilità SNMP usando il seguente comando:
sudo apt-get install snmpd snmp
Se stai utilizzando una distribuzione basata su Red Hat come CentOS, usa invece il seguente comando:
sudo yum install net-snmp net-snmp-utils
Dopo l'installazione, avrai tutti i componenti necessari per configurare SNMP, monitorare il tuo host Linux e rispondere alle richieste SNMP. Il completamento di questi passaggi di installazione e configurazione abiliterà SNMP sul tuo sistema Linux. I pacchetti snmp sono ampiamente supportati e regolarmente aggiornati, rendendoli una scelta affidabile per abilitare SNMP sui tuoi dispositivi Linux.
Come configurare SNMP su Linux
Abbiamo visto cosa è disponibile in net-snmp per utilizzare SNMP per monitorare i server Linux. Ora dobbiamo dare un'occhiata a come configurare SNMP su Linux.
Il file di configurazione del demone SNMP risiede solitamente in /etc/snmp/snmpd.conf per le versioni v1 e v2 del protocollo SNMP. Se la v3 verrà utilizzata, come raccomandato, una 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 arrestato prima di modificare il file.
Entrambi i file sono ampiamente commentati per facilitare la configurazione di SNMP su Linux. Per abilitare l'accesso SNMP, è necessario aggiungere linee di configurazione specifiche al file /etc/snmp/snmpd.conf, per definire le impostazioni di sicurezza, le community string e i permessi di accesso. Ad esempio, per impostare la posizione del sistema e controllare l'accesso, è possibile aggiungere le seguenti righe:
syslocation "Data Center Rack 3" # system location
rocommunity public # read-only community string
Per impostazione predefinita, SNMP consente solo connessioni dal computer o da macchina locale. Per consentire connessioni provenienti da dispositivi remoti, è necessario modificare la riga di configurazione nel file di configurazione del demone per consentire l'accesso esterno.
Una volta che il demone SNMP è configurato correttamente, il servizio snmpd sarà in grado di rispondere alle richieste SNMP come previsto. Esistono comandi per semplificare la configurazione di SNMP su Linux per facilitare il lavoro degli amministratori di rete e di sistema.
Prima di iniziare a configurare SNMP su Linux, assicurati di avere il firewall configurato per consentire il traffico SNMP. snmpd utilizza per impostazione predefinita la porta UDP 161. Con iptables, aprila 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
Con firewalld, il comando è:
$ firewall-cmd --permanent --add-port=161/udp
Questo serve per eseguire snmpd su un host e consentire che venga interrogato. Se si desidera solo monitorare un host esterno, è sufficiente assicurarsi che l'host sia raggiungibile.
Configurare SNMP su Linux (v1 e v2)
Le prime due versioni del protocollo forniscono una semplice autenticazione utilizzando una community string. È un segreto condiviso che viene passato in chiaro o hashing sulla rete, in modo chiaramente non sicuro. Questa stringa deve essere impostata prima di comunicare tra host e dispositivi SNMP.
La direttiva rocommunity o rwcommunity nel file snmpd.conf dichiara questa stringa:
community [source [OID]]
Mentre community è la stringa utilizzata, source è un indirizzo IP o una subnet, e OID è un albero SNMP a cui fornire accesso. Questo è praticamente tutto ciò che è necessario per comunicare tramite SNMP tra gli host.
Si consiglia di aggiungere una posizione e le informazioni di contatto al file snmpd.conf al fine di informare gli altri nodi della rete su dove si trova questo host SNMP e chi ne è responsabile.
syslocation Somewhere (In the World) syscontact Admin <admin@somewhere.com>
Riavvia il demone snmpd con
systemctl restart snmpd
e l'host SNMP Linux è pronto a rispondere alle richieste SNMP.
Configurare SNMP su Linux (v3)
Configurare snmpd su Linux con l'ultima versione del protocollo è leggermente più complesso rispetto alle precedenti. Per iniziare, i file di configurazione sono ora due: non solo /etc/snmp/snmpd.conf, ma anche /var/lib/net-snmp/snmpd.conf. Fortunatamente, il pacchetto net-snmp include un comando di aiuto, net-snmp-create-v3-user, per configurare l'utente con cui verrà eseguito il server SNMP Linux.
Assicurati di interrompere il demone e di creare l'utente SNMP con il seguente esempio:
$ 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 alla community di cui sopra:
user [noauth|auth|priv] [OID]
user è un nome utente e OID è l'albero a cui fornire 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. La nostra opzione raccomandata per la massima sicurezza è authpriv che specifica che le richieste devono essere autenticate e le risposte crittografate.
Per migliorare il livello di sicurezza predefinito non così elevato di snmpd, è possibile aggiungere alcune opzioni a net-snmp-create-v3-user:
-a SHA: utilizza l'algoritmo di hashing SHA più moderno invece di MD5.-x AES: utilizza la crittografia AES invece della deprecata DES.
Entrambe le opzioni dovrebbero essere impostate poiché cambiano i passaggi di comunicazione e autenticazione su protocolli più sicuri. Sfortunatamente, nessuno dei due è all'altezza degli standard moderni e SNMP non è una scelta per un'organizzazione moderna che desidera monitorare host e dispositivi in un ambiente sicuro, privato ed efficiente.
Risoluzione dei problemi di configurazione SNMP
Se riscontri problemi con la tua configurazione SNMP, ci sono diversi passaggi che puoi eseguire per diagnosticare e risolvere i problemi comuni:
1. Controlla lo stato del servizio SNMP per assicurarti che sia in esecuzione correttamente:
sudo systemctl status snmpd
2. Rivedi il tuo file di configurazione /etc/snmp/snmpd.conf per errori di sintassi o direttive mancanti. Anche un piccolo errore di battitura può impedire al demone SNMP di avviarsi o rispondere alle richieste.
3. Testa la connettività SNMP usando il comando snmpwalk. Questo comando aiuta a verificare che il tuo servizio SNMP sia accessibile e risponda come previsto:
snmpwalk -v 2c -c mycommunitystring 127.0.0.1
Sostituisci mycommunitystring con la tua community string effettiva.
4. Controlla i log di sistema per eventuali messaggi di errore relativi al servizio SNMP. Questo può fornire indizi preziosi se il demone SNMP non riesce ad avviarsi o incontra problemi:
sudo journalctl -u snmpd
Controllando sistematicamente lo stato del servizio SNMP, il file di configurazione, la connettività e i log, è possibile identificare e risolvere rapidamente la maggior parte dei problemi di configurazione SNMP sul tuo host Linux.
Best practice per la configurazione di SNMP
Per mantenere una configurazione SNMP sicura ed efficiente sui tuoi server Linux, considera le seguenti best practice:
- Utilizza sempre una community string forte e univoca e limita l'accesso SNMP agli host attendibili o a specifici indirizzi IP per minimizzare l'accesso non autorizzato.
- Una porta SNMP non standard, come la 1161 invece della predefinita 161, può aiutare a ridurre le semplici scansioni automatizzate. Tuttavia, dovrebbe essere considerata solo come una misura aggiuntiva. Le restrizioni di accesso, le regole del firewall e SNMPv3 rimangono i principali controlli di sicurezza.
- Quando possibile, usa la versione 3 di SNMP, che offre funzionalità di sicurezza avanzate come l'autenticazione dell'utente e la crittografia, proteggendo i tuoi dati SNMP da intercettazioni e manomissioni. Tuttavia, le dimensioni maggiori dei pacchetti e l'overhead possono causare problemi di prestazioni su reti molto trafficate o di grandi dimensioni.
- Limita l'accesso SNMP solo alle parti necessarie dell'albero OID, riducendo la quantità di informazioni di sistema esposte e minimizzando la superficie di attacco.
- Mantieni aggiornato il tuo pacchetto
net-snmp(o alternativa per la tua distribuzione Linux) per beneficiare delle ultime patch di sicurezza e miglioramenti. - Monitora regolarmente il traffico SNMP e rivedi i log per attività insolite o richieste SNMP non autorizzate, aiutandoti a rilevare e rispondere a potenziali minacce alla sicurezza.
- Usa una soluzione di monitoraggio centralizzata per gestire e monitorare in modo efficiente più dispositivi abilitati per SNMP, garantendo una configurazione e una supervisione SNMP coerenti su tutta la tua rete.
- Rivedi e comprendi la configurazione snmpd predefinita, specialmente quando lavori con più VRF o contesti di rete, per assicurarti che SNMP operi correttamente sia negli scenari VRF predefiniti che in quelli specifici.
Seguendo queste best practice, puoi configurare SNMP sui tuoi host Linux in modo da bilanciare funzionalità e sicurezza, garantendo un monitoraggio affidabile e proteggendo i tuoi sistemi dalle comuni vulnerabilità relative a SNMP.
Configurare SNMP su Linux non è difficile... ma ne vale la pena?
Configurare SNMP non è di per sé un'operazione complessa, eppure rappresenta un ulteriore elemento da gestire (nel caso di snmpd) o da padroneggiare (per quanto riguarda gli strumenti di net-snmp). Resta però un dubbio fondamentale: chi controlla il controllore? Questo è un potenziale punto di vulnerabilità che andrebbe evitato, specialmente sui dispositivi proprietari e considerando che stiamo parlando di un protocollo destinato a diventare presto obsoleto.
Con molte alternative e i principali fornitori che si stanno allontanando da SNMP, sembra inutile affrontare la seccatura di configurarlo insieme agli strumenti di monitoraggio moderni. Non ne consigliamo assolutamente l'uso quando può essere evitato.
Tuttavia, spesso non si tratta di una scelta: tra infrastrutture legacy e host che supportano esclusivamente SNMP, il suo utilizzo è spesso inevitabile. È un protocollo destinato a restare con noi ancora per un po' ma, fortunatamente, configurarlo su un host Linux è tutt'altro che complicato.
SNMP ha molto materiale didattico per aiutare l'amministratore inesperto a iniziare a configurare un host SNMP Linux. Incluso questo articolo.