Configuración de Cloudflare CDN para VPS

Cloudflare actúa como capa intermedia entre Internet y tu VPS, ofreciendo CDN, protección DDoS, SSL automático y optimización de rendimiento sin coste adicional en su plan gratuito. Configurar Cloudflare para tu servidor VPS mejora los tiempos de carga globales, oculta la IP real del servidor y añade una capa de seguridad WAF que bloquea amenazas antes de que lleguen a tu infraestructura. Esta guía cubre la configuración DNS, los modos SSL, las reglas de caché y las opciones de seguridad más importantes.

Requisitos Previos

  • Dominio registrado (en cualquier registrador)
  • Cuenta de Cloudflare (el plan gratuito es suficiente para empezar)
  • VPS con un servidor web configurado (Nginx o Apache)
  • Acceso al panel de administración del dominio para cambiar los nameservers

Configuración DNS en Cloudflare

Añadir el dominio a Cloudflare

  1. Accede a dash.cloudflare.com y haz clic en Add a Site
  2. Introduce tu dominio y selecciona el plan (Free es suficiente)
  3. Cloudflare escaneará automáticamente los registros DNS existentes
  4. Revisa los registros importados y añade los que falten

Registros DNS esenciales

En el panel DNS de Cloudflare, configura los siguientes registros:

TipoNombreContenidoProxy
A@IP_DE_TU_VPSActivado (nube naranja)
AwwwIP_DE_TU_VPSActivado (nube naranja)
CNAMEmailIP_DE_TU_VPSDesactivado (nube gris)

Importante: Los registros de correo (MX, mail) deben tener el proxy desactivado (nube gris) para evitar interferencias con el tráfico de email.

Cambiar los nameservers

Cloudflare te proporcionará dos nameservers propios (p.ej., ava.ns.cloudflare.com y cole.ns.cloudflare.com). Ve al panel de tu registrador de dominios y reemplaza los nameservers actuales por los de Cloudflare.

La propagación DNS puede tardar entre 15 minutos y 48 horas.

Modos SSL/TLS

Configura el modo SSL en SSL/TLS > Overview:

Modo Flexible (no recomendado en producción)

  • Conexión cifrada entre el usuario y Cloudflare
  • Conexión sin cifrar entre Cloudflare y tu VPS
  • Útil solo si el servidor no tiene certificado SSL

Modo Full

  • Cifrado en ambos tramos
  • Acepta certificados autofirmados en el servidor

