UFW: firewall na VPS Ubuntu
UFW é a interface simplificada do iptables que vem com o Ubuntu — fácil de usar, eficaz e indispensável para qualquer VPS exposta à internet. Sem um firewall configurado, todas as portas abertas pelos seus serviços ficam acessíveis a qualquer IP do mundo, incluindo scanners automáticos que varrem a internet em busca de vulnerabilidades.
Configuração inicial do UFW
Primeiros passos para ativar o firewall sem perder acesso SSH:
# ATENÇÃO: execute esses comandos na ordem exata
# para não se trancafiar fora da VPS
# 1. Verificar status atual
sudo ufw status verbose
# 2. Definir política padrão: bloquear tudo, depois abrir o necessário
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 3. Liberar SSH ANTES de ativar (obrigatório)
sudo ufw allow ssh # porta 22 (ou use a porta customizada)
# sudo ufw allow 2222/tcp # se você mudou a porta do SSH
# 4. Ativar o firewall
sudo ufw enable
# 5. Verificar regras ativas
sudo ufw status numbered
# Liberar portas adicionais:
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 5432/tcp # PostgreSQL (somente se necessário externamente)
# Liberar apenas de IP específico:
sudo ufw allow from 177.10.0.1 to any port 5432Regras avançadas por IP e subrede
Restringir acesso a serviços internos por endereço IP:
# Permitir acesso ao PostgreSQL apenas de IP específico:
sudo ufw allow from 10.0.0.5 to any port 5432 proto tcp
# Permitir subrede inteira (ex: rede privada do provedor):
sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
# Bloquear IP específico (ex: IP atacante):
sudo ufw deny from 185.220.101.0/24
# Limitar tentativas de SSH (bloqueia após 6 tentativas em 30s):
sudo ufw limit ssh
# Regra com interface de rede específica:
sudo ufw allow in on eth0 to any port 443 proto tcp
# Ver regras com números:
sudo ufw status numbered
# Remover regra pelo número:
sudo ufw delete 3
# Ou remover pela descrição:
sudo ufw delete allow 8080/tcpProteger serviços Docker com UFW
Por padrão, o Docker bypassa o UFW — correção necessária:
# Problema: Docker adiciona regras diretamente no iptables,
# ignorando completamente o UFW
# Solução: fazer o Docker publicar apenas no localhost
# Em vez de: ports: - "8080:8080"
# Use: ports: - "127.0.0.1:8080:8080"
# Isso garante que apenas o Nginx (no host) acessa o container,
# e o UFW controla quem acessa o Nginx
# Para aplicar globalmente sem mudar cada compose:
# /etc/docker/daemon.json
{
"iptables": false
}
# CUIDADO: isso quebra o networking do Docker
# A abordagem 127.0.0.1 no ports é a mais segura e simples
# Verificar quais portas o Docker está expondo:
sudo ss -tlnp | grep docker
sudo iptables -L DOCKER --line-numbers
# Verificar portas abertas após configuração:
sudo ss -tlnp
nmap -sV localhostMonitorar tráfego bloqueado pelo UFW
Analisar o que o firewall está bloqueando:
# Habilitar logging do UFW:
sudo ufw logging on # nível medium (padrão)
sudo ufw logging high # log de tudo (verboso)
# Logs ficam em /var/log/ufw.log:
sudo tail -f /var/log/ufw.log
# Filtrar apenas conexões bloqueadas:
sudo grep "BLOCK" /var/log/ufw.log | tail -20
# IPs que mais tentaram conexão bloqueada:
sudo grep "BLOCK" /var/log/ufw.log \
| grep -oP 'SRC=\K[0-9.]+' \
| sort | uniq -c | sort -rn | head -20
# Portas mais atacadas:
sudo grep "BLOCK" /var/log/ufw.log \
| grep -oP 'DPT=\K[0-9]+' \
| sort | uniq -c | sort -rn | head -10
# Rotação de logs (já configurada pelo logrotate no Ubuntu):
cat /etc/logrotate.d/ufwScript de auditoria do UFW
Verificar e documentar o estado atual do firewall:
#!/bin/bash
# /opt/scripts/auditoria-ufw.sh
echo "=== Auditoria UFW — $(date) ==="
echo ""
echo "--- Status e regras ativas ---"
sudo ufw status verbose
echo ""
echo "--- Portas abertas no sistema ---"
sudo ss -tlnp
echo ""
echo "--- Regras iptables (Docker) ---"
sudo iptables -L DOCKER --line-numbers 2>/dev/null | head -20
echo ""
echo "--- Top 10 IPs bloqueados hoje ---"
sudo grep "BLOCK" /var/log/ufw.log \
| grep "$(date +%b %e)" \
| grep -oP 'SRC=\K[0-9.]+' \
| sort | uniq -c | sort -rn | head -10
echo ""
echo "--- Pacotes bloqueados hoje: ---"
sudo grep "BLOCK" /var/log/ufw.log | grep "$(date +%b %e)" | wc -l$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.