Cloudflare com VPS: CDN gratuito e proteção DDoS

    Cloudflare é a camada de proteção e aceleração mais usada no mundo — gratuita para uso básico e extremamente poderosa. Na frente da sua VPS, distribui assets estáticos pela edge global, absorve ataques DDoS antes de chegarem ao servidor e adiciona HTTPS automático sem configurar Certbot.

    Configurar DNS e proxy no Cloudflare

    Migrar DNS para o Cloudflare e ativar o proxy:

    bash
    # 1. Criar conta em cloudflare.com/pt-br (gratuito)
    # 2. Adicionar site → inserir domínio
    # 3. Cloudflare importa registros DNS automaticamente
    
    # Tipos de registro DNS no Cloudflare:
    # ☁️ Nuvem laranja (Proxied):  tráfego passa pelo Cloudflare
    #    → CDN, cache, DDoS, SSL automático ativados
    #    → IP real da VPS fica oculto
    # ☁️ Nuvem cinza (DNS Only): resolve direto para IP da VPS
    #    → sem proteção, sem CDN
    
    # Registros para configurar:
    # A   @    IP_DA_VPS    Proxied (ícone laranja)
    # A   www  IP_DA_VPS    Proxied
    # A   api  IP_DA_VPS    Proxied
    
    # Para subdomínios que precisam de conexão direta (SSH, WireGuard):
    # A   ssh  IP_DA_VPS    DNS Only (ícone cinza)
    
    # Após ativar Proxy — configurar Nginx para confiar no IP real:
    # /etc/nginx/conf.d/cloudflare-real-ip.conf
    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 103.22.200.0/22;
    set_real_ip_from 103.31.4.0/22;
    set_real_ip_from 104.16.0.0/13;
    set_real_ip_from 104.24.0.0/14;
    set_real_ip_from 108.162.192.0/18;
    set_real_ip_from 131.0.72.0/22;
    set_real_ip_from 141.101.64.0/18;
    set_real_ip_from 162.158.0.0/15;
    set_real_ip_from 172.64.0.0/13;
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 188.114.96.0/20;
    set_real_ip_from 190.93.240.0/20;
    set_real_ip_from 197.234.240.0/22;
    set_real_ip_from 198.41.128.0/17;
    real_ip_header CF-Connecting-IP;

    Configurar cache de assets estáticos

    Page Rules e Cache Rules para servir assets pelo edge do Cloudflare:

    nginx
    # Cloudflare cacheia automaticamente:
    # .css, .js, .png, .jpg, .gif, .woff2, .svg, .ico (extensões estáticas)
    
    # Para cachear mais tipos ou controlar TTL:
    # Dashboard → Caching → Cache Rules → Create Rule
    
    # Regra: cachear tudo de /static/*
    # Se: URL Path começa com /static/
    # Então:
    #   - Cache Level: Cache Everything
    #   - Edge Cache TTL: 1 mês
    #   - Browser Cache TTL: 1 dia
    
    # Cabeçalho Cache-Control no Nginx (o Cloudflare respeita):
    location /static/ {
        expires 30d;
        add_header Cache-Control "public, immutable, max-age=2592000";
        add_header Vary "Accept-Encoding";
    }
    
    # Verificar se o Cloudflare está servindo do cache:
    curl -I https://seusite.com.br/static/app.js | grep -i "cf-cache-status"
    # CF-Cache-Status: HIT     → servido do cache (não chegou na VPS!)
    # CF-Cache-Status: MISS    → buscou na VPS e cacheou
    # CF-Cache-Status: BYPASS  → bypass configurado
    
    # Purgar cache manualmente:
    # Dashboard → Caching → Custom Purge → por URL ou tudo

    Regras de segurança e rate limiting no Cloudflare

    WAF, firewall e rate limiting pelo painel do Cloudflare:

    bash
    # Firewall Rules (substituídas por Custom Rules no plano gratuito):
    
    # Bloquear acesso ao /admin de fora do Brasil:
    # Security → WAF → Custom Rules → Create Rule
    # Expression: (http.request.uri.path eq "/admin") and (ip.geoip.country ne "BR")
    # Action: Block
    
    # Rate limiting por IP (plano gratuito: 1 regra):
    # Security → Rate Limiting → Create Rule
    # Path: /api/*
    # Requests: 100 por 10 segundos
    # Action: Block (429)
    
    # Bloquear bot scanners (User-Agent suspeito):
    # Expression: (http.user_agent contains "zgrab") or (http.user_agent contains "masscan")
    # Action: Block
    
    # Challenge para IPs suspeitos (mostra captcha):
    # Security Level: Medium → Cloudflare desafia IPs com reputação ruim
    
    # Bot Fight Mode (plano gratuito):
    # Security → Bots → Bot Fight Mode → On
    # Bloqueia bots conhecidos (scrapers, credential stuffing)
    
    # Ver analytics de ameaças bloqueadas:
    # Security → Overview → Threats Over Time

    SSL/TLS e configurações avançadas

    Configurar SSL entre Cloudflare e VPS corretamente:

    nginx
    # Modos SSL/TLS do Cloudflare:
    # Flexible:  browser→CF via HTTPS, CF→VPS via HTTP (INSEGURO)
    # Full:       browser→CF via HTTPS, CF→VPS via HTTPS (certificado pode ser self-signed)
    # Full Strict: browser→CF via HTTPS, CF→VPS via HTTPS (certificado deve ser válido)
    
    # Configurar como Full (Strict) — recomendado:
    # SSL/TLS → Overview → Full (strict)
    
    # Certificado de origem do Cloudflare (válido por 15 anos):
    # SSL/TLS → Origin Server → Create Certificate
    # Baixar certificate.pem e private-key.pem
    # No Nginx:
    ssl_certificate /etc/ssl/cloudflare/certificate.pem;
    ssl_certificate_key /etc/ssl/cloudflare/private-key.pem;
    
    # Bloquear tráfego direto à VPS (apenas Cloudflare pode acessar):
    # No UFW: bloquear 80/443 para todos, liberar apenas IPs do Cloudflare
    sudo ufw delete allow 80/tcp
    sudo ufw delete allow 443/tcp
    for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
      sudo ufw allow from "$ip" to any port 80,443 proto tcp
    done
    
    # HSTS via Cloudflare:
    # SSL/TLS → Edge Certificates → HTTP Strict Transport Security → Enable

    Monitorar performance com Cloudflare Analytics

    Usar as métricas do Cloudflare para otimizar o site:

    bash
    # Dashboard do Cloudflare → Analytics & Logs:
    
    # Métricas disponíveis:
    # - Requests: total vs cacheado vs não-cacheado
    # - Bandwidth: economia com CDN (% servido pelo edge vs origem)
    # - Unique visitors por país
    # - Status codes (erros 4xx/5xx)
    # - Threats bloqueadas
    
    # Verificar hit rate do cache via API:
    curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/analytics/dashboard" \
      -H "X-Auth-Email: seu@email.com" \
      -H "X-Auth-Key: API_KEY" \
      -H "Content-Type: application/json" | python3 -m json.tool
    
    # Workers para edge computing (plano gratuito: 100k req/dia):
    # Lógica JavaScript rodando nos POPs do Cloudflare — mais rápido que VPS
    
    # Speed → Optimization:
    # - Auto Minify: minificar JS/CSS/HTML automaticamente
    # - Brotli: compressão brotli no edge
    # - Rocket Loader: carregamento assíncrono de JS (cuidado: pode quebrar SPAs)
    # - Polish: compressão de imagens (plano Pro)

    $ 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