[gl-como] Controllo i log

Davide De Prisco deprisco.davide@gmail.com
Ven 22 Ago 2014 16:22:18 CEST


Piccoli miglioramenti, poco tempo e tanto legno da piallare....
Manca la parte per la gestione dello sblocco degli ip_monelli dopo n
giorni, o meglio c'e' ma e' in fase di test.
E manca pure l'inserimento all'avvio di una regola di iptables per
ogni ip di quelli bloccati ma e' una cosa semplice quella.
Altre versioni da lunedi', ora vado a piallare.

#!/bin/bash
#Script per il controllo degli accessi ad un server web
mando_la_mail=0;
connessioni_al_giorno=150;
file_di_log="/var/log/apache2/acces.log";
file_ip_bloccati="./IP_BLOCCATI";
file_ip_conosciuti="./IP_CONOSCIUTI";
file_temp="./temp";
giorni_di_blocco=7;
ip_conosciuti="";
oggi=`date +%y%m%d`;
#Ripulisco gli IP dopo il tempo prestabilito
riga=1;
while read riga_ip_bloccato
do
{
ip_bloccato=`echo $riga_ip_bloccato | awk ' { print $1}'`;
giorno_di_blocco=`echo $riga_ip_bloccato | awk ' { print $2}'`;
if[ $oggi -gt $(($giorno_di_blocco+$giorni_di_blocco)) ]
then
sed -e 'd$riga' $file_ip_bloccati
riga=$(($riga+1));
}
done < $file_ip_bloccati

while read ip_conosciuto
do
{
ip_conosciuti=$ip_conosciuti"|"$ip_conosciuto;
}
done < $file_ip_conosciuti
echo "Controllo dei log di apache" > ./testo_mail
echo "IP bloccatti oggi" > ./elenco_ip_giornaliero
grep -q -v [\'$ip_conosciuti\'] $file_di_log | awk ' { print $1}' |
sort | uniq -c | sort -n --key=1,8  > $file_temp
while read linea
do
{
volte=`echo $linea | awk ' { print $1}'`;
ip=`echo $linea | awk ' { print $2}'` ;
if [ $volte -gt 150 ]
then
mando_la_mail=1;
if  grep -q $ip /etc/hosts.allow
then
echo $ip " deve essere un tuo IP non inserito in " $file_ip_conosciuti
>> ./testo_mail
else
if  grep -q $ip /etc/hosts.deny
then
echo $ip " e' gia' inserito in /etc/hosts.deny" >> ./testo_mail
else
oggi=`date +%j`;
echo $ip " Inserisco un nuovo ip da bloccare per " $volte "
connessioni">> ./testo_mail
echo " ALL: "$ip >> /etc/hosts.deny ;
iptables -I INPUT -s $ip -p tcp --dport 80 -j DROP
iptables -I INPUT -s $ip -p udp --dport 80 -j DROP
echo $ip >> ./elenco_ip_giornaliero;
echo $ip >> $file_ip_bloccati" "$oggi;
fi
fi
fi
}
done < $file_temp
if [ $mando_la_mail -gt 0 ]
then
numerorighe=`wc --lines ./elenco_ip_giornaliero | egrep -o '[0-9]*'`
if [ $numerorighe -gt 1 ]
then
mutt -s "Connessioni giornaliere"  -- vosta_mail@dominio.com  < ./testo_mail
fi
fi

-- 
Davide


Maggiori informazioni sulla lista gl-como