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.
- Acesso de Root ou privilégios de sudo no servidor para executar comandos como superusuário.
- Fail2Ban instalado em um servidor Ubuntu ou Debian.
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.

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

4. Execute o comando iptables
abaixo para visualizar um resumo do que você configurou em seu firewall.
Abaixo, em destaque, estão as regras que você adicionou em seu firewall.

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.
6. Por fim, execute novamente o comando iptables
abaixo para visualizar suas regras de firewall.
Como mostrado abaixo, em destaque em vermelho estão as novas regras que o Fail2Ban adicionou ao seu firewall.

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 comandotee
. Fazendo isso, você escreverá o conteúdo do arquivojail.conf
no seu sistema de arquivos local (/etc/fail2ban/jail.local
).

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.
Se você visualizar o novo arquivo jail.local, conforme mostrado abaixo, então seu arquivo local foi gerado corretamente.

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.

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.

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.

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.

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.

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.

9. Agora execute os comandos abaixo para reiniciar seu serviço fail2ban
.
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.
Se o serviço Fail2Ban estiver funcionando, você receberá uma saída como a abaixo.

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.

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.

3. No seu servidor Fail2Ban (Ubuntu), execute novamente o comando iptables
abaixo para visualizar as regras do seu firewall.
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.

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?