Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: KDE 3 - Lenny II
Por pinduvoz
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Bloqueio de repetidas tentativas de login ao seu Linux
Linux user
jmhenrique
10/11/2005
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.
Por: julio henrique maschio
[ Hits: 49696 ]
Conceito: 9.9   8 voto(s)8 voto(s)8 voto(s)8 voto(s)8 voto(s) + quero dar nota ao artigo

O problema

Trabalho em um órgão público e aqui temos uma rede 'não-muito-confiável' atendida por links ADSL e para variar, temos que fazer a manutenção remota de vez em sempre e pra variar também, nunca do mesmo local. Alguns dos admins usam linha discada de outros locais da cidade e até do estado para acessar e bloquear este tipo de acesso no firewall ficou fora de cogitação.

Desabilitar a autenticação login/senha e colocar no lugar autenticação por chaves também foi descartado.

Então, como fazer um eficiente controle de segurança do acesso externo de usuários legítimos e ainda assim bloquear na medida do possível os ataques de script-kidies que atualmente estão infestando os logs de qualquer servidor aberto na internet?

Procurei na internet algumas horas e achei duas soluções diferentes que atendem dois diferentes tipos de configuração:
  1. Um conjunto de regras que limitam o número de novas conexões pelo SSH em um determinado intervalo de tempo;
  2. Um pacote feito em Python que monitora os logs e detecta tentativas frustradas de login no servidor SSH (Apache também e segundo o autor, pode ser estendido a qualquer outro tipo de serviço que gere logs em texto plano) e adiciona regras de bloqueio por um tempo determinado no firewall.

    Por fim, as regras clássicas, porém não menos importantes, para informar ao administrador do site QUEM se logou QUANDO e ONDE (hosts.allow, hosts.deny).

Próxima página >>




Páginas do artigo

Outros artigos deste autor

Leitura recomendada

Comentários
[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.

É isso ai!

Abraço, Fernando.

[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:

failregex = : (?:(?:Authentication failure|Failed [-/\w+]+) for(?: [iI](?:llegal|nvalid) user)?|[Ii (?:llegal|nvalid) user).* from (?P<host>\S*)

[3] Comentário enviado por technomancer em 10/11/2005 - 09:31h:

Muito obrigado! Eu tenho um servidor aqui na empresa que disponibiliza acesso via ssh e estou tendo logs cheios também.

Dam kidos!

[4] Comentário enviado por lennon.jesus em 10/11/2005 - 09:34h:

Grande dica! As configurações de segurança dessa ferramenta são fundamentais para qualquer Sistema que precise ser acessado remotamente.

Parabéns pelo artigo!
XD

[5] Comentário enviado por technomancer em 10/11/2005 - 10:02h:

Voltando a comentar... hoje fui dar uma checada no log, e me deparei com o registro de um possivel ataque de dicionario via ssh.

Quero agradecer novamente. Mais um ponto contra os kidos!

[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.

sshd: ALL : spawn (echo | /usr/bin/mail -s "[ SSH ] - %c - %u %h %s" root ; /usr/local/bin/verifica_ip %a )

salve e coloque este script em /usr/local/bin/

--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


[7] Comentário enviado por Herr_Filip em 11/11/2005 - 08:29h:

show o artigo!
parabens!!

[8] Comentário enviado por dbaio em 11/11/2005 - 20:39h:

parabéns.. Muito bom o artigo
!!!



[9] Comentário enviado por Century_Child em 15/11/2005 - 19:52h:

Interessante. Tem alguém que fica "poluindo" minha conexão (que já não é lá essas maravilhas) com tentativas de login via SSH.

[10] Comentário enviado por diogofsr em 10/06/2006 - 06:58h:

Belíssimo artigo meu amigo.
Me ajudou horrores.
Valeu mesmo.

[11] Comentário enviado por cold_feelings em 14/09/2006 - 07:57h:

Vlw ae pelo artigo, era disso q eu tava precisando .. :)

[12] Comentário enviado por pontejunior em 16/03/2009 - 20:05h:

Gostei...Muito interessante...São poucos que merecem entrar nos favoritos e este é um deles.


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.