quinta-feira, 27 de setembro de 2012

Anti scans e DDOS no conntrack !


Esses asiáticos desocupados ficam fazendo scan e criando virus horríveis que fazem mais scan... e essa merdas viram DDOS.

Recentemente tenho percebido que muitos pacotes chegam no servidor em portas e ips inutilizados. O número de conexões possíveis  é limitado em 65535 ! e quando o invasor já está dentro com conexões penduradas o iptables não bloqueia até todas serem eliminadas do conntrack... então é bom ficar de olho no conntrack.

O método abaixo previne DDOS, Scans, Virus e muito mais...

É bem simples, basta colocar o conntrack2.sh no crontab (15 em 15 minutos ) ou menos dependendo da exposição...  ele vai enviar o e-mail alertando, e também pode derrubar as conexões killconnections.sh e bloquear o invasor.

Se for utilizar atenção com os detalhes de rede local, no meu caso "10\.1" e se você tiver serviços que recebam mais de 3000 conexões coloque um grep -v também !





conntrack2.sh
-------------------------------------------------------------------------------
#!/bin/bash
N2=3000
cd /root/
cat /proc/net/ip_conntrack | cut -f2 -d"=" | awk {'print $1'} | sort | uniq -c|                                                                                         sort | tail -n 10 | grep -v " 10\.1" > /root/conntrack2.log
cat /root/conntrack2.log
for i in `cat /root/conntrack2.log | awk {'print $2'}`
do
N1=`cat /root/conntrack2.log | grep $i | awk {'print $1'}`
if [ $N1 -gt $N2 ];then
                (:
                    echo 'HELO mail';sleep 1
                    echo 'mail From:<suporte>';
                    echo 'rcpt To:<suporte>';
                    echo 'data';
                    echo 'subject: ' "Tentativa de Invasao";
                    echo 'Sender: <suporte>';
                    echo 'To: <suporte>';
                    echo '';
                    echo "mais de $N2 conexoes do $i Total $N1 conexoes provavel                                                                                         tentativa de invasao";
                    echo `whois $i | grep "owner:"`;
                    echo ".";
                    echo 'quit' ;) | nc mail 25
#matar as conexões

killconnections.sh $i
echo $i  >> /root/blacklist.lst
iptables -A INPUT -s $i -j DROP

fi
done

-------------------------------------------------------

killconnections.sh
if [ -z $1 ] ; then
exit
fi
grep -E "^tcp .{10,25}ESTABLISHED src=$1 " /proc/net/ip_conntrack | while read line ; do
S_IP=`echo $line | awk '{print substr($5,5)}'`
S_SOCK=`echo $line | awk '{print substr($7,7)}'`
D_IP=`echo $line | awk '{print substr($6,5)}'`
D_SOCK=`echo $line | awk '{print substr($8,7)}'`
echo "$S_IP:$S_SOCK $D_IP:$D_SOCK"
hping2 $D_IP -R -s $S_SOCK -p $D_SOCK -a $S_IP -k -c 1 >/dev/null 2>/dev/null &
done