[gl-como] Script controlla log

Fabio fabrix.xm@gmail.com
Gio 28 Ago 2014 23:43:36 CEST


script ultima versione
http://hastebin.com/xowamifofa.bash

#!/bin/bash
# Script per il controllo degli accessi ad un server web
# Lo script si aspetta che il log di apache sia nel formato standard 
(con IP 
# sorgente nella prima colonna). Se il log  in formato differente, 
cazzi.

indirizzo_mail="mail@dominio.com"
connessioni_al_giorno=150;
file_di_log="/var/log/apache2/access.log"
file_ip_bloccati="/var/cache/controllalog/ip_bloccati"
giorni_di_blocco=7
file_ip_conosciuti="/etc/ip_conosciuti"

# carica opzioni da file di configurazione (se esiste)
[[ -f /etc/controllaip ]] && source /etc/controllaip

# crea la directori dove salva $file_ip_bloccati se non esiste
[[ -d `dirname $file_ip_bloccati` ]] || mkdir --parents `dirname 
$file_ip_bloccati`
[[ -f $file_ip_bloccati ]] || touch $file_ip_bloccati

#Ripulisco gli IP dopo il tempo prestabilito
oggi=`date +%s`
giorni_di_blocco=$(($giorni_di_blocco * 24 * 60 * 60))
temp_ip_bloccati=`mktemp`
cp $file_ip_bloccati $temp_ip_bloccati
rm $file_ip_bloccati
while read ip_bloccato giorno_di_blocco
do
{
    if [ $oggi -lt $(($giorno_di_blocco+$giorni_di_blocco)) ]
    then
        echo $ip_bloccato $giorno_di_blocco >> $file_ip_bloccati
    else
        #rimuovo la regola da iptables 
        echo "Doh!"
 #iptables -D INPUT -s $ip_bloccato -p tcp --dport 80 -j DROP
        #iptables -D INPUT -s $ip_bloccato -p udp --dport 80 -j DROP
        #iptables -D INPUT -s $ip_bloccato -p tcp --dport 443 -j DROP
        #iptables -D INPUT -s $ip_bloccato -p udp --dport 443 -j DROP
    fi
}
done < $temp_ip_bloccati


#Crea la regexp per grep per escludere gli ip conosciuti dal log di 
apache
while read ip_conosciuto
do
{
    ip_conosciuti=$ip_conosciuti"|"$ip_conosciuto
}
done < $file_ip_conosciuti

#Qua parte il gioco
testo_mail=`mktemp`
file_temp=`mktemp`
mando_la_mail=0

echo "Controllo dei log di apache" > $testo_mail
grep -q -v [\'$ip_conosciuti\'] $file_di_log | awk ' { print $1}' | 
sort | uniq -c | sort -n --key=1,8 > $file_temp
while read volte ip
do
{
    if [ $volte -gt $connessioni_al_giorno ]
    then       
        if grep -q $ip $file_ip_bloccati
        then
            #echo $ip " e' gia' inserito in $file_ip_bloccati" >> 
./testo_mail
     echo "Duh!"
        else
            mando_la_mail = $(($mando_la_mail+1))
            echo $ip " Inserisco un nuovo ip da bloccare per " $volte 
"connessioni">> $testo_mail
            #iptables -I INPUT -s $ip -p tcp --dport 80 -j DROP
            #iptables -I INPUT -s $ip -p udp --dport 80 -j DROP
            #iptables -I INPUT -s $ip -p tcp --dport 443 -j DROP
            #iptables -I INPUT -s $ip -p udp --dport 443 -j DROP
            echo $ip $oggi >> $file_ip_bloccati;
        fi
    fi
}
done < $file_temp


if [ $mando_la_mail -gt 0 ]
then
    mutt -s "Connessioni giornaliere" -- $indirizzo_email < $testo_mail
fi

rm $temp_ip_bloccati
rm $file_temp
rm $testo_mail





Maggiori informazioni sulla lista gl-como