- O Que é Fail2ban e Por Que Seu VPS Precisa Dele
- Instalando o Fail2ban no Seu VPS
- Entendendo a Estrutura de Configuração
- Configurando o Arquivo jail.local
- Protegendo SSH com Fail2ban
- Protegendo Nginx e Apache
- Verificando o Status e Gerenciando Bans
- Configurações Avançadas
- Testando Sua Configuração
- Boas Práticas de Segurança Junto ao Fail2ban
- Fail2ban no Contexto do Seu VPS
- Perguntas Frequentes
- Conclusão
Qualquer VPS exposto à internet começa a receber tentativas de login por força bruta em questão de minutos após ser provisionado. Bots automatizados varrem faixas inteiras de IP testando combinações de usuário e senha sem parar. Este fail2ban tutorial mostra como instalar, configurar e ajustar o Fail2ban para bloquear esses ataques antes que causem dano real, com exemplos práticos para Ubuntu/Debian e CentOS/AlmaLinux.
O Fail2ban monitora arquivos de log em tempo real, detecta padrões de falha de autenticação e bloqueia automaticamente os IPs ofensores via iptables ou firewalld. É leve, maduro e funciona bem em qualquer VPS Linux sem exigir recursos adicionais.
O Que é Fail2ban e Por Que Seu VPS Precisa Dele
O Fail2ban é um daemon escrito em Python que lê logs de serviços como SSH, Nginx, Apache, Postfix e outros. Quando um IP excede um número configurável de falhas dentro de uma janela de tempo, ele cria uma regra de firewall temporária para bloquear aquele endereço.
Sem ele, um atacante pode tentar milhares de combinações de senha por hora sem nenhuma consequência. Com ele, cinco tentativas erradas em dez minutos já resultam em banimento automático.
O Fail2ban não substitui uma senha forte ou autenticação por chave SSH, mas é uma camada de defesa importante que reduz drasticamente a superfície de ataque e o ruído nos seus logs.
Instalando o Fail2ban no Seu VPS
Ubuntu e Debian
sudo apt update
sudo apt install fail2ban -y
Após a instalação, inicie e habilite o serviço:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Verifique se está rodando:
sudo systemctl status fail2ban
CentOS, AlmaLinux e Rocky Linux
No CentOS 7 ou versões mais antigas, o Fail2ban está no repositório EPEL:
sudo yum install epel-release -y
sudo yum install fail2ban -y
No AlmaLinux 8/9 ou Rocky Linux, use dnf:
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Inicie e habilite da mesma forma:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Entendendo a Estrutura de Configuração
O Fail2ban separa a configuração em dois tipos de arquivo:
- Arquivos
.conf: configuração padrão do pacote. Nunca edite diretamente — atualizações sobrescrevem qualquer mudança feita aqui. - Arquivos
.local: seus arquivos de configuração personalizados. Têm precedência sobre os.confe sobrevivem a atualizações.
Os arquivos principais ficam em /etc/fail2ban/:
| Arquivo | Função |
|---|---|
fail2ban.conf | Configurações globais do daemon |
jail.conf | Definições de todas as "jails" (regras de monitoramento) |
jail.local | Suas customizações de jail (crie este arquivo) |
filter.d/ | Expressões regulares para detectar falhas |
action.d/ | Ações executadas ao banir um IP |
Configurando o Arquivo jail.local
Crie o arquivo jail.local copiando o padrão como base:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ou crie do zero com apenas as seções que você quer customizar — essa segunda abordagem costuma ser mais limpa:
sudo nano /etc/fail2ban/jail.local
Configuração Global Recomendada
[DEFAULT]
# IP ou faixas que nunca serão banidos (seu IP fixo, por exemplo)
ignoreip = 127.0.0.1/8 ::1
# Tempo de banimento em segundos (3600 = 1 hora)
bantime = 3600
# Janela de tempo para contar falhas (em segundos)
findtime = 600
# Número de falhas antes do ban
maxretry = 5
# Backend de leitura de log (auto detecta systemd ou polling)
backend = auto
# Ação padrão: bane e envia e-mail (se configurado)
banaction = iptables-multiport
Dica importante: adicione seu próprio IP fixo em ignoreip antes de qualquer outra coisa. Um erro de configuração pode te bloquear do seu próprio servidor.
Protegendo SSH com Fail2ban
SSH é o alvo mais comum de ataques de força bruta, então a jail para SSH é a mais importante de configurar.
Adicione ao jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 300
Se você mudou a porta padrão do SSH (o que é recomendado), substitua port = ssh pela porta real:
port = 2222
No CentOS/AlmaLinux, o log de autenticação fica em /var/log/secure em vez de /var/log/auth.log:
logpath = /var/log/secure
Em sistemas que usam systemd (Ubuntu 20.04+, AlmaLinux 8+), o Fail2ban lê o journal diretamente quando backend = systemd está definido, e o logpath pode ser omitido para a jail sshd.
Após editar, recarregue o Fail2ban:
sudo systemctl reload fail2ban
Protegendo Nginx e Apache
Se o seu VPS serve sites, você também precisa proteger o servidor web contra tentativas de login em painéis, WordPress e outros pontos de entrada HTTP.
Nginx: Bloqueando Tentativas de Login
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
Para WordPress especificamente, existe um filtro community chamado nginx-wordpress que monitora falhas em /wp-login.php. Crie um filtro customizado em /etc/fail2ban/filter.d/nginx-wordpress.conf:
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
ignoreregex =
E a jail correspondente:
[nginx-wordpress]
enabled = true
filter = nginx-wordpress
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 7200
findtime = 300
Apache
[apache-auth]
enabled = true
filter = apache-auth
port = http,https
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
Verificando o Status e Gerenciando Bans
Ver o Status Geral
sudo fail2ban-client status
Saída esperada:
Status
|- Number of jail: 3
`- Jail list: nginx-http-auth, sshd, nginx-wordpress
Ver Detalhes de uma Jail Específica
sudo fail2ban-client status sshd
Esse comando mostra quantos IPs estão banidos, quantas falhas foram detectadas e a lista de endereços bloqueados no momento.
Desbanir um IP Manualmente
Se você acidentalmente bloqueou um IP legítimo — o seu, por exemplo:
sudo fail2ban-client set sshd unbanip 203.0.113.42
Substitua sshd pelo nome da jail e o IP pelo endereço que quer liberar.
Ver Logs do Fail2ban
sudo tail -f /var/log/fail2ban.log
Você verá linhas como:
2026-09-13 14:32:01,847 fail2ban.actions [1234]: NOTICE [sshd] Ban 198.51.100.77
Configurações Avançadas
Banimentos Progressivos
O Fail2ban suporta banimentos progressivos: quanto mais vezes um IP é banido, mais tempo ele fica bloqueado. Útil para atacantes persistentes.
Adicione ao [DEFAULT] no jail.local:
bantime.increment = true
bantime.rndtime = 300
bantime.multiplier = 1 5 30 60 300 720 1440 2880
Com essa configuração, o primeiro ban dura o bantime padrão. Reincidências multiplicam esse tempo progressivamente.
Notificação por E-mail
Se o servidor tem um MTA configurado (Postfix, por exemplo), você pode receber alertas por e-mail:
[DEFAULT]
destemail = voce@seudominio.com.br
sendername = Fail2ban
mta = sendmail
action = %(action_mwl)s
A ação %(action_mwl)s bane o IP e envia um e-mail com o whois do endereço e as linhas de log relevantes.
Usar nftables em Vez de iptables
Em sistemas mais recentes (Ubuntu 22.04+, AlmaLinux 9), o backend de firewall padrão é nftables. Configure assim:
[DEFAULT]
banaction = nftables-multiport
banaction_allports = nftables-allports
Testando Sua Configuração
Antes de considerar a configuração pronta, vale confirmar que os filtros estão funcionando corretamente.
Use o comando fail2ban-regex para testar um filtro contra um arquivo de log:
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
A saída mostra quantas linhas foram correspondidas pelo filtro. Se o número for zero e você sabe que houve tentativas de login, o logpath ou o filtro provavelmente está errado.
Para testar um filtro customizado antes de ativá-lo:
sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-wordpress.conf
Boas Práticas de Segurança Junto ao Fail2ban
O Fail2ban é uma camada de defesa, não a única. Use-o em conjunto com:
Autenticação por chave SSH: desative o login por senha editando /etc/ssh/sshd_config e definindo PasswordAuthentication no. Com chaves, ataques de força bruta contra SSH se tornam irrelevantes.
Mudar a porta SSH padrão: trocar a porta 22 por uma porta não padrão reduz o volume de bots que tentam conexão, diminuindo o ruído nos logs.
Firewall com allowlist: se você acessa o servidor de IPs fixos, configure o firewall para aceitar SSH apenas desses endereços. O Fail2ban vira um backup para casos excepcionais.
Atualizações regulares: mantenha o sistema operacional e os pacotes atualizados. Vulnerabilidades conhecidas são exploradas antes que o Fail2ban tenha chance de agir.
Fail2ban no Contexto do Seu VPS
Quem gerencia sites de clientes em um VPS sabe que a segurança do servidor afeta diretamente a disponibilidade e a reputação de todos esses projetos. Um servidor comprometido por força bruta pode resultar em envio de spam, mineração de criptomoedas ou exposição de dados de clientes.
VPS com NVMe e infraestrutura bem configurada, como os planos disponíveis na Napoleon, entregam a base de desempenho. A segurança do sistema operacional, porém, é responsabilidade do administrador. O Fail2ban é uma das primeiras ferramentas que qualquer desenvolvedor ou sysadmin deve instalar após provisionar um servidor novo.
Perguntas Frequentes
O Fail2ban funciona em qualquer distribuição Linux?
Sim. Ele está disponível nos repositórios oficiais de Ubuntu, Debian, CentOS, AlmaLinux, Rocky Linux e Fedora. A instalação e configuração básica são praticamente idênticas em todas essas distribuições, com pequenas diferenças nos caminhos dos arquivos de log.
O Fail2ban pode me bloquear do meu próprio servidor?
Pode, se você errar a senha várias vezes antes de configurar o ignoreip. Sempre adicione seu IP fixo à lista antes de ativar as jails. Se já estiver bloqueado, acesse o servidor pelo console VNC do painel de controle e desbana seu IP manualmente.
Qual é a diferença entre bantime, findtime e maxretry?findtime é a janela de tempo em que as falhas são contadas. maxretry é o número de falhas permitidas dentro dessa janela. bantime é por quanto tempo o IP fica bloqueado após atingir o limite. Exemplo prático: 5 falhas em 10 minutos resultam em 1 hora de ban.
Devo usar Fail2ban junto com UFW ou firewalld?
Sim, eles se complementam bem. UFW e firewalld definem regras estáticas de acesso. O Fail2ban adiciona regras dinâmicas e temporárias com base em comportamento detectado nos logs. Os dois coexistem sem conflito desde que o banaction esteja configurado corretamente para o backend de firewall em uso.
O Fail2ban protege contra ataques DDoS?
Não diretamente. O Fail2ban é eficaz contra força bruta de autenticação, onde um único IP faz muitas tentativas. Ataques DDoS distribuídos envolvem milhares de IPs diferentes e exigem soluções específicas — rate limiting no Nginx, CDN com proteção DDoS ou serviços dedicados de mitigação.
Como vejo se o Fail2ban está realmente bloqueando IPs?
Use sudo fail2ban-client status <nome-da-jail> para ver os IPs atualmente banidos. Para histórico, consulte o log e filtre por "Ban": grep "Ban" /var/log/fail2ban.log | tail -20.
O Fail2ban funciona com servidores que usam IPv6?
Sim, o suporte a IPv6 é nativo. Certifique-se de que o banaction configurado também suporte IPv6. A ação iptables-multiport cobre apenas IPv4; para IPv6, use ip6tables-multiport ou configure banaction = nftables-multiport, que lida com ambos os protocolos de forma transparente.
Conclusão
Instalar e configurar o Fail2ban é uma das primeiras tarefas a executar em qualquer VPS novo. O processo leva menos de 30 minutos e a proteção é imediata. Comece pela jail do SSH, adicione proteção para o servidor web, configure ignoreip com seu IP e monitore os logs nas primeiras horas para ajustar maxretry e bantime conforme o volume de tentativas que você observar.
Segurança em camadas funciona melhor quando cada camada tem uma função clara: o firewall controla o acesso, o Fail2ban reage a comportamento suspeito, e a autenticação por chave SSH elimina a categoria inteira de ataques de senha. Configure as três e seu servidor estará significativamente mais resistente.



