Linux

DenyHosts – Proteja o seu servidor de ataques via SSH

17 Comentários

…baseados em dicionários e de força bruta

Como já tive oportunidade de referir em vários artigos, sou um “viciado” em SSH para acesso remoto as minhas máquinas a partir de qualquer lugar/dispositivo. O SSH (Secure Shell), também conhecido como Secure Socket Shell, é um protocolo/aplicação que permite de forma segura aceder remotamente a uma máquina Linux.

No entanto, ao activarmos o SSH numa máquina Linux no porto 22 e estando esta exposta para o exterior (Internet), é frequente começarmos a receber milhares de tentativa de acesso provenientes de todo o mundo. Como resolver esta situação?

ssh_03



Para quem não sabe, os ataques baseados em força bruta recorrem normalmente a dicionários e vão testando milhares de utilizadores e passwords até que se consiga ganhar acesso. Para quem é administrador de sistemas linux e caso tenha o SSH a correr no sistema, pode visualizar facilmente essa informação nos logs do sistema (no caso do CentOS, essa informação está em /var/log/secure).

ssh_01

O que é o DenyHosts?

O DenyHosts é um script desenvolvido para sistemas Linux que permite “ajudar” no controlo de ataques indevidos via SSH. Na prática, este script avalia constantemente as tentativas de acesso via SSH e no caso  de serem considerados como ataques de força bruta, é criada uma entrada no ficheiro /etc/hosts.deny que bloqueia o acesso da máquina remota (que supostamente está a tentar aceder indevidamente).

Este script permite:

  • Processar todas as tentativas de acesso (com e sem sucesso) que são registadas no ficheiro /var/log/secure
  • Definir um número de tentativas falhadas no acesso
  • Adicionar manualmente máquinas à lista negra (adicionando essa informação no ficheiro /etc/hosts.deny)
  • Adicionar manualmente máquinas à lista de máquinas permitidas (adicionando essa informação no ficheiro /etc/hosts.allow)
  • Envio de e-mail para administrador da máquina com informações sobre as máquinas bloequadas
  • Resolução de IPs para hostnames
  • ..entre muitas outras funcionalidades (ver aqui)
Como instalar o DenyHosts no CentOS?

Para este tutorial, recorremos ao CentOS 6.0.

Para instalar o DenyHosts via repositório, vamos adicionar à nossa máquina o repositório EPEL

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum install yum-priorities

Em seguida instalamos o script DenyHosts

yum install denyhosts

Definimos que o denyhosts deverá arrancar ao automaticamente com o sistema

chkconfig denyhosts on

e em seguida, arrancamos o serviço

service denyhosts start

E está feito. Caso pretendam realizar alguma configuração no denyhosts devem fazê-la em /etc/denyhosts.conf

Para verificarem quais as máquinas que o denyhosts coloca na blacklist, basta aceder ao ficheiro /etc/hosts.deny, utilizado para isso, por exemplo, o comando:

tail -f /etc/hosts.deny

Dica: Para verificarem o denyhosts experimentem, a partir de uma máquina remota, ligaram-se ao vosso servidor com SSH e experimentarem 5 autenticações falhadas.

Autor: Pedro Pinto
Partilhar:
Tags:
Também pode gostar

Comentários

17

Responder a José Maria Oliveira Simões Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Cagamelo Voador
    Cagamelo Voador

    Útil… 🙂 Obrigado.

  2. Avatar de Duarte Mechas
    Duarte Mechas

    Aconselho a dar uma olhada no Fail2Ban. Muito bom!
    http://www.fail2ban.org/wiki/index.php/Main_Page

    1. Avatar de João Ildefonso
      João Ildefonso

      Concordo

  3. Avatar de Rui Costa

    Segurança acima de tudo. Tenho utilizadores que me solicitam a possibilidade alterarem as suas senhas mas umas mais “memorizaveis”, mas devido á segurança que imponho aos meus servidores isso será impossível de acontecer.

  4. Avatar de Nuno Mendes
    Nuno Mendes

    Boa recomendação Pedro. Ataques (ou tentativas) de tipo bruteforce em SSHd estam sempre a acontecer.

  5. Avatar de bintoito
    bintoito

    Boas,
    Aproveito o tópico para colocar uma questão:
    Tenho DD-WRT (não me recordo agora da v específica, se não for a última há.de ser das + recentes pq é de meados do mês passado) num Asus RT-N13U rev B1.
    Tenho disabled todas as hipóteses de acesso a partir da WAN tipo telnet, ssh, admin etc e tal, contudo ao correr o GRC Shields Up tenho sempre a porta 80 visível (as restantes “common ports” estão stealth).
    Não percebendo puto de comandos, apenas contando já com alguns anos de experiência empírica a configurar routers, que fazer para ter td stealth?
    Toda e qualquer sugestão é mt bem-vinda!

    1. Avatar de q
      q

      Portal 80 é a porta utilizada pelo browser para veres os sites de internet com ela fechada não irias conseguir nem sequer ver este site, e stealth n internet é coisa que nao existe tens de ter uma boa firewall e um antivirus sempre atualizado.

      1. Avatar de José Maria Oliveira Simões
        José Maria Oliveira Simões

        Tenha em atenção que para se poder ter acesso à WAN, o porto 80 é aberto para fora. Só os servidores WEB é que tem (devem ter) o porto 80 aberto para dentro. De qualquer forma, o porto 80 está a ser visto, porque o router respondeu com o protocolo ICMP. Consulte aqui a informação
        http://nmap.org/man/pt_PT/man-port-scanning-techniques.html
        e aqui
        http://www.normes-internet.com/normes.php?rfc=rfc792&lang=pt
        pode por no iptables qualquer coisa semelhante a
        iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

  6. Avatar de José Maria Oliveira Simões
    José Maria Oliveira Simões

    Para fazer face ao problema descrito, pode inserir estas instruções no iptables. A vantagem é que a porta é fechada durante um certo tempo. Depois, a porta volta a ser aberta automaticamente. Na pratica, ajuda a que não se seja vitima de DOS, pois, passado o tempo estipulado, a porta é aberta. Isto é o que se chama, o inferno dum cracker, pois, não consegue entrar, nem consegue fazer um ataque DOS.

    # Bloqueia crackers a tentar penetrar no sistema

    /sbin/iptables -N SSH
    /sbin/iptables -N SSH_ABL
    /sbin/iptables -A SSH -m recent –name SSH_ABL –update –seconds 3600 -j REJECT
    /sbin/iptables -A SSH -m recent –name SSH –rcheck –seconds 60 –hitcount 5 -j SSH_ABL
    /sbin/iptables -A SSH_ABL -m recent –name SSH_ABL –set -j LOG –log-level warn –log-prefix “ABL: +SSH: ”
    /sbin/iptables -A SSH_ABL -j REJECT
    /sbin/iptables -A SSH -m recent –name SSH –rcheck –seconds 2 -j LOG –log-level warn –log-prefix “RATE: ”
    /sbin/iptables -A SSH -m recent –name SSH –update –seconds 2 -j REJECT
    /sbin/iptables -A SSH -m recent –name SSH_ABL –remove -j LOG –log-level warn –log-prefix “ABL: -SSH: ”
    /sbin/iptables -A SSH -m recent –name SSH –set -j ACCEPT
    /sbin/iptables -A INPUT -m state –state NEW -p tcp -m tcp –dport 22 -j SSH

    # Protecao contra Ataques DoS

    /sbin/iptables -A INPUT -m state –state INVALID -j DROP
    /sbin/iptables -A OUTPUT -p tcp ! –tcp-flags SYN,RST,ACK SYN -m state –state NEW -j DROP

  7. Avatar de Nelson N
    Nelson N

    Uma dúvida: por defeito não é instalado não é verdade?
    E no caso de ser instalado, como se desactiva ou elimina?
    obrigado

  8. Avatar de brucetuga
    brucetuga

    interessante o aplicativo mas para administradores de sistemas não é mais fácil redireccionar um porto xxxx para o porto 22?

    1. Avatar de Filipe YaBa Polido
      Filipe YaBa Polido

      Exactamente! mais simples, rápido e eficaz.
      Ou isso ou port knocking 😀

  9. Avatar de Deus
    Deus

    Muito útil, logo agora que estou a aprender a trabalhar com servidores por ssh 😀

  10. Avatar de Roy
    Roy

    Ainda bem que não percebo nada disso… mas com chaves públicas RSA (com 4096 bits de preferência) ou EC de 521 bits, isso não era mais seguro? Além de confirmar que estão se a ligar ao servidor correcto.
    E claro mudar o porto de ligação.. óbviamente.

    1. Avatar de José Maria Oliveira Simões
      José Maria Oliveira Simões

      Ponhamos as coisas neste pé. Você não quer que nenhum “indesejável” entre na sua casa. Portanto, para resolver e prevenir esse problema, compra a tal fechadura toda xpto e monta-a na porta da rua. No entanto, você continua a deixar as janelas da sua casa escancaradas. E diz, “bem … o problema está resolvido”. O tal “indesejável”, sabe que você é um homem precavido, pois, homem prevenido, vale por dois. O tal “indesejável”, que por sinal não é estúpido, põe-se logo a magicar uma maneira de entrar na sua casa. E pensa com os botões dele, “diacho, como é que vou conseguir entrar ?” Então ele repara nas janelas abertas e entra a sua casa, sem ser convidado. Como vê, é o eterno jogo, uns a querer proteger os seus bens e outros a tentar arranjar maneira de lhe deitar a mão. E olhe, que tempo e imaginação, não falta a estes indivíduos.

  11. Avatar de Tiago Carvalho

    Obrigado pela dica Pedro Pinto.

    Já agora, deixo o meu parecer relativamente a autenticação baseada em password: Por si só é uma falha de segurança. Autenticação com chaves privadas e publicas sempre dificulta ainda mais a vida de utilizadores mal intencionados, espreitem aqui http://www.debian-administration.org/articles/530