Firewall, logs e Fail2ban
Fechar as portas que não precisam estar abertas, aprender a ler os logs que contam a história de um incidente, e automatizar o bloqueio de quem insiste em tentar invadir.
O que você vai aprender
- Configurar um firewall com UFW seguindo o princípio de negar por padrão
- Filtrar e ler logs do sistema por severidade e por serviço
- Instalar e configurar o Fail2ban para banir tentativas de força bruta
1. Firewall com UFW
A regra de ouro de um firewall é negar tudo por padrão e liberar só o necessário. No UFW (Uncomplicated Firewall), isso é direto: defina as políticas padrão, libere as portas dos serviços que você realmente usa, e só então ative.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
2. Logs que explicam o incidente
Quando algo dá errado, os logs são a primeira fonte de verdade. O journalctl permite filtrar por prioridade e por janela de tempo, o que evita vasculhar milhares de linhas irrelevantes.
sudo journalctl -p warning..alert -b
sudo journalctl -u ssh --since "1 hour ago"
sudo tail -f /var/log/auth.log
3. Fail2ban
Mesmo com autenticação por chave, é comum ver um volume enorme de tentativas automatizadas de login contra a porta 22. O Fail2ban monitora os logs e bane temporariamente IPs que ultrapassam um limite de tentativas.
sudo tee /etc/fail2ban/jail.d/sshd.local <<'EOF'
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
EOF
sudo systemctl enable --now fail2ban
Com maxretry = 5 e findtime = 10m, um IP que errar 5 vezes em 10 minutos leva um ban de 1 hora. Ajuste esses valores conforme o perfil de tráfego do seu servidor.
sudo fail2ban-client status sshd.