Beyond OS

Tecnologia em ambientes empresariais, focado em Software Livre e aquilo que der na telha

Subscribe to Beyond OS
Technorati
del.icio.us
07.jun.2008

Bloqueando tentativa de invasão via SSH

postado por Renê Teixeira Francisco

37  100x100 segurancao linux Bloqueando tentativa de invasão via SSH Nos últimos dias tive que verificar os arquivos de log dos meus Firewalls que estão instalados no SLES 10 da Novell. Para minha surpresa percebi muitas e muitas tentativas mal sucedidas (Ufa !!!) de acesso ao ssh. Sem brincadeira eram centenas de tentativas de acesso, um verdadeiro brute force. Embora, nossa senha de acesso seja muita forte com variação de maiúsculas e minúsculas, números e muitos dígitos e os acessos só sejam permitidos se o cliente tiver uma chave de encriptação obviamente listada no authorized_keys do sshd, não gostei do que vi.

A melhor solução é instalar um mecanismo que faça o monitoramento e bloqueie estas tentativas de invasão no momento em que elas ocorrem, ou seja, um NIDS (Network Intrusion Detection System). Para mim o melhor seria o Snort, quem sabe no futuro eu o instale e post aqui os passos. Como estou meio sem tempo no trabalho e já tinha visto um script no Cool Solutions da Novell resolvi dar uma procurada lá e achei.

O script abaixo basicamente lê o arquivo /var/log/message contando ips de internet que foram mal sucedidos no acesso ao ssh. Se a contagem ultrapassar 5 tentativas ele inclui o ip de internet no arquivo /etc/hosts.deny assim, nunca mais o servidor irá permitir tentativas deste ip. Após isso basta colocar este script para rodar no crontab em um intervalo de tempo razoável e pronto.

O Script

#!/bin/bash
#This script will monitor for failed login attempts and after a specified number of
times add the ip to a deny list
#Chad
LOGFILE="/var/log/messages"
HOSTSDENY="/etc/hosts.deny"
BADCOUNT="5"
# read logfile and look for invalid login attemps
grep sshd $LOGFILE |grep "Invalid user"| awk '{print $NF}'|sort|uniq -c|sort  -n|sed
"s/[[:space:]]*//" | while read i
do
        # read number of failed attempts
        count=`echo $i | cut -d" " -f1`
        # read ip address from failed attempt
        ip=`echo $i | cut -d" " -f2`
        #check hostdeny file to see if IP already exist
        already=`grep $ip $HOSTSDENY | grep sshd`
        #if IP does not exist add it to hostdeny file
        if [ -z "$already"  ]
        then
                if [ "$count" -ge "$BADCOUNT" ]
                then
                        echo "sshd: "$ip >> $HOSTSDENY
                fi
        fi
done

Coloque em um arquivo dentro do diretório que quiser e dê permissão de execução com o comando chmod +x /seu/diretorio/seu_arquivo.

Programando o Crontab

root@laprene:/ # crontab -e
10 0 * * * /seu/diretorio/seu_arquivo

Neste caso o crontab vai rodar o script todo dia às 00:10

Conclusão

Embora não seja a melhor solução traz a garantia de que antigos invasores não terão a porta aberta indefinidamente.

Até a próxima.

Related Posts with Thumbnails

Posts Relacionados

Compartilhe:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • email
  • LinkedIn
  • PDF
  • Reddit
  • StumbleUpon
  • Technorati
  • Twitter
  • FriendFeed
  • Rec6

Comente

Performance Optimization WordPress Plugins by W3 EDGE