Pular para o conteúdo

Comparativo: Fail2Ban list banned ips sem bloquear clientes

Por Equipe Técnica AviraHost · 10 min de leitura · Atualizado em · fail2ban, seguranca-linux, ssh, firewall, auditoria-de-logs, avirahost · 0

Fail2Ban list banned ips refere-se ao conjunto de comandos que expõem quais endereços IP estão bloqueados em cada jail sem alterar o estado do firewall. O comparativo abaixo mostra três abordagens — comando isolado, script consolidado e leitura direta do log — para auditar bloqueios sem correr o risco de derrubar clientes legítimos. Para auditar bloqueios de forma segura:

  1. Liste as jails ativas com fail2ban-client status
  2. Consulte IPs banidos por jail com fail2ban-client status <jail>
  3. Combine a saída em um script bash para visão consolidada
  4. Confirme se um IP corresponde a cliente legítimo antes de agir
  5. Use set unbanip para remover o bloqueio sem reiniciar o serviço
  6. Registre o IP em ignoreip para evitar recorrência

Pré-requisitos

  • Acesso root ou sudo ao servidor Linux (testado em AlmaLinux 10, Debian 13 e Rocky Linux 10)
  • Fail2Ban instalado e ativo (versão 1.0+) com pelo menos uma jail habilitada, como sshd
  • Conhecimento básico de firewall (nftables ou iptables) usado pelo Fail2Ban como backend de banAction
  • Acesso aos logs em /var/log/fail2ban.log e ao log do serviço monitorado (SSH, Postfix, etc.)
  • Editor de texto (vim, nano) para ajustes em jail.local

Comparativo: fail2ban-client status vs script consolidado vs log

O comando fail2ban-client status é o ponto de partida, mas ele só mostra o resumo de jails ativas — não a lista de IPs banidos diretamente. Para obter a lista real por jail, é preciso especificar o nome da jail no comando. Essa distinção é a causa mais comum de confusão entre administradores que esperam um único comando universal.

fail2ban-client status
Output esperado:
Status
|- Number of jail:      2
`- Jail list:   sshd, postfix

Para listar os IPs banidos de uma jail específica, é necessário rodar o comando com o nome da jail como argumento:

fail2ban-client status sshd
Output esperado:
Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     47
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service
`- Actions
   |- Currently banned: 2
   |- Total banned:     15
   `- Banned IP list:   203.0.113.45 198.51.100.22

Note o campo Banned IP list — é essa linha que responde diretamente à pergunta "quais IPs estão banidos agora". Comparado a inspecionar regras de firewall manualmente (nft list ruleset ou iptables -L), esse comando é mais confiável porque reflete o estado interno do Fail2Ban, não apenas o firewall.

Script consolidado para listar todos os IPs banidos de todas as jails

Quando o servidor tem múltiplas jails ativas (SSH, Postfix, Nginx, WordPress), rodar fail2ban-client status para cada uma manualmente é ineficiente. Um script bash simples itera sobre a lista de jails e extrai apenas a linha de IPs banidos, gerando um relatório consolidado que pode ser rodado via cron para auditoria periódica.

#!/bin/bash
for jail in $(fail2ban-client status | grep "Jail list" | sed -E 's/.*:\s+//' | tr ',' ' '); do
  echo "== Jail: $jail =="
  fail2ban-client status "$jail" | grep "Banned IP list"
done
Output esperado:
== Jail: sshd ==
   `- Banned IP list:   203.0.113.45 198.51.100.22
