Protegendo seu VPS contra ataques de força bruta com Fail2ban
Basta olhar o log de autenticação de qualquer servidor público para ver centenas de tentativas de login vindas de robôs. O Fail2ban monitora esses logs e bloqueia automaticamente os IPs que insistem.
Como funciona
- Lê arquivos de log (ou o journal do systemd);
- Procura padrões de falha (senha errada, usuário inexistente);
- Quando um IP ultrapassa o limite de falhas em um período, cria uma regra de firewall bloqueando-o por um tempo.
Instalação
# Debian/Ubuntu
sudo apt install fail2ban -y
# AlmaLinux/Rocky (repositório EPEL)
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Configuração básica
Nunca edite o jail.conf (ele é sobrescrito em atualizações). Crie o jail.local:
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
# adicione seu IP fixo em ignoreip, se tiver
[sshd]
enabled = true
maxretry: número de falhas permitidas;findtime: janela de tempo em que as falhas são contadas;bantime: por quanto tempo o IP fica bloqueado.
Em sistemas que registram o SSH apenas no journal, adicione backend = systemd na seção [sshd].
Ative:
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
Verificando
sudo fail2ban-client status
sudo fail2ban-client status sshd
Desbloquear um IP (por exemplo, o seu):
sudo fail2ban-client set sshd unbanip 203.0.113.10
Banimento progressivo para reincidentes
[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 1w
Cada novo banimento do mesmo IP dura mais tempo.
Protegendo o Nginx
O Fail2ban já traz filtros prontos, como nginx-http-auth (autenticação básica) e nginx-botsearch (varreduras por arquivos inexistentes):
[nginx-http-auth]
enabled = true
[nginx-botsearch]
enabled = true
Protegendo o login do WordPress
Crie um filtro /etc/fail2ban/filter.d/wordpress-login.conf:
[Definition]
failregex = ^<HOST> .* "POST /wp-login\.php
^<HOST> .* "POST /xmlrpc\.php
ignoreregex =
E o jail:
[wordpress-login]
enabled = true
port = http,https
filter = wordpress-login
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 5m
bantime = 1h
Esse filtro conta todos os POSTs no login, inclusive os bem-sucedidos. Ajuste
maxretrypara não bloquear usuários legítimos, ou use um plugin que registre apenas falhas.
Fail2ban não substitui o básico
Ele é uma camada extra. Continue usando:
- SSH por chave, sem senha;
- Firewall com portas mínimas;
- Sistema e aplicações atualizados.
Conclusão
O Fail2ban reduz ruído nos logs, economiza recursos e dificulta ataques automatizados.Instale no seu VPS-NVME-BR da VittHost logo no primeiro dia — e use o cupom SP-VITT20 para ganhar 20% de desconto na primeira fatura enquanto a promoção estiver ativa.