Old:Configurare un server Syslog su Debian: differenze tra le versioni
m (spaziatura/box iniziale) |
|||
(48 versioni intermedie di 7 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Old|Se si sta utilizzando Debian 6 (Squeeze) vedere la guida: [[Configurare un server Syslog su Debian Squeeze]]}} | |||
__TOC__ | |||
== Introduzione == | |||
In una serverfarm, ma anche in una piccola rete casalinga, può risultare molto utile riunire i log di tutte le macchine in un unico posto. Si possono in questo modo applicare funzioni di analisi, ricerca e statistica che, in un unico intervento, restituiranno lo stato di tutte le macchine della rete, e sarà inoltre possibile configurare un unico strumento per inviare messaggi di alert quando lo stato di una qualsiasi delle macchine monitorate subisce un'alterazione potenzialmente pericolosa.<br/> | In una serverfarm, ma anche in una piccola rete casalinga, può risultare molto utile riunire i log di tutte le macchine in un unico posto. Si possono in questo modo applicare funzioni di analisi, ricerca e statistica che, in un unico intervento, restituiranno lo stato di tutte le macchine della rete, e sarà inoltre possibile configurare un unico strumento per inviare messaggi di alert quando lo stato di una qualsiasi delle macchine monitorate subisce un'alterazione potenzialmente pericolosa.<br/> | ||
Debian, come è lecito aspettarsi, mette a disposizione degli ottimi strumenti per creare un server di log centralizzato. | Debian, come è lecito aspettarsi, mette a disposizione degli ottimi strumenti per creare un server di log centralizzato. | ||
== Installazione di Syslog-ng == | |||
Il server syslog che prenderemo in considerazione sarà '''Syslog-NG'''. Pur non essendo installato di default su sistemi Debian, dove invece si può trovare syslogd, questo demone presenta diversi vantaggi: | Il server syslog che prenderemo in considerazione sarà '''Syslog-NG'''. Pur non essendo installato di default su sistemi Debian, dove invece si può trovare syslogd, questo demone presenta diversi vantaggi: | ||
# Le connessioni possono essere stabilite via TCP al posto di UDP | # Le connessioni possono essere stabilite via TCP al posto di UDP | ||
Riga 13: | Riga 15: | ||
# apt-get install syslog-ng | # apt-get install syslog-ng | ||
</pre> | </pre> | ||
L'installazione rimuoverà automaticamente il demone < | L'installazione rimuoverà automaticamente il demone <code>syslog</code> installato di default. | ||
== Configurazione del server Syslog == | |||
Il file di configurazione di syslog-ng è '''/etc/syslog-ng/syslog-ng.conf'''. Occorre aprirlo con un editor, decommentare la linea: | Il file di configurazione di syslog-ng è <code>'''/etc/syslog-ng/syslog-ng.conf'''</code>. Occorre aprirlo con un editor, decommentare la linea: | ||
<pre> | <pre> | ||
udp(); | udp(); | ||
Riga 38: | Riga 40: | ||
</pre> | </pre> | ||
in modo da abilitare il demone a ricevere log da client remoti.<br/> | in modo da abilitare il demone a ricevere log da client remoti.<br/> | ||
In questa configurazione è stata presa in considerazione una semplice gestione dei log (di default salvati in < | In questa configurazione è stata presa in considerazione una semplice gestione dei log (di default salvati in <code>/var/log</code>), senza l'implementazione di un database di archiviazione. Si tenga comunque presente che le possibilità di gestione dei log sono molto più avanzate di quelle mostrate in questa guida. | ||
== Installazione di phpLogCon == | |||
Per facilitare la lettura e la gestione dei log è uso comune ricorrere a interfacce grafiche. Su server senza l'ambiente grafico X installato potrebbe essere comodo ricorrere a un'interfaccia scritta in PHP. La scelta in questa guida è caduta su '''phpLogCon''' (http://www.phplogcon.org/), che a mio avviso rappresenta un ottimo compromesso tra funzionalità e facilità di installazione/gestione. | {{Box | Nota |phpLogCon ha attualmente cambiato nome in LogAnalyzer. Il nuovo software è trattato nel capitolo successivo}} | ||
Per facilitare la lettura e la gestione dei log è uso comune ricorrere a interfacce grafiche. Su server senza l'ambiente grafico X installato potrebbe essere comodo ricorrere a un'interfaccia scritta in PHP. La scelta in questa guida è caduta su '''phpLogCon''' (http://www.phplogcon.org/), che a mio avviso rappresenta un ottimo compromesso tra funzionalità e facilità di installazione/gestione.<br/> | |||
Prima di installare phpLogCon è necessario installare e configurare un ambiente LAMP, seguendo ad esempio le indicazioni riportare in questa guida: [[LAMP: Linux, Apache, MySQL e PHP]].<br/> | Prima di installare phpLogCon è necessario installare e configurare un ambiente LAMP, seguendo ad esempio le indicazioni riportare in questa guida: [[LAMP: Linux, Apache, MySQL e PHP]].<br/> | ||
Una volta terminata la configurazione dell'ambiente LAMP si può procedere all'installazione di phpLogCon. Si scarichi innanzitutto la versione più aggiornata dal sito ufficiale: http://www.phplogcon.org/downloads.<br/> | Una volta terminata la configurazione dell'ambiente LAMP si può procedere all'installazione di phpLogCon. Si scarichi innanzitutto la versione più aggiornata dal sito ufficiale: http://www.phplogcon.org/downloads.<br/> | ||
Quindi si scompatti l'archivio appena scaricato e si copi la directory < | Quindi si scompatti l'archivio appena scaricato e si copi la directory <code>src</code> all'interno del nostro server Apache: | ||
<pre> | <pre> | ||
# tar -xzvf phplogcon-2.3.11.tar.gz | # tar -xzvf phplogcon-2.3.11.tar.gz | ||
Riga 51: | Riga 54: | ||
# mv /var/www/src /var/www/phplogcon | # mv /var/www/src /var/www/phplogcon | ||
</pre> | </pre> | ||
Prima di continuare con l'installazione di phpLogCon occorre rendere rendere leggibili a phpLogCon i files di log syslog. | Prima di continuare con l'installazione di phpLogCon occorre rendere rendere leggibili a phpLogCon i files di log syslog.<br/> | ||
Creiamo innanzitutto un nuovo gruppo e aggiungiamo l'utente www-data a questo gruppo: | Creiamo innanzitutto un nuovo gruppo e aggiungiamo l'utente <code>www-data</code> a questo gruppo: | ||
<pre> | <pre> | ||
# groupadd | # groupadd adm | ||
# usermod -a -G | # usermod -a -G adm www-data | ||
</pre> | </pre> | ||
Verifichiamo quindi la buona riuscita dei comandi: | Verifichiamo quindi la buona riuscita dei comandi: | ||
Riga 61: | Riga 64: | ||
groups www-data | groups www-data | ||
</pre> | </pre> | ||
Ora copiamo i due | Ora copiamo i due file <code>configure.sh</code> e <code>secure.sh</code> dalla directory <code>contrib</code> all'interno del nostro server Apache, rendiamoli eseguibili e lanciamo gli script: | ||
<pre> | <pre> | ||
# cd | # cd | ||
Riga 70: | Riga 73: | ||
# ./configure.sh | # ./configure.sh | ||
</pre> | </pre> | ||
Infine colleghiamoci alla pagina < | Infine colleghiamoci alla pagina <code>http://127.0.0.1/phplogcon</code> e completiamo il processo di installazione e configurazione di phplogcon.<br/> | ||
Ora apriamo con un editor il file '''/etc/logrotate.conf''' e cerchiamo la voce < | Ora apriamo con un editor il file <code>'''/etc/logrotate.conf'''</code> e cerchiamo la voce <code>create</code>, modificandola in: | ||
<pre> | <pre> | ||
create 640 root | create 640 root adm | ||
</pre> | </pre> | ||
In questo modo la prossima volta che logrotate verrà eseguito i log diventeranno leggibili di default anche per il nostro webserver. Per visualizzarli basterà collegarsi alla pagina < | Modifichiamo infine anche il file <code>'''/etc/logrotate.d/syslog-ng'''</code>, cercando la sezione relativa a syslog e modificandola come segue: | ||
<pre> | |||
/var/log/syslog { | |||
rotate 7 | |||
daily | |||
compress | |||
create 640 root adm | |||
postrotate | |||
/etc/init.d/syslog-ng reload >/dev/null | |||
endscript | |||
} | |||
</pre> | |||
In questo modo la prossima volta che [[logrotate]] verrà eseguito i log diventeranno leggibili di default anche per il nostro webserver. Per visualizzarli basterà collegarsi alla pagina <code>http://127.0.0.1/phplogcon</code>. | |||
== Installazione di LogAnalyzer 3.x == | |||
Il successore di phpLogCon si chiama Adiscon LogAnalyzer e, come il suo predecessore, è scritto in PHP ed è liberamente scaricabile dal sito del progetto: http://loganalyzer.adiscon.com/ .<br/> | |||
La sua installazione procede essenzialmente in maniera identica a quella di phpLogCon, ma in questo paragrafo esamineremo anche l'utilizzo di un database MySQL di appoggio. Prima di installare LogAnalyzer è necessario installare e configurare un ambiente LAMP, seguendo ad esempio le indicazioni riportare in questa guida: [[LAMP: Linux, Apache, MySQL e PHP]].<br/> | |||
Una volta terminata la configurazione dell'ambiente LAMP si può procedere all'installazione di LogAnalyzer. Si scarichi innanzitutto la versione più aggiornata dal sito ufficiale: http://www.loganalyzer.adiscon.com/downloads.<br/> | |||
Quindi si scompatti l'archivio appena scaricato e si copi la directory <code>src</code> all'interno del nostro server Apache: | |||
<pre> | |||
# tar -xzvf loganalyzer-3.0.1.tar.gz | |||
# cd loganalyzer-3.0.1 | |||
# mv src /var/www/ | |||
# mv /var/www/src /var/www/loganalyzer | |||
</pre> | |||
Prima di continuare con l'installazione di LogAnalyzer occorre rendere leggibili a LogAnalyzer i files di log syslog.<br/> | |||
Creiamo innanzitutto un nuovo gruppo e aggiungiamo l'utente <code>www-data</code> a questo gruppo: | |||
<pre> | |||
# groupadd adm | |||
# usermod -a -G adm www-data | |||
</pre> | |||
Verifichiamo quindi la buona riuscita dei comandi: | |||
<pre> | |||
groups www-data | |||
</pre> | |||
Ora copiamo i due file <code>configure.sh</code> e <code>secure.sh</code> dalla directory <code>contrib</code> all'interno del nostro server Apache, rendiamoli eseguibili e lanciamo gli script: | |||
<pre> | |||
# cd | |||
# mv loganalyzer-3.0.1/contrib/configure.sh /var/www/phplogcon | |||
# mv loganalyzer-3.0.1/contrib/secure.sh /var/www/phplogcon | |||
# cd /var/www/loganalyzer | |||
# chmod +x configure.sh secure.sh | |||
# ./configure.sh | |||
</pre> | |||
Inoltre dobbiamo configurare un nuovo database MySQL. Apriamo quindi l'interfaccia phpMyAdmin che abbiamo installato seguendo la guida apposita, facciamo login con le credenziali configurate e creiamo un nuovo database, chiamandolo <code>loganalyzer</code>.<br/> | |||
Infine colleghiamoci alla pagina <code>http://127.0.0.1/loganalyzer</code> e completiamo il processo di installazione e configurazione di loganalyzer. Quando arriviamo alla pagina di configurazione del supporto database inseriamo il nome del database che abbiamo appena creato (<code>loganalyzer</code> e il nome utente e la password del nostro utente MySQL).<br/> | |||
Ora apriamo con un editor il file <code>'''/etc/logrotate.conf'''</code> e cerchiamo la voce <code>create</code>, modificandola in: | |||
<pre> | |||
create 640 root adm | |||
</pre> | |||
Modifichiamo infine anche il file <code>'''/etc/logrotate.d/syslog-ng'''</code>, cercando la sezione relativa a syslog e modificandola come segue: | |||
<pre> | |||
/var/log/syslog { | |||
rotate 7 | |||
daily | |||
compress | |||
create 640 root adm | |||
postrotate | |||
/etc/init.d/syslog-ng reload >/dev/null | |||
endscript | |||
} | |||
</pre> | |||
In questo modo la prossima volta che logrotate verrà eseguito i log diventeranno leggibili di default anche per il nostro webserver. Per visualizzarli basterà collegarsi alla pagina <code>http://127.0.0.1/loganalyzer</code>. | |||
LogAnalyzer permette di configurare più sorgenti log, nel caso volessimo tener monitorati, oltre al file syslog, anche altri file di log. Per aggiungere sorgenti log è sufficiente aprire il file di configurazione: | |||
<pre> | |||
# nano /var/www/loganalyzer/config.php | |||
</pre> | |||
e spostarci alla fine del file. Lì troveremo configurata la prima sorgente log (Syslog) ma potremo aggiungerne altre. Ad esempio possiamo controllare gli accessi al nostro server creando la seguente sorgente: | |||
<pre> | |||
$CFG['DefaultSourceID'] = 'Source2'; | |||
===Configurazione di logrotate | $CFG['Sources']['Source2']['ID'] = 'Source2'; | ||
L'utility '''logrotate''' è pensata per semplificare l'amministrazione dei | $CFG['Sources']['Source2']['Name'] = 'Auth Log Server'; | ||
$CFG['Sources']['Source2']['ViewID'] = 'AUTHLOG'; | |||
$CFG['Sources']['Source2']['SourceType'] = SOURCE_DISK; | |||
$CFG['Sources']['Source2']['LogLineType'] = 'auth.log'; | |||
$CFG['Sources']['Source2']['DiskFile'] = '/var/log/auth.log'; | |||
</pre> | |||
Non c'è limite alle sorgenti log che possono essere configurate. | |||
== Installazione di Splunk == | |||
Un'interfaccia alternativa molto potente è Splunk (http://www.splunk.com/).<br> | |||
Per scaricare il pacchetto '''.deb''' che viene messo a disposizione (uno per architetture x86 e uno per architetture amd64) occorre effettuare la registrazione gratuita sul sito. Splunk '''non è opensource''', ma è disponibile una versione Free, la cui limitazione è che può processare solo 500 MB di Log al giorno. Durante la configurazione di Splunk sarà possibile scegliere se utilizzare una versione Enterprise di prova o se utilizzare la versione Free.<br> | |||
Per installare Splunk, dopo aver scaricato il pacchetto .deb per la nostra architettura spostiamoci nella directory di download e diamo i comandi: | |||
<pre> | |||
# apt-get update | |||
# apt-get install libstdc++6 | |||
# dpkg -i splunk_package_name.deb | |||
</pre> | |||
dove <code>package_name</code> corrisponde al numero di versione del pacchetto scaricato.<br> | |||
Per avviare Splunk per la prima volta diamo il comando: | |||
<pre> | |||
# /opt/splunk/bin/splunk start --accept-license | |||
</pre> | |||
(potete trovare il testo della licenza qui: <code>/opt/splunk/license-eula.txt</code>).<br> | |||
Una volta terminata l'installazione dirigiamoci all'interfaccia web di Splunk: | |||
<pre> | |||
http://indirizzo.ip.del.server:8000 | |||
</pre> | |||
e facciamo login con le credenziali: | |||
* user: '''admin''' | |||
* password: '''changeme''' | |||
[http://www.splunk.com/support Qui] trovate tutta la documentazione per utilizzare al meglio questo potente software per l'analisi dei log. | |||
== Configurazione di logrotate == | |||
L'utility '''logrotate''' è pensata per semplificare l'amministrazione dei file di log. Logrotate permette la rotazione automatica, la compressione, l'eliminazione e l'invio per mail dei file di log; può inoltre essere impostato per l'esecuzione giornaliera, settimanale, mensile o quando i log raggiungono una certa dimensione predefinita.<br/> | |||
Per installare logrotate su Debian: | Per installare logrotate su Debian: | ||
<pre> | <pre> | ||
# apt-get install logrotate | # apt-get install logrotate | ||
</pre> | </pre> | ||
A titolo di esempio possiamo osservare la directory del web server Apache2 su un sistema in cui logrotate è in funzione, < | === <code>/etc/logrotate.conf</code> === | ||
Attraverso il file di configurazione di logrotate è possibile definire il comportamento dell'applicazione in due contesti: a livello globale (nella prima parte del file) e a livello locale dove le regole ridefinite prevalgono su quelle globali. Per ogni file di cui si vuole effettuare la rotazione è necessario indicarne il percorso, al quale seguono tra parentesi graffe le direttive di gestione. | |||
<br> | |||
Tra le direttive più utili: | |||
* '''Criteri di rotazione''' | |||
** <code>daily</code>: rotazione su base giornaliera; | |||
** <code>weekly</code>: rotazione su base settimanale; | |||
** <code>monthly</code>: rotazione su base mensile; | |||
** <code>size <dimensione></code>: rotazione in base alla dimensione; | |||
** <code>notifempty</code>: non esegue la rotazione se il file è vuoto; | |||
** <code>rotate nn</code>: conserva i file di log per <code>nn</code> rotazioni; | |||
* '''Compressione''' | |||
** <code>compress</code>: una volta archiviato il file di log, viene compresso tramite gzip; | |||
** <code>compresscmd</code>: indica il programma da utilizzare al posto di gzip; | |||
* '''Gestione File''' | |||
** <code>create <mode> <owner> <group></code>: immediatamente dopo la rotazione viene creato un nuovo file con il nome identico al precedente. È possibile specificare, modalità di accesso, proprietario e gruppo; | |||
** <code>copy</code>: crea una copia del file di log e non modifica l'originale che non viene mai rimosso; | |||
** <code>copytruncate</code>: utilizzata nel caso in cui non sia possibile chiudere il file di log. Viene archiviata parte del file di log mentre ne viene eseguita una copia; | |||
** <code>olddir <directory></code>: i file di log vengono spostati nella directory indicata prima di eseguire la rotazione; | |||
* '''Configurazione''' | |||
** <code>include <file o directory></code>: legge il file oppure tutti i file della directory indicata ed applica le direttive incontrate all'interno di essi. È possibile trovare include <code>/etc/logrotate.d</code> in quanto alcuni pacchetti installano le proprie istruzioni in questa directory; | |||
* '''Operazioni Pre-log e Post-log''' | |||
** <code>postrotate endscript</code>: tramite questo blocco di direttive è possibile eseguire delle operazioni in seguito alla rotazione; | |||
** <code>prerotate endscript</code>: tramite questo blocco di direttive è possibile eseguire delle operazioni prima che avvenga la rotazione e solo se questa avrà luogo. | |||
A titolo di esempio possiamo osservare la directory del web server Apache2 su un sistema in cui logrotate è in funzione, <code>/var/log/apache2</code> | |||
<pre> | <pre> | ||
root@test:~# ls -1 /var/log/apache2/ | root@test:~# ls -1 /var/log/apache2/ | ||
Riga 99: | Riga 228: | ||
error.log.5.gz | error.log.5.gz | ||
</pre> | </pre> | ||
Si possono notare i | Si possono notare i file di log attualmente in uso (<code>'''access.log'''</code> e <code>'''error.log'''</code>), i file di log del giorno precedente (<code>'''access.log.1'''</code> e <code>'''error.log.1'''</code>) e i file dei giorni ancora precedenti, che di default vengono compressi e conservati per cinque settimane. | ||
Logrotate può essere schedulato utilizzando | Logrotate può essere schedulato utilizzando [[cron]]. La directory <code>'''/etc/cron.daily'''</code> contiene infatti gli script che vengono eseguiti automaticamente ogni giorno dal sistema. Qui si può trovare lo script di logrotate. Ogni giorno questo script, al momento dell'esecuzione, esamina due cose: | ||
# il file di configurazione < | # il file di configurazione <code>/etc/logrotate.conf</code> | ||
# la directory di configurazione < | # la directory di configurazione <code>/etc/logrotate.d</code> | ||
Questa directory contiene i | Questa directory contiene i file di configurazione per i servizi installati sul server. Per esempio sul server esaminato in precedenza troveremo il file <code>/etc/logrotate.d/apache2</code>.<br/> | ||
Un tipico file di configurazione di logrotate è simile a questo: | Un tipico file di configurazione di logrotate è simile a questo: | ||
<pre> | <pre> | ||
Riga 123: | Riga 252: | ||
</pre> | </pre> | ||
Analizziamolo nel dettaglio: | Analizziamolo nel dettaglio: | ||
# < | # <code>/var/log/apache2/*.log</code>: indica i file che vengono interessati dal processo; | ||
# < | # <code>weekly</code>: i file sono ruotati ogni settimana. Alternativa: <code>daily</code>; | ||
# < | # <code>rotate nn</code>: saranno conservati non più di <code>nn</code> file; | ||
# < | # <code>compress</code>: i file saranno compressi con gzip. Alternativa: <code>nocompress</code>; | ||
# < | # <code>delaycompress</code>: non comprime i log del giorno prima; | ||
# < | # <code>notifempty</code>: non esegue la rotazione se il file è vuoto. Alternativa: <code>ifempty</code>; | ||
# < | # <code>create xx user group</code>: imposta proprietario, gruppo e permessi per i nuovi file creati; | ||
# < | # <code>sharedscripts</code>: esegue ogni script di prerotate o postrotate su ogni file. Alternativa: <code>nosharedscripts</code>; | ||
# < | # <code>postrotate + endscript</code>: ogni cosa tra queste due voci viene eseguita dopo il processo di rotazione. Alternativa: <code>prerotate</code>. | ||
Se avete necessità di conservare per più tempo i log ruotati potete aumentare il valore dell'opzione < | Se avete necessità di conservare per più tempo i log ruotati potete aumentare il valore dell'opzione <code>rotate</code>, oppure crearvi uno script che vi faccia il backup dei vecchi log in un'altra directory (in questo modo non rischiate che la directory <code>/var/log/</code> cresca troppo in dimensione). | ||
== Programmi utili == | |||
Per gli amanti delle e-mail si segnala l'esistenza del pacchetto '''logwatch''', uno script in | Per gli amanti delle e-mail si segnala l'esistenza del pacchetto '''logwatch''', uno script in Perl che ogni giorno raccoglie gli eventi dei log e li invia all'utente root del sistema (o all'utente specificato in <code>/etc/aliases</code>). | ||
<pre> | <pre> | ||
# apt-get install logwatch | # apt-get install logwatch | ||
</pre> | |||
Se desiderate ricevere le email di logwatch anche su un indirizzo di posta elettronico esterno al sistema da monitorare, modificate il file <code>/etc/aliases</code> come segue: | |||
<pre> | |||
vostro_utente: vostro_utente indirizzo_esterno@pippo.com | |||
</pre> | |||
Non dimenticate, alla fine delle modifiche, di lanciare il comando: | |||
<pre> | |||
# newaliases | |||
</pre> | </pre> | ||
Se invece amate avere sott'occhio i log in un terminale, potreste trovare utile il pacchetto '''ccze''', che altro non è che un coloratore di log molto comodo. Per installarlo: | Se invece amate avere sott'occhio i log in un terminale, potreste trovare utile il pacchetto '''ccze''', che altro non è che un coloratore di log molto comodo. Per installarlo: | ||
Riga 148: | Riga 285: | ||
</pre> | </pre> | ||
== Configurazione dei client della rete == | |||
=== Client Linux === | |||
Per forwardare i log di una macchina | Per forwardare i log di una macchina Linux verso un server Syslog possono essere usati sia syslog sia syslog-ng. | ||
==== 1 - Syslog ==== | |||
Si apra il file '''/etc/syslogd.conf'''. La sintassi utilizzata in questo file è molto semplice: | Si apra il file <code>'''/etc/syslogd.conf'''</code>. La sintassi utilizzata in questo file è molto semplice: | ||
<pre> | <pre> | ||
facility.level destination | facility.level destination | ||
Riga 158: | Riga 295: | ||
Ad esempio: | Ad esempio: | ||
<pre> | <pre> | ||
*.* 10.58.1.1 # Tutti i log sono forwardati al server syslog 10.58.1.1 | *.* @10.58.1.1 # Tutti i log sono forwardati al server syslog 10.58.1.1 | ||
kern.alert 10.2.5.8 # Gli alert del kernel sono forwardati a 10.2.5.8 | kern.alert @10.2.5.8 # Gli alert del kernel sono forwardati a 10.2.5.8 | ||
</pre> | </pre> | ||
Ricordarsi di riavviare il demone | Ricordarsi di riavviare il demone affinché prenda in considerazione le modifiche: | ||
<pre> | <pre> | ||
# etc/init.d/sysklogd restart | # etc/init.d/sysklogd restart | ||
</pre> | </pre> | ||
==== 2 - Syslog-NG ==== | |||
La configurazione di un client syslog-ng è leggermente più complicata, ma offre più opzioni di personalizzazione.<br/> | La configurazione di un client syslog-ng è leggermente più complicata, ma offre più opzioni di personalizzazione.<br/> | ||
Iniziamo con installare il demone sul client: | Iniziamo con installare il demone sul client: | ||
Riga 171: | Riga 309: | ||
# apt-get install syslog-ng | # apt-get install syslog-ng | ||
</pre> | </pre> | ||
Il file di configurazione del demone è '''/etc/syslog-ng/syslog-ng.conf'''. La sua sintassi è abbastanza semplice: | Il file di configurazione del demone è <code>'''/etc/syslog-ng/syslog-ng.conf'''</code>. La sua sintassi è abbastanza semplice: | ||
<pre> | <pre> | ||
log | log | ||
Riga 179: | Riga 317: | ||
destination(destination_name); | destination(destination_name); | ||
}; | }; | ||
</pre> | </pre> | ||
Vediamo alcuni esempi. | Vediamo alcuni esempi. | ||
* Tutti i log sono inviati a un server syslog all'indirizzo 10.13.44.44: | |||
<pre> | <pre> | ||
source s_all { | source s_all { | ||
Riga 198: | Riga 336: | ||
}; | }; | ||
</pre> | </pre> | ||
* Viene utilizzato un filtro per inviare al syslog server solo i messaggi di livello '''alert''' e '''error''' generati da '''kernel facility'''. Come si può notare, per l'invio dei log viene utilizzato questa volta il protocollo TCP: | |||
<pre> | <pre> | ||
source s_all { | source s_all { | ||
Riga 207: | Riga 345: | ||
}; | }; | ||
filter filter1 { level(notice, alert, | filter filter1 { level(notice, alert, error) and facility(kern); }; | ||
destination d1 { tcp("10.15.61.1" port (54321)); }; | destination d1 { tcp("10.15.61.1" port (54321)); }; | ||
Riga 218: | Riga 356: | ||
}; | }; | ||
</pre> | </pre> | ||
Affinché tutto funzioni non dobbiamo dimenticarci di istruire il server syslog affinché si ponga in ascolto anche sulla porta TCP specificata.<br/> | |||
Modifichiamo perciò il file di configurazione del server, <code>'''/etc/syslog-ng/syslog-ng.conf'''</code>: | |||
<pre> | <pre> | ||
source s_all { | source s_all { | ||
Riga 228: | Riga 367: | ||
}; | }; | ||
</pre> | </pre> | ||
=== Client Windows === | |||
L'incapacità di Windows di mantenere e gestire i log in maniera semplice e unificata è notoria. Di default i log si sfogliano dall'interno del '''Visualizzatore Eventi''' (Pannello di Controllo - Strumenti di Amministrazione - Visualizzatore Eventi).<br/> | L'incapacità di Windows di mantenere e gestire i log in maniera semplice e unificata è notoria. Di default i log si sfogliano dall'interno del '''Visualizzatore Eventi''' (Pannello di Controllo - Strumenti di Amministrazione - Visualizzatore Eventi).<br/> | ||
Sfortunatamente ci sono due inconvenienti: | Sfortunatamente ci sono due inconvenienti: | ||
Riga 234: | Riga 373: | ||
# non esiste un tool di sistema per inviare i log a un server centralizzato | # non esiste un tool di sistema per inviare i log a un server centralizzato | ||
Per nostra fortuna il mondo open-source ha sviluppato diversi tool che, installati come servizi sulle macchine Windows da monitorare, si occupano di tradurre i log in un formato standard e di inviarli a un server centralizzato.<br/> | Per nostra fortuna il mondo open-source ha sviluppato diversi tool che, installati come servizi sulle macchine Windows da monitorare, si occupano di tradurre i log in un formato standard e di inviarli a un server centralizzato.<br/> | ||
I due tool che consiglio per la loro efficienza e per la loro facilità di configurazione sono: | |||
# Snare Agent, scaricabile da http://www.intersectalliance.com/projects/SnareWindows/index.html | # Snare Agent, scaricabile da http://www.intersectalliance.com/projects/SnareWindows/index.html | ||
# NTSyslog, scaricabile da http://ntsyslog.sourceforge.net/ | # NTSyslog, scaricabile da http://ntsyslog.sourceforge.net/ | ||
Entrambi i tool sono facilmente configurabili. | Entrambi i tool sono facilmente configurabili.<br/> | ||
Consiglio anche di aumentare la dimensione massima dei | Consiglio anche di aumentare la dimensione massima dei file di log di Windows, di default troppo bassa, e di agire su '''Criteri di Protezione Locali''' per abilitare un criterio di auditing un po' più efficace di quello attivo nella configurazione di default. | ||
{{Autori | |||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] | |||
}} |
Versione attuale delle 11:39, 25 giu 2016
Attenzione. Questa guida è obsoleta. Viene mantenuta sul Wiki solo per motivi di natura storica e didattica. Se si sta utilizzando Debian 6 (Squeeze) vedere la guida: Configurare un server Syslog su Debian Squeeze |
Introduzione
In una serverfarm, ma anche in una piccola rete casalinga, può risultare molto utile riunire i log di tutte le macchine in un unico posto. Si possono in questo modo applicare funzioni di analisi, ricerca e statistica che, in un unico intervento, restituiranno lo stato di tutte le macchine della rete, e sarà inoltre possibile configurare un unico strumento per inviare messaggi di alert quando lo stato di una qualsiasi delle macchine monitorate subisce un'alterazione potenzialmente pericolosa.
Debian, come è lecito aspettarsi, mette a disposizione degli ottimi strumenti per creare un server di log centralizzato.
Installazione di Syslog-ng
Il server syslog che prenderemo in considerazione sarà Syslog-NG. Pur non essendo installato di default su sistemi Debian, dove invece si può trovare syslogd, questo demone presenta diversi vantaggi:
- Le connessioni possono essere stabilite via TCP al posto di UDP
- I log tra host syslog-ng possono essere inviati crittati
- I log possono essere filtrati in base alla criticità del loro contenuto
- Il demone stesso è altamente personalizzabile
Procediamo quindi alla sua installazione:
# apt-get install syslog-ng
L'installazione rimuoverà automaticamente il demone syslog
installato di default.
Configurazione del server Syslog
Il file di configurazione di syslog-ng è /etc/syslog-ng/syslog-ng.conf
. Occorre aprirlo con un editor, decommentare la linea:
udp();
e modificare le linee:
2)# enable or disable DNS usage # syslog-ng blocks on DNS queries, so enabling DNS may lead to # a Denial of Service attack # (default is yes) use_dns(no);
in:
# enable or disable DNS usage # syslog-ng blocks on DNS queries, so enabling DNS may lead to # a Denial of Service attack # (default is yes) use_dns(yes); dns_cache(yes);
in modo da abilitare il demone a ricevere log da client remoti.
In questa configurazione è stata presa in considerazione una semplice gestione dei log (di default salvati in /var/log
), senza l'implementazione di un database di archiviazione. Si tenga comunque presente che le possibilità di gestione dei log sono molto più avanzate di quelle mostrate in questa guida.
Installazione di phpLogCon
Nota phpLogCon ha attualmente cambiato nome in LogAnalyzer. Il nuovo software è trattato nel capitolo successivo |
Per facilitare la lettura e la gestione dei log è uso comune ricorrere a interfacce grafiche. Su server senza l'ambiente grafico X installato potrebbe essere comodo ricorrere a un'interfaccia scritta in PHP. La scelta in questa guida è caduta su phpLogCon (http://www.phplogcon.org/), che a mio avviso rappresenta un ottimo compromesso tra funzionalità e facilità di installazione/gestione.
Prima di installare phpLogCon è necessario installare e configurare un ambiente LAMP, seguendo ad esempio le indicazioni riportare in questa guida: LAMP: Linux, Apache, MySQL e PHP.
Una volta terminata la configurazione dell'ambiente LAMP si può procedere all'installazione di phpLogCon. Si scarichi innanzitutto la versione più aggiornata dal sito ufficiale: http://www.phplogcon.org/downloads.
Quindi si scompatti l'archivio appena scaricato e si copi la directory src
all'interno del nostro server Apache:
# tar -xzvf phplogcon-2.3.11.tar.gz # cd phplogcon-2.3.11 # mv src /var/www/ # mv /var/www/src /var/www/phplogcon
Prima di continuare con l'installazione di phpLogCon occorre rendere rendere leggibili a phpLogCon i files di log syslog.
Creiamo innanzitutto un nuovo gruppo e aggiungiamo l'utente www-data
a questo gruppo:
# groupadd adm # usermod -a -G adm www-data
Verifichiamo quindi la buona riuscita dei comandi:
groups www-data
Ora copiamo i due file configure.sh
e secure.sh
dalla directory contrib
all'interno del nostro server Apache, rendiamoli eseguibili e lanciamo gli script:
# cd # mv phplogcon-2.3.11/contrib/configure.sh /var/www/phplogcon # mv phplogcon-2.3.11/contrib/secure.sh /var/www/phplogcon # cd /var/www/phplogcon # chmod +x configure.sh secure.sh # ./configure.sh
Infine colleghiamoci alla pagina http://127.0.0.1/phplogcon
e completiamo il processo di installazione e configurazione di phplogcon.
Ora apriamo con un editor il file /etc/logrotate.conf
e cerchiamo la voce create
, modificandola in:
create 640 root adm
Modifichiamo infine anche il file /etc/logrotate.d/syslog-ng
, cercando la sezione relativa a syslog e modificandola come segue:
/var/log/syslog { rotate 7 daily compress create 640 root adm postrotate /etc/init.d/syslog-ng reload >/dev/null endscript }
In questo modo la prossima volta che logrotate verrà eseguito i log diventeranno leggibili di default anche per il nostro webserver. Per visualizzarli basterà collegarsi alla pagina http://127.0.0.1/phplogcon
.
Installazione di LogAnalyzer 3.x
Il successore di phpLogCon si chiama Adiscon LogAnalyzer e, come il suo predecessore, è scritto in PHP ed è liberamente scaricabile dal sito del progetto: http://loganalyzer.adiscon.com/ .
La sua installazione procede essenzialmente in maniera identica a quella di phpLogCon, ma in questo paragrafo esamineremo anche l'utilizzo di un database MySQL di appoggio. Prima di installare LogAnalyzer è necessario installare e configurare un ambiente LAMP, seguendo ad esempio le indicazioni riportare in questa guida: LAMP: Linux, Apache, MySQL e PHP.
Una volta terminata la configurazione dell'ambiente LAMP si può procedere all'installazione di LogAnalyzer. Si scarichi innanzitutto la versione più aggiornata dal sito ufficiale: http://www.loganalyzer.adiscon.com/downloads.
Quindi si scompatti l'archivio appena scaricato e si copi la directory src
all'interno del nostro server Apache:
# tar -xzvf loganalyzer-3.0.1.tar.gz # cd loganalyzer-3.0.1 # mv src /var/www/ # mv /var/www/src /var/www/loganalyzer
Prima di continuare con l'installazione di LogAnalyzer occorre rendere leggibili a LogAnalyzer i files di log syslog.
Creiamo innanzitutto un nuovo gruppo e aggiungiamo l'utente www-data
a questo gruppo:
# groupadd adm # usermod -a -G adm www-data
Verifichiamo quindi la buona riuscita dei comandi:
groups www-data
Ora copiamo i due file configure.sh
e secure.sh
dalla directory contrib
all'interno del nostro server Apache, rendiamoli eseguibili e lanciamo gli script:
# cd # mv loganalyzer-3.0.1/contrib/configure.sh /var/www/phplogcon # mv loganalyzer-3.0.1/contrib/secure.sh /var/www/phplogcon # cd /var/www/loganalyzer # chmod +x configure.sh secure.sh # ./configure.sh
Inoltre dobbiamo configurare un nuovo database MySQL. Apriamo quindi l'interfaccia phpMyAdmin che abbiamo installato seguendo la guida apposita, facciamo login con le credenziali configurate e creiamo un nuovo database, chiamandolo loganalyzer
.
Infine colleghiamoci alla pagina http://127.0.0.1/loganalyzer
e completiamo il processo di installazione e configurazione di loganalyzer. Quando arriviamo alla pagina di configurazione del supporto database inseriamo il nome del database che abbiamo appena creato (loganalyzer
e il nome utente e la password del nostro utente MySQL).
Ora apriamo con un editor il file /etc/logrotate.conf
e cerchiamo la voce create
, modificandola in:
create 640 root adm
Modifichiamo infine anche il file /etc/logrotate.d/syslog-ng
, cercando la sezione relativa a syslog e modificandola come segue:
/var/log/syslog { rotate 7 daily compress create 640 root adm postrotate /etc/init.d/syslog-ng reload >/dev/null endscript }
In questo modo la prossima volta che logrotate verrà eseguito i log diventeranno leggibili di default anche per il nostro webserver. Per visualizzarli basterà collegarsi alla pagina http://127.0.0.1/loganalyzer
.
LogAnalyzer permette di configurare più sorgenti log, nel caso volessimo tener monitorati, oltre al file syslog, anche altri file di log. Per aggiungere sorgenti log è sufficiente aprire il file di configurazione:
# nano /var/www/loganalyzer/config.php
e spostarci alla fine del file. Lì troveremo configurata la prima sorgente log (Syslog) ma potremo aggiungerne altre. Ad esempio possiamo controllare gli accessi al nostro server creando la seguente sorgente:
$CFG['DefaultSourceID'] = 'Source2'; $CFG['Sources']['Source2']['ID'] = 'Source2'; $CFG['Sources']['Source2']['Name'] = 'Auth Log Server'; $CFG['Sources']['Source2']['ViewID'] = 'AUTHLOG'; $CFG['Sources']['Source2']['SourceType'] = SOURCE_DISK; $CFG['Sources']['Source2']['LogLineType'] = 'auth.log'; $CFG['Sources']['Source2']['DiskFile'] = '/var/log/auth.log';
Non c'è limite alle sorgenti log che possono essere configurate.
Installazione di Splunk
Un'interfaccia alternativa molto potente è Splunk (http://www.splunk.com/).
Per scaricare il pacchetto .deb che viene messo a disposizione (uno per architetture x86 e uno per architetture amd64) occorre effettuare la registrazione gratuita sul sito. Splunk non è opensource, ma è disponibile una versione Free, la cui limitazione è che può processare solo 500 MB di Log al giorno. Durante la configurazione di Splunk sarà possibile scegliere se utilizzare una versione Enterprise di prova o se utilizzare la versione Free.
Per installare Splunk, dopo aver scaricato il pacchetto .deb per la nostra architettura spostiamoci nella directory di download e diamo i comandi:
# apt-get update # apt-get install libstdc++6 # dpkg -i splunk_package_name.deb
dove package_name
corrisponde al numero di versione del pacchetto scaricato.
Per avviare Splunk per la prima volta diamo il comando:
# /opt/splunk/bin/splunk start --accept-license
(potete trovare il testo della licenza qui: /opt/splunk/license-eula.txt
).
Una volta terminata l'installazione dirigiamoci all'interfaccia web di Splunk:
http://indirizzo.ip.del.server:8000
e facciamo login con le credenziali:
- user: admin
- password: changeme
Qui trovate tutta la documentazione per utilizzare al meglio questo potente software per l'analisi dei log.
Configurazione di logrotate
L'utility logrotate è pensata per semplificare l'amministrazione dei file di log. Logrotate permette la rotazione automatica, la compressione, l'eliminazione e l'invio per mail dei file di log; può inoltre essere impostato per l'esecuzione giornaliera, settimanale, mensile o quando i log raggiungono una certa dimensione predefinita.
Per installare logrotate su Debian:
# apt-get install logrotate
/etc/logrotate.conf
Attraverso il file di configurazione di logrotate è possibile definire il comportamento dell'applicazione in due contesti: a livello globale (nella prima parte del file) e a livello locale dove le regole ridefinite prevalgono su quelle globali. Per ogni file di cui si vuole effettuare la rotazione è necessario indicarne il percorso, al quale seguono tra parentesi graffe le direttive di gestione.
Tra le direttive più utili:
- Criteri di rotazione
daily
: rotazione su base giornaliera;weekly
: rotazione su base settimanale;monthly
: rotazione su base mensile;size <dimensione>
: rotazione in base alla dimensione;notifempty
: non esegue la rotazione se il file è vuoto;rotate nn
: conserva i file di log pernn
rotazioni;
- Compressione
compress
: una volta archiviato il file di log, viene compresso tramite gzip;compresscmd
: indica il programma da utilizzare al posto di gzip;
- Gestione File
create <mode> <owner> <group>
: immediatamente dopo la rotazione viene creato un nuovo file con il nome identico al precedente. È possibile specificare, modalità di accesso, proprietario e gruppo;copy
: crea una copia del file di log e non modifica l'originale che non viene mai rimosso;copytruncate
: utilizzata nel caso in cui non sia possibile chiudere il file di log. Viene archiviata parte del file di log mentre ne viene eseguita una copia;olddir <directory>
: i file di log vengono spostati nella directory indicata prima di eseguire la rotazione;
- Configurazione
include <file o directory>
: legge il file oppure tutti i file della directory indicata ed applica le direttive incontrate all'interno di essi. È possibile trovare include/etc/logrotate.d
in quanto alcuni pacchetti installano le proprie istruzioni in questa directory;
- Operazioni Pre-log e Post-log
postrotate endscript
: tramite questo blocco di direttive è possibile eseguire delle operazioni in seguito alla rotazione;prerotate endscript
: tramite questo blocco di direttive è possibile eseguire delle operazioni prima che avvenga la rotazione e solo se questa avrà luogo.
A titolo di esempio possiamo osservare la directory del web server Apache2 su un sistema in cui logrotate è in funzione, /var/log/apache2
root@test:~# ls -1 /var/log/apache2/ access.log access.log.1 access.log.2.gz access.log.3.gz access.log.4.gz access.log.5.gz error.log error.log.1 error.log.2.gz error.log.3.gz error.log.4.gz error.log.5.gz
Si possono notare i file di log attualmente in uso (access.log
e error.log
), i file di log del giorno precedente (access.log.1
e error.log.1
) e i file dei giorni ancora precedenti, che di default vengono compressi e conservati per cinque settimane.
Logrotate può essere schedulato utilizzando cron. La directory /etc/cron.daily
contiene infatti gli script che vengono eseguiti automaticamente ogni giorno dal sistema. Qui si può trovare lo script di logrotate. Ogni giorno questo script, al momento dell'esecuzione, esamina due cose:
- il file di configurazione
/etc/logrotate.conf
- la directory di configurazione
/etc/logrotate.d
Questa directory contiene i file di configurazione per i servizi installati sul server. Per esempio sul server esaminato in precedenza troveremo il file /etc/logrotate.d/apache2
.
Un tipico file di configurazione di logrotate è simile a questo:
/var/log/apache2/*.log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if [ -f /var/run/apache.pid ]; then /etc/init.d/apache restart > /dev/null fi endscript }
Analizziamolo nel dettaglio:
/var/log/apache2/*.log
: indica i file che vengono interessati dal processo;weekly
: i file sono ruotati ogni settimana. Alternativa:daily
;rotate nn
: saranno conservati non più dinn
file;compress
: i file saranno compressi con gzip. Alternativa:nocompress
;delaycompress
: non comprime i log del giorno prima;notifempty
: non esegue la rotazione se il file è vuoto. Alternativa:ifempty
;create xx user group
: imposta proprietario, gruppo e permessi per i nuovi file creati;sharedscripts
: esegue ogni script di prerotate o postrotate su ogni file. Alternativa:nosharedscripts
;postrotate + endscript
: ogni cosa tra queste due voci viene eseguita dopo il processo di rotazione. Alternativa:prerotate
.
Se avete necessità di conservare per più tempo i log ruotati potete aumentare il valore dell'opzione rotate
, oppure crearvi uno script che vi faccia il backup dei vecchi log in un'altra directory (in questo modo non rischiate che la directory /var/log/
cresca troppo in dimensione).
Programmi utili
Per gli amanti delle e-mail si segnala l'esistenza del pacchetto logwatch, uno script in Perl che ogni giorno raccoglie gli eventi dei log e li invia all'utente root del sistema (o all'utente specificato in /etc/aliases
).
# apt-get install logwatch
Se desiderate ricevere le email di logwatch anche su un indirizzo di posta elettronico esterno al sistema da monitorare, modificate il file /etc/aliases
come segue:
vostro_utente: vostro_utente indirizzo_esterno@pippo.com
Non dimenticate, alla fine delle modifiche, di lanciare il comando:
# newaliases
Se invece amate avere sott'occhio i log in un terminale, potreste trovare utile il pacchetto ccze, che altro non è che un coloratore di log molto comodo. Per installarlo:
# apt-get install ccze
Il suo utilizzo è molto semplice. Ad esempio:
# tail -f /var/log/messages | ccze
Configurazione dei client della rete
Client Linux
Per forwardare i log di una macchina Linux verso un server Syslog possono essere usati sia syslog sia syslog-ng.
1 - Syslog
Si apra il file /etc/syslogd.conf
. La sintassi utilizzata in questo file è molto semplice:
facility.level destination
Ad esempio:
*.* @10.58.1.1 # Tutti i log sono forwardati al server syslog 10.58.1.1 kern.alert @10.2.5.8 # Gli alert del kernel sono forwardati a 10.2.5.8
Ricordarsi di riavviare il demone affinché prenda in considerazione le modifiche:
# etc/init.d/sysklogd restart
2 - Syslog-NG
La configurazione di un client syslog-ng è leggermente più complicata, ma offre più opzioni di personalizzazione.
Iniziamo con installare il demone sul client:
# apt-get install syslog-ng
Il file di configurazione del demone è /etc/syslog-ng/syslog-ng.conf
. La sua sintassi è abbastanza semplice:
log { source(source_name); filter(filter_name); destination(destination_name); };
Vediamo alcuni esempi.
- Tutti i log sono inviati a un server syslog all'indirizzo 10.13.44.44:
source s_all { internal(); unix-stream("/dev/log"); file("/proc/kmsg" log_prefix("kernel: ")); udp(); }; destination d1 { udp("10.13.44.44"); }; log { source(s_all); destination(d1); };
- Viene utilizzato un filtro per inviare al syslog server solo i messaggi di livello alert e error generati da kernel facility. Come si può notare, per l'invio dei log viene utilizzato questa volta il protocollo TCP:
source s_all { internal(); unix-stream("/dev/log"); file("/proc/kmsg" log_prefix("kernel: ")); udp(); }; filter filter1 { level(notice, alert, error) and facility(kern); }; destination d1 { tcp("10.15.61.1" port (54321)); }; log { source(s_all); filter(filter1); destination(d1); };
Affinché tutto funzioni non dobbiamo dimenticarci di istruire il server syslog affinché si ponga in ascolto anche sulla porta TCP specificata.
Modifichiamo perciò il file di configurazione del server, /etc/syslog-ng/syslog-ng.conf
:
source s_all { internal(); unix-stream("/dev/log"); file("/proc/kmsg" log_prefix("kernel: ")); udp(); tcp(port(54321)); };
Client Windows
L'incapacità di Windows di mantenere e gestire i log in maniera semplice e unificata è notoria. Di default i log si sfogliano dall'interno del Visualizzatore Eventi (Pannello di Controllo - Strumenti di Amministrazione - Visualizzatore Eventi).
Sfortunatamente ci sono due inconvenienti:
- i log sono salvati in formato binario, ed è quindi necessario utilizzare il Visualizzatore Eventi per leggerli
- non esiste un tool di sistema per inviare i log a un server centralizzato
Per nostra fortuna il mondo open-source ha sviluppato diversi tool che, installati come servizi sulle macchine Windows da monitorare, si occupano di tradurre i log in un formato standard e di inviarli a un server centralizzato.
I due tool che consiglio per la loro efficienza e per la loro facilità di configurazione sono:
- Snare Agent, scaricabile da http://www.intersectalliance.com/projects/SnareWindows/index.html
- NTSyslog, scaricabile da http://ntsyslog.sourceforge.net/
Entrambi i tool sono facilmente configurabili.
Consiglio anche di aumentare la dimensione massima dei file di log di Windows, di default troppo bassa, e di agire su Criteri di Protezione Locali per abilitare un criterio di auditing un po' più efficace di quello attivo nella configurazione di default.
Guida scritta da: Ferdybassi | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |