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:

    bash
    # 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 5432
    Atenção
    Se você usar sudo ufw enable antes de liberar a porta SSH, você perderá o acesso remoto à VPS. Sempre execute sudo ufw allow ssh antes de ativar.

    Regras avançadas por IP e subrede

    Restringir acesso a serviços internos por endereço IP:

    bash
    # 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/tcp

    Proteger serviços Docker com UFW

    Por padrão, o Docker bypassa o UFW — correção necessária:

    bash
    # 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 localhost
    Dica
    O padrão "127.0.0.1:PORTA:PORTA" no docker-compose.yml é a melhor prática — garante que o container só é acessível pelo Nginx local, independente de qualquer configuração de firewall.

    Monitorar tráfego bloqueado pelo UFW

    Analisar o que o firewall está bloqueando:

    bash
    # 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/ufw

    Script de auditoria do UFW

    Verificar e documentar o estado atual do firewall:

    bash
    #!/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.

    Perguntas frequentes