Descobre e bloqueia o IP de quem mais tem conexão no servidor
Publicado por Ricardo Lino Olonca (última atualização em 31/10/2012)
[ Hits: 7.571 ]
Homepage: ricardoolonca.blogspot.com.br
Resolvi publicar esse script depois que um amigo aqui do VOL publicou algo parecido.
Esse script, que começou a nascer da necessidade de limitar o número de conexões em um servidor web, fui mudando aos poucos. Agora ele deve rodar via cron, bloqueia quem tiver mais do que 100 conexões ativas simultâneas no servidor, bloqueia tentativas de ataque por força-bruta (20 erros) e também bloqueia quem ultrapassa os limites definidos pelo Apache/SuHosin.
Além desse script, rodo outros programas nos servidores, como Snort, Fail2ban etc.
#!/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
Script simples para verificar usuários logados na maquina e as postas abertas
"Wnslookup" - Monitorando os DNS da Rede
Instalador do Nagios no Fedora 14 e CentOS 5
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Instalação dualboot Windows 11 e Debian 13 (0)
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