Modo Full (Strict) - Recomendado

  • Cifrado en ambos tramos
  • Requiere un certificado SSL válido en el servidor (Let's Encrypt funciona perfectamente)
# Instalar Certbot y obtener certificado Let's Encrypt en el servidor
sudo apt-get install -y certbot python3-certbot-nginx

# Obtener certificado para el dominio
sudo certbot --nginx -d tudominio.com -d www.tudominio.com

# Verificar renovación automática
sudo certbot renew --dry-run

Certificado Origin Cloudflare (alternativa)

Cloudflare puede emitir un certificado origen gratuito válido 15 años para la conexión entre Cloudflare y tu servidor:

  1. Ve a SSL/TLS > Origin Server
  2. Haz clic en Create Certificate
  3. Selecciona los dominios y el período de validez
  4. Descarga el certificado y la clave privada
  5. Configúralos en Nginx/Apache

Configuración de Caché

Niveles de caché

En Caching > Configuration, configura el nivel de caché:

  • No Query String: Almacena en caché solo URLs sin parámetros
  • Ignore Query String: Almacena en caché ignorando los parámetros GET
  • Standard: Caché estándar (recomendado para la mayoría de sitios)

Browser Cache TTL

Controla cuánto tiempo los navegadores guardan los recursos en caché:

  • Para sitios estáticos: 1 mes o más
  • Para sitios dinámicos: 4 horas o menos

Purgar la caché

# Purgar toda la caché mediante la API de Cloudflare
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "Authorization: Bearer TU_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"purge_everything":true}'

# Purgar URLs específicas
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "Authorization: Bearer TU_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"files":["https://tudominio.com/imagen.jpg","https://tudominio.com/style.css"]}'

Cache Rules (antes Page Rules)

En Caching > Cache Rules, puedes definir comportamientos específicos:

  • Bypass cache para /wp-admin/*, /api/*, /cart
  • Cache everything para /static/* con TTL extendido
  • Cache level: Standard para el resto del sitio

Reglas de Página

Las Page Rules (disponibles en Rules > Page Rules) permiten controlar el comportamiento por URL:

Ejemplos útiles:

URL PatternConfiguración
tudominio.com/api/*Cache Level: Bypass
tudominio.com/wp-admin/*Cache Level: Bypass, Security: High
tudominio.com/static/*Cache Level: Cache Everything, Edge TTL: 1 month
http://tudominio.com/*Always Use HTTPS

El plan gratuito incluye 3 Page Rules. Para más reglas, usa Cache Rules y Transform Rules que ofrecen mayor flexibilidad.

WAF y Seguridad

Configuración del nivel de seguridad

En Security > Settings, ajusta el nivel de seguridad:

  • Essentially Off: Solo bloquea amenazas muy conocidas
  • Low: Para sitios con mucho tráfico legítimo internacional
  • Medium: Balance recomendado para la mayoría de sitios
  • High: Para sitios frecuentemente atacados

Reglas de Firewall (WAF)

En Security > WAF, puedes crear reglas personalizadas. Ejemplos útiles:

Bloquear países específicos:

(ip.geoip.country in {"CN" "RU" "KP"})

Bloquear User-Agents maliciosos:

(http.user_agent contains "sqlmap") or (http.user_agent contains "nikto")

Permitir solo tu IP para el panel de administración:

(http.request.uri.path contains "/wp-admin") and not (ip.src in {1.2.3.4/32})

Protección Bot

En Security > Bots, activa:

  • Bot Fight Mode: Bloquea bots maliciosos conocidos (disponible en plan gratuito)
  • Super Bot Fight Mode: Análisis avanzado (planes Pro y superiores)

Modo Under Attack

Para ataques DDoS activos, activa temporalmente el modo de máxima protección:

  1. Ve a Security > Settings
  2. Cambia el nivel de seguridad a I'm Under Attack

Optimización de Rendimiento

Speed Settings

En Speed > Optimization:

  • Auto Minify: Activa la minificación de HTML, CSS y JavaScript
  • Brotli: Activa la compresión Brotli (mejor que gzip)
  • Rocket Loader: Carga JavaScript de forma asíncrona (puede afectar a algunas apps)
  • HTTP/3 (QUIC): Activa el protocolo HTTP/3 para mejor rendimiento

Redirect Rules para HTTPS

# Verificar que el redireccionamiento HTTPS está activo
# En Cloudflare: SSL/TLS > Edge Certificates > Always Use HTTPS: ON
# En Cloudflare: SSL/TLS > Edge Certificates > Automatic HTTPS Rewrites: ON

Configuración en el Servidor

Obtener la IP real del visitante en Nginx

Cuando el tráfico pasa por Cloudflare, los logs de Nginx mostrarán la IP de Cloudflare en lugar de la IP real del visitante. Para corregirlo:

# Añadir al archivo de configuración de Nginx
# /etc/nginx/conf.d/cloudflare-real-ip.conf

# Rangos de IPs de Cloudflare (actualizar periódicamente)
set_real_ip_from 173.245.48.0/20;
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 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;

real_ip_header CF-Connecting-IP;
# Verificar la configuración de Nginx
sudo nginx -t
sudo systemctl reload nginx

Restringir el acceso solo a IPs de Cloudflare (opcional pero recomendado)

# Crear script para permitir solo IPs de Cloudflare via UFW
cat > /usr/local/bin/actualizar-cf-ips.sh << 'EOF'
#!/bin/bash
# Obtener las IPs actuales de Cloudflare y actualizar UFW

# Limpiar reglas anteriores de Cloudflare
ufw delete allow 80/tcp 2>/dev/null
ufw delete allow 443/tcp 2>/dev/null

# Añadir IPs de Cloudflare para HTTP y HTTPS
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
  ufw allow from "$ip" to any port 80,443 proto tcp
done

echo "IPs de Cloudflare actualizadas"
EOF

chmod +x /usr/local/bin/actualizar-cf-ips.sh

Solución de Problemas

El sitio muestra "Error 521: Web Server Is Down"

El servidor no responde. Verifica que Nginx/Apache está corriendo y que el firewall permite conexiones desde las IPs de Cloudflare.

# Verificar estado del servidor web
sudo systemctl status nginx
sudo ufw status

El certificado SSL muestra error o advertencia

Si usas modo Full (Strict), verifica que el certificado del servidor es válido:

# Comprobar el certificado con openssl
openssl s_client -connect tudominio.com:443 -servername tudominio.com 2>/dev/null | \
  openssl x509 -noout -dates

Los cambios en el sitio no se ven inmediatamente

Purga la caché desde el panel de Cloudflare o usando la API.

Error de bucle de redirección (redirect loop)

Si tienes redirección a HTTPS en el servidor Y el modo SSL de Cloudflare es "Flexible", se produce un bucle. Solución: cambia el modo SSL a "Full" o elimina la redirección del servidor.

Conclusión

Cloudflare como CDN para tu VPS ofrece una mejora significativa en rendimiento, seguridad y disponibilidad sin complicaciones técnicas excesivas. Con el modo SSL Full (Strict), las reglas de caché bien configuradas y el WAF activo, tu servidor estará protegido contra los ataques más comunes mientras los visitantes disfrutan de tiempos de carga optimizados desde cualquier parte del mundo.