Como proteger SSH com fail2ban no Debian 7

Como proteger SSH com fail2ban no Debian 7

Todo servidor ou computador ligado a uma rede é exposto a um certo grau de risco. Qualquer máquina, incluindo uma instânica, conectada à internet é um alvo potencial para ataques maliciosos.

Ter um firewall bem configurado irá evitar muitos tipos de acesso ilegítimo. SSH é o serviço mais utilizado para entrar em sistemas remotos, e por isso também é um dos alvos mais frequentes.

Felizmente, existe uma ferramenta disponível que pode mitigar este vetor de ataque, chamado fail2ban , essa ferramenta pode ser configurada para permitir logins legítimos usando SSH,  e proibir endereços IP depois de terem falhado para autenticar corretamente após um determinado número de vezes.

Vamos instalar e configurar este software em um Instância Debian 7.

Índice:

Etapa 1: Instalar fail2ban


  1. Debian inclui fail2ban em seus repositórios padrão. Podemos fazer download e instalá-lo com o seguinte comando.

    sudo apt-get update
    sudo apt-get install fail2ban
  2. Este fail2ban não só irá instalar, mas também irá iniciar o serviço com as configurações padrão.

Etapa 2: Configurar fail2ban


  1.  A configuração fail2ban é mantida no diretório /etc/fail2ban. O arquivo de configuração que especifica as regras que proíbem padrão é chamado jail.conf.
  2. Por causa da maneira que Fail2ban atualiza seus arquivos de configuração quando o programa tem uma nova versão, não devemos editar o arquivo de configuração padrão, em vez disso, devemos copiá-lo para um novo local e editá-lo.

    cd /etc/jail2ban
    sudo cp jail.conf jail.local
    sudo nano jail.local
  3. Aqui, podemos alterar qualquer configuração que foi definida na configuração padrão.

Configuração padrão

  1.  A sessão que começa [DEFAULT] configura padrões que podem ser substituídas em contextos mais específicos mais tarde na configuração. É uma boa ideia ter padrões fortes.
  2. A maioria das configurações que foram dadas são boas opções para opções padrão. No entanto, há algumas áreas que beneficiariam com a configuração.

Padrões Ban

  1. Podemos configurar a maneira que Fail2ban implementa a sua proibição, modificando alguns parâmetros. Aqui estão alguns dos mais importantes:
    1. ignoreip: Este parâmetro recebe uma lista de endereços IP que devem ser excluídos das regras Fail2ban. Os endereços IP ou blocos listados aqui não terá restrições colocadas sobre eles, para escolhê-los com sabedoria e especificamente.
    2. Endereços IP e intervalos são separados por espaço em branco.
    3. Você deve adicionar o seu endereço residencial ou comercial IP para o final da lista de modo que você não será bloqueado, se você está tendo problemas para acessar.
    4. Isso será algo como: "ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS "
    5. bantime: Esta lista a quantidade de tempo que uma proibição vai durar, se o cliente não consegue autenticar corretamente. É dado em segundos.
    6. O valor padrão proíbe clientes por 10 minutos.
    7. maxretry: Este parâmetro especifica o número de tentativas que são permitidas antes de uma proibição ser instituída.

Definir ações Ban

  1. Quando a proibição é necessária, fail2ban pode proceder em algumas maneiras diferentes. Ele decide sobre as ações necessárias, olhando para os seguintes parâmetros:
    1. banaction: Esta configuração especifica o arquivo de configuração que será usada quando a proibição é necessária.
      1. O valor deste parâmetro refere-se a um arquivo no diretório /etc/fail2ban/action.d, que irá lidar com o processo de proibição real.
      2. O valor padrão usa iptables (um firewall) para proibir um IP em todas as portas quando ele falha a autenticação. Vamos olhar para as regras que proíbem IP específicos mais tarde. 
    2. action: Este parâmetro especifica um dos atalhos de ação listados acima dela. Ele basicamente chama um banaction roteiro (como mencionado acima), e em seguida, atribui informação apropriada para variáveis e as passa para o script.
  2. A ação padrão é action_, que chama o script e passa o nome, porta, protocolo, e da cadeia para o script. Não envia um endereço de e-mail ou linhas de log como algumas das outras ações fazem.

Configurar alertas de e-mail

  1. Se você gostaria de configurar fail2ban para e-mail quando se institui uma proibição, você pode configurar isso na sessão padrão também.
  2. Se tiver configurado um servidor de correio em sua máquina, você pode configurar fail2ban para enviar e-mail para um endereço externo. Caso contrário, você pode tê-la entregue a uma conta local unix.
  3. Há dois parâmetros relevantes:
    1. destemail: Esta opção define o endereço de e-mail que será notificado no caso de uma proibição.
      1. O valor padrão, "root @ localhost", irá entregar correio para a conta root do computador atual.
      2. Se você tem um servidor de email configurado, sinta-se livre para mudar isso para um endereço de correio externo.
    2. mta: Isso especifica o agente de correio que será usado para entregar o correio.
      1. Se você tem um servidor de email configurado com sendmail, deixe a opção padrão (sendmail), como é.
      2. Se você não tiver um servidor de email configurado, mas quer correio local entregue a uma conta de usuário, você pode mudar "sendmail" para "mail".
  4. Se você deseja configurar e-mail, você terá que editar a action parâmetro como mencionado acima. Alterar a ação a qualquer "mw ação" ou "mwl ação" para ter a informação de e-mail passado para o script proibição.
  5. Se você configurou a entrega de correio local, você pode verificar o e-mail, escrevendo:

sudo nano /var/mail/mail

Configurar as cadeias de Aplicação Específica

  1. Mais abaixo no arquivo, você deve ver ações marcadas como esta.

    [application_name]
  2. O filter parâmetro especifica um arquivo dentro do diretório /etc/fail2ban/filter.d. Isto diz fail2ban como analisar o arquivo de log do programa de attemts falha de autenticação.Deve ser capaz de decifrar a maioria dos parâmetros.
  3. logpath variável contém o caminho para o arquivo de log do serviço, que Fail2ban irá analisar as falhas.
  4. Você pode substituir qualquer um dos outros parâmetros padrão aqui. Por exemplo, o maxretry opção é diferente para SSH do que a opção Dault em uma instalação Debian.

Etapa 3: Configurar iptables


  1. Nós realmente não vamos estar fazendo muitas configuração do iptables, mas vamos dar uma olhada no arquivo de configuração que implementa o seu comportamento. Isso nos ajudará a entender como fail2ban implementa suas políticas de proibição.
  2. Abra o arquivo que foi especificado na nossa configuração de prisão sob a banaction parâmetro:

    sudo nano /etc/fail2ban/action.d/iptables-multipot.conf
  3. Quando fail2ban começa, ele chama estas linhas:Aqui, podemos ver o que realmente acontece quando uma chamada fail2ban proibi um IP. Ele usa o software de firewall (iptables) para implementar regras.

    actionstart = iptables -N fail2ban-<name>                               iptables -A fail2ban-<name> -j RETURN     #questionable usefulness                                iptables -I <chain> -p <protocol> -m multiport  --dports <ports> -j fail2ban -<name>
  4. Isso inicializa o ambiente para passar o tráfego através de uma cadeia de filtragem. 
  5. O tráfego de controles de software iptables tem base em "funis", ou "correntes". Cada um desses funis aplica regras em todo o tráfego que é dado a ele a fim de decidir se é aceitável ou não.
  6. A primeira linha, iptables -N fail2ban-<name> , cria uma nova cadeia com o nome "fail2ban-" com o nome do serviço seguinte. Isto irá manter as regras que proíbem determinados endereços IP.
  7. A próxima linhaiptables -A fail2ban-<name> -j RETURN , adiciona uma regra para a cadeia que acabamos de criar, que informa ao iptables para retornar o controle para a cadeia que chamou esta cadeia.
  8. A última linha, iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>, adiciona uma regra para a chain (corrente) INPUT (especificado em nosso arquivo jail.local), que imediatamente passa o controle para a nossa nova cadeia fail2ban.
  9. Assim, o fluxo de corrente do tráfego de entrada é tratado pelo nosso chain INPUT. Neste ponto, ela atinge a regra de passar o controle para a cadeia fail2ban. A primeira regra nesta cadeia passa o controle de volta para a cadeia que chamou, a chain INPUT.
  10. Então, neste momento, o controle é passado apenas a frente e para trás com nada realmente acontecendo. No entanto, temos um conjunto de um fluxo de controle que irá acomodar regras adicionais. Quando precisamos proibir um endereço IP, podemos adicionar outra regra para a cadeia fail2ban logo acima, onde ele passa o controle de volta para a chain INPUT.
  11. Podemos ver as ações complementares para derrubar as regras Fail2ban, para quando o serviço parar, aqui:

    actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
                 iptables -F fail2ban-<name>
                 iptables -X fail2ban-<name>
  12. Isso basicamente apenas inverte todas as regras que acabamos construídas.
  13. Quando você proibir um cliente, esta regra é implementada:

    actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
  14. Isto diz iptables para soltar todos os pacotes desse endereço IP, o que efetivamente proíbe-os de mesmo tentar autenticar novamente.
  15. Quando o bantime tenha decorrido, esta regra inverte a proibição:

    actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP
  16. Se você gostaria de ver quais as regras são implementadas e que os endereços IP são atualmente proibidos, você pode verificar as regras do iptables atual, digitando:

    sudo iptables -L
  17. Se todos os clientes são proibidos, eles estarão na cadeia inferior.

Etapa 4: Restart fail2ban


  1. Quando você tiver feito alterações à sua configuração, você precisa reiniciar o fail2ban para implementar as novas regras.
  2. Você pode fazer isso digitando o comando:

    sudo service fail2ban restart
  3. Para testar as novas regras, você pode criar outra instâncias e autenticar incorretamente algumas vezes na finalidade de acionar a regra proibição. Depois disso, a sua chamada SSH não vai voltar a solicitação da senha.
  4. Se você olhar para as regras iptable no host configurado, você verá uma nova regra:

    sudo iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain fail2ban-ssh (1 references)
    target     prot opt source               destination         
    DROP       all  --  xxx-xxxxxxxx.dyn.xxxxxxxxx.net  anywhere            
    RETURN     all  --  anywhere             anywhere
  5. Você pode ver a nova segunda regra a partir do fundo. 


Próximos passos: