Fail2ban em servidor Linux É uma ferramenta de prevenção de intrusões que monitora logs, detecta falhas repetidas de autenticação ou padrões maliciosos e bloqueia automaticamente IPs infratores atualizando o firewall (iptables, nftables, UFW ou firewalld). Isso reduz SSH Ataques de força bruta, abuso de login na web e autenticação de e-mail com "prisões" personalizáveis, filtros e políticas de bloqueio.
Por que o Fail2ban é importante em um servidor Linux?
Ao colocar um servidor Linux online, ele se torna um alvo para bots de varredura. SSH, Nginx/Apache, MySQLe serviços de e-mail. O Fail2ban oferece uma defesa automatizada: ele monitora arquivos de log, identifica IPs abusivos usando expressões regulares e os bloqueia temporariamente usando o firewall do seu sistema.

É leve, fácil de configurar e um requisito básico indispensável para a segurança do servidor.
Como funciona o Fail2ban (Visão geral em linguagem simples)
O Fail2ban utiliza três componentes principais: jails, filtros e ações. Uma jail define o que proteger (por exemplo, SSHO filtro define como detectar comportamentos inadequados nos logs, e a ação define como banir o infrator (por exemplo, adicionar uma regra iptables/nftables). Quando um IP excede o limite de tentativas (maxretry) dentro do tempo definido em findtime, ele é banido pelo período de tempo definido em bantime.
Conceitos e Arquivos Principais
1. Prisões
As jails conectam uma fonte de logs e um filtro a uma ação de bloqueio. Cada serviço que você protege (sshd, nginx, postfix, dovecot, vsftpd) normalmente tem uma jail dedicada. As jails podem ter limites, durações de bloqueio e listas de permissão exclusivos.
2.Filtros
Os filtros são expressões regulares que correspondem a linhas de log maliciosas. Eles residem em /etc/fail2ban/filter.d/Muitos filtros são enviados por padrão (por exemplo, sshd.conf, nginx-http-auth.conf) e você pode criar os seus próprios para aplicativos personalizados.
3.Ação
As ações definem como bloquear/desbloquear um endereço IP. As ações comuns incluem iptables, nftables, firewalld e UFW. Elas residem em /etc/fail2ban/action.d/Algumas ações também enviam e-mails ou acionam scripts para notificações.
4. Backends
O Fail2ban pode ler arquivos de log simples ou o journal do systemd. Em distribuições modernas, usando backend = systemd É rápido e confiável porque lê diretamente do periódico.
Instale o Fail2ban (Ubuntu/Debian, RHEL/CentOS/Rocky/Alma)
Ubuntu / Debian
sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo systemctl status fail2banRHEL/CentOS/Rocky/Alma
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
sudo systemctl enable --now fail2ban
sudo systemctl status fail2banPor padrão, o Fail2ban é fornecido com uma linha de base segura para SSH Em muitos sistemas, mas a melhor prática é criar o seu próprio. jail.local Para substituir os valores padrão.
Configuração de Início Rápido (Recomendada) SSH Proteção)
Criar ou editar /etc/fail2ban/jail.local e adicione uma linha de base segura. Isso protege SSH, habilita o backend systemd e define limites de repetição agressivos, porém razoáveis:
[DEFAULT]
# Use systemd journal where available
backend = systemd
# Whitelist your office/home IPs and private ranges if appropriate
ignoreip = 127.0.0.1/8 ::1
# 10-minute search window, 5 failures => ban
findtime = 10m
maxretry = 5
# Start with a 1 hour ban; escalate using bantime.increment below
bantime = 1h
# Use incremental bans on repeat offenders
bantime.increment = true
bantime.factor = 2
bantime.formula = bantime * (1 + failures)
# Choose your firewall action (adjust to your stack)
banaction = iptables-multiport
# Alternatives: nftables, ufw, firewallcmd-rich-rules
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
filter = sshd
maxretry = 5
findtime = 10m
bantime = 1hRecarregue o Fail2ban para aplicar as alterações:
sudo systemctl reload fail2ban
# or
sudo fail2ban-client reloadProtegendo servidores web (Nginx/Apache) e WordPress
Endurecimento SSH é o primeiro passo. Em seguida, aborde a autenticação HTTP, o login do WordPress e os padrões comuns de scanners. Os exemplos a seguir usam filtros integrados e um filtro personalizado para scanners com muito ruído:
permitir Nginx Autenticação HTTP e bots maliciosos
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
findtime = 10m
bantime = 2h
# Optional: block repeated 404 scans (custom filter below)
[nginx-404-scan]
enabled = true
port = http,https
filter = nginx-404-scan
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 10m
bantime = 2hCriar /etc/fail2ban/filter.d/nginx-404-scan.conf:
[Definition]
failregex = <HOST> - - \[.*\] "GET .*" 404
ignoreregex =
# Adjust if your log format differsApache Autenticação HTTP
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 2hPara WordPress, combine o Fail2ban com senhas fortes, autenticação de dois fatores (2FA) e um WAF. Você também pode analisar... wp-login.php falhas podem ser detectadas através dos logs do servidor web ou de um plugin que escreve no syslog.
Enviar, FTPe outras prisões comuns
Se o seu servidor executa e-mail ou FTPHabilite essas jails e direcione-as para os logs corretos:
- Abuso de autenticação do Postfix:
[postfix]com/var/log/maillogou diário - Ataque de força bruta IMAP/POP no Dovecot:
[dovecot] - vsftpd ou pure-ftpd:
[vsftpd],[pure-ftpd] - Reincidentes (abusadores que retornam a diferentes prisões):
[recidive]prisão
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
findtime = 1d
maxretry = 5
bantime = 7dUtilizando diferentes firewalls: iptables, nftables, UFW, firewalld
Combine a ação de banimento com a sua configuração de firewall:
- tabelas de ip:
banaction= iptables-multiport - nftables:
banaction= nftables - UFW (Ubuntu):
banaction= ufw - firewalld (RHEL):
banaction = firewallcmd-rich-rules
Use apenas um frontend de firewall por vez para evitar conflitos (por exemplo, não execute o UFW e o firewalld simultaneamente). Após a alteração banaction, recarregue o Fail2ban.
Monitoramento, Teste e Desbloqueio
Verifique o status
sudo fail2ban-client status
sudo fail2ban-client status sshdTeste os filtros com registros reais.
# Test a filter against a log file
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# On RHEL-like systems
sudo fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.confDesbloquear ou banir manualmente
# Unban an IP from a specific jail
sudo fail2ban-client set sshd unbanip 203.0.113.10
# Temporarily ban an IP
sudo fail2ban-client set sshd banip 203.0.113.10Configurações de melhores práticas (com base em hospedagem real)
- Use o backend systemd em distribuições modernas para obter confiabilidade e velocidade.
- Ative banimentos incrementais para desacelerar infratores reincidentes sem bloquear permanentemente usuários legítimos que digitam senhas incorretamente.
- Conjunto
findtimede 10 a 15 minutos emaxretrypara 4–6 para SSH; comece combantime1 hora e deixe que o sistema de recorrência lide com os atacantes reincidentes. - Adicione IPs de VPN de escritório fixo à lista de permissões com
ignoreippara evitar bloqueios acidentais. - Endurecer SSH Além do Fail2ban: alterar o SSH Se necessário, configure a porta, desative a autenticação por senha em favor de chaves e habilite a autenticação de dois fatores (2FA) para contas privilegiadas.
- Para Nginx/ApacheRegistre os logs em formato combinado e assegure-se de que os logs de erro/acesso sejam rotacionados corretamente para que o Fail2ban tenha uma visão contínua.
- Mantenha os filtros atualizados; aplicativos personalizados geralmente precisam de filtros personalizados.
Limitações e como construir uma estrutura de segurança mais robusta
- O Fail2ban não é uma solução contra DDoS. Utilize uma CDN/WAF, limitação de taxa no servidor web e mitigação em nível de rede para ataques volumétricos.
- Ele reage após o registro de comportamentos inadequados. Para sistemas de alto risco, adicione controles proativos: listas de permissões, gateways VPN e MFA (autenticação multifator).
- Filtros muito abrangentes podem causar falsos positivos. Sempre teste com
fail2ban-regexe monitorar os registros da prisão. - Em ambientes conteinerizados, certifique-se de que os logs em nível de host estejam acessíveis ou execute o Fail2ban no host onde os firewalls estão instalados. managed.
Dicas de solução de problemas
- Se os bloqueios não aparecerem, verifique a ação de bloqueio correta para o seu firewall e confirme se o serviço de firewall está em execução.
- Caso não haja correspondências, verifique se o caminho do log está correto e se a expressão regular do filtro corresponde ao formato do seu log.
- Se o Fail2ban reiniciar banimentos já realizados, isso é esperado; o Fail2ban reaplica novos banimentos à medida que detecta eventos. O recurso Recidive ajuda a lidar com atacantes persistentes.
- Uso
journalctl -u fail2bane/var/log/fail2ban.logPara diagnosticar problemas.
Onde a segurança gerenciada ajuda
Se preferir não ajustar manualmente os filtros e as políticas de firewall, um managehospedagem d O provedor pode ajudar. YouStableNossos engenheiros implementam o Fail2ban com configurações padrão reforçadas, integram-no ao firewall de sua escolha (UFW, nftables, firewalld) e monitoram proativamente as jails juntamente com a segurança do WAF/CDN — para que você obtenha proteção em camadas sem precisar adivinhar.
Exemplo completo: Seguro SSH, Nginxe reincidente
[DEFAULT]
backend = systemd
ignoreip = 127.0.0.1/8 ::1
findtime = 10m
maxretry = 5
bantime = 1h
bantime.increment = true
bantime.factor = 2
banaction = nftables # use iptables-multiport, ufw, or firewallcmd-rich-rules if preferred
[sshd]
enabled = true
port = 22
filter = sshd
logpath = %(sshd_log)s
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
[nginx-404-scan]
enabled = true
port = http,https
filter = nginx-404-scan
logpath = /var/log/nginx/access.log
maxretry = 20
bantime = 2h
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
findtime = 1d
maxretry = 5
bantime = 7dPerguntas frequentes's
1. O Fail2ban é necessário em um servidor Linux?
Sim. Qualquer servidor exposto à internet atrai tentativas de força bruta e de preenchimento de credenciais. O Fail2ban oferece bloqueio automatizado e de baixo custo para esses ataques. SSHServiços web e de e-mail, reduzindo a superfície de ataque e o ruído nos logs. É uma prática recomendada básica, mesmo se você também usar um WAF ou CDN.
2. O Fail2ban impede ataques DDoS?
Não. O Fail2ban não foi projetado para mitigação de DDoS volumétrico. Ele é eficaz contra falhas repetidas de autenticação e padrões de abuso na camada de aplicação. Utilize proteção na camada de rede, uma CDN/WAF e limitação de taxa no servidor web para complementar o Fail2ban.
3. Como faço para adicionar IPs confiáveis à lista de permissões ou ignorá-los?
Adicione endereços confiáveis a ignoreip in /etc/fail2ban/jail.local, como o seu IP de VPN ou o IP do seu escritório. Exemplo: ignoreip = 127.0.0.1/8 ::1 203.0.113.5Recarregue o Fail2ban em seguida para aplicar as alterações.
4. Qual firewall devo usar com o Fail2ban: iptables, nftables, UFW ou firewalld?
Use a ferramenta nativa da sua distribuição e de acordo com sua preferência: nftables em sistemas Linux modernos, iptables para sistemas legados, UFW no Ubuntu pela simplicidade e firewalld em distribuições baseadas em RHEL. Configure banaction Consequentemente, evite executar várias interfaces de firewall simultaneamente.
5. O que é bom SSH Valores de bantime, findtime e maxretry?
Um bom ponto de partida: maxretry = 5, findtime = 10m, bantime = 1h, com bantime.increment = true e recidive Ativar o bloqueio. Isso equilibra o risco de desbloqueio com uma forte dissuasão para bots e infratores reincidentes.