Monitorare i dispositivi di rete mediante SNMP e Nagios

Una delle necessità principali del sistemista di rete riguarda solitamente il monitoraggio dei vari dispositivi che costituiscono il network di cui è amministratore. Per esempio, potrebbe essere necessario avere informazioni sulla raggiungibilità dei dispositivi (attraverso un semplice ping), oppure sul traffico che interessa le varie interfacce di rete (sia in ingresso che in uscita), piuttosto che sul loro stato di funzionamento.

Per fare ciò, occorre utilizzare un protocollo sviluppato ad hoc, ovvero SNMP (Simple Network Management Protocol), che può essere configurato in due modalità: poll e trap. Nel primo caso è il sistemista, attraverso degli opportuni client di monitoraggio, a domandare periodicamente ed in modo semiautomatizzato qual è lo stato dei vari servizi presenti sugli host o sui dispositivi di rete. Nel secondo caso, poichè per il client di monitoraggio potrebbe essere oneroso effettuare troppe query, sono i dispositivi di rete stessi a generare degli alert nel caso in cui si verifichi un problema di raggiungibilità relativo ad un determinato servizio. Tali alert verranno recapitati al client, il quale li mostrerà, se cosi si può dire, al sistemista.

Ora, premesso che in questa breve guida utilizzeremo il protocollo SNMP in modalità poll, vediamo quali sono i dispositivi di rete che vogliamo monitorare, e quale client di monitoraggio utilizzare.

In particolare, i dispositivi di rete su cui concentreremo la nostra attenzione sono un home router, per la precisione un Cisco soho 77, ed un firewall (Cisco PIX 501). Il client di monitoraggio, invece, sarà nagios3.

SNMP su PIX 501

Per prima cosa abilitamo il protocollo SNMP sul firewall. Per fare ciò è necessario seguire i questi step:

PIX501> ena

PIX501# conf t

PIX501(config)# snmp-server host <IP del client di monitoraggio> poll

In questo modo, abbiamo istruito il PIX su quale dovrà essere l’IP sorgente da cui potranno provenire le query SNMP. Le query provenienti da altri IP saranno ovviamente ignorate.

Adesso diciamo al PIX qual è la community string (ovvero una sorta di password) che verrà utilizzata:

PIX501(config)# snmp-server community <community string>

Salviamo adesso la configurazione con un write mem:

PIX501(config)# write mem

Bene, verifichiamo adesso che il protocollo SNMP sia stato abilitato correttamente sul nostro PIX, lanciando una query direttamente dalla linux box che utilizzeremo come stazione di monitoraggio:

nightfly@nightbox:~$ snmpwalk -v 1 -c <community string> <IP dell'interfaccia inside del PIX>

Se riceveremo una risposta del tipo:

IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2

<output omesso>

vuol dire che la query ha restituito dei risultati e che quindi il protocollo è funzionante.

Alcune precisazioni

Come avrete notato dalla query eseguita mediante il comando snmpwalk, la versione del protocollo SNMP abilitata sul PIX è la 1. Tale versione, come la 2, è estremamente vulnerabile in quanto consente la propagazione della community string in chiaro. Converrete con me che tale scelta risulta piuttosto insensata, in quanto il firewall dovrebbe essere la security appliance per antonomasia. L’unica attenuante che mi sento di concedere è che il PIX 501 resta comunque un dispositivo piuttosto datato, il cui sistema operativo integrato (Finesse) non viene più sviluppato da tempo.

Un’altra precisazione riguarda proprio l’uso del comando snmpwalk. Nella fattispecie, mediante tale comando è possibile scorrere l’intero SMI alla ricerca dell’OID che ci interessa. Nel caso in cui, invece, conoscessimo l’OID specifico, si potrebbe utilizzare il comando snmpget, con la seguente sintassi:

nightfly@nightbox:~$ snmpget -v 1 -c <community string> <IP dell'interfaccia inside del PIX> <OID>

A proposito, se non sapete cos’è lo SMI e cosa si intende per OID e MIB date un’occhiata a questo post.

Infine, se come stazione di monitoraggio non avete a disposizione una linux box ma una macchina Windows, potete scaricare il tool Getif (direttamente da qui, è gratuito), il quale vi consentirà di eseguire le query SNMP in modo semplice ed efficace.

SNMP su SOHO 77

Dopo aver abilitato il protocollo SNMP sul firewall, abilitiamolo anche sul router. Per fare ciò occorre digitare i comandi:

soho77> ena

soho77# conf t

soho77(config)# snmp-server enable informs

soho77(config)# snmp-server community <community string>

Salviamo adesso la configurazione:

soho77(config)# end

soho77# copy run start

Effettuiamo la solita query mediante snmpwalk e se otteniamo risposta significa che anche sul router il protocollo in questione è stato abilitato in modo corretto:

nightfly@nightbox:~$ snmpwalk -v 2c -c <community string> <IP del router>

Come avrete già sicuramente notato dal comando precedente, sul router è abilitato il protocollo SNMP versione 2.

Configurazione della stazione di monitoraggio

Dopo aver abilitato il protocollo SNMP sui dispositivi che vogliamo monitorare, vediamo adesso come configurare al meglio la nostra stazione di monitoraggio. In questa guida partirò dal presupposto che tale stazione sarà una macchina linux, su cui verrà installato un apposito client, ovvero nagios3.

Procediamo quindi con l’installazione di tale applicativo:

nightfly@nightbox:~$ sudo apt-get install nagios3

Ad installazione completata spostiamoci nella seguente directory:

nightfly@nightbox:~$ cd /etc/nagios3/conf.d

qui sono presenti i file di configurazione dei vari host. Apriamo in lettura uno dei file di configurazione che vengono generati automaticamente dopo l’installazione di nagios, ad esempio localhost_nagios2.cfg:

nightfly@nightbox:/etc/nagios3/conf.d$ cat localhost_nagios2.cfg

l’output sarà simile al seguente:

define host {
use                     generic-host            ; Name of host template to use
host_name       localhost
alias                   localhost
address             127.0.0.1
}

define service {
use                                  generic-service         ; Name of service template to use
host_name                    localhost
service_description     Disk Space
check_command          check_all_disks!20%!10%
}

Mediante la direttiva define host viene definito l’host template, l’hostname, l’alias e l’indirizzo IP del dispositivo da monitorare.

Invece, mediante la direttiva define service, viene definito il servizio da monitorare per il suddetto host.

Ma come funzionano effettivamente i servizi? Bene, qui la spiegazione diventa inevitabilmente un po’ più impegnativa. Per prima cosa occorre precisare che nagios prevede la presenza di alcuni eseguibili presenti all’interno della direcotory /usr/lib/nagios/plugins. Tali eseguibili verranno utilizzati nell’ambito di alcuni comandi creati appositamente. In particolare, una lista di tali comandi è presente all’interno della directory /etc/nagios-plugins/config, il cui contenuto è simile al seguente:

apt.cfg     disk.cfg      dummy.cfg   hppjd.cfg     ldap.cfg  mrtg.cfg     news.cfg  pgsql.cfg  radius.cfg   snmp.cfg     telnet.cfg
breeze.cfg  disk-smb.cfg  flexlm.cfg  http.cfg      load.cfg  mysql.cfg    nt.cfg    ping.cfg   real.cfg     ssh.cfg      users.cfg
dhcp.cfg    dns.cfg       ftp.cfg     ifstatus.cfg  mail.cfg  netware.cfg  ntp.cfg   procs.cfg  rpc-nfs.cfg  tcp_udp.cfg

Come è possibile notare, quindi, esistono diversi comandi raccolti all’interno di opportuni file di configurazione. Più precisamente, tali comandi vengono suddivisi a seconda del protocollo o dell’applicativo che intendono monitorare. Osserviamo adesso uno stralcio del contenuto di un qualsiasi file di configurazione menzionato in precedenza, ad esempio snmp.cfg:

# 'check_compaq_thermalCondition' command definition
define command {
command_name    check_compaq_thermalCondition
command_line     /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o .1.3.6.1.4.1.232.6.2.1.0,.1.3.6.1.4.1.232.6.2.2.0,.1.3.6.1.4.1.232.6.2.3.0,.1.3.6.1.4.1.232.6.2.4.0 -u 'ThermalCondition','ThermalTemp','ThermalSystem','ThermalCPUFan' -w 2:2,2:2,2:2,2:2 -c 1:2,1:2,1:2,1:2 -l "Thermal status "
}

In questo caso, mediante l’eseguibile check_snmp, vengono monitorate le condizioni termiche dell’host specificato all’interno della variabile ‘$HOSTADDRESS$’, il cui contenuto è presente proprio nella definizione dell’host contenuta in un file posizionato in /etc/nagios3/conf.d$

La variabile ‘$ARG1$’, invece, serve a specificare la community string da utilizzare. Infine, la flag -o specifica gli OID da usare per ottenere dal sistema interrogato le informazioni desiderate.

Configurare nagios per monitorare il PIX 501

Ora che sappiamo come funzionano i comandi, possiamo crearne uno ad hoc per monitorare lo stato delle interfacce inside ed outside del nostro PIX.

Apriamo in scrittura il file snmp.cfg ed inseriamo la seguente direttiva:

# 'snmp_if' command definition
define command {
command_name    snmp_if
command_line    /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o '$ARG2$' -r '$ARG3$'
}

Salviamo il file, posizioniamoci all’interno della directory /etc/nagios3/conf.d e creiamo il file hots-pix501_nagios3.cfg:

nightfly@nightbox:/etc/nagios3/conf.d$ sudo touch hots-pix501_nagios3.cfg

A questo punto inseriamo all’interno del file in questione le informazioni relative al PIX:

 define host {
 host_name   PIX501
 alias       PIX501 Inside
 address     <ip del PIX>
 use         generic-host
 }

e definiamo, inoltre, i servizi da monitorare per questo host:

 define service {
 use                             generic-service         ; Name of service template to use
 host_name                       PIX501
 service_description             Status Interface Outside
 check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.8.1!1
 }

Come potete notare, gli argomenti richiesti nell’ambito della definizione del comando snmp_if vengono riconosciuti grazie al prefisso ! e dati in pasto al comando stesso proprio mediante la configurazione del servizio.

Ovviamente, l’OID che indica lo stato dell’interfaccia outside del PIX è .1.3.6.1.2.1.2.2.1.8.1

Allo stesso modo, possiamo monitorare lo stato dell’interfaccia inside del PIX:

define service {
use                             generic-service         ; Name of service template to use
host_name                       gateway
service_description             Status Interface Inside
check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.8.2!1
}

Con

figurare nagios per monitorare il SOHO 77

Per il router il discorso di fa un po’ più complesso. In questo caso, oltre a voler monitorare lo stato dell’interfaccia ethernet0 e della dialer0, vogliamo anche monitorare il traffico in ingresso ed in uscita per entrambe le interfacce citate in precedenza. Creiamo dunque il file host-soho77_nagios3.cfg:

nightfly@nightbox:/etc/nagios3/conf.d$ sudo touch hots-soho77_nagios3.cfg

apriamolo in scrittura ed aggiungiamo le seguenti direttive:

define host {
host_name   soho77
alias        router soho77
address     <ip del router>
use         generic-host
}

define service{
use                             generic-service         ; Name of service template to use
host_name                       soho77
service_description             Status Interface eth0
check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.8.2!1
}

define service {
use                             generic-service         ; Name of service template to use
host_name                       soho77
service_description             Status Interface dia0
check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.8.8!1
}

define service {
use                             generic-service         ; Name of service template to use
host_name                       soho77
service_description             Traffic Inbound Interface eth0                 check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.10.2!1

}

define service {
use                             generic-service         ; Name of service template to use
host_name                       soho77
service_description             Traffic Inbound Interface dia0
check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.10.8!1
}

define service {
use                             generic-service         ; Name of service template to use
host_name                       soho77
service_description             Traffic Outbound Interface eth0
check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.16.2!1
}

define service {
use                             generic-service         ; Name of service template to use
host_name                       soho77
service_description             Traffic Outbound Interface dia0
check_command                   snmp_if!vostracommunitystring!.1.3.6.1.2.1.2.2.1.16.8!1
}

salviamo il file e riavviamo dunque nagios digitando:

nightfly@nightbox:~$ sudo service nagios3 restart

ed infine diamo un’occhiata allo status dei vari dispositivi direttamente dall’interfaccia Web messa a nostra disposizione da nagios3:

http://ipstazionedimonitoraggio/nagios3

A questo punto verranno richieste le credenziali di accesso alla pagina (lo username di default è nagiosadmin)

Cliccando infine su host details o su service detail sarà possibile constatare l’effettiva raggiungibilità dei vari dispositivi e lo stato dei servizi attivi.

Spero di essere stato chiaro, per ulteriori chiarimenti contattatemi.

PS: potete fare in modo che nagios3 vi invii una mail per notificare l’eventuale irraggiungibilità di un dispositivo oppure per segnalare qualche problema riscontrato su uno dei servizi attivi nella rete. Per fare ciò è necessario editare il file contacts_nagios2.cfg presente nella directory /etc/nagios3/conf.d:

nightfly@nightbox:/etc/nagios3/conf.d$ sudo nano contacts_nagios2.cfg

Vi basterà modificare quindi il campo email presente in contact:

define contact {
        contact_name                    root
        alias                           Root
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           vostroindirizzoemail       

}

Riavviate nagios3 ed il gioco è fatto.

Monitorare i dispositivi di rete mediante SNMP e Nagiosultima modifica: 2011-02-14T17:28:59+01:00da nazarenolatella
Reposta per primo quest’articolo