== Jail: postfix ==
   `- Banned IP list:   203.0.113.78

Esse script não altera nenhuma regra de firewall — ele apenas lê o estado atual, o que o torna seguro para rodar em horário comercial sem risco de impactar clientes conectados. Se você já usa Guia DKIM, SPF e DMARC: configure e saia do spam para proteger o Postfix, vale cruzar os IPs banidos na jail postfix com os logs de autenticação SMTP para confirmar que não há falso positivo.

Auditando o log do Fail2Ban sem tocar no firewall

O arquivo /var/log/fail2ban.log registra cada evento de ban e unban com timestamp, jail e IP envolvido. Diferente do comando status, que mostra apenas o estado atual, o log preserva o histórico completo — essencial para identificar padrões, como um IP corporativo sendo banido repetidamente em horários específicos.

grep "Ban " /var/log/fail2ban.log | tail -n 20
Output esperado:
2026-01-14 09:12:03 fail2ban.actions [1234]: NOTICE [sshd] Ban 203.0.113.45
2026-01-14 09:45:11 fail2ban.actions [1234]: NOTICE [postfix] Ban 203.0.113.78

Para acompanhar em tempo real sem precisar rodar o grep repetidamente:

tail -f /var/log/fail2ban.log

Essa abordagem é útil quando um cliente reporta lentidão ou bloqueio intermitente: você acompanha o log ao vivo enquanto o cliente tenta reconectar, confirmando se o IP dele está sendo banido no momento exato do problema. Combinar isso com Como solucionar problemas de inicialização de serviços no VPS Linux ajuda quando o próprio Fail2Ban parece não estar respondendo aos comandos de status.

Removendo um IP legítimo sem reiniciar o Fail2Ban

Depois de identificar um IP banido incorretamente na lista, o desbloqueio deve ser feito com o comando unbanip, que atua apenas naquela regra específica e mantém todas as outras conexões monitoradas intactas.

fail2ban-client set sshd unbanip 203.0.113.45
Output esperado:
203.0.113.45

Atenção: reiniciar o serviço Fail2Ban inteiro (systemctl restart fail2ban) desbaneia temporariamente todos os IPs até que as regras sejam reaplicadas, o que pode abrir uma janela de exposição a ataques de força bruta em andamento. Use sempre o unbanip pontual em vez de reiniciar o serviço para corrigir um único falso positivo.

Para evitar recorrência, adicione o IP (ou faixa CIDR) à diretiva ignoreip no jail.local:

[DEFAULT]
ignoreip = 127.0.0.1/8 203.0.113.0/24
systemctl reload fail2ban

Se o ambiente usa múltiplos servidores de e-mail com RBL, revisar a configuração de rede em Guia de zona DNS: registros A, MX, CNAME e TXT do zero pode ajudar a identificar se o IP banido pertence a um serviço legítimo de terceiros.

Problemas comuns e como resolver

Sintoma: fail2ban-client status não mostra o campo Banned IP list

Causa: a jail pode estar configurada com uma actionban customizada que não popula esse campo, ou a versão do Fail2Ban é anterior à que suporta essa saída detalhada.
Solução: verifique a versão com fail2ban-client version e confirme se a jail usa o backend padrão (nftables ou iptables) em vez de uma action personalizada sem suporte a essa listagem.

Sintoma: IP desbanido volta a ser bloqueado poucos minutos depois

Causa: o findtime ainda contabiliza as tentativas anteriores dentro da janela configurada, então novas falhas do mesmo IP reativam o ban rapidamente.
Solução: além do unbanip, adicione o IP ao ignoreip permanentemente se for confirmado como legítimo, ou aumente o maxretry temporariamente para reduzir sensibilidade durante a investigação.

Sintoma: script consolidado retorna jails vazias ou erro de sintaxe

Causa: o formato de saída do fail2ban-client varia levemente entre versões, e o sed pode não capturar corretamente a lista de jails em builds mais recentes.
Solução: teste manualmente fail2ban-client status isoladamente e ajuste a expressão regular do sed conforme a saída real antes de automatizar via cron.

Perguntas frequentes sobre Fail2Ban list banned ips

Como listar todos os IPs banidos pelo Fail2Ban?

Use o comando fail2ban-client status <jail> para cada jail ativa, que retorna a lista de IPs banidos naquele momento. Para uma visão consolidada de todas as jails, é preciso iterar sobre a saída de fail2ban-client status combinada com um script simples em bash. Não existe um comando único nativo que liste todos os IPs de todas as jails de uma vez.

Como remover um IP da lista de banidos sem reiniciar o serviço?

Execute fail2ban-client set <jail> unbanip <IP> para desbanir imediatamente sem afetar outras conexões ativas. Esse comando atua apenas na regra de firewall daquele IP específico, mantendo o restante da jail intacta. É a forma recomendada para liberar clientes legítimos identificados por engano.

Por que um cliente legítimo foi bloqueado pelo Fail2Ban?

Isso costuma ocorrer por falhas de autenticação repetidas causadas por senha salva incorreta em algum dispositivo, scripts automatizados mal configurados ou compartilhamento de IP em redes NAT corporativas. Auditar o log do Fail2Ban junto ao log do serviço monitorado (SSH, Postfix, etc.) ajuda a confirmar a causa antes de decidir entre whitelist ou apenas desbanir.

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

findtime define a janela de tempo em que as tentativas são contadas, maxretry é o número de falhas permitidas dentro dessa janela, e bantime determina por quanto tempo o IP fica bloqueado após exceder o limite. Ajustar esses três parâmetros juntos é essencial para reduzir falsos positivos sem afugentar atacantes reais.

Como monitorar bloqueios do Fail2Ban em tempo real?

O comando tail -f /var/log/fail2ban.log permite acompanhar em tempo real os eventos de ban e unban registrados pelo serviço. Também é possível integrar esses logs a ferramentas de monitoramento centralizadas para gerar alertas quando um IP corporativo ou de CDN for banido indevidamente.

Conclusão

  • Use fail2ban-client status <jail> para listar IPs banidos por jail sem alterar o firewall
  • Automatize a consolidação entre jails com um script bash em vez de rodar comandos manuais repetidos
  • Sempre confirme legitimidade do IP no log antes de desbanir com unbanip e registre no ignoreip para evitar recorrência

Leia também

Precisa de ajuda com Fail2Ban e segurança do servidor?

Se auditar bloqueios e ajustar jails manualmente está consumindo tempo demais, nossa equipe pode revisar a configuração do Fail2Ban no seu VPS e reduzir falsos positivos sem abrir brechas de segurança.

Conheça os planos de VPS da AviraHost


Esta resposta foi útil?