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)

Não quer configurar manualmente?

Implante o VPS em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Perguntas frequentes

Sim, quando o proxy está ativo (nuvem laranja). O IP da VPS não aparece no DNS público, qualquer resolução retorna IPs do Cloudflare. Porém: se você tiver algum subdomínio com DNS Only (nuvem cinza), como mail. ou ftp., esse IP pode ser correlacionado à VPS. Evite também registros MX apontando diretamente para a VPS.

Para a maioria dos casos: sim. Plano gratuito inclui CDN global, DDoS básico, SSL automático, WAF básico, 1 regra de rate limiting e Bot Fight Mode. O plano Pro ($20/mês) adiciona WAF avançado (OWASP rules), compressão de imagem, analytics mais detalhados e 5 regras de rate limiting. Comece com o gratuito e upgrade se necessário.

Positivamente, o Cloudflare melhora o Core Web Vitals ao acelerar o carregamento via CDN e compressão, o que o Google considera no ranking. HTTPS automático também é fator de ranking. Não há penalidade por usar Cloudflare. O único cuidado: não usar o modo "I'm Under Attack" permanentemente, pois desafia todos os visitantes incluindo bots do Google.

Use o arquivo /etc/hosts local para simular o DNS do Cloudflare antes de migrar: adicione IP_DO_CF seudominio.com.br e teste no browser. Outro método: subdomínio de teste (staging.seudominio.com.br) com Cloudflare ativo, enquanto o domínio principal ainda aponta direto. Só mude o NS quando estiver confiante.

Sim, Let's Encrypt é um certificado válido e o Full Strict funciona perfeitamente com ele. Alternativa recomendada: usar o certificado de origem do Cloudflare (válido 15 anos) + Full Strict, eliminando a necessidade de renovar o Let's Encrypt. Os dois funcionam bem.