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: 6.988 ]
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
Pegar ip dinamico enviar para ftp
Backup da database do gerenciador de pacotes RPM
Nenhum comentário foi encontrado.
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Como Incorporar o Áudio no Executável ? (2)
LibreOffice alterar nomenclatura do ícone (13)
O que você está ouvindo agora? [2] (130)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter