Proteger seu servidor contra ataques de força bruta é essencial. A questão é: como exatamente? Por sorte, o Fail2Ban está bem ao seu alcance para proteger seu servidor, mas a configuração padrão do Fail2Ban precisa de alguns ajustes para uma segurança ideal. Não se preocupe, pois este tutorial tem tudo explicado.
Neste tutorial, você aprenderá como configurar o Fail2Ban e se proteger contra ataques de força bruta, garantindo a segurança do seu servidor SSH.
Pronto? Continue lendo para otimizar a segurança do seu servidor SSH!
Pré-requisitos
Este tutorial inclui instruções passo a passo. Se deseja acompanhar, certifique-se de ter o seguinte em vigor:
- Servidores Ubuntu e Debian – Este tutorial utiliza um servidor com Ubuntu 18.04 LTS para configurar o Fail2Ban e um servidor Debian 10 para testar as configurações de bloqueio do Fail2Ban.
- Acesso 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 atos maliciosos em seu servidor.
1. Primeiro, execute o comando service
abaixo para parar o Fail2Ban (fail2ban stop
) de ser executado. Pare o Fail2Ban quando fizer alterações em seus arquivos de configuração para que você possa testar as alterações e garantir que funcionem como esperado.

2. Execute o comando apt install
para instalar Sendmail
e IPTables-persistent
. Sendmail é um programa que o Fail2Ban usa para notificá-lo quando ele banir um endereço IP. Enquanto o IPTables-persistent é um programa que salva suas configurações de alteração no arquivo /etc/sysconfig/iptables.
Ter estes programas instalados mantém as configurações do seu firewall intactas mesmo se algo inesperado acontecer, como uma queda de energia.
Agora execute cada comando iptables
abaixo para configurar o seu firewall. Estes comandos não gerarão qualquer saída, mas adicionarão quatro regras ao seu firewall. Estas regras tanto permitem quanto bloqueiam conexões para o seu servidor.

4. Execute o comando iptables
abaixo para visualizar um resumo do que foi configurado no seu firewall.
Abaixo, destacadas estão as regras que você adicionou no 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 automaticamente adicionará algumas regras ao seu firewall para proteger o seu servidor.
6. Por fim, execute novamente o comando iptables
abaixo para visualizar suas regras de firewall.
Como mostrado abaixo, destacadas 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 utiliza 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 for o caso, 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ê poderá substituir as 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ê irá escrever o conteúdo do arquivojail.conf
no seu sistema de arquivos local (/etc/fail2ban/jail.local
).

2. Depois de criar o arquivo jail.local, execute o comando ls
abaixo. O comando lista o conteúdo do diretório do 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 navegue até a seção [ssh].
Descomente as opções [sshd] e enabled deletando 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 habilitá-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. Qualquer configuração nesta seção será aplicada 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 a quantidade de tempo, em minutos, que um endereço IP é banido após uma tentativa de login falhada.
A configuração padrão de bantime é de 600 segundos (10 minutos). Você pode ajustar essa configuração conforme desejar, mas é importante notar que quanto menor for o tempo de bantime, mais carga seu servidor irá experimentar.

6. Navegue até as opções de findtime e maxretry. Mantenha o findtime como está (10m) e diminua o maxretry para 3.
A opção findtime define a quantidade de 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 falha 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 de destemail, sender, e mta:
- destemail – Insira um endereço de e-mail para onde o Fail2Ban envia notificações.
- sender – Defina o campo “De” no e-mail que o Fail2Ban envia para o 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, como mostrado abaixo, e descomente a opção action_mwl. Fazê-lo permite que o Fail2Ban envie e-mails de logwatch para você. Você pode revisar os e-mails de logwatch para investigar ainda mais possíveis problemas de segurança no seu servidor.
Salve as alterações e saia do editor de texto.

9. Agora execute os comandos abaixo para reiniciar o seu serviço fail2ban
.
10. Por fim, 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 mostrada abaixo.
Se o serviço Fail2Ban estiver funcionando, você receberá uma saída como a mostrada 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 falhadas 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. Insira uma senha aleatória quando solicitado e pressione Enter.
Na primeira tentativa, o servidor Fail2Ban irá interromper a tentativa de login SSH e imprimir a mensagem Permission denied, como mostrado abaixo. Repita a tentativa de login SSH mais duas ou três vezes, e o servidor Fail2Ban eventualmente deixará de responder à sua tentativa de login SSH.
Neste ponto, você não receberá mais uma mensagem de Permission denied, mas uma tela em branco. Obter 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 sim, abra o arquivo jail.local e navegue até 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 múltiplos entradas separadas IPv4 ou IPv6, ou então separadas por vírgulas.

3. No seu servidor Fail2Ban (Ubuntu), execute novamente o comando iptables
abaixo para visualizar suas regras de 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, aprendeu a configurar o Fail2Ban num servidor Ubuntu. Neste ponto, deverá estar bem equipado com o conhecimento necessário para proteger o seu servidor SSH contra ataques de força bruta.
Agora, por que não levar este conhecimento recém-adquirido a um nível superior? Talvez começar por bloquear IPs em todas as portas com o Fail2Ban num host Docker?