Tutoriais

Protegendo seu VPS contra ataques de força bruta com Fail2ban

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

  1. Lê arquivos de log (ou o journal do systemd);
  2. Procura padrões de falha (senha errada, usuário inexistente);
  3. 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 maxretry para 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.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS