Como Proteger o SSH com o Fail2Ban

Proteger seu servidor contra ataques de força bruta é fundamental. A questão é, como exatamente? Por sorte, o Fail2Ban está bem próximo para proteger seu servidor, mas a configuração padrão do Fail2Ban precisa de alguns ajustes para uma segurança ótima. Mas não se preocupe, este tutorial vai te ajudar.

Neste tutorial, você aprenderá como configurar o Fail2Ban e afastar ataques de força bruta protegendo seu servidor SSH.

Preparado? Continue lendo para otimizar a segurança do seu servidor SSH!

Pré-requisitos

Este tutorial inclui instruções passo a passo. Se você quiser acompanhar, certifique-se de ter o seguinte em mãos:

  • Um servidor Ubuntu e Debian – Este tutorial utiliza um servidor rodando Ubuntu 18.04 LTS para configurar o Fail2Ban e um servidor Debian 10 para testar as configurações de banimento do Fail2Ban.

Configurando um Firewall Básico

O Fail2Ban protege seu servidor monitorando os logs e banindo endereços IP que fazem muitas tentativas de login dentro de um determinado período de tempo. Mas primeiro, você configurará um firewall básico onde poderá adicionar regras para bloquear ações maliciosas em seu servidor.

1. Primeiro, execute o comando service abaixo para parar o Fail2Ban (fail2ban stop) de ser executado. Pare o Fail2Ban ao fazer alterações em seus arquivos de configuração para que você possa testar as alterações e garantir que funcionem conforme o esperado.

sudo service fail2ban stop
Stopping the fail2ban service

2. Execute o comando apt install para instalar o Sendmail e o IPTables-persistent. O Sendmail é um programa que o Fail2Ban usa para notificá-lo quando ele bane um endereço IP. Enquanto o IPTables-persistent é um programa que salva suas configurações alteradas no arquivo /etc/sysconfig/iptables.

Ter esses programas instalados mantém suas configurações de firewall intactas mesmo se algo inesperado acontecer, como uma queda de energia.

sudo apt install sendmail iptables-persistent -y

Agora execute cada comando iptables abaixo para configurar seu firewall. Esses comandos não gerarão nenhuma saída, mas adicionarão quatro regras ao seu firewall. Essas regras permitem ou bloqueiam conexões com seu servidor.

## Primeira Regra - Aceita todo o tráfego gerado pelo servidor (interface lo) 
sudo iptables -A INPUT -i lo -j ACCEPT
## Segunda Regra - Aceita todo o tráfego que faz parte 
## de uma conexão estabelecida ou relacionada
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
## Terceira Regra - Permite tráfego SSH na porta 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Quarta Regra - Descarta todo o outro tráfego
sudo iptables -A INPUT -j DROP
Adding four rules to your firewall

4. Execute o comando iptables abaixo para visualizar um resumo do que você configurou em seu firewall.

sudo iptables -S

Abaixo, em destaque, estão as regras que você adicionou em seu firewall.

Checking your firewall rules

5. Em seguida, execute os seguintes comandos para salvar suas regras no arquivo /etc/sysconfig/iptables-config e iniciar o serviço Fail2Ban. O arquivo iptables-config contém todas as suas regras de firewall permanentes.

O Fail2Ban adicionará automaticamente algumas regras ao seu firewall para proteger seu servidor.

sudo dpkg-reconfigure iptables-persistent
sudo service fail2ban start

6. Por fim, execute novamente o comando iptables abaixo para visualizar suas regras de firewall.

sudo iptables -S

Como mostrado abaixo, em destaque em vermelho estão as novas regras que o Fail2Ban adicionou ao seu firewall.

Previewing your firewall rules

Ajustando sua Configuração Local do Fail2Ban

Agora que você tem um firewall básico em execução, é hora de ajustar o arquivo de configuração local do Fail2Ban para adicionar mais controle na segurança do seu servidor. Este tutorial usa o arquivo de configuração /etc/fail2ban/jail.conf, pois ele contém todas as opções necessárias para configurar as configurações globais do aplicativo Fail2Ban.

Talvez você queira criar regras personalizadas para o seu servidor SSH. Se sim, você criará um novo arquivo jail.local (baseado no arquivo jail.conf) e colocará as regras específicas do SSH no arquivo jail.local. Fazendo isso, você pode substituir configurações no arquivo jail.conf para o seu servidor.

1. Execute o comando awk abaixo para realizar o seguinte:

  • Imprima o conteúdo ('{ printf "# "; print; }') do arquivo /etc/fail2ban/jail.conf.
  • Crie um arquivo chamado jail.local (baseado no arquivo jail.conf), que pode ser usado para substituir as configurações padrão no arquivo jail.conf.
  • Pipe o conteúdo do arquivo /etc/fail2ban/jail.conf para o comando tee. Fazendo isso, você escreverá o conteúdo do arquivo jail.conf no seu sistema de arquivos local (/etc/fail2ban/jail.local).
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local
Creating the jail.local file

2. Uma vez que você criou o arquivo jail.local, execute o comando ls abaixo. O comando lista o conteúdo do diretório Fail2Ban do seu servidor (/etc/fail2ban) para verificar se o arquivo jail.local foi gerado corretamente.

ls /etc/fail2ban

Se você visualizar o novo arquivo jail.local, conforme mostrado abaixo, então seu arquivo local foi gerado corretamente.

Checking the newly created local file (jail.local)

3. Abra o arquivo /etc/fail2ban/jail.local no seu editor de texto preferido e vá para a seção [ssh].

Descomente as opções [sshd] e enabled excluindo o símbolo # na frente das opções, conforme mostrado abaixo, para habilitar o SSH.

A partir deste ponto até o final do tutorial, remova o símbolo # na frente de seções ou opções para ativá-las.

Enabling the [ssh] section

4. Role para baixo e descomente a seção [DEFAULT] mostrada abaixo. Esta seção é onde você configura as configurações padrão para o Fail2Ban. Todas as configurações nesta seção serão aplicadas a todos os jails que o Fail2Ban gerencia.

Uncommenting the [DEFAULT] option

5. Em seguida, role para baixo até a seção bantime e defina um bantime para 60 minutos. A opção bantime define o tempo, em minutos, que um endereço IP fica banido após uma tentativa de login malsucedida.

A configuração padrão de bantime é de 600 segundos (10 minutos). Você pode ajustar essa configuração conforme desejar, mas é importante observar que quanto menor a configuração de bantime, maior será a carga em seu servidor.

Setting a ban duration

6. Navegue até as opções findtime e maxretry. Mantenha o findtime como está (10m) e diminua o maxretry para 3.

A opção findtime define o tempo, em minutos, que um endereço IP pode falhar ao fazer login antes de ser banido. Enquanto a opção maxretry define o número de tentativas de login falhadas antes que um endereço IP seja banido.

A configuração padrão de findtime é de 10 minutos, e maxretry é de 5 minutos. Como resultado, um endereço IP que falhar ao fazer login 5 vezes dentro de um período de 10 minutos será banido.

Setting a Window Time for an IP Address to Login Before Getting Banned

7. Role para baixo, descomente e configure as opções destemail, sender, e mta:

  • destemail – Insira um endereço de e-mail para onde o Fail2Ban enviará notificações.
  • sender – Configure o campo “De” no e-mail que o Fail2Ban envia para destemail.
  • mta – Mantenha o padrão (sendmail) como está. A opção mta define o agente de entrega de e-mail que o Fail2Ban usa para enviar notificações.
Configuring destemail, sender, and mta options

8. Navegue até as opções de ação, conforme mostrado abaixo, e descomente a opção action_mwl. Fazendo isso, permite que o Fail2Ban envie e-mails de logwatch para você. Você pode revisar os e-mails de logwatch para investigar ainda mais quaisquer problemas de segurança potenciais em seu servidor.

Salve as alterações e saia do editor de texto.

Enabling Logwatch Emails

9. Agora execute os comandos abaixo para reiniciar seu serviço fail2ban.

sudo service fail2ban stop
sudo service fail2ban start

10. Finalmente, execute o comando abaixo para verificar o status do seu serviço fail2ban. sudo service fail2ban status Se o serviço Fail2Ban estiver funcionando, você receberá uma saída como a abaixo.

sudo service fail2ban status

Se o serviço Fail2Ban estiver funcionando, você receberá uma saída como a abaixo.

Checking the Fail2Ban Service Status

Testando suas Configurações de Banimento

Você acabou de configurar o Fail2Ban, então agora é hora de testar se as configurações de banimento realmente funcionam. Tente várias tentativas de login SSH malsucedidas no seu servidor Fail2Ban a partir de um servidor secundário e veja se esse servidor secundário é banido.

1. Faça login no seu servidor secundário (Debian) e execute o comando abaixo para SSH no seu servidor Fail2Ban.

Esta demonstração usa um servidor Debian 10 com um IP de 134.122.20.103 para ssh para o servidor fail2ban que tem um IP de 69.28.83.134.

2. Digite uma senha aleatória quando solicitado e pressione Enter.

Na primeira tentativa, o servidor Fail2Ban interromperá a tentativa de login SSH e exibirá a mensagem Permissão negada, conforme mostrado abaixo. Repita a tentativa de login SSH cerca de duas a três vezes a mais, e o servidor Fail2Ban eventualmente deixará de responder à sua tentativa de login SSH.

Neste ponto, você não receberá mais uma mensagem de Permissão negada, mas sim uma tela em branco. Uma tela em branco indica que seu segundo servidor (Debian) foi banido do servidor Fail2Ban.

Testing if a server gets banned from Fail2Ban server after several failed logins

Mas talvez você já tenha uma lista de endereços IP para bloquear do seu servidor Fail2Ban. Se for o caso, abra o arquivo jail.local e vá para a seção [DEFAULT]. Remova o comentário da opção ignoreip e defina os endereços IP a serem bloqueados, conforme mostrado abaixo.

O endereço pode ser tanto várias entradas separadas de IPv4 ou IPv6, quanto separadas por vírgulas.

Setting IP Addresses to Block from Fail2Ban Server

3. No seu servidor Fail2Ban (Ubuntu), execute novamente o comando iptables abaixo para visualizar as regras do seu firewall.

sudo iptables -S

Observe abaixo que há uma nova regra que rejeita tentativas de login SSH do endereço IP 134.122.20.103.

Você também receberá um e-mail do Fail2Ban, após um banimento bem-sucedido, com um arquivo de log anexado se tiver sendmail configurado no seu servidor Fail2Ban. A notificação por e-mail indica que o Fail2Ban interrompeu com sucesso um ataque de força bruta e salvou seu servidor de possíveis danos.

Checking additional firewall rules

Conclusão

Ao longo deste tutorial, você aprendeu como configurar o Fail2Ban em um servidor Ubuntu. Neste ponto, você deve estar bem equipado com o conhecimento para proteger seu servidor SSH de ataques de força bruta.

Agora, que tal elevar esse conhecimento recém-adquirido a um patamar superior? Talvez começar bloqueando IPs em todas as portas com o Fail2Ban em um host docker?

Source:
https://adamtheautomator.com/fail2ban-ssh/