Pular para o conteúdo

Fail2Ban no Linux: Proteja Servidores Contra Força Bruta

Por Equipe Técnica AviraHost · 11 min de leitura · Atualizado em · Fail2Ban, segurança, SSH, firewall, Linux, AviraHost · 0

Implementar Fail2Ban em Linux é o procedimento de segurança focado em monitorar logs do sistema operacional e acionar bloqueios automáticos no firewall contra conexões maliciosas repetidas. Para proteger servidores contra ataques de força bruta no acesso remoto e serviços essenciais, siga os passos abaixo:

  1. Instale o pacote do Fail2Ban no repositório oficial da sua distribuição Linux.
  2. Crie o arquivo de sobreposição jail.local a partir do modelo padrão.
  3. Defina a lista de exceções de IPs confiáveis e configure as métricas de tempo de bloqueio.
  4. Habilite as regras de proteção direcionadas ao serviço OpenSSH.
  5. Inicie o serviço pelo systemd e valide os banimentos ativos pelo utilitário de linha de comando.

Pré-requisitos

  • Servidor rodando uma distribuição Linux atual (como Debian 12, Ubuntu 24.04 LTS ou AlmaLinux 9).
  • Acesso administrativo com privilégios de root ou usuário com autorização no sudo. Verifique as credenciais seguindo as orientações sobre Acessando servidores VPS Linux da AviraHost.
  • Subsistema de firewall ativo no kernel, como nftables ou iptables.
  • Porta de comunicação SSH acessível para validação do daemon.

Implementar Fail2Ban em Linux: proteja servidores contra ataques de força bruta no SSH

O primeiro passo na implementação de segurança é preparar o ecossistema do servidor com o software necessário. O Fail2Ban funciona inspecionando arquivos em /var/log ou lendo eventos diretamente do systemd-journald. Quando padrões de autenticação incorreta coincidem com os filtros pré-estabelecidos, o software insere uma regra de rejeição no firewall local.

Para sistemas baseados em Debian ou Ubuntu, execute a atualização das listas de pacotes e faça a instalação do pacote principal:

sudo apt update && sudo apt install fail2ban -y

Output esperado:

Reading package lists... Done
Building dependency tree... Done
Setting up fail2ban ...
Processing triggers for systemd ...

Caso esteja operando em distribuições baseadas em RHEL, como Rocky Linux 9 ou AlmaLinux 9, o pacote está disponível via repositório EPEL:

sudo dnf install epel-release -y
sudo dnf install fail2ban fail2ban-firewalld -y

Output esperado:

Complete!

Atenção: Nunca edite diretamente o arquivo /etc/fail2ban/jail.conf. As atualizações de pacotes do sistema substituem esse arquivo. Toda personalização deve residir em /etc/fail2ban/jail.local, que prevalece hierarquicamente sobre a configuração original.

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

Configuração de parâmetros globais e prevenção de bloqueio acidental

Ajustar corretamente as diretivas no bloco [DEFAULT] garante que o servidor mantenha tolerância zero contra bots maliciosos sem isolar o próprio administrador da máquina. Abra o arquivo de configuração para edição com seu editor preferido:

sudo nano /etc/fail2ban/jail.local

Localize a seção [DEFAULT] e altere os parâmetros fundamentais para equilibrar agressividade contra varreduras e proteção contra falsos positivos:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 198.51.100.25
bantime  = 1h
findtime = 10m
maxretry = 5
banaction = nftables-multiport
backend = systemd

Entenda o impacto de cada parâmetro na segurança do host:

  • ignoreip: Lista de endereços IP, faixas CIDR ou domínios que jamais serão bloqueados. Insira aqui o IP estático do seu escritório ou conexão doméstica.
  • bantime: Período em que o tráfego originado do IP malicioso ficará completamente descartado na camada de rede. Valores com sufixos como 1h, 1d ou 4w são suportados.
  • findtime: Janela temporal de monitoramento. Se o invasor atingir o limite estipulado dentro dessa janela, o banimento é disparado.
  • maxretry: Número tolerado de tentativas inválidas de autenticação antes da criação da regra de descarte no firewall.
  • backend: Método de leitura de logs. Em ambientes Linux modernos operando com systemd, definir systemd garante detecção rápida sem depender da escrita em disco do auth.log.

Configuração da jail sshd contra ataques de força bruta

Após definir o comportamento geral, a regra dedicada ao daemon OpenSSH precisa ser explicitamente ativada. Desça no arquivo jail.local até encontrar o bloco [sshd] e declare as seguintes diretivas:

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = systemd
maxretry = 3
bantime = 24h

Esta configuração isola tentativas persistentes no serviço SSH: caso um cliente cometa 3 falhas de login no intervalo padrão estipulado em findtime, seu endereço IP permanecerá bloqueado por 24 horas.

Ativação do serviço e validação operacional

Com as instruções gravadas em disco, inicie o daemon no systemd e habilite sua inicialização automática com o boot do sistema:

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

Verifique o status da unidade de serviço para certificar-se de que a inicialização ocorreu sem interrupções:

sudo systemctl status fail2ban

Output esperado:

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-03-25 14:20:00 UTC; 5s ago
   Main PID: 18450 (fail2ban-server)
      Tasks: 5 (limit: 2314)
     Memory: 14.8M
        CPU: 120ms
     CGroup: /system.slice/fail2ban.service
             └─18450 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

O próximo passo consiste em verificar a comunicação interna do cliente administrativo com o socket do servidor Fail2Ban:

sudo fail2ban-client status

Output esperado:

Status
|- Number of jail:      1
`- Jail list:   sshd

Para obter métricas detalhadas de tentativas interceptadas e verificar a relação de conexões descartadas na jaula SSH, consulte o comando específico da cadeia:

sudo fail2ban-client status sshd

Output esperado:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     8
|  `- File list:        systemd
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   203.0.113.45

Para inspecionar as regras geradas na infraestrutura de rede em distribuições com nftables, execute:

sudo nft list ruleset | grep -A 10 "f2b-sshd"

Se você enfrentar dificuldades de conexão após efetuar testes manuais, consulte nosso tutorial prático sobre Como solucionar problemas de acesso SSH no VPS Linux: Guia Completo.

Problemas comuns e como resolver

Sintoma: O serviço Fail2Ban falha ao iniciar com erro 'Failed to initialize any backend'

Causa: O daemon tenta ler o arquivo tradicional /var/log/auth.log ou /var/log/secure, mas distros modernas utilizam exclusivamente o diário binário do systemd sem um agregador de syslog instalado.
Solução: Edite o arquivo /etc/fail2ban/jail.local e certifique-se de definir a linha backend = systemd dentro da seção [DEFAULT] ou [sshd]. Em seguida, reinicie o processo com sudo systemctl restart fail2ban.

Sintoma: Tentativas com falha no SSH não disparam banimentos no firewall

Causa: A porta configurada na diretiva da jail não coincide com a porta real onde o daemon do SSH está atendendo conexões (caso tenha alterado a porta 22 padrão), ou o firewall selecionado não está ativo.
Solução: Se o serviço SSH escuta em uma porta customizada (por exemplo, 2222), altere o parâmetro no bloco [sshd] para port = 2222. Adicionalmente, verifique com sudo ss -tulpn | grep sshd a porta correta em execução.

Sintoma: O próprio administrador foi banido acidentalmente do servidor

Causa: Erros sucessivos de digitação de senha na autenticação sem a presença do endereço IP do operador na diretiva de salvaguarda ignoreip.
Solução: Acesse a máquina via terminal de emergência ou console VNC disponível no painel do servidor. Remova a restrição pontual executando sudo fail2ban-client set sshd unbanip SEU_IP_AQUI e adicione seu IP definitivo na lista ignoreip em /etc/fail2ban/jail.local.

Perguntas frequentes sobre implementar Fail2Ban em Linux

O Fail2Ban consome muita memória RAM ou processamento?

O Fail2Ban é extremamente leve e opera monitorando arquivos de log em tempo real via regex. Em servidores em produção com centenas de requisições, seu consumo de CPU e RAM raramente ultrapassa níveis mínimos insignificantes.

Como desbloquear manualmente um endereço IP banido pelo Fail2Ban?

Para remover o banimento manual de um endereço específico, utilize o comando fail2ban-client set [jail] unbanip [ip]. Por exemplo, para desbloquear na cadeia do SSH, execute fail2ban-client set sshd unbanip 198.51.100.10.

O que acontece com os IPs bloqueados se o servidor reiniciar?

Por padrão, as regras dinâmicas inseridas na tabela do firewall são temporárias e mantidas na memória. Se o sistema reiniciar, o Fail2Ban recria as jails ativas e reaplica os banimentos que ainda não expiraram com base no seu banco de dados SQLite persistente.

Posso proteger múltiplos serviços além do SSH com o Fail2Ban?

Sim, o Fail2Ban possui filtros nativos para dezenas de aplicações conhecidas como Nginx, Apache, Postfix, Dovecot e ProFTPD. Basta habilitar a respectiva seção [jail] correspondente no arquivo de configuração jail.local apontando para o arquivo de log do serviço.

Conclusão

  • Mantenha sempre os endereços IPs estáticos essenciais configurados na diretiva ignoreip para assegurar que sessões legítimas de administração não sofram interrupções inesperadas.
  • Combine a atuação reativa do Fail2Ban com medidas proativas, como a desativação da autenticação por senha no SSH em favor de chaves criptográficas RSA ou Ed25519.
  • Monitore regularmente as métricas de banimento através de fail2ban-client status sshd para mapear tendências de varreduras em seu ambiente de produção.

Leia também

Precisa de ajuda com a segurança do seu servidor?

Proteger seus ambientes contra ameaças dinâmicas exige infraestrutura estável e isolamento de recursos dedicado para suas aplicações operarem com máxima eficiência.

Conheça nossos planos de Servidores VPS


Esta resposta foi útil?