Esse artigo mostra como implementar um sistema de segurança para bloqueio de ataques brute-force em seu servidor SSH. Ao mesmo tempo também mostra como criar um esquema para permitir acesso remoto (para manutenção) a partir de qualquer IP da internet.
Se vocês prestaram um pouco de atenção no arquivo de configuração, devem ter percebido que talvez a única parte a ser editada (mas não necessária) é a que faz referência às redes que devam ser ignoradas no processo de monitoramento (ignoreip), geralmente a sua própria rede interna (ou nem isso, se os seus usuários não são confiáveis.. rs).
As outras partes que devem ser olhadas com atenção são:
maxfailures - que limita o número de falhas de login cujo valor padrão é 5, mas eu particularmente baixei para 2 na minha configuração;
bantime - que controla o tempo que o IP Será bloqueado, em segundos. O valor padrão é 600 (10 minutos), mas estou usando 120 (2 minutos);
findtime - valor em segundos que especifica a 'vida' de um login mal-sucedido na memória do fail2ban. O padrão é 600 e eu deixei assim mesmo.
Ou seja, caso algum fulano tente acessar o meu SSH as 10:00 e errou a senha, ele vai ter mais uma chance somente (lembram que eu coloquei o número de tentativas igual a 2? rs) até as 10:10... caso ele erre, ele vai ser bloqueado por 2 minutos. Se eu fosse um cara realmente MAU, colocaria o findtime = 3600, ou seja, o programa lembraria que ele errou a senha até uma hora depois... maldade isso!!! rs
Existe também a opção de enviar email para o administrador, mas como eu sei que não vou ler os emails enviados avisando do bloqueio mesmo, acabei nem testando/ativando.
Pois bem, nos meus servidores eu alterei as seguintes opções e ficaram assim:
[1] Comentário enviado por fernoliv em 10/11/2005 - 01:53h
Caro Julio, parabéns pelo artigo!
Eu gostaria de citar outros dois softwares que utilizo para bloquear IP´s de atacantes em meu servidor:
APF Firewall http://www.rfxnetworks.com/apf.php
Descrição: Firewall baseado em IPTables de fácil configuração e muito eficiente. A configuração é feita através de um .conf simples onde são informadas as portas a serem liberadas/bloqueadas, além de outras funcionalidades tanto para portas tcp como udp, além de bloquear ataques via ICMP (Denial of Service por exemplo) pois possui embutido um "anti-DOS". Utiliza a lista negras de IP´s que é atualizada frequentemente através do site www.dshiel.org (Distributed Intrusion Detection System), onde constam os IP´s utilizados com maior frequência para fins ilícitos.
-------------------------------------------
BFD - Brute Force Detect http://www.rfxnetworks.com/bfd.php
Descrição: Em conjunto com o APF Firewall, detecta tentativas de acesso não autorizada a serviços como SSH, Apache, EXIM, FTP, etc. Após 5 tentativas de acesso sem sucesso, o IP de origem é "dropado" no IpTables e o administrador do servidor pode ser avisado por e-mail.
Ambos são desenvolvidos pelo RFX Networks e são free e de uso irrestrito. Não é preciso manjar de IpTables, basta saber quais portais você quer liberar/fechar e eles fazem o trabalho.
[2] Comentário enviado por jmhenrique em 10/11/2005 - 08:37h
Apenas em tempo! desde quando escrevi o artigo, já sairam importantes modificações nas configurações com relação a failregex do ssh. No caso, a versão anterior apenas fazia um 'match case' simples, mas agora está muito mais sofisticada, e tende a ficar cada vez mais.
Caso você tenha seguido os passos e desabilitado a listagem do ssh na interface ipv6, você terá que editar também a failregex e retirar o bloco (?:::f{4,6}:)? dela, pois senão ele não irá casar a regra. Ficaria então algo como:
[6] Comentário enviado por jmhenrique em 10/11/2005 - 10:52h
technomancer, se você quer dar uma aliviada no fail2ban fazendo ele bloquear somente as coisas NECESSÁRIAS, eu incrementei as regras do hosts.allow e do hosts.deny...
segue abaixo:
1 - Imagino que você só irá acessar da rede brasileira, fiz um script que até o presente momento funciona a contento. Ele analisa via whois o ip da pessoa que está tentando acessar, e dependendo da resposta, automaticamente atualiza o hosts.allow ;-)
2 - edite o arquivo /etc/hosts.allow e coloque somente o seguinte:
#exemplo da sua rede:
sshd: 172.22.34.
#linha de comando que irá enviar o email, rodar
#o script que verifica se o ip pertence ao
#Brasil e se for o caso, re-escrever o hosts.allow sozinho.
--corte-----
#!/bin/sh
#Script de Dominio Público criado por
#Julio Henrique Maschio -
#Dominio Publico - a única e verdadeira LIBERDADE
#verifica_ip - verifica se o ip pertence ao brasil
IP_EXTERNO=$1
if [ "$IP_EXTERNO" == "" ] ; then
echo Uso: $0 xxx.www.yyy.zzz
echo
exit 1
fi
#SE O IP PERTENCE AO BRASIL, $VERIFICA_BRASIL DEVERÁ SER
#UMA STRING VAZIA
VERIFICA=`whois $IP_EXTERNO | grep -i \\.br`
if [ $? != 0 ] ; then
#o ip nao é do brasil, pode ser bloqueado tranquilamente.
#iremos bloquear logo a rede inteira...
REDE=`echo $IP_EXTERNO | cut -d\. -f1,2,3`
REDE="$REDE."
echo "sshd: $REDE" : DENY >>/tmp/$$listagem$$
cat /etc/hosts.allow >>/tmp/$$listagem$$
cat /tmp/$$listagem$$ >/etc/hosts.allow
rm -f /tmp/$$listagem$$
else
echo "nada a fazer"
fi
---corta---
este script verifica se o ip é do Brasil, se não for, adiciona ele no hosts.allow com uma instrução de DENY.
Ou seja, voc vai ver ele somente uma vez nos logs...hehehe
(não se esqueça de dar um chmod 755 nele, né?)
pronto, mais uma camada de segurança ao seu linux. :-D
[13] Comentário enviado por perucio em 12/09/2012 - 09:23h
no meu jail.conf não funcionou a função de e-mail, se mando e-mail via console ele vai normalmente, quando restarto o serviço ele da mensagem de erro!
[MAIL]
enabled = true
host = localhost
port = 25
from = root
to = MEU_EMAIL@EMPRESA.COM.BR
subject = [Fail2Ban] Bloqueio <ip>
message = Hi,<br>
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts.<br>
Regards,<br>
Root