ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Red e IP

Cómo ocultar la IP de tu servidor con Cloudflare: permite solo el tráfico de Cloudflare

6 pasos 22 min de lectura 23 vistas 0
Contenido

Cuando tu web pasa por Cloudflare, los visitantes y los atacantes ven las IP de los nodos de Cloudflare, no la de tu servidor. Pero si tu IP real ya se ha filtrado, o si el servidor sigue aceptando conexiones en los puertos 80/443 desde cualquier dirección, un atacante puede saltarse la CDN y atacar el origen directamente. En esta guía verás paso a paso cómo conectar el sitio, detectar fugas y configurar una lista blanca en el firewall para que el origen quede realmente oculto.

Puntos clave

  • El proxy de Cloudflare solo oculta la IP a la que resuelve el DNS; si el origen sigue aceptando conexiones en los puertos 80/443 desde cualquier dirección, un atacante puede saltarse la CDN y atacar el origen directamente.
  • La IP real de un servidor de origen suele filtrarse por el historial DNS, los subdominios sin proxy, los servicios de correo, el certificado SSL que se devuelve al acceder por IP y las conexiones salientes de la propia aplicación.
  • La clave para impedir que se eluda Cloudflare es un firewall en el origen que permita los puertos 80/443 solo desde los rangos de IP oficiales de Cloudflare.
  • El plan gratuito de Cloudflare solo hace de proxy para el tráfico HTTP/HTTPS, por lo que SSH, bases de datos, servidores de juegos y otros servicios TCP/UDP siguen dependiendo del firewall del propio servidor y de la protección DDoS del centro de datos.
  • IMIDC ofrece VPS y servidores dedicados con protección DDoS y soporte para varias IP, y sus clientes pueden abrir un ticket en el Área de Clientes para consultar un cambio de IP.

Requisitos / antes de empezar

  • Tu dominio ya está en Cloudflare (sus servidores de nombres apuntan a los asignados por Cloudflare)
  • Sistema operativo: Ubuntu 22.04 / 24.04, Debian 12, Rocky Linux 9 o AlmaLinux 9, con Nginx como servidor web
  • Acceso por SSH con privilegios sudo
  • Asegúrate primero de que el puerto SSH está permitido en el firewall para no quedarte fuera al cambiar las reglas. También conviene tener abierta la consola VNC de tu proveedor como acceso de respaldo

Paso a paso

Paso 1: activa el proxy de Cloudflare

En la página DNS del panel de Cloudflare, cambia el estado de proxy de los registros A/AAAA del sitio a «Redirigido mediante proxy» (nube naranja). Ahora dig +short example.com debería devolver IP de Cloudflare, no la de tu servidor.

Paso 2: configura el modo SSL en Full (strict)

En SSL/TLS, elige Full (strict). Para el certificado del origen puedes usar Let's Encrypt o generar un certificado Origin CA gratuito en el panel de Cloudflare (solo Cloudflare confía en él y puede ser válido hasta 15 años). No uses el modo Flexible: envía el tráfico entre Cloudflare y el origen en texto plano y suele provocar bucles de redirección.

Paso 3: descubre por dónde puede filtrarse tu IP real

Antes de pasar a la CDN, es posible que tu dominio ya resolviera directamente a la IP del servidor. Las fuentes de fuga más habituales son:

  • Historial DNS: los sitios públicos de historial DNS guardan registros antiguos.
  • Subdominios sin proxy: subdominios como mail, ftp o dev con la nube gris que apuntan directamente al mismo servidor.
  • Servicios de correo: un registro MX que apunta a la misma máquina, o correos enviados por la web con la IP del servidor en las cabeceras.
  • Certificados SSL y sitio por defecto: si al acceder al puerto 443 por IP se devuelve un certificado con tu dominio, los motores que escanean todo Internet lo indexarán.
  • Conexiones salientes de la aplicación: webhooks, descarga de imágenes remotas, pingbacks y funciones similares exponen la IP de origen a terceros.

Si confirmas que tu IP se ha filtrado, Cloudflare por sí solo no puede resolverlo del todo, así que recomendamos cambiar la IP del servidor. Los clientes de IMIDC pueden abrir un ticket en el Área de Clientes para consultar cómo cambiar o añadir IP.

Paso 4: permite los puertos 80/443 solo a las IP de Cloudflare

Cloudflare publica oficialmente sus rangos de IP en https://www.cloudflare.com/ips-v4 y https://www.cloudflare.com/ips-v6. Los siguientes comandos leen directamente las listas más recientes.

Ubuntu / Debian (UFW):

sudo ufw allow OpenSSH        # If you changed the SSH port, use: sudo ufw allow <port>/tcp

for ip in $(curl -fsS https://www.cloudflare.com/ips-v4) $(curl -fsS https://www.cloudflare.com/ips-v6); do
  sudo ufw allow proto tcp from "$ip" to any port 80,443 comment 'Cloudflare'
done

# Remove earlier rules that opened 80/443 to everyone (delete whichever actually exist)
sudo ufw delete allow 'Nginx Full'
sudo ufw delete allow 80/tcp
sudo ufw delete allow 443/tcp

sudo ufw enable
sudo ufw status numbered

Si al borrar una regla aparece «Could not delete non-existent rule», puedes ignorarlo.

Rocky / Alma 9 (firewalld + ipset):

sudo firewall-cmd --permanent --new-ipset=cf4 --type=hash:net
sudo firewall-cmd --permanent --new-ipset=cf6 --type=hash:net --option=family=inet6

for ip in $(curl -fsS https://www.cloudflare.com/ips-v4); do
  sudo firewall-cmd --permanent --ipset=cf4 --add-entry="$ip"
done
for ip in $(curl -fsS https://www.cloudflare.com/ips-v6); do
  sudo firewall-cmd --permanent --ipset=cf6 --add-entry="$ip"
done

for svc in http https; do
  sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source ipset=cf4 service name=$svc accept"
  sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv6 source ipset=cf6 service name=$svc accept"
done

# Remove the http/https services that were open to all sources
sudo firewall-cmd --permanent --remove-service=http --remove-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Los rangos de IP de Cloudflare cambian de vez en cuando, así que revísalos frente a la lista oficial cada pocos meses.

Nota: los puertos publicados por Docker se saltan las reglas de UFW. Si tu web corre en Docker, vincula los puertos del contenedor a 127.0.0.1 y deja que Nginx en el host sirva el tráfico público.

Paso 5: rechaza las peticiones hechas directamente a la IP

Añade a Nginx un sitio por defecto que corte las conexiones a la IP desnuda o a nombres de host desconocidos, para que tu certificado no revele el dominio:

sudo tee /etc/nginx/conf.d/00-default.conf > /dev/null <<'EOF'
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;
    ssl_reject_handshake on;
}
EOF

ssl_reject_handshake requiere Nginx 1.19.4 o superior. Las versiones de serie de Ubuntu 24.04, Debian 12 y Rocky/Alma 9 lo cumplen; la 1.18 que trae Ubuntu 22.04 no, así que actualiza desde el repositorio oficial de nginx.org. En Ubuntu/Debian, elimina también el sitio por defecto incluido para evitar un conflicto de default_server:

sudo rm -f /etc/nginx/sites-enabled/default

Paso 6: registra la IP real de los visitantes en Nginx

Detrás de Cloudflare, la IP de cliente en los logs de Nginx pasa a ser la de un nodo de Cloudflare. Recupera la IP real con el módulo realip:

{
  for ip in $(curl -fsS https://www.cloudflare.com/ips-v4) $(curl -fsS https://www.cloudflare.com/ips-v6); do
    echo "set_real_ip_from $ip;"
  done
  echo "real_ip_header CF-Connecting-IP;"
} | sudo tee /etc/nginx/conf.d/cloudflare-realip.conf > /dev/null

sudo nginx -t && sudo systemctl reload nginx

Paso 7: comprueba que funciona

Ejecuta estos comandos desde otra máquina. El primero debería fallar o agotar el tiempo de espera, mientras que el acceso por dominio funciona con normalidad:

curl -m 10 -I http://YOUR_SERVER_IP
curl -I https://example.com

Preguntas frecuentes (FAQ)

Tras el cambio mi web no carga y Cloudflare muestra el error 521/522. ¿Por qué?

Significa que Cloudflare no puede conectar con tu origen. Comprueba que el firewall incluye todos los rangos de IP de Cloudflare (también IPv6), que Nginx está en marcha y que el modo SSL coincide con el certificado del origen.

¿Puede Cloudflare proteger SSH, puertos de juegos y otros servicios que no son web?

El plan gratuito solo hace de proxy para el tráfico HTTP/HTTPS y únicamente en determinados puertos. SSH, bases de datos, servidores de juegos y otros servicios TCP/UDP no pasan por Cloudflare, así que siguen dependiendo del firewall del propio servidor y de la protección DDoS del centro de datos.

¿Existe una verificación del origen más estricta que una lista blanca de IP?

Sí. Activa Authenticated Origin Pulls (mTLS) en Cloudflare para que Nginx en tu origen solo acepte peticiones con el certificado de cliente de Cloudflare. Así evitas que alguien dirija tráfico a tu IP desde su propia cuenta de Cloudflare.

¿Y si la IP de mi origen ya está bajo ataque?

Primero identifica el tipo de ataque y el volumen de tráfico; después cambia la IP y completa la configuración de protección descrita arriba. Los ataques de gran volumen saturan directamente el ancho de banda del proveedor, y en ese punto necesitas la protección anti-DDoS de alta capacidad de tu proveedor.

Resumen

Ocultar la IP de origen se reduce a tres cosas: que todo el tráfico pase por el proxy de Cloudflare, detectar y eliminar las fugas anteriores, y que el firewall del origen solo acepte conexiones de Cloudflare. Ante servicios que no son HTTP o ataques muy grandes, una CDN no basta por sí sola. IMIDC ofrece VPS y servidores dedicados con protección DDoS y soporte para varias IP, que pueden servir como capa de protección de base para tu origen. Para cambiar de IP o valorar un plan de protección, abre un ticket 24/7 en el Área de Clientes.

Productos relacionados

Artículos relacionados

¿Fue útil la respuesta?

Tutoriales relacionados