Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Configurar Fail2Ban no Debian 12: logs, regras e alertas

16 min de leitura  ·  Guia técnico

Configurar Fail2Ban no Debian 12 significa instalar e ajustar um sistema de detecção e bloqueio automático de IPs que realizam tentativas repetidas de acesso não autorizado ao seu servidor. Para proteger SSH, Nginx, Apache e outros serviços com logs, regras e alertas, siga estes passos:

  1. Instalar o Fail2Ban via apt no Debian 12
  2. Criar o arquivo jail.local com as regras personalizadas
  3. Configurar filtros e parâmetros de banimento (bantime, findtime, maxretry)
  4. Ativar jails para SSH, Nginx e outros serviços
  5. Configurar alertas por e-mail para notificações de bloqueio
  6. Verificar logs e testar o funcionamento das regras

Pré-requisitos para configurar o Fail2Ban no Debian 12

  • Servidor com Debian 12 (Bookworm) instalado e atualizado
  • Acesso root ou usuário com privilégios sudo
  • Conexão SSH ativa — recomenda-se ter acesso alternativo (console VNC/KVM) antes de alterar regras de firewall
  • Serviço iptables ou nftables disponível (o Fail2Ban usa ambos como backend)
  • Serviço de e-mail configurado (Postfix ou similar) para alertas opcionais
  • Python 3 instalado (dependência do Fail2Ban no Debian 12)

Se você ainda não configurou seu servidor Linux, consulte o artigo Configurando um Servidor Linux para Hospedagem de Sites antes de prosseguir.

Instalação do Fail2Ban no Debian 12

O processo de instalação do Fail2Ban em ambientes Debian 12 começa pela atualização dos repositórios e instalação do pacote oficial. O Debian 12 disponibiliza o Fail2Ban diretamente nos repositórios padrão, sem necessidade de adicionar fontes externas.

  1. Atualize a lista de pacotes:
sudo apt update && sudo apt upgrade -y
  1. Instale o Fail2Ban e o pacote de envio de e-mail:
sudo apt install fail2ban mailutils -y
Output esperado:
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  fail2ban mailutils python3-pyinotify
...
Setting up fail2ban (1.0.2-2) ...
  1. Habilite e inicie o serviço:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
  1. Verifique o status do serviço:
sudo systemctl status fail2ban
Output esperado:
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled)
     Active: active (running) since ...

Com o serviço ativo, o Fail2Ban já monitora o SSH por padrão usando as configurações globais. O próximo passo é personalizar essas configurações sem modificar os arquivos originais.

Configurar o arquivo jail.local com regras personalizadas

A configuração de regras de bloqueio no Fail2Ban deve ser feita exclusivamente no arquivo jail.local, nunca no jail.conf original — que pode ser sobrescrito em atualizações do sistema. Essa separação garante que suas personalizações sobrevivam a upgrades de pacote.

  1. Copie o arquivo de configuração padrão como base:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. Abra o arquivo para edição:
sudo nano /etc/fail2ban/jail.local
  1. Localize a seção [DEFAULT] e ajuste os parâmetros globais:
[DEFAULT]
# IP do seu acesso — nunca será bloqueado
ignoreip = 127.0.0.1/8 ::1 SEU_IP_AQUI

# Tempo de bloqueio: 1 hora (em segundos)
bantime  = 3600

# Janela de tempo para contar tentativas: 10 minutos
findtime  = 600

# Máximo de tentativas antes do bloqueio
maxretry = 5

# Backend de detecção de log
backend = auto

# Suporte a IPv6
allowipv6 = auto

# Ação padrão: banir e enviar e-mail
action = %(action_mwl)s

# E-mail para alertas
destemail = [email protected]
sendername = Fail2Ban-Servidor
mta = sendmail

Atenção: substitua SEU_IP_AQUI pelo endereço IP real da sua máquina de administração antes de salvar. Ignorar esse passo pode resultar no bloqueio do seu próprio acesso SSH.

  1. Salve o arquivo com Ctrl+O, Enter e saia com Ctrl+X.

Ativar jails para SSH, Nginx e Apache no Debian 12

As jails do Fail2Ban definem quais serviços serão monitorados e com quais parâmetros específicos. Cada jail monitora um arquivo de log diferente e aplica um filtro de expressão regular para identificar tentativas de acesso inválidas.

Adicione as seguintes seções ao final do arquivo /etc/fail2ban/jail.local:

# Proteção SSH
[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 7200
findtime = 300

# Proteção Nginx — requisições inválidas
[nginx-http-auth]
enabled  = true
filter   = nginx-http-auth
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 5

# Proteção Nginx — limite de requisições (rate limiting)
[nginx-limit-req]
enabled  = true
filter   = nginx-limit-req
port     = http,https
logpath  = /var/log/nginx/error.log
maxretry = 10

# Proteção Apache — autenticação básica
[apache-auth]
enabled  = true
filter   = apache-auth
port     = http,https
logpath  = /var/log/apache2/error.log
maxretry = 5

# Proteção contra varredura de portas com Nginx
[nginx-botsearch]
enabled  = true
filter   = nginx-botsearch
port     = http,https
logpath  = /var/log/nginx/access.log
maxretry = 2
bantime  = 86400

Após salvar as alterações, reinicie o Fail2Ban para aplicar as novas jails:

sudo systemctl restart fail2ban

Verifique quais jails estão ativas:

sudo fail2ban-client status
Output esperado:
Status
|- Number of jail:      5
`- Jail list:   apache-auth, nginx-botsearch, nginx-http-auth, nginx-limit-req, sshd

Configurar alertas por e-mail no Fail2Ban

O sistema de notificações do Fail2Ban permite receber alertas automáticos sempre que um IP for bloqueado, incluindo o log completo das tentativas que motivaram o banimento. Essa funcionalidade é essencial para monitoramento proativo de segurança em servidores de produção.

Para que os alertas funcionem, o Postfix deve estar instalado e configurado no servidor. Instale-o se necessário:

sudo apt install postfix -y

Durante a instalação, selecione Internet Site e informe o hostname do servidor quando solicitado.

No arquivo jail.local, confirme que as seguintes linhas estão presentes na seção [DEFAULT]:

destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

O parâmetro action_mwl (mail with log) envia o e-mail de alerta com as linhas de log que causaram o bloqueio. As opções disponíveis são:

  • action_: apenas bane o IP, sem notificação
  • action_mw: bane e envia e-mail simples
  • action_mwl: bane e envia e-mail com log completo (recomendado)

Teste o envio de e-mail manualmente para confirmar que o Postfix está funcionando:

echo "Teste Fail2Ban" | mail -s "Teste de alerta" [email protected]

Analisar logs do Fail2Ban e monitorar bloqueios

O monitoramento de logs é a principal forma de auditar a eficácia das regras de bloqueio e identificar padrões de ataque ao servidor. O Fail2Ban registra todas as ações em /var/log/fail2ban.log.

Visualize os eventos em tempo real:

sudo tail -f /var/log/fail2ban.log
Output esperado:
2024-01-15 14:23:01,234 fail2ban.filter [INFO] [sshd] Found 203.0.113.45 - 2024-01-15 14:23:01
2024-01-15 14:23:05,891 fail2ban.filter [INFO] [sshd] Found 203.0.113.45 - 2024-01-15 14:23:05
2024-01-15 14:23:09,102 fail2ban.actions [NOTICE] [sshd] Ban 203.0.113.45

Verifique o status detalhado de uma jail específica:

sudo fail2ban-client status sshd
Output esperado:
Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed:     47
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 3
   |- Total banned:     12
   `- Banned IP list:   203.0.113.45 198.51.100.22 192.0.2.88

Para verificar as regras de firewall criadas pelo Fail2Ban via iptables:

sudo iptables -L f2b-sshd -n --line-numbers
Output esperado:
Chain f2b-sshd (1 references)
num  target     prot opt source               destination
1    REJECT     all  --  203.0.113.45         0.0.0.0/0
2    REJECT     all  --  198.51.100.22        0.0.0.0/0
3    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Para filtrar apenas os banimentos do log:

sudo grep "Ban " /var/log/fail2ban.log | tail -20

Para ver estatísticas por jail em um único comando:

sudo fail2ban-client status | grep "Jail list" | sed "s/ //g" | awk -F: '{print $2}' | sed "s/,/\n/g" | xargs -I{} sudo fail2ban-client status {}

Você também pode consultar o artigo Dicas de Otimização de Servidores Linux para complementar a segurança do seu servidor com outras boas práticas.

Criar filtros personalizados no Fail2Ban

Os filtros personalizados permitem que o Fail2Ban detecte padrões específicos de ataque que não estão cobertos pelos filtros padrão. Cada filtro é um arquivo de expressão regular que analisa as entradas de log de um serviço.

Crie um filtro personalizado para bloquear tentativas de acesso a arquivos PHP maliciosos via Nginx:

sudo nano /etc/fail2ban/filter.d/nginx-php-exploit.conf
[Definition]
failregex = ^ .* "(GET|POST) .*\.(php|asp|aspx|jsp)\?.*=(http|https|ftp):\/\/.* HTTP.*" (400|403|404|500) .*$
            ^ .* "(GET|POST) .*(eval|base64_decode|system|passthru|exec|shell_exec).* HTTP.*" (400|403|404|500) .*$

ignoreregex =

Adicione a jail correspondente no jail.local:

[nginx-php-exploit]
enabled  = true
filter   = nginx-php-exploit
port     = http,https
logpath  = /var/log/nginx/access.log
maxretry = 1
bantime  = 86400
findtime = 3600

Teste o filtro antes de ativá-lo para garantir que as expressões regulares funcionam corretamente:

sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-php-exploit.conf
Output esperado:
Running tests
=============
Use   failregex filter file : nginx-php-exploit
Use         log file : /var/log/nginx/access.log

Results
=======
Failregex: 7 total
Ignoreregex: 0 total
Date template hits:
Lines: 1523 lines, 0 ignored, 7 matched, 1516 missed

Reinicie o Fail2Ban após criar novos filtros:

sudo systemctl restart fail2ban

Problemas comuns e como resolver

Sintoma: Fail2Ban não está bloqueando IPs mesmo após múltiplas tentativas

Causa: O arquivo de log configurado na jail não existe ou o caminho está incorreto. O Fail2Ban não consegue monitorar um arquivo que não existe, e não gera erro visível por padrão.
Solução: Verifique se o arquivo de log existe com ls -la /var/log/auth.log. Se o serviço usar journald em vez de arquivos de log tradicionais, altere o backend da jail para backend = systemd e remova o parâmetro logpath. Reinicie o Fail2Ban após a correção.

Sintoma: O serviço Fail2Ban falha ao iniciar com erro "ERROR Failed to start"

Causa: Erro de sintaxe no arquivo jail.local ou em um filtro personalizado. Uma vírgula extra, indentação incorreta ou parâmetro inválido pode impedir a inicialização.
Solução: Execute sudo fail2ban-client -t para testar a configuração antes de reiniciar. O comando exibirá a linha exata com o erro. Corrija o problema identificado e tente iniciar o serviço novamente com sudo systemctl start fail2ban.

Sintoma: IP legítimo foi bloqueado acidentalmente

Causa: O IP não estava na lista ignoreip e atingiu o limite de tentativas — comum após erros de digitação de senha ou scripts de monitoramento mal configurados.
Solução: Desbloqueie o IP imediatamente com sudo fail2ban-client set sshd unbanip IP_BLOQUEADO. Em seguida, adicione o IP à diretiva ignoreip no jail.local e reinicie o serviço. Para evitar recorrência, considere aumentar o valor de maxretry para IPs de redes internas.

Sintoma: Alertas de e-mail não estão sendo enviados

Causa: O Postfix não está instalado, não está em execução ou o parâmetro mta está configurado incorretamente no jail.local.
Solução: Verifique o status do Postfix com sudo systemctl status postfix. Confirme que o parâmetro mta = sendmail está definido na seção [DEFAULT]. Teste o envio manual com echo "teste" | mail -s "teste" [email protected] e verifique os logs do Postfix em /var/log/mail.log.

Sintoma: Regras do Fail2Ban somem após reinicialização do servidor

Causa: O Fail2Ban não está configurado para iniciar automaticamente com o sistema, ou o iptables não está persistindo as regras entre reinicializações.
Solução: Execute sudo systemctl enable fail2ban para habilitar o início automático. O Fail2Ban recria as regras de firewall automaticamente ao iniciar, portanto não é necessário persistir as regras do iptables manualmente — desde que o serviço esteja habilitado.

Perguntas frequentes sobre Fail2Ban

O Fail2Ban bloqueia ataques DDoS?

O Fail2Ban não foi projetado para mitigar DDoS volumétrico, mas é eficaz contra ataques de força bruta distribuídos em baixa intensidade. Para DDoS real, combine o Fail2Ban com soluções de firewall de borda como nftables ou um serviço de CDN com proteção dedicada.

Como verificar se o Fail2Ban está bloqueando um IP?

Execute o comando fail2ban-client status sshd para listar os IPs banidos na jail do SSH. O campo Banned IP list exibirá todos os endereços atualmente bloqueados. Para verificar o histórico completo, consulte o arquivo /var/log/fail2ban.log.

Qual a diferença entre bantime, findtime e maxretry no Fail2Ban?

O bantime define por quantos segundos o IP ficará bloqueado após atingir o limite. O findtime é a janela de tempo em que as tentativas são contadas. O maxretry é o número máximo de falhas permitidas dentro do findtime antes do bloqueio ser aplicado. Por exemplo, com maxretry = 5, findtime = 600 e bantime = 3600, um IP que falhar 5 vezes em 10 minutos ficará bloqueado por 1 hora.

O Fail2Ban funciona com IPv6?

Sim, o Fail2Ban suporta IPv6 nativamente a partir da versão 0.10. No Debian 12, a versão disponível nos repositórios já inclui suporte completo a IPv6. Certifique-se de que o parâmetro allowipv6 = auto esteja definido no arquivo jail.conf ou jail.local.

Como desbanir um IP bloqueado pelo Fail2Ban?

Execute fail2ban-client set sshd unbanip 192.168.1.100 substituindo o IP pelo endereço que deseja liberar. O desbloqueio é imediato e não requer reinicialização do serviço. Para evitar bloqueios acidentais do seu próprio IP, adicione-o à diretiva ignoreip no arquivo jail.local.

Conclusão

Configurar o Fail2Ban corretamente no Debian 12 reduz significativamente a superfície de ataque do seu servidor ao bloquear automaticamente IPs com comportamento suspeito. Os pontos mais importantes desta configuração são:

  • Sempre use o arquivo jail.local para personalizações — nunca edite o jail.conf diretamente, pois ele pode ser sobrescrito em atualizações do pacote.
  • Configure a diretiva ignoreip com o IP da sua máquina de administração antes de ativar qualquer jail, para evitar bloquear seu próprio acesso SSH.
  • Monitore regularmente o arquivo /var/log/fail2ban.log e use fail2ban-client status para auditar os bloqueios ativos e ajustar os parâmetros conforme o perfil de tráfego do seu servidor.

Leia também

Precisa de ajuda com segurança no seu servidor Linux?

Configurar ferramentas de segurança como o Fail2Ban é mais eficaz quando o servidor já está em uma infraestrutura confiável e bem dimensionada. A AviraHost oferece servidores VPS com Debian 12 pré-instalado, suporte técnico especializado e recursos que facilitam a implementação de boas práticas de segurança desde o primeiro acesso.

Conheça os planos de VPS da AviraHost

  • 0 Os usuários acharam isso útil
  • Fail2Ban, Debian 12, segurança, SSH, AviraHost
Esta resposta foi útil?

Artigos Relacionados

Como Configurar Firewall em Servidor VPS Linux: Guia Prático com UFW

Como Configurar Firewall em Servidor VPS Linux: Guia Prático com UFWO firewall é essencial para...

Como Configurar e Usar o Fail2Ban para Proteger seu Servidor VPS Linux

O que é o Fail2Ban? Fail2Ban é uma ferramenta de segurança que monitora logs de serviços (como...

Como Instalar e Configurar o Firewall CSF no VPS Linux para Segurança Avançada

Introdução O CSF (ConfigServer Security & Firewall) é uma solução robusta de firewall para...

Guia Prático para Ativar e Gerenciar o ModSecurity no Apache em VPS Linux e Servidores Dedicados

Introdução O ModSecurity é um firewall de aplicação web (WAF) essencial para proteger servidores...

Checklist Completo para Configurar e Testar o Firewall UFW em VPS Linux e Servidores Dedicados

Introdução O UFW (Uncomplicated Firewall) é uma ferramenta simples e eficiente para gerenciar...