Como Proteger seu Servidor Linux contra Ataques Brute-Force e Port Scanning
Todo servidor com IP público recebe, desde o primeiro minuto, varreduras automatizadas de portas e tentativas de login SSH por força bruta. Não é questão de "se", é o ruído de fundo da internet. Este guia mostra a defesa em camadas que aplico em VPS Ubuntu.
---
## 1. SSH: elimine a superfície de senha
A esmagadora maioria dos ataques de força bruta mira login por senha no usuário root. Dois ajustes em `/etc/ssh/sshd_config` eliminam essa classe inteira de ataque:
```
PermitRootLogin no
PasswordAuthentication no
```
Com autenticação exclusivamente por chave (Ed25519), força bruta de senha se torna matematicamente irrelevante. Antes de desabilitar senha, **confirme que sua chave funciona em outra sessão** — travar-se para fora do próprio servidor é um rito de passagem que ninguém precisa repetir.
## 2. Firewall: negue por padrão
O UFW resume a política correta em três comandos:
```bash
ufw default deny incoming
ufw allow 22/tcp # SSH
ufw allow 80,443/tcp # HTTP/HTTPS
ufw enable
```
Tudo que não for explicitamente permitido, cai. Se o MySQL ou o Redis do seu Docker vazarem uma porta para o host por engano, o firewall é a última linha que impede a exposição pública.
## 3. Fail2ban: custo crescente para o atacante
Mesmo com senha desabilitada, cada tentativa de conexão consome recursos e polui logs. O Fail2ban lê os logs do SSH e bane IPs reincidentes no firewall:
```ini
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
```
Cinco falhas em dez minutos = uma hora de banimento. Bots desistem e passam para o próximo alvo.
## 4. Port scanning: reduza o que há para encontrar
Contra varredura de portas, a melhor defesa não é esconder — é **não ter nada escutando**. Audite regularmente:
```bash
ss -tlnp # o que está escutando em TCP?
```
Cada linha dessa saída é superfície de ataque. Serviços internos devem escutar em `127.0.0.1` ou na rede interna do Docker, nunca em `0.0.0.0`, a menos que sejam genuinamente públicos.
## 5. Atualizações automáticas de segurança
```bash
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
```
A janela entre a divulgação de uma CVE e sua exploração em massa é medida em horas. Patches automáticos de segurança fecham essa janela sem depender da sua disciplina.
## 6. Atrás do Cloudflare: aceite só o Cloudflare
Se o site fica atrás de um proxy como o Cloudflare, o IP de origem não deveria aceitar tráfego HTTP de mais ninguém — senão atacantes contornam o WAF falando direto com sua VPS. Restrinja as portas 80/443 aos [ranges de IP publicados pelo Cloudflare](https://www.cloudflare.com/ips/).
---
## O modelo mental
Nenhuma camada é perfeita; o objetivo é que cada uma cubra a falha da anterior: chave SSH (elimina), firewall (contém), Fail2ban (encarece), superfície mínima (reduz), patch automático (acompanha). Segurança de servidor é maratona de manutenção, não sprint de configuração.
Comentários
Seja o primeiro a comentar.
Artigos relacionados
Guia Definitivo de Docker em Produção: Do Dockerfile ao Compose Seguro
Checklist de hardening para containers em produção: usuário não-root, segredos fail-closed no Compose, .dockerignore como controle de segurança, healthchecks e rede interna.
Engenharia de Prompt e Agentes de IA em Python: Como Construir Assistentes Especializados
Explorando a construção de agentes de IA desacoplados em Python com controle de estado, validação de saída estruturada e otimização de contexto para produção.
Como Construí uma Plataforma Educacional Gamificada em Django 6.0 (Build in Public)
Bastidores da arquitetura e desenvolvimento da plataforma de cursos gamificada em Django 6.0: Mimo UI, validação de quizzes AJAX, trava de lições sequencial, antispam e analytics no painel de monitoria.