Archivi tag: mail

Swatch: un sistema di logging proattivo per ambienti Unix-like

Un sistemista degno di questo nome dedica diverse ore della sua attività lavorativa alla lettura dei log. Ovviamente, poichè tale operazione spesso viene svolta dopo un po’ di tempo dalla generazione dei log stessi, è di fondamentale importanza utilizzare dei sistemi di logging proattivi, in grado cioè di “avvertire” l’amministratore del verificarsi di un qualche tipo di anomalia.

 

sysadmin_mug.jpg

Di software del genere ne esistono a miolioni ma in questo post ho deciso di concentrarmi su swatch per via della sua facilità d’uso e della sua flessibilità.

Infatti, grazie a swatch sarà possibile monitorare i diversi file di log generati sui nostri server, alla ricerca delle entry di nostro interesse.

Per installarlo è sufficiente lanciare il comando:

nightfly@nightbox:~$ sudo apt-get install swatch

Ad installazione completata verrà creato un file di configurazione all’interno della nostra home dir, il cui nome sarà .swatchrc.

Personalmente credo che per ragioni di sicurezza swatch debba utlizzare un file di configurazione accessibile in lettura ma non in scrittura (ovvero che non possa essere modificato da utenti illegittimi), appartenente a root. Inoltre, consiglio di salvare il file in questione all’interno della directory /etc (per omogeneità).

Generiamo quindi il file di configurazione, il cui nome sarà swatch.conf:

nightfly@nightbox:~$ sudo nano /etc/swatch.conf

in cui inseriremo un’unica regola, poichè ci troviamo ancora in fase di test:

#HTTP Forbidden
watchfor  /401/
       echo 
       mail addressess=vostro.indirizzo@email.it,subject=Failed Authentication

Grazie a questa entry, swatch ci avviserà via email ogniqualvolta si accorgerà che qualcuno ha provato a visualizzare una sezione riservata del sito Web presente sul nostro server (protetta mediante .htaccess).

Per fare in modo che swatch invii un’email immediatamente dopo aver individuato un determinato evento, occorre modificare il file /usr/share/perl5/Swatch/Actions.pm sostituendo:

if (! $args{'MAILER'} ) {
foreach my $mailer (qw(/usr/lib/sendmail /usr/sbin/sendmail)) {
$args{'MAILER'} = $mailer if ( -x $mailer );
}
if ($args{'MAILER'} ne '') {
$args{'MAILER'} .= ' -oi -t -odq';
}
}

con

if (! $args{'MAILER'} ) {
foreach my $mailer (qw(/usr/lib/sendmail /usr/sbin/sendmail)) {
$args{'MAILER'} = $mailer if ( -x $mailer );
}
if ($args{'MAILER'} ne '') {
$args{'MAILER'} .= ' -oi -t -odb';
}
}

Nel caso in cui decideste di non effettuare la modifica indicata in precedenza, swatch invierà le email dopo un lasso di tempo prefissato.

In alternativa, potete utilizzare i comandi bash per inviare gli alert alla vostra casella email. Per fare ciò, dovete creare una configurazione del tipo:

watchfor  /401/
exec echo 'SWATCH HOME: HTTP access forbidden: $_' | mail -iv -s "SWATCH HOME: Failed HTTP Authentication" vostro.indirizzo@email.it

Lanciamo quindi swatch con l’opzione -t (tail), ovvero in monitoraggio costante del file di log che andremo a specificare. Dovremo inoltre indicare qual è il file di configurazione a cui tale software dovrà riferirsi:

nightfly@nightbox:~$ swatch -c /etc/swatch.conf -t /var/log/apache2/ssl_access.log &

La & finale consente di lanciare il processo in background. Esiste anche l’opzione –daemon ma a quanto pare non accetta flag aggiuntive, quali -c o -t e monitorizza soltanto il file /var/log/messages.

Purtroppo swatch non consente di monitorare più file con un’unica istanza, quindi per fare ciò è necessario lanciare più istanze di tale programma, possibilmente utilizzando file di configurazione diversi a seconda del log che si intende tenere sotto osservazione.

Infine, è possibile mandare in esecuzione tale applicativo ad ogni avvio del nostro sistema operativo, semplicemente inserendo la seguente direttiva:

swatch -c /etc/swatch.conf -t /var/log/apache2/ssl_access.log

all’interno del file /etc/rc.local.

Fine del post, a presto.

snort2mail: script per ricevere gli alert di snort direttamente sulla nostra casella di posta elettronica

Gli alert generati da snort sono di indubbia utilità, in quanto da un’attenta analisi degli stessi è possibile individuare possibili tentativi di intrusione sulla nostra rete. Poichè sono un po’ pigro e la lettura dei log è sicuramente una delle fasi più tediose del mio lavoro, ho pensato di creare il seguente scrip, in grando di inviare al mio indirizzo email gli alert in questione man mano che vengono generati.

snort, mail, snort2mail, alert, IDS, NIDS

Ecco lo scrip:

#!/bin/bash

logfile=/var/log/snort2sms.log

destinatario=vostro.indirizzo@email.it

ROOT_UID=0

if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo script"
        echo $ERRORE1
        echo "$(date) $ERRORE1" >> $logfile
        exit 1

fi

cd /var/log/snort

if [ -f alert ];then

        if [ -f alert_backup ];then
                #confronto i due file e salvo le differenza all'interno di mail
                diff alert alert_backup > mail

        else

                touch alert_backup
                cp alert alert_backup
        fi

else

        ERRORE2="Errore 2: Il file alert non esiste. Sei sicuro di aver installato snort?"
        echo $ERRORE2
        echo "$(date) $ERRORE2" >> $logfile

fi

if [ -s mail  ];then

        cp alert alert_backup

        cat mail | mail -iv -s "HOME: snort alert" $destinatario;
fi

rm mail

Non vi resta che schedulare l’esecuzione dello script mediante cron e creare il file di log snort2mail.log nella directory /var/log.

Enjoy.

Script bash per l’aggiornamento delle blacklist utilizzate da squidGuard: versione 0.2

In questo post ho riportato l’esempio di uno scrip che si occupa dell’aggiornamento relativo alle blacklist utilizzate da squidGuard. Tale scrip è stato ulteriormente migliorato, in modo da riportare informazioni più dettagliate all’interno dell’email che vi verrà inviata dopo l’update.

bash_sh_shell_title.png

Ecco il codice:

#!/bin/bash

logfile=/var/log/squidguardupdate.log

destinatario=vostro.indirizzo@email.it

ROOT_UID=0

if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo scrip"
        echo $ERRORE1
        echo "$(date) $ERRORE1" >> $logfile

        exit 1

fi

wget http://squidguard.mesd.k12.or.us/blacklists.tgz

tar -xvf blacklists.tgz

cd blacklists/

cp -R * /var/lib/squidguard/db

cd /home/vostrousername/cartelladelloscrip

squidGuard -d -C all &> result

chown proxy:proxy -R /var/lib/squidguard/db

squid -k reconfigure

sleep 5

ps aux | grep squidGuard >> result

if grep  -q "squidGuard" result ;then

echo "Update Riuscito" >> result

else

echo "Update Non Riuscito" >> result

fi

rm blacklists.tgz

cat result | mail -iv -s "HOME: Le blacklist di squidGuard sono state aggiornate correttamente" $destinatario;

rm result

exit 0

Nella fattispecie, ho fatto in modo che successivamente all’aggiornamento delle blacklist venisse controllato lo stato di esecuzione di squidGuard, semplicemente lanciando un ps aux | grep squidGuard.

L’output di questo comando verrà inserito all’interno dell’email e se squidGuard è effettivamente presente tra i processi in esecuzione, sarà aggiunta la dicitura Update Riuscito.

Fatene buon uso.

A presto.

Script bash per l’individuazione di eventuali rootkit mediante rkhunter

Recentemente ho creato questo semplice scrip bash che consente di identificare eventuali rootkit installati sulla nostra macchina, inviando successivamente il risultato della scansione al nostro indirizzo email. Tale scrip si avvale del tool rkhunter.

bash

Ecco il codice:

#!/bin/bash

destinatario=vostro.indirizzo@email.it

logfile=/var/log/rkhuntercheck.log

ROOT_UID=0

if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo scrip"
        echo $ERRORE1
        echo "$(date) $ERRORE1" >> $logfile

        exit 1

fi

rkhunter --update -c --sk --nocolors > temp_rootkit;

cat temp_rootkit | mail -iv -s "Esito scansione rootkit con rkhunter" $destinatario;

rm temp_rootkit;

exit 0

In particolare, la flag –sk consente di skippare il keypress, mentre la flag –nocolors consente di creare un report senza preoccuparci della formattazione del testo mediante i colori.

Inoltre, prima di effettuare uno scan, grazie alla flag –update, aggiorno rkhunter con le ultime signature.

Spero che questo scrip vi possa tornare utile.

A presto.

Script bash per l’invio di notifiche tramite email

Poco tempo fa ho deciso di creare un piccolo scrip in grado di interrogare un database, salvare temporaneamente in un file la risposta alla query ed inviare una notifica via email all’indirizzo di posta specificato. Nella fattispecie, tale scrip ha come scopo principale quello di notificare le scadenze da saldare e quelle non rispettate.

bash,mail,email,mysql,query,script,scadenze,notifiche

Ma bando alle ciance ed ecco lo scrip:

#!/bin/bash

destinatario=vostro.indirizzo@email.it

logfile=/var/log/notifier.log

ROOT_UID=0

data=`date +%s` #lavoro con i timestamp per poter confrontare le date

if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo scrip"
        echo $ERRORE1
        echo "$(date) $ERRORE1" >> $logfile

        exit 1

fi

mysql -u root -ppassword -D nomedb -e "SELECT * FROM scadenza;" >> scadenze

echo "Hai le seguenti scadenze da saldare: " > scadenze_imminenti;

echo "Hai le seguenti scadenze non saldate: " > scadenze_nonrispettate;

while read line

do

        scad=`cat scadenze | grep - | awk '{print $2}'` #per individuare la data di scadenza.

        for info in $scad

        do

                datascad=`date --utc --date "$info" +%s`  #uso i timestamp per confrontare le date

                if [ "$data" -le "$datascad" ];then

                        if [[ $line =~ $info --;then

                                echo $line >> scadenze_imminenti

                        fi

                fi

                if [ "$data" -gt "$datascad" ];then

                        if [[ $line =~ $info --;then

                                echo $line >> scadenze_nonrispettate

                        fi
                fi

       done

done < scadenze

if grep -q "-" scadenze_imminenti ;then

uniq scadenze_imminenti | mail -iv -s "Scadenze da saldare" $destinatario;

fi

if grep -q "-" scadenze_nonrispettate ;then

uniq scadenze_nonrispettate | mail -iv -s "Scadenze non saldate" $destinatario;

fi

rm scadenze

rm scadenze_imminenti

rm scadenze_nonrispettate

exit 0

Come è facile notare, viene fatto un confronto tra la data corrente e quella di ciascuna scadenza (sottoforma di UNIX timestamp). Nel caso in cui la data corrente sia antecedente o uguale a quelle delle scadenze, esse verranno salvate nel file scadenze_imminenti, il cui contenuto verrà successivamente inserito nel corpo di una email e spedito al destinatario.

Invece, se la data attuale è maggiore di quella della scadenza, quest’ultima verrà salvata nel file scadenze_nonrispettate, il cui contenuto verrà recapitato nella casella email del destinatario.

Per qualsiasi chiarimento contattatemi.

Bye.