Vademecum implementazione gestione log su strutture con macchine SLES 10
(procedura senza RELP e senza tunnel SSL)
NOTA IMPORTANTE: per agevolare l’implementazione nell’archivio sono stati inclusi, pronti da essere copiati o integrati, tutti i file di configurazione necessari per il funzionamento della soluzione; in questo modo è possibile evitare di dover riscrivere “a mano” tutti i file di configurazione descritti nel documento. E’ ovviamente bene – prima di sovrascrivere file già esistenti – verificare di non stare eliminando eventuali configurazioni ulteriori impostate da altri in precedenza. Ogni file modificato o sostituito deve essere controllato, perché fa riferimento a parametri generici da modificare cliente per cliente.
Creazione logserver
Creare una macchina virtuale SLES 11 (non SLES 10!), effettuare il solito setup e, al termine, installare dal dvd il pacchetto rsyslog-3.18.3-7.18 e disinstallare syslog-ng.
Impostare i parametri del file /etc/sysconfig/syslog come segue:
KERNEL_LOGLEVEL=1
SYSLOGD_PARAMS=""
KLOGD_PARAMS="-x"
SYSLOG_DAEMON="rsyslogd"
SYSLOG_NG_PARAMS=""
SYSLOG_NG_PARAMS=""
RSYSLOGD_COMPAT_VERSION=""
RSYSLOGD_PARAMS=""
Editare il file /etc/rsyslog.d/remote.conf impostando quanto segue:
$ModLoad imudp.so # abilita la ricezione di syslog in upd
$UDPServerRun 514 # avvia un server in ascolto alla porta 514
Editare il file /etc/rsyslog.conf impostando quanto segue (se non presente):
$ModLoad immark.so
$ModLoad imuxsock.so
$ModLoad imklog.so
$IncludeConfig /var/run/rsyslog/additional-log-sockets.conf
$IncludeConfig /etc/rsyslog.d/*.conf
kern.warning;*.err;authpriv.none /dev/tty10;RSYSLOG_TraditionalFileFormat
kern.warning;*.err;authpriv.none |/dev/xconsole;RSYSLOG_TraditionalFileFormat
*.emerg *
Aggiungere la seguente sezione:
# TEMPLATE ORGANIZZAZIONE LOG
$template DynAuth, "/var/log/REGISTRAZIONI/%$YEAR%/%$MONTH%/%$DAY%/%FROMHOST%.log"
local1.*,user.*,auth.*,authpriv.*,kern.* ?DynAuth
$EscapeControlCharactersOnReceive off
%msg:::space-cc%
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
local3.* /var/log/varie.log
Riavviare il demone rsyslogd e effettuare il refresh della configurazione tramite il comando
SuSEconfig (altrimenti la perde al primo riavvio).
Impostazione sulle macchine dotate della SLES 10
Editare il file /etc/syslog-ng/syslog-ng.conf.in come segue: : (ATTENZIONE A NON EDITARE IL FILE SYSLOG-NG.CONF! Deve essere quello che termina col .in altrimenti la Suse 10 lo ripristina alla versione precedente.)
Verificare la presenza delle seguenti definizioni:
options { long_hostnames(off); sync(0); perm(0640); stats(3600); };
filter f_iptables { facility(kern) and match("IN=") and match("OUT="); };
filter f_console { level(warn) and facility(kern) and not filter(f_iptables)
or level(err) and not facility(authpriv); };
filter f_newsnotice { level(notice) and facility(news); };
filter f_newscrit { level(crit) and facility(news); };
filter f_newserr { level(err) and facility(news); };
filter f_news { facility(news); };
filter f_mailinfo { level(info) and facility(mail); };
filter f_mailwarn { level(warn) and facility(mail); };
filter f_mailerr { level(err, crit) and facility(mail); };
filter f_mail { facility(mail); };
filter f_cron { facility(cron); };
filter f_local { facility(local0, local1, local2, local3,
local4, local5, local6, local7); };
filter f_acpid { match('^\[acpid\]:'); };
filter f_netmgm { match('^NetworkManager:'); };
filter f_messages { not facility(news, mail) and not filter(f_iptables); };
filter f_warn { level(warn, err, crit) and not filter(f_iptables); };
filter f_alert { level(alert); };
Aggiungere al file
#FILTRI PER LOGGARE
filter f_auth { facility(auth); };
filter f_authpriv {facility(auth, authpriv); };
#SEZIONE GESTIONE LOG REMOTI
destination d_loghost { udp("INDIRIZZOIPDELLOGSERVER"); };
log { source(src); filter(f_auth); destination(d_loghost); };
#log { source(src); filter(f_authpriv); destination(d_loghost); };
Effettuare il refresh della configurazione tramite il commando SuSEconfig, quindi riavviare il demone syslog-ng
Impostazione rsyslog su macchine dotate della SLES 11 o di altra distribuzione.
Installare rsyslog e abilitarlo come gestore predefinito, impostare (se necessario) i parametri del file /etc/sysconfig/syslog come segue:
KERNEL_LOGLEVEL=1
SYSLOGD_PARAMS=""
KLOGD_PARAMS="-x"
SYSLOG_DAEMON="rsyslogd"
SYSLOG_NG_PARAMS=""
SYSLOG_NG_PARAMS=""
RSYSLOGD_COMPAT_VERSION=""
RSYSLOGD_PARAMS=""
Editare il file /etc/rsyslog.conf impostando quanto segue (se non presente):
$ModLoad immark.so
$ModLoad imuxsock.so
$ModLoad imklog.so
$IncludeConfig /var/run/rsyslog/additional-log-sockets.conf
$IncludeConfig /etc/rsyslog.d/*.conf
kern.warning;*.err;authpriv.none /dev/tty10;RSYSLOG_TraditionalFileFormat
kern.warning;*.err;authpriv.none |/dev/xconsole;RSYSLOG_TraditionalFileFormat
*.emerg *
Aggiungere la seguente sezione:
auth, authpriv.* @IPDELLOGSERVER
Riavviare il demone rsyslogd e effettuare il refresh della configurazione tramite il comando
SuSEconfig (altrimenti la perde al primo riavvio).
Installazione SNARE sulle macchine Windows
Scaricare Snare dal sito http://prdownloads.sourceforge.net/snare/SnareForWindows-4.0.1.2-MultiArch.exe ed installarlo col classico schema Next à Next à Next.
Terminata la installazione entrare sul browser nella interfaccia di gestione: http://localhost:6161/
Nella sezione “Network Configuration” settare l’IP del logserver SLES11 che abbiamo precedentemente creato inserendolo nel campo Destination Snare Server address; nel campo Destination Port inserire la porta 514.
Nel campo “Remote control configuration” impostare a 127.0.0.1 il campo IP Address allowed to remote control SNARE e abilitare e settare una password di gestione nel campo “Require a password for remote control?”
Nel campo Objectives Configuration rimuovere tutte le configurazioni preimpostate e creare un profilo personalizzato che rispecchi quanto presente nella immagine “gestione log.png” allegata al documento.
Ovviamente, se l’account di amministrazione non è “administrator” occorrerà variare il nome con quanto necessario.
Infine recarsi sul campo Apply the Latest Configuration e salvare ed applicare la configurazione.
Creazione hash, cancellazione automatica log aventi più di 6 mesi e riduzione footprint
Creare una cartella /var/log/REGISTRAZIONI/HASH
Creare un file /etc/cron.daily/Z_gestione-log e dargli il chmod a +x ; il nome con la Z serve solo per far sì che venga eseguito come ultimo cron giornaliero.
Il contenuto del file è il seguente:
(OCCHIO ALLA IMPLEMENTAZIONE! Prestare la massima attenzione alla differenza che c’è tra i caratteri ` e ' perché sono diversi, non invertibili e corrispondono ad una sintassi del tutto differente.)
#!/bin/bash
# la variabile IERI sotto definita genera una stringa in formato AAAA/MM/GG relativa alla data di ieri
IERI=`/bin/date --date='1 days ago' +%Y/%m/%d`
# la variabile NOMEFILE crea una stringa in formato MD5-AAAA-MM-GG relativa alla data di ieri
NOMEFILE="MD5-`/bin/date --date='1 days ago' +%Y-%m-%d`.md5"
# il percorso generico dei log
PERCORSO_LOG="/var/log/REGISTRAZIONI"
# indichiamo dove verranno trovati i file di log di ieri di cui calcolare gli hash
PERCORSO_LOG_IERI="$PERCORSO_LOG/$IERI/"
# il percorso generico degli hash
MD5_DIR="/var/log/REGISTRAZIONI/HASH/"
cd $MD5_DIR
# cerchiamo nella cartella dei log di ieri tutti gli oggetti di tipo file e li reindirizziamo a md5sum che a sua volta
#scrive il proprio output nella cartella MD5_DIR in un file col nome dato dalla variabile NOMEFILE che contiene
#l'indicazione del nome del file di log e del relativo hash.
find $PERCORSO_LOG_IERI -type f | xargs md5sum > $NOMEFILE
# Ogni giorno, all'esecuzione del cron, identifichiamo tutti i file di log e tutti gli hash avente una eta' maggiore di 6 mesi, ovvero 366/2=193 giorni
# dopo averli trovati, li eliminiamo
find $PERCORSO_LOG -type f -mtime +193 | xargs rm -f
# identifichiamo tutte le cartelle vuote dall'albero dei log ed eliminiamole, per minimizzare la
# occupazione su disco e renderne piu' semplice la consultazione
find $PERCORSO_LOG -type d -empty | xargs rmdir
I commenti spiegano già la sintassi ed il funzionamento; in ogni caso, supponiamo che oggi sia il 20 marzo; il risultato della operazione è creare in /var/log/REGISTRAZIONI/HASH un file avente ad esempio nome MD5-2012-03-19.md5 (cioè facente capo ai log di ieri )il cui contenuto è strutturato come segue:
1945e0ef61febe2c6059adbb7359ee16 /var/log/REGISTRAZIONI/2012/03/19/10.40.2.65.log
3d290c94c9a52f9eebc2ff98b663c925 /var/log/REGISTRAZIONI/2012/03/19/10.40.2.111.log
7cf0cf67d9fa179faa4871da0f2745d8 /var/log/REGISTRAZIONI/2012/03/19/10.40.1.66.log
5a6c74461b1067f98cbbd34b71720b0d /var/log/REGISTRAZIONI/2012/03/19/10.40.1.130.log
c5b89139fd1c25fa7cf055620b677d4e /var/log/REGISTRAZIONI/2012/03/19/10.40.2.119.log
La seconda parte dello script analizza i timestamp di ultima modifica dei file di log e reindirizza via xargs tutti i file aventi almeno 193 giorni a rm –f.
La terza parte cerca le cartelle vuote (poiché svuotate dal comando di sopra) e le elimina; serve per mantenere pulito l’albero nei mesi e negli anni.