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.







Comente