Archivi tag: mib

Configurazione del demone snmpd su CentOS 6

Utilizzare il protocollo SNMP per il monitoraggio dei dispositivi di rete è sempre una buona scelta, tenendo bene a mente, però, che le versioni 1 e 2 non prevedono cifratura della community string e quindi sono vulnerabili ad eventiali attacchi MITM. Inoltre, in determinate circostanze, tale protocollo può essere impiegato anche per il monitoraggio delle macchine *nix, soprattutto per ciò che concerne lo stato delle interfacce di rete ed il loro throughput.

snmpInstallazione e configurazione di snmpd

Vediamo adesso come configurare il demone snmpd su una macchina CentOS 6.

Per prima cosa occorre installare i seguenti pacchetti tramite yum:

[root@server ~]# yum install net-snmp net-snmp-utils

A questo punto passiamo alla configurazione del demone vera e propria, editando il file /etc/snmp/snmp.conf. 

Definiamo, dapprima, le utenze ed i gruppi, mediante le seguenti direttive:

com2sec local      localhost        secret
com2sec mynetwork  192.168.1.0/24 secret

group local      v2c        local
group mynetwork  v2c        mynetwork

In particolare, mediante la keyword com2sec stiamo definendo l’utente local, il cui IP/hostname sorgente dovrà essere localhost e la cui community string dovrà essere secret. Discorso analogo vale per l’utente mynetwork.

Invece, per ciò che concerne la definizione dei gruppi, la keyword da utilizzare è group, seguita dal nome del gruppo, dalla versione del protocollo SNMP (v2c) e dal nome degli utenti che ne fanno parte (local nel primo caso e mynetwork nel secondo).

Successivamente è necessario abilitare l’intera alberatura degli OID, mediante la seguente direttiva:

view all    included  .1                               80

Infine, passiamo alla definizione delle ACL per i gruppi appena creati:

#               context sec.model sec.level prefix   read  write notif
access  local     ""      any       noauth   exact   all   none none
access  mynetwork ""      any       noauth   exact   all   none none

dove la prima riga indica il significato di ciascun campo utilizzato dopo la keyword access ed il gruppo a cui l’ACL si riferisce. Dalla suddetta configurazione è facile notare come entrambi i gruppi (local e mynetwork) abbiano solo la possibilità di effettuare GET SNMP (read) ma non SET (write).

Per completezza, è possibile editare dei campi facoltativi quali syslocation e syscontact:

syslocation Italy server.vostrodominio.com
syscontact Nome Cognome <vostro.indirizzo@email.it>

Riavviamo snmpd per rendere effettive le suddette modifiche:

[root@server ~]# service snmpd restart

ed effettuiamo una query di prova, avvalendoci del tool snmpwalk:

[root@server ~]# snmpwalk -v 2c -c secret localhost

Se otterremo in output l’intera alberatura SNMP supportata dalla macchina significa che il demone sta funzionando come dovrebbe.

 Configurazione di Nagios

Per fare in modo che il nostro NMS sia in grado di monitorare lo stato ed il throughput delle interfacce di rete, occorre definire i seguenti comandi all’interno del file /etc/nagios/objects/commands.cfg:

# 'check_snmp_if_status' command definition
define command{
        command_name    check_snmp_if_status
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -P $ARG2$ -o $ARG3$ -r $ARG4$
        }

# 'check_local_mrtgtraf' command definition
define command{
        command_name    check_local_mrtgtraf
        command_line    $USER1$/check_mrtgtraf -F "$ARG1$" -a "$ARG2$" -w "$ARG3$" -c "$ARG4$" -a "$ARG5$"
        }

ed i seguenti servizi all’interno del file di configurazione associato alla macchina da monitorare:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_descripion             WAN Interface eth0 Operational Status
        check_command                   check_snmp_if_status!secret!IF-MIB::ifOperStatus.2!1
        }

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_descripion             LAN Interface eth1 Operational Status
        check_command                   check_snmp_if_status!secret!2c!IF-MIB::ifOperStatus.3!1
        }

define service{
        use                             local-service   ; Name of service template to use
        host_name                       localhost
        service_descripion             WAN Interface eth0 Bandwidth Usage
        check_command                   check_local_mrtgtraf!/var/www/mrtg/localhost_2.log!AVG!100000000,200000000!110000000,120000000!10
        }

define service{
        use                             local-service   ; Name of service template to use
        host_name                       localhost
        service_descripion             LAN Interface eth1 Bandwidth Usage
        check_command                   check_local_mrtgtraf!/var/www/mrtg/localhost_3.log!AVG!100000000,200000000!110000000,120000000!10
        }

Nella fattispecie, il monitoraggio del throughput viene realizzato mediante il plugin check_mrtgtraf, il cui scopo è quello di analizzare i file di log generati da MRTG (vedi questo post per ulteriori dettagli).

Ricarichiamo la configurazione di Nagios per rendere effettive le suddette modifiche:

[root@server ~]# service nagios reload

ed abbiamo finito.

Alla prossima.

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 le chiamate VOIP attive su un router Cisco 2851 mediante SNMP

Recentemente mi è capitato di dover monitorare mediante Nagios le chiamate attive su un router Cisco 2851 adibito a voice gateway. Premesso che tale router è dotato di due interfacce seriali, entrambe utilizzate nell’ambito di linee E1, occorre fare alcune precisazioni.

Precisazione #1

Le linee E1 utilizzano ben 30 canali dati (B-channel, dove B sta per Bearer) a 64 Kbps ed un canale di segnalazione (D ovvero Delta) a 128 Kbps. In questo modo è possibile raggiungere delle velocità teoriche di 2Mbps. Esse rappresentano, inoltre, le PRI (Primary Rate Interface) usate in Europa, Asia ed Australia.

Le linee T1 utilizzano invece 23 canali dati (a 64 Kbps) ed un canale di segnalazione (anch’esso a 64 Kbps) . Tale tipologia di PRI viene usata negli Stati Uniti d’America ed in Giappone e permette di raggiungere velocità nominali pari a 1.544 Mbps.

Precisazione #2

Quello che ci interessa è monitorare il numero di chiamate VOIP attive. Per fare ciò è sufficiente utilizzare i seguenti comandi:

Router2851#sh isdn active <nomeinterfaccia>

per visualizzare il numero di chiamate attive

Router2851#sh call resource voice stats

per ottenere informazioni statistiche relative al Digital Signal 0 (DS0), ovvero il canale utilizzato per trasportare il traffico voce (in realtà il termine DS0 si riferisce alle linee T1, per le linee E1 vi è il corrispondente E0, anche se sul router viene menzionato solo DS0).

Configurazione di Nagios

Monitoriamo quindi mediante SNMP le statistiche associate al DS0, usando il seguente OID:

.1.3.6.1.4.1.9.10.19.1.1.9.1.3.0.0

Non ci resta che configurare il comando su Nagios:

nightfly@nightbox:~$ cd /etc/nagios-plugins/config

nightfly@nightbox:~$ sudo nano snmp.cfg

Inseriamo la seguente direttiva:

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

e successivamente abilitiamo il servizio per il 2851:

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

nightfly@nightbox:~$ sudo nano host-2851_nagios3.cfg

Inseriamo quanto segue:

 define service {
 use                             generic-service         ; Name of service template to use
 host_name                       2851
 service_description             Active Calls
 check_command                   snmp_call!vostracommunitystring!.1.3.6.1.4.1.9.10.19.1.1.9.1.3.0.0
 }

Finalmente sarà possibile monitorare le chiamate attive sul nostro voice gateway.

A presto.

Snmpwalk: visualizzare informazioni sulle interfacce di un Cisco Catalyst 3750

Recentemente mi è capitato di avere a che fare con un tool per il monitoraggio della rete (weathermap). Questo tool, affinchè riesca a monitorare il traffico che interessa le varie interfacce di uno switch o di un router, effettua banalmente delle query SNMP.

Ora, la versione di tale protocollo abilitata sui vari device è la 2, ergo, utilizzando snmpwalk posso interrogare l’agente (e i vari subagent) in esecuzione sul dispositivo di mio interesse semplicemente digitando:

snmpwalk -v 2c -c <community string> <ip del dispositivo> 1.3.6.1.2.1.2.2.1.1

Direte voi… cos’è quel numero strano in coda alla query? Ebbene, quello è l’OID (Object Identifier) relativo alle interfacce del Catalyst. Ogni OID viene generato a partire dal cosiddetto SMI (Structure of Management Information), che presenta una struttura “ad albero”. Per maggiore completezza, un esempio di SMI è riportato nella figura sottostante:

Snmp.gif
Grazie alle MIB (Management Information Base), inoltre, è possibile identificare mediante una determinata stringa parte di un OID. La tabella seguente può far capire in modo abbastanza banale che cosa si intende per MIB:
OID                     MIB
1.3                      org
1.3.6                   dod
1.3.6.1               internet
1.3.6.1.1            directory
1.3.6.1.2            mgmt
1.3.6.1.3            experimental
1.3.6.1.4            private
1.3.6.1.4.1         enterprises
Quindi l’OID utilizzato nell’ambito della query effettuata mediante snmpwalk equivale a:
mgmt.1.2.2.1.1
Infine, occorre precisare che del protocollo in questione esistono ben 3 versioni: la 1 e la 2 piuttosto insicure, in quanto non cifrano la community string (neanche quando le query vengono effettuate da remoto attraverso Internet). La versione 3, invece, prevede un meccanismo di cifratura che la rende molto più sicura rispetto alle versioni precedenti.
Bye.