TRAPDB
Per poter avere localmente un database che faccia da repository delle trap SNMP provenienti dai dispositivi su cui facciamo monitoraggio, possiamo creare uno schema come quello proposto in questo WP.
Lo schema può facilmente essere interrogato da un applicativo web creato ad hoc, che illustreremo più avanti, in modo da avere una dashboard capace di attingere dal database ed esporre in maniera chiara e dinamica gli allarmi provenienti dal bacino di rete.
SNMP
Il protocollo SNMP permette il monitoraggio completo delle risorse dei sistemi o device di rete che abbiano un ip address e la community SNMP configurata correttamente. I pacchetti SNMP sono spesso già installati sui sistemi, ma qualora non lo fossero, elenco quelli che sono stati usati nell’ambiente descritto:
- net-snmp-libs-5.3.2.2-9.el5
- net-snmp-5.3.2.2-9.el5
- net-snmp-utils-5.3.2.2-9.el5
- perl-Net-SNMP-5.2.0-1.2.el5.rf
E’ necessario configurare la community affinchè vi sia comunicazione tra sorgente e destinazione, editando il file “/etc/snmp/snmpd.conf ” e compilando i campi relativi alla community:
####
# First, map the community name “public” into a “security name”
# sec.name source community
com2sec notConfigUser default public
rocommunity <yourcommunity>
trapcommunity <yourcommunity>
Restart del servizio:
service snmpd start
Configurare i servizi in modo che questi si avviino automaticamente all’avvio del sistema:
chkconfig –level 23456 snmpd on
chkconfig –level 23456 snmptrapd on
Check della corretta configurazione del servizio SNMP:
snmpwalk -v2c -c <community> <ip address> system
MySQL
MySQL sarà il Database che ospiterà le trap in arrivo dalle varie sorgenti, di seguito i pacchetto utilizzati nella soluzione proposta:
- mysql-server-5.0.77-4.el5_4.2.x86_64.rpm
- mx-2.0.6-2.2.2.x86_64.rpm
- MySQL-python-1.2.1-1.x86_64.rpm
- zlib-devel-1.2.3-3.x86_64.rpm
- e2fsprogs-devel-1.39-23.el5.x86_64.rpm
- keyutils-libs-devel-1.2-1.el5.x86_64.rpm
- libsepol-devel-1.15.2-3.el5.x86_64.rpm
- libselinux-devel-1.33.4-5.5.el5.x86_64.rpm
- krb5-devel-1.6.1-36.el5_4.1.x86_64.rpm
- openssl-devel-0.9.8e-12.el5_4.6.x86_64.rpm
- mysql-devel-5.0.77-4.el5_4.2.x86_64.rpm
NOTE: Alcuni di questi pacchetti potrebbero essere già installati sul sistema, quindi fare attenzione alle versioni. Una volta installato il database, si procede con la configurazione per l’avvio automatico dei servizi all’avvio del Sistema:
chkconfig –levels 235 mysqld on
Fare lo start del servizio MySQL:
service mysqld start
Set the password for root user in MySQL:
/usr/bin/mysqladmin -u root password <yourpassword>
/usr/bin/mysqladmin -u root -h <hostname> password <yourpassword>
Connessione al database :
mysql -u root -p
Un volta installato il database, bisogna creare la struttura che ospiterà le trap in arrivo. La configurazione del database che chiameremo “traps” è relativamente semplice in quanto ha una sola tabella chiamata anch’essa “traps” ed è realizzata dallo script in shell, chiamato “createdb” che allegheremo nella prossima WP.
NOTE: Lo script richiede in input i seguenti parametri “dbname”, “dbuser “ e “dbpassword”
(i.e. # ./createdb <db> <user> <password>)
Sincerarsi di avere i privilegi di root.
Lo script creerà il database “traps” come riportato di seguito:
A seguire la tabella “traps” con i relativi campi
Di seguito la descrizione dei campi contenuti in tabella:
- trap_id, identificativo unico della trap e del relative tempo di ricezione in millisecondi (unix-time format) ;
- timestamp, rappresenta il tempo di ricezione della trap in human language ;
- hostname, rappresent l’hostname della sorgente che ha inviato la trap ;
- ipaddr, , rappresenta l’ip address della sorgente che ha inviato la trap ;
- sysuti, fornisce il valore di uptime del servizio SNMP (sysUptimeInstance) ;
- trapent, indentifica il tipo di oggetto che ha generato la trap (TrapEnterprise) ;
- trapoid, rappresenta la variabile OID che verrà interpretata dal protocollo ;
- community, rappresenta la community utilizzata per l’invio della relativa trap ;
- message, contiene il messaggio che descrive l’allarme ;
- severity, rappresenta la severity dell’allarme (Critical, Major, Warning, Minor, Normal) ;
Per poter intercettare le traps inviate dai vari nodi, è stato creato uno script in perl chiamato “handle.pl” (che allegherò nel prossimo WP) il quale le inserirà poi nel database appena creato.
Il path dello script deve essere configurato nel file di configurazione “/etc/snmp/snmptrapd.conf ”, così come segue:
authCommunity log,execute <community>
traphandle default /usr/bin/perl /<absolute path>/handle.pl
NOTE: Ricordarsi di aver configurato correttamente il “dbname”, “dbuser” e “dbpassword” nella sezione “dbi:mysql” dello script “handle.pl”.
La parte di configurazione lato TRAPDB è terminata, una volta verificata la corretta configurazione SNMP della parte sorgente, si può controllare la corretta ricezione delle traps all’interno della tabella traps del database traps.
Autore: Vincenzo Capasso