Testado em slackware 9 e 10. "não sei se funciona em outra distribuição".
O funcionamento dele é simples, verifica no arquivo de log se ouve tentativa de acesso utilizando os usuários comuns em ataques brute force "admin,guest, test etc.." - Se alguma ocorrência for encontrada é gerada um arquivo com IP's dos atacantes. O sistema cria um script acrescentado uma regra de INPUT no iptables, bloqueando o ip do invasor.
Pode ser inserido no crontab em intervalos de 10 minuto ou menos.
#!/bin/sh
# Desenvolvido por José Roberto da Silva
# Testado no slackware 9 e 10.
#
####
tempip="/etc/rc.d/scripts/temp/blocked-ips.tmp";
blockip="/etc/rc.d/scripts/temp/blocked-ips";
script="/etc/rc.d/scripts/temp/fir_blocked";
# separa todos os ips que tentaram bruteforce utilizando os usuarios guest/teste/admin
cat -n /var/log/messages | grep -P "(guest|test|admin|user)" | grep -i sshd | awk -F" " '{ print $11}' > $tempip;
# faz backup da lista de ips bloqueados
if [ -f $blockip ]; then
cat $blockip >> $tempip;
fi
# remove ips duplicados
sort -u $tempip | grep -v ^$ | grep -v user > $blockip;
# gera um script que bloqueia o ip através do iptables
ips=$(cat $blockip);
echo "iptables -F INPUT" > $script;
for ip in $ips ; do
blocked=("iptables -A INPUT -s $ip -j DROP")
echo $blocked >> $script
done
chmod +x $script
$script
[1] Comentário enviado por y2h4ck em 16/01/2005 - 00:14h
Amigão desculpa minha ignorancia ... mais pra que um atacante utilizaria usuarios como
guest .. etc
se ele for realizar um ataque de força bruta ele pelo menos terá um usuario valido no sistema conhecido e que ele saiba que tem acesso shell ...
entao a abordagem tem que ser contrario ...
ele analisar o log e se determinado usuario tiver varias entradas erroneas ... digamos ...
mais do que 5 num determinado espaço de tempo curto ...
pq se o script analisar o log todo pode pegar varias tentativas em time stamps differentes ...
e isso geraria falso positivo ...
entao acho que e melhor vc revisar seu script pq ele ta sem logica
a ideia e boa
mas a aplicação ta sem nexo.
[2] Comentário enviado por joroberto em 16/01/2005 - 17:34h
Amigo, se vc verificar um log de um servidor online vai perceber que 90% dos ataques de bruteforce são baseados em dicionários de nomes óbvios, que são utilizados por escripts de bruteforce.
Eu sou Analista/programador e trabalho quase que exclusivamente com programação em banco de dados, o servidor onde tenho uma base online tinha em média de 10 a 15 ataques/dia.
Então faz sentindo eu criar uma barreira para evitar esses tipos de ataques, o que diminui em 80% esse problema.
Quanto ao script está sem lógica, acho que vc não entedeu o real significado desse script.
[3] Comentário enviado por sergiomb em 17/01/2005 - 08:46h
Boa estava mesmo a preceisar deste script, tenho um servidor on-line, em linux claro, e é incrivel a tentativa de ataques que o servidor sofre, uns destes ataques era precisamente ao ssh.
[4] Comentário enviado por mrovari em 22/01/2005 - 17:51h
José,
o script é bem interessante e útil, porém em determinadas situações/ambientes, deve-se atentar para a linha: echo "iptables -F INPUT" > $script;, pois pode causar paralização do ambiente, isso dependendo qual a arquitetura do Firewall/Rede.
[5] Comentário enviado por Lpareal em 02/01/2006 - 16:09h
José,
tem mais um fator importante, que pode ser usado em combinação com seu script
É possível que o atacante possa usar um programa que tenha uma lista com vários possíveis nomes, combinações de nomes, nomes de frutas, países, etc, etc.
Com base nessa lista ou, melhor dizendo, "dicionário de nomes de login", ele pode tentar o tempo que quiser, até conseguir entrar e tomar o acesso root.
Normalmente, o serviço SSH usa a porta 22 TCP. Você pode dificultar o acesso do atacante se trocar o número da porta no arquivo sshd.conf. Coloque uma porta não-válida (acima de 1024) que não seja usada por nenhum serviço ou programa.