Base de Conhecimento

Como proteger SSH com fail2ban no Debian 7 imprimir

  • 0

Introdução

Tendo um servidor ou computador ligado a uma rede é exposto a um certo grau de risco. Qualquer máquina, incluindo um VPS, conectado à internet é um alvo potencial para ataques maliciosos.

Ter um firewall bem configurado irá evitar muitos tipos de acesso ilegítimo, você ainda precisa abrir mão de certos serviços para permitir-se a capacidade de login e administrar o servidor. 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 . Isso pode ser configurado para permitir logins legítimos usando SSH, mas 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 VPS Debian 7.

Primeiro Passo - Instale fail2ban

Debian inclui fail2ban em seus repositórios padrão. Podemos fazer download e instalá-lo com o seguinte conjunto de comandos:

sudo apt-get update
sudo apt-get install fail2ban

Este fail2ban não só irá instalar, mas também irá iniciar o serviço com as configurações padrão.

 

Segundo Passo - Configurar fail2ban

 

A configuração fail2ban é mantida no /etc/fail2ban diretório. O arquivo de configuração que especifica as regras que proíbem padrão é chamado jail.conf .

 

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 lá:

cd /etc/fail2ban
sudo cp jail.conf jail.local
sudo nano jail.local

Aqui, podemos alterar qualquer configuração que não gostam que foram definidos na configuração padrão.

 

Configuração padrão

 

A seçã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.

 

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

Podemos configurar a maneira que Fail2ban implementa a sua proibição, modificando alguns parâmetros. Aqui estão alguns dos mais importantes:

    • ignoreipEste 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.

      • Endereços IP e intervalos são separados por espaço em branco.
      • 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.
      • Isso será algo como: "ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS "
    • bantime: Esta lista a quantidade de tempo que uma proibição vai durar, se o cliente não consegue autenticar corretamente. É dado em segundos.

      • O valor padrão proíbe clientes por 10 minutos.
    • maxretryEste parâmetro especifica o número de tentativas que são permitidas antes de uma proibição ser instituída.

Definir ações Ban

Quando a proibição é necessária, fail2ban pode procede em algumas maneiras diferentes. Ele decide sobre as ações necessárias, olhando para os seguintes parâmetros:

  • banactionEsta configuração especifica o arquivo de configuração que será usada quando a proibição é necessária.

    • O valor deste parâmetro refere-se a um arquivo no /etc/fail2ban/action.d diretório, que irá lidar com o processo de proibição real.
    • 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 específicos mais tarde. 
  • actionEste 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.

    • 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

Se você gostaria de configurar fail2ban para e-mail quando se institui uma proibição, você pode configurar isso na seção padrão também.

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.

Há dois parâmetros relevantes:

  • destemail: Esta opção define o endereço de e-mail que será notificado no caso de uma proibição.

    • O valor padrão, "root @ localhost", irá entregar correio para a conta root do computador atual.
    • Se você tem um servidor de email configurado, sinta-se livre para mudar isso para um endereço de correio externo.
  • mta: Isso especifica o agente de correio que será usado para entregar o correio.

    • Se você tem um servidor de email configurado com sendmail, deixe a opção padrão (sendmail), como é.
    • 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".

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.

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

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

[application_name]

Deve ser capaz de decifrar a maioria dos parâmetros.

filter parâmetro especifica um arquivo dentro do /etc/fail2ban/filter.d diretório. Isto diz fail2ban como analisar o arquivo de log do programa de attemts falha de autenticação.

logpath variável contém o caminho para o arquivo de log do serviço, que Fail2ban irá analisar as falhas.

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.

Terceiro Passo - Configurar iptables

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.

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-multiport.conf

Aqui, podemos ver o que realmente acontece quando fail2ban chamadas proibiram um IP. Ele usa o software de firewall (iptables) para implementar regras.

Quando fail2ban começa, ele chama estas linhas:

actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN   # questionable usefulness
              iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

 

Isso inicializa o ambiente para passar o tráfego através de uma cadeia de filtragem.

 

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.

 

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.

 

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.

 

A última linha, iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name> , adiciona uma regra para a chain INPUT (especificado em nosso arquivo jail.local), que imediatamente passa o controle para a nossa nova cadeia fail2ban.

 

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.

 

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.

 

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>

 

Isso basicamente apenas inverte todas as regras que acabamos construídas.

 

Quando você proibir um cliente, esta regra é implementada:

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

 

Isto diz iptables para soltar todos os pacotes desse endereço IP, o que efetivamente proíbe-os de mesmo tentar autenticar novamente.

 

Quando o bantime tenha decorrido, esta regra inverte a proibição:

actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP

Se você gostaria de ver quais as regras são implementadas e que os endereços IP são actualmente proibida, você pode verificar as regras do iptables atual, digitando:

sudo iptables -L

Se todos os clientes são proibidos, eles estarão na cadeia inferior.

Passo Quatro - Restart fail2ban

Quando você tiver feito alterações à sua configuração, você precisa reiniciar o fail2ban para implementar as novas regras.

Você pode fazer isso digitando o comando:

sudo service fail2ban restart

Para testar as novas regras, você pode criar outra instância VPS e autenticar incorretamente na finalidade de vezes suficientes a partir dessa máquina para acionar a regra proibição. Depois disso, a sua chamada SSH não vai voltar a solicitação da senha.

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

Você pode ver a nova segunda regra a partir do fundo.

 

Conclusão

 

Agora você deve ter alguma segurança adicional, tornando o seu servidor um alvo mais difícil de força bruta. Enquanto isso é um grande começo, uma solução mais completa seria desabilitar a autenticação de senha completamente e permitindo apenas a autenticação baseada em chave.


Esta resposta lhe foi útil?
« Retornar