Protegendo seu servidor SSH contra ataque brute force (denyhosts)

Mostrei em outro post como proteger seu servidor ssh com o fail2ban. Nesse post irei demonstrar o uso do DenyHosts, que tem a mesma finalidade, para proteger o seu servidor ssh contra ataque de brute force.

Que o SSH é uma ferramenta indispensável para qualquer administrador GNU/Linux e a até Unix/Correlatos não é nenhuma novidade, mas por incrível que pareça quando menciono que qualquer um que tenha o SSH instalado e o mesmo está acessível na internet ele está sujeito a tentativas de acessos não autorizados cometidos por pessoas mau intencionadas que fazem uso de diversos scripts/programas criados especificamente para esse propósito.

O DenyHosts permite o monitoramento do serviço SSH e pode bloquear tentativas consecutivas de acesso a usuários existentes ou não em seu servidor.

Primeiramente vamos instalar o DenyHosts:

# apt-get install denyhosts

Vamos a configuração e algumas explicações de alguns parâmetros

# vi /etc/denyhosts.conf

# Arquivo de log de autenticação
SECURE_LOG = /var/log/auth.log

# O denyhosts vem configurado para utilizar tcp_wrappers
HOSTS_DENY = /etc/hosts.deny

# Por quanto tempo as entradas no arquivo hosts.deny serão mantidas, ajuste as suas necessidades.
PURGE_DENY = 1d

# Qual o serviço será monitorado, para todos use ALL
BLOCK_SERVICE = sshd

# Bloqueia o host após a quantidade especificada de falhas de login de usuários inválidos.
DENY_THRESHOLD_INVALID = 3

# Bloqueia host após falhas de login para usuários válidos
DENY_THRESHOLD_VALID = 5

# Bloqueia qualquer tentativa de login do usuário root
DENY_THRESHOLD_ROOT = 1

# Igual a opção acima mas para nomes de usuários listados em WORK_DIR/restricted-usernames
DENY_THRESHOLD_RESTRICTED = 1

# Diretório onde o denyhost escreve seus dados
WORK_DIR = /var/lib/denyhosts

# Tenta obter um nome associado ao endereço IP
HOSTNAME_LOOKUP=YES

# Email do administrador
ADMIN_EMAIL = seunome@seudominio

# Host e porta do servidor SMTP
SMTP_HOST = localhost
SMTP_PORT = 25

# Quem esta enviando o email
SMTP_FROM = DenyHosts <nobody@localhost>

# Desbloqueio de usuários válidos que tenham apenas errado na digitação
AGE_RESET_VALID=1d

# O mesmo só que aplicado ao usuário root
AGE_RESET_ROOT=25d

# O mesmo para usuário restrito
AGE_RESET_RESTRICTED=25d

# Para usuários inválidos
AGE_RESET_INVALID=10d

# Onde irá armazenar o log
DAEMON_LOG = /var/log/denyhosts

—–

Após as modificações vamos reiniciar o denyhosts

# /etc/init.d/denyhosts restart

Na imagem abaixo tenho uma pequena amostra de todos os hosts bloqueados pelo denyhosts

Uma boa pedida também é configurar o seu servidor SSH para não permitir login do usuário root (PermitRootLogin no) e também a troca da porta de acesso (Port 6702).

Espero que tenham gostado do post e não deixem de assinar o nosso portal.

 

  • jonas

    Ricardo muito Bom.
    Gostaria de saber se existe a possiblidade de criar artigos relacionados a monitoramento do servidor
    Especificamente com o zabbix.
    Valeu

    • Jonas,

      Temos a intenção de montar um post sobre zabbix sim, mas eu também escrevi um post sobre o munin.

      Abraços

  • ricardo montenegro

    Muito bom, já está funcionando 100%.
    Agora acho que estou mais seguro, rsrsrsrs

    • Ricardo,

      Tenho certeza que esta melhor do que antes. 🙂

      Abraços

  • Boa Noite !
    Primeiramente quero parabeniza-lo pelo ótimo tutorial, e tbm gostaria de saber se posso usar esta ferramenta para proteger outros serviços como FTP, SMTP, MYSQL ? se a resposta for positiva, gostaria de saber como ficaria as configurações.

    • Jorge,

      Obrigado pelo elogio. Quanto aos serviços cobertos pelo DenyHosts na teoria ele protege qualquer serviço que utilize tcpwrappers, mas eu nunca o utilizei para proteger outro serviço que não seja o SSH.

      Abraços

  • Acho uma boa pedida posts de monitoramento com o zabbix, vejo pouco material em português!! E em forma de vídeo seria mas interessante, parebéns pelos posts Ricardo. Ansioso já pelo post de zabbix. 🙂 Abs

  • Só para constar, uma alternativa mais simples. As seguintes linha de comando devem ser executada uma a uma no shell (nesta ordem) ou colocadas em um script:

    #Substituir “eth3″ pela placa de rede utilizada para SSH;
    #”–seconds 600″ refere-se ao tempo que o IP ficará bloqueado;
    #”–hitcount 8″ refere-se ao número de tentativas até o IP ser bloqueado.
    iptables -I INPUT -p tcp –dport 22 -i eth3 -m state –state NEW -m recent –set
    iptables -I INPUT -p tcp –dport 22 -i eth3 -m state –state NEW -m recent –update –seconds 600 –hitcount 8 -j DROP

  • Jones

    Ricardo veja se pode me ajudar, existe um ip que esta atacando diretamente o meu server com bruteforce no pop3… ja derrubei o serviço (nao uso muito pop neste server) e ja fiz as regras iptables corretamente, porem as tentativas estao tornando meu server instavel e impossibilitando o acesso das paginas e ate o ssh esta lento… enfim esta drenando minha banda como DDos.. alguma dica do que posso fazer?

    • Jones,

      Essa dica que vou te passar surgiu nos comentários de um de meus posts e vou te passar:

      (Carlos Jacon)

      As seguintes linha de comando devem ser executada uma a uma no shell (nesta ordem) ou colocadas em um script:

      #Substituir “ethx″ pela placa de rede utilizada pelo serviço;
      #”–seconds 600″ refere-se ao tempo que o IP ficará bloqueado;
      #”–hitcount 8″ refere-se ao número de tentativas até o IP ser bloqueado.

      iptables -I INPUT -p tcp –dport PORTA -i ethx -m state –state NEW -m recent –set
      iptables -I INPUT -p tcp –dport PORTA -i ethx -m state –state NEW -m recent –update –seconds 600 –hitcount 8 -j DROP

      Abraços

      • Jones

        Muito bom Ricardo, valeu pela resposta.
        Uma coisa que esta me atrapalhando aki é que foram espalhados emails com conteudo malicioso apontando para meus sites, para arquivos que de fato nao existem. Estou recebendo diariamente muitas requisicoes destes arquivos e retornado 404 para todos. Porem gostaria de saber se tem alguma maneira de eu barrar essas requisicoes sem nem mesmo perder banda respondendo com 404, teria que ser uma aplicacao que trata layer 7?

        Eu pensei em fazer um script para adicionar uma regra para dar DROP em todos os ips que tentam acessar tais arquivos e como a maioria sao ips dinamicos, limpar a tabela toda madrugada, mantendo as regras padrao do server…

        O que acha? Alguma outra dica?

        abraçao

        • Jones,

          Não conheço nenhuma aplicação que trate isso, seria interessante utilizar o módulo string do iptables para negar qualquer tentativa de acesso aos arquivos.

          Abraços

  • Olá Ricardo, tem algum problema em instalar o Denyhosts junto com o fail2ban?

    • Carlos,

      Nenhum problema desde que você lembre de criar excessões para os hosts que realmente precisam de acessar via SSH.