vps-linux/Artigo

    Configurar firewall na VPS com UFW

    UFW é a interface simplificada para iptables no Ubuntu/Debian — permite configurar um firewall completo com comandos diretos em inglês, sem precisar entender a sintaxe complexa do iptables. A regra básica é negar tudo e liberar apenas o que for necessário: SSH, HTTP, HTTPS e as portas dos seus apps.

    Instalação e configuração inicial

    UFW vem pré-instalado no Ubuntu. Antes de habilitar, libere o SSH para não se trancar para fora:

    bash
    # Verificar se o UFW está instalado
    which ufw || apt install -y ufw
    
    # Ver status atual
    sudo ufw status
    
    # PASSO CRÍTICO: liberar SSH antes de habilitar
    sudo ufw allow OpenSSH    # porta 22
    # Se mudou a porta: sudo ufw allow 2222/tcp
    
    # Definir política padrão: negar entrada, permitir saída
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
    # Habilitar o firewall
    sudo ufw enable
    
    # Confirmar regras ativas
    sudo ufw status verbose
    Atenção
    ufw default deny incoming DEPOIS de ufw enable sem ter liberado o SSH te desconecta da VPS. Sempre libere a porta SSH antes de habilitar o firewall.

    Regras mais comuns para apps

    Libere apenas as portas que os seus serviços precisam — cada porta aberta desnecessariamente é um vetor de ataque:

    bash
    # Web (HTTP + HTTPS)
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    # Atalho equivalente:
    sudo ufw allow 'Nginx Full'
    
    # Banco de dados PostgreSQL (apenas de IPs confiáveis)
    sudo ufw allow from 10.0.0.0/8 to any port 5432
    sudo ufw allow from 192.168.1.0/24 to any port 5432
    
    # n8n (só acesse de IP específico ou use Nginx como proxy)
    sudo ufw allow from SEU_IP to any port 5678
    
    # Docker expõe portas bypassando o UFW por padrão!
    # Para ports mapeados com "0.0.0.0:PORTA", o Docker abre no iptables
    # Solução: mapear apenas para localhost e usar Nginx como proxy
    # ports: "127.0.0.1:5678:5678"   (acessível só via Nginx/proxy)
    Dica
    Docker tem uma interação importante com o UFW: portas mapeadas no docker-compose.yml como "0.0.0.0:PORTA:PORTA" ficam acessíveis externamente mesmo se o UFW bloquear a porta. Mapeie para "127.0.0.1:PORTA:PORTA" para forçar o acesso pelo Nginx.

    Gerenciar e remover regras

    Manter as regras organizadas evita acúmulo de permissões desnecessárias:

    bash
    # Listar regras com número (para remoção)
    sudo ufw status numbered
    
    # Remover regra por número
    sudo ufw delete 3
    
    # Remover regra por descrição
    sudo ufw delete allow 8080/tcp
    
    # Negar um IP específico (bloquear atacante)
    sudo ufw deny from 203.0.113.0 to any
    
    # Negar uma faixa de IPs
    sudo ufw deny from 203.0.113.0/24 to any
    
    # Resetar todas as regras (cuidado!)
    sudo ufw reset

    Rate limiting para SSH (proteção contra força bruta)

    UFW tem suporte nativo a rate limiting — bloqueia IPs que fazem muitas tentativas de conexão em pouco tempo:

    bash
    # Habilitar rate limiting na porta SSH (6+ tentativas em 30s = ban temporário)
    sudo ufw limit OpenSSH
    # Ou: sudo ufw limit 22/tcp
    
    # Para porta SSH customizada:
    sudo ufw limit 2222/tcp
    
    # Verificar se a regra foi aplicada
    sudo ufw status | grep LIMIT
    
    # Ver tentativas bloqueadas nos logs
    sudo grep "UFW BLOCK" /var/log/ufw.log | tail -20
    Dica
    ufw limit é uma proteção básica. Para proteção mais robusta com bloqueio persistente, use Fail2ban em conjunto — ele monitora logs e adiciona regras de firewall dinamicamente.

    Logs e diagnóstico

    Habilite logs para entender quais conexões estão sendo bloqueadas e identificar tentativas de intrusão:

    bash
    # Habilitar logs (nível low registra conexões bloqueadas)
    sudo ufw logging on
    sudo ufw logging medium   # mais detalhado
    
    # Ver log em tempo real
    sudo tail -f /var/log/ufw.log
    
    # Contar tentativas bloqueadas por IP (top atacantes)
    sudo grep "UFW BLOCK" /var/log/ufw.log \
      | grep -oP 'SRC=\K[0-9.]+' \
      | sort | uniq -c | sort -rn | head -10
    
    # Desabilitar logs (reduz I/O em VPS muito atacadas)
    sudo ufw logging off

    $ 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.

    Perguntas frequentes