Server di log centralizzato CentOS 5.5 Premessa: Dopo aver girovagato in rete alla ricerca di informazioni e guide, dopo averle provate tutte con scarsi risultati, attingendo qua e là, spulciando i vari messaggi d'errore finalmente il syslog server è pronto e funzionante. Alla fine di questa guida verranno registrati tutti i log senza nessun filtro o distinzione sul server syslog. Obiettivo: Centralizzare i log dei server, avere un'interfaccia ai log raccolti. Macchine: 1 server centos 5.5 fresco, appena installato proprio per diventare il syslog server, installazione di solo server senza gui 1 server debian etch, per questo, essendo una distro "vecchia" ho dovuto trovare un backport di rsyslog, server in produzione 1 server centos 5.2, server in produzione 1 pc windows xp professional, questo per testare i vari agent prima di andare a modificare il registro dei server windows in produzione Predisposizione del server: Attenzione: yum, chkconfig e service sono comandi di CentOS, con altre distribuzioni dovrete utilizzare i relativi equivalenti (a. e yum -> apt-get per debian) La macchina a mia disposizione è un AMD athlon 2400+ con 512MB ram e un HDD da 40GB, installazione dal dvd appena scaricato di CentOS 5.5, nella selezione del software ho lasciato solo Server (quello senza interfaccia grafica, che non serve ai nostri scopi). Ho configurato il server con indirizzo ip statico, questo per semplificarmi la configurazione di tutti i client che dovranno inviare i messaggi senza che debbano risolverne il nome con DNS, selinux disabilitato per evitare eventuali problemi. A questo punto passiamo all'installazione dei pacchetti necessari, per realizzare questo server useremo rsyslog appoggiato a mysql,probabilmente qualche pacchetto sarà già presente: Autenticati come root installare mysql, impostarlo per l'avvio automatico ed avviarlo: yum install mysql-server chkconfig mysqld on service mysql start I pacchetti del server di log nei repository sono alla versione 3.22.x, procediamo a installare dai sorgenti l ultima stable alla data del 28/05/2010 la ver. 5.4.0. Utilizzando mysql come back-end è necessario per la compilazione (oltre all ambiente di sviluppo) anche le librerie mysql: yum install mysql-devel gcc Recuperiamo i sorgenti dal sito ufficiale: http://www.rsyslog.com/downloads-req-viewsdownloadsid-1.phtml
Ora procediamo con la compilazione e l installazione, date un occhiata ai vari flag che ho abilitato e se pensate di non averne bisogno toglieteli, sono abbastanza semplici da capire: tar xzf nomepacchetto cd nomepacchetto./configure CFLAGS="-march=i586 -mcpu=i686 -fomit-frame-pointer -std=c99" --enabletestbench=yes --enable-rtinst=yes --enable-debug=yes --enable-imfile --enable-valgrind --enableklog --enable-mail --enable-diagtools --enable-zlib --enable-omtemplate --enable-omstdout -- enable-omprog --enable-imdiag --enable-mysql make make install A questo punto, se la compilazione è andata a buon fine troveremo i binari in /usr/local/sbin e possiamo passare alla configurazione del demone. Creiamo il database per i log utilizzando il modello che ora troviamo in /mytemp/rsyslog- 5.4.0/plugins/ommysql, fate attenzione alla data di realizzazione di questa guida, con versioni successive di rsyslog il file potrebbe essere in altra posizione e con un altro nome. mysql < /mytemp/rsyslog-5.4.0/plugins/ommysql /createdb.sql Accedere a mysql con utenza root e provvedere ai privilegi per l'utenza di rsyslog mysql -uroot grant all on Syslog.* to syslog@localhost identified by 'nuovapassword'; Ora passiamo ai file di configurazione di rsyslog, sono poche modifiche per avere tutto funzionante, come editor io utilizzo nano, voi utilizzate quello che più vi piace: Copiamodalla cartella dei sorgenti il file di configurazione base e poi lo modifichiamo: cp rsyslog.conf /etc/rsyslog.conf (chmod to 644) nano /etc/rsyslog.conf Dobbiamo aggiungere le seguenti righe (se non presenti) all inizio del file, per fare in modo che tutti i log vengano memorizzati nel db: $ModLoad ommysql *.* :ommysql:127.0.0.1,syslog,syslog,password Se non avete cambiato nulla, Syslog è il nome del db e syslog il nome utente per l accesso.
Ora procediamo fin quasi la fine del file per impostare la ricezione dei log dalle macchine remote, se dovete registrare log da macchine windows sarà necessario abilitare anche il protocollo UDP, in quanto i vari agent che ho testato utilizzano esclusivamente quello per l invio dei log; con macchine linux è possibili inviare anche utilizzando TCP/IP. De-commentare le opzioni alle voci: TCP Syslog Server: UDP Syslog Server: Impostare la porta per tcp 10514, solo per non fare confusione con la porta standard UDP (514). Salvate e chiudete; l ultimo file di configurazione che dobbiamo modificare è: nano /etc/sysconfig/rsyslog (chmod to 644 se non lo è già) Se non è presente, eccovi il contenuto già pronto: # Options to syslogd # -m 0 disables 'MARK' messages. # -rportnumber Enables logging from remote machines. The listener will listen to the specified port. # -x disables DNS lookups on messages recieved with -r # See syslogd(8) for more details SYSLOGD_OPTIONS="-c5 -f /etc/rsyslog.conf" # Options to klogd # -2 prints all kernel oops messages twice; once for klogd to decode, and # once for processing with 'ksymoops' # -x disables all klogd processing of oops messages entirely # See klogd(8) for more details KLOGD_OPTIONS="-x" In /mytemp/rsyslog-5.4.0/slackware/ trovate un esempio di script di avvio per slackware, potete editarlo e sistemare quello che vi serve, io ho preferito recuperare quello del pacchetto 3.22 nei repository di centos (mandatemi un PM se lo volete), ricordatevi di metterlo in /etc/rc.d/init.d/ e di impostare i permessi a 755.
Ora non ci resta che fermare syslog e avviare rsyslog: service syslog stop service rsyslog start Impostare l'avvio automatico del nuovo server di log (rimuovendo l avvio automatico del vecchio): chkconfig syslog off chkconfig rsyslog on Attenzione: chkconfig e service funzionano se lo script di avvio è fatto come si deve per CentOS. Fermiamo il firewall ed andiamo a modificare il file /etc/sysconfig/iptables ed aggiungiamo questa riga: -A RH-Firewall-1-INPUT -p udp -m udp --dport 514 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 10514 -j ACCEPT Riavviamo pure il firewall. A questo punto la parte complicata è finita, procediamo con l'installazione dell'interfaccia al db dei log che utilizza apache e php: yum install httpd php php-gd php-mysql.i386 chkconfig httpd on service httpd start Ora il pacchetto vero e proprio: LogAnalyzer di Adiscon che potete trovare qui: http://loganalyzer.adiscon.com/ L'installazione è semplicissima e ve la riassumo in poche righe: Una volta scaricato e scompattato con tar xzf entrate nella cartella creata, copiate il contenuto della cartella src in /var/www/html (io ho creato una sottocartella LogAnalyzer). Dalla cartella contribs (estratta dal tar) copiate insieme ai file precedenti configure.sh e secure.s, dategli i permessi di esecuzione ed lanciate configure.sh (nessuna impostazione da fare qui, viene solo creato un file). Aprite con il browser la cartella dove avet copiato i file ed a questo punto inizia la configurazione vera e propria dell'interfaccia. Sopo poche cose da impostare, procedete senza cambiare nulla fino alla maschera di creazione delle "sorgenti" dei log, qua impostate i seguenti parametri: Name of the Source -> Mettete un nome della sorgente dei log (io l'ho chiamato Rsyslogd) Syslog File -> MySQL native Table Type -> monitorware Database Name, user e password gli stessi che avete utilizzato precedentemente durante la configurazione di mysql Database Tablename -> SystemEvents Procedete fino alla fine. A questo punto il server è pronto!
Configurazione dei client: Per i client linux tutto è semplice e veloce e a dirla tutta avete due possibilità: utilizzare il demone syslog già installato oppure compilare nuovamente il pacchetto, che questa volta ci darà molto meno lavoro da fare: Saltate questo punto se volete utilizzare il demone syslog già in funzione: tar xzf nomepacchetto cd nomepacchetto./configure CFLAGS="-march=i586 -mcpu=i686 -fomit-frame-pointer -std=c99" --enabletestbench=yes --enable-rtinst=yes --enable-debug=yes --enable-imfile --enable-valgrind --enableklog --enable-mail --enable-diagtools --enable-zlib --enable-omtemplate --enable-omstdout -- enable-omprog --enable-imdiag Non serve abilitare mysql in quanto i log verranno inviati al server precedentemente configurato, per il resto ho lasciato le stesse opzioni. make make install Nel file di configurazione dobbiamo inserire solo una riga per l'invio dei log al server: nano /etc/rsyslog.conf (chmod to 644) (in fase di test è meglio inviare tutti i log così è più rapido verificare che tutto funzioni correttamente) *.* @ip_server:514 usando il protocollo UDP e 10514 per utilizzare TCP *.* @@ip_server:10514 usando il protocollo TCP specificare la porta non è obbligatorio ma rende più chiara la lettura in caso di interventi successivi. nano /etc/sysconfig/rsyslog (chmod to 644) nano /etc/rc.d/init.d/rsyslog (chmod to 755) service syslog stop chkconfig syslog off service rsyslog start chkconfig rsyslog on
Potete copiare I file /etc/rc.d/init.d/rsyslog e /etc/sysconfig/rsyslog dall instllazione del server; se copiate anche /etc/rsyslog.conf ricordatevi di commentare nuovamente le righe alla fine del file che impostano la ricezione dei log da remoto. Se avete deciso di utilizzare syslog già presente sulla macchina è sufficiente editare /ertc/syslog.conf ed inserire la riga per l invio al server dei log, esattamente come nel file /etc/rsyslog.conf Se avete macchine basate su linux/freebsd,e che quindi hanno di base syslog come a.e. pfsense, è possibile abilitare l invio dei log al server appena installato. Per le macchine windows ci sono diversi agent gratuiti che permettono linvio degli eventi di sistema ad un server, il più noto probabilmente è snare; ne ho testati alcuni, come dicevo in premessa su una macchina XP professional, che hanno svolto abbastanza bene il loro compito, la parte più complicata è la scelta delle facility/priority da inviare al server centrale. Al momento l invio di local7.* mi sembra la soluzione migliore, ma è cosa soggettiva, con Eventlog-To-Syslog (al 01/06/2010 versione 4.2.0) Ecco i link alle pagine ufficiali degli agent che ho provato, fate sempre attenzione alla data di questa guida, se è passato molto tempo le cose potrebbero essere cambiate: SNARE (se non erro 32 e 64bit): http://www.intersectalliance.com/projects/snarewindows/ Eventlog-To-Syslog (32 e 64bit): http://code.google.com/p/eventlog-to-syslog/ Datagram Syslog agent http://www.syslogserver.com/download.html NTSyslog: http://ntsyslog.sourceforge.net/ Installazione di Eventlog-To-Syslog, gli altri agent sono provvisti di un msi installer e/o setup: Scompattare lo zip scaricato, corrispondente alla versione del sistema operativo (32 o 64bit) Copiare in c:\windows\system32\ i file: evtsys.exe e evtsys.dll Start->esegui->cmd (invio)
Andate in c:\windows\system32\ e date il seguente commando: Evtsys i h ip_del_server_log f local7 (invio) Questo install ail servizio, ora (utilizzando la strada breve): Start->esegui->services.msc (invio) Cercate la riga Eventlog-To-Syslog, doppio clic, impostate l avvio automatico dalla casella di selezione, avviate il servizio con l apposito bottone e cliccate OK. Note relative agli adempimenti relativi agli Amministratori di Sistema Registrare tutti i log indistintamente ci pone dalla parte dell eccesso di zelo, infatti è nostro compito registrare SOLO gli accessi dell amministratore di sistema e non di tutti gli utenti, non dobbiamo mantenere nemmeno le operazioni effettuate, pertanto è opportuno realizzare uno script ad hoc per la memorizzazione di quanto richiesto. Anche andando a ridefinire i log da centralizzare avremo registrato una parte di dati che non sono necessari e potrebbero esporci a sanzioni, pertanto per assolvere a quanto richiesto è necessario non memorizzare l intero db per 6 mesi, ma esportare solo la parte dei dati che ci serve e mantenerla mentre viene svuotato il db. Il problema successivo è: come gestire in modo semplice la registrazione dei log in modo che non siano alterabili? (Possibilmente senza intervento umano, aggiungerei). Al momento mi vengono in mente solo 2 soluzioni, una volta effettuata l esportazione dal db: 1 - la si invia con mail certificata (PEC) a se stessi; si ottengono i 2 risultati necessari: la conservazione per almeno 6 mesi (il gestore della PEC deve mantenerne copia per 5 anni) e la certificazione di inalterabilità (sempre grazie al gestore della PEC che deve provvedere a questo per ogni mail). 2 - generare con mkisofs un UDF che lo contenga e giornalmente controllare i file più vecchi da cancellare; UDF è un file system non ri-scrivibile, come sui sistemi WORM, che assolve pienamente a quanto richiesto dal garante.