#!/bin/bash
# Descobre e bloqueia o ip de quem mais tem conexao no servidor
# Feito por Ricardo Lino Olonca em 15/12/2011
# Versao 0.0.1 - Passei a considerar apenas conexoes estabelecidas - Ricardo Lino Olonca - 19/12/2011
# 0.1 - Bloqueio de tentativa de invação por ataque de forca buta no ssh - Ricardo Lino Olonca - 29/12/2011
# Corrigido o ip da rede dmz
# 0.1.1 - Trocado "cut" por "awk" no processo de forca bruta para corrigir o erro em dias menores que 10 - Ricardo Lino Olonca - 02/01/2012
# 0.1.2 - Corrigido o erro na mensagem quando encontra ataque pelo Suhosin - Ricardo Lino Olonca - 11/04/2012
# 0.1.3 - Corrigido o erro na mensagem quando encontra ataque pelo Suhosin - Ricardo Lino Olonca - 12/04/2012
# 0.1.4 - Exclui o ip 127.0.0.1 da checagem das conexões - Ricardo Lino Olonca - 16/05/2012
# 0.1.5 - A checagem das conexões agora servem para o Linux em português e em inglês - Ricardo Lino Olonca - 05/10/2012
#set -x
# Variaveis
# Máximo de conexoes simultaneas
LIMITE=100
# Máximo de tentativas de autenticacao
AUTH=20
# Email que recebera o aviso
EMAIL=
'ricardo.olonca@vivaolinux.com.br'
# Checa se o numero de conexoes ultrapassou o limite e bloqueia o ip em caso afirmativo
maior=`
netstat
-na |
grep
^tcp |
grep
ESTAB |
awk
'{print $5}'
|
cut
-d
":"
-f1 |
grep
-
v
0.0.0.0 |
grep
-
v
127.0.0.1 |
sort
|
uniq
-c |
sort
-nr |
head
-1`
n=`
echo
$maior |
awk
'{print $1}'
`
if
[ $n -gt $LIMITE ]
then
ip=`
echo
$maior |
awk
'{print $2}'
`
/sbin/iptables
-nL |
grep
$ip 2>
/dev/null
>
/dev/null
if
[ $? -
eq
1 ]
then
/sbin/iptables
-A INPUT -s $ip -j DROP 2>
/dev/null
>
/dev/null
logger
"Ip $ip bloqueado com $n conexoes"
for
i
in
$EMAIL
do
echo
"O ip $ip foi bloqueado com $n conexoes no servidor `hostname`"
|
/usr/bin/sendemail
-f root@vivaolinux.com.br -t $i -u
"Bloqueio de ip"
-s smtp.vivaolinux.com.br
done
fi
fi
# Checa se o Suhosin achou algum tipo de ataque
for
i
in
`
grep
suhosin
/var/log/syslog
|
cut
-d
"("
-f2 |
cut
-d
"'"
-f2 |
grep
^[0-9] |
sort
|
uniq
`
do
/sbin/iptables
-nL |
grep
$i 2>
/dev/null
>
/dev/null
if
[ $? -
eq
1 ]
then
/sbin/iptables
-I INPUT -s $i -j DROP 2>
/dev/null
>
/dev/null
logger
"Ip $i bloqueado devido a tentativa de ataque detectada pelo Suhosin"
for
j
in
$EMAIL
do
echo
"O ip $i foi bloqueado no servidor `hostname` devido a tentativa de ataque detectada pelo Suhosin"
|
/usr/bin/sendemail
-f root@vivaolinux.com.br -t $j -u
"Bloqueio de ip"
-s smtp.vivaolinux.com.br
done
fi
done
# Checa se houve tentativas de ataque por forca bruta
for
i
in
`
grep
invalid
/var/log/auth
.log |
awk
'{print $13}'
|
sort
|
uniq
-c |
sort
-nr |
awk
'{print $1";"$2}'
`
do
numero=`
echo
$i |
cut
-d
";"
-f1`
if
[ $numero -
ge
$AUTH ]
then
ip=`
echo
$i |
cut
-d
";"
-f2`
/sbin/iptables
-nL |
grep
$ip 2>
/dev/null
>
/dev/null
if
[ $? -
eq
1 ]
then
/sbin/iptables
-I INPUT -s $ip -j DROP 2>
/dev/null
>
/dev/null
logger
"Ip $i bloqueado devido a tentativa de ataque por força bruta"
for
i
in
$EMAIL
do
echo
"O ip $ip foi bloqueado no servidor `hostname` devido a tentativa de ataque por forca bruta"
|
/usr/bin/sendemail
-f root@vivaolinux.com.br -t $i -u
"Bloqueio de ip"
-s smtp.vivaolinux.com.br
done
fi
fi
done