Tutorial: Reverse Proxy con HestiaCP y Nginx: oculta la IP de origen (guía visual)

  • Autor Autor Carlos Frias
  • Fecha de inicio Fecha de inicio
Carlos Frias

Carlos Frias

1
Ro
Verificación en dos pasos activada
Verificado por Binance
Suscripción a IA
Hola, qué tal, betas 😎

Con este Reverse Proxy con HestiaCP y Nginx, las visitas entran por el VPS y la web permanece en el servidor final. Instalaremos Hestia, ejecutaremos el barrido y agregaremos dominio, DNS y HTTPS.

Actualización de Octubre de 2026: retiré el repositorio anterior y sus enlaces dejaron de funcionar. Los archivos corregidos están en el repositorio público para ForoBeta.

Renové el ejercicio desde cero con un VPS de SYSDOP y un hosting externo. Puedes usar otros proveedores. Las capturas llevan recortes, censura y flechas; los paneles muestran registros reales. La cuenta de demostración se utilizó sin facturación.

Visitante → VPS proxy → origen HTTPS
El dominio público apunta al proxy; los archivos permanecen en el origen. Cloudflare es opcional.

El montaje añade una capa de privacidad a tu web y separa el proveedor frontal del alojamiento de origen. Puedes usar un proveedor Offshore según su jurisdicción y sus políticas. El Reverse Proxy no impide los reportes DMCA ni garantiza anonimato. Respeta las condiciones de cada proveedor.

Qué necesitas: un VPS nuevo dedicado al proxy, acceso root, tu dominio funcionando en el servidor final y un certificado HTTPS válido allí. La IP del proxy y la del origen deben ser distintas. Esta receta conserva Nginx + Apache/PHP-FPM y no instala firewall ni Fail2Ban, como la original.

1. Prepara un VPS limpio​


Utilicé un VPS con 4 CPU, 4 GB de RAM y 128 GB NVMe. No son mínimos obligatorios: ajusta capacidad y transferencia a tu tráfico. Las capturas muestran el precio del ejercicio, realizado en Octubre de 2026.

Pide una instalación limpia de Ubuntu LTS admitida por Hestia. El ejercicio se hizo con Ubuntu 24.04 LTS; el instalador oficial comprueba qué sistemas acepta. Hestia se descarga de su canal estable, sin fijarlo a una única versión.

01-recursos-vps.webp

Recursos del VPS utilizado; ajusta la capacidad a tu tráfico.​

2. Crea y configura el VPS​


Regístrate con un correo al que tengas acceso y completa los datos que solicite el proveedor. Usa una contraseña exclusiva para la cuenta.

02-cuenta-demo.webp

1. Datos de la cuenta · 2. Contraseña exclusiva.​

Define un hostname completo, por ejemplo proxy.tudominio.com. Será el nombre del VPS y del panel, distinto del dominio de la web que vas a pasar por el proxy. Crea su registro A hacia la IP asignada al VPS antes de instalar Hestia. En las capturas usé proxy-demo.servresolv.net como hostname temporal.

03-configuracion-vps.webp

1. Hostname del panel · 2. Contraseña root del VPS.​

Revisa recursos, ciclo de facturación y precio final antes de completar la contratación. La contraseña root del VPS y la de admin en Hestia son accesos diferentes.

04-revision-pedido.webp

1. Hostname del pedido · 2. Total que debes revisar.​

3. Entra al VPS por SSH​


Cuando el servicio esté activo, guarda los datos que te entregue el proveedor. Conéctate desde PuTTY, Terminal o tu cliente SSH usando la IP o el hostname, el usuario y el puerto indicados. Para instalar Hestia necesitas privilegios root en el VPS nuevo que hará de proxy.

05-accesos-vps.webp

1. Hostname asignado · 2. IP del VPS, ocultada por privacidad.​

4. Comprueba el servidor final​


La web debe responder por HTTPS en el servidor final para el dominio y sus alias. Sus archivos permanecen allí. En hosting compartido, confirma que el proveedor permita las conexiones desde tu VPS proxy.

Comprueba el origen antes de cambiar DNS. Sustituye dominio e IP:

Bash:
curl --resolve ejemplo.com:443:203.0.113.10 https://ejemplo.com/ -I
curl --resolve www.ejemplo.com:443:203.0.113.10 https://www.ejemplo.com/ -I

La IP 203.0.113.10 es de documentación: sustitúyela por la IP real del origen. Omite la segunda línea si no usas www. Corrige el certificado antes de continuar; no ocultes errores con -k.

06-origen-directo.webp

La web responde desde el hosting antes de cambiar DNS.​

5. Instala Hestia con el Bash oficial​


En el VPS nuevo, ejecuta como root:

Bash:
curl -fSL https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh -o hst-install.sh && \
bash hst-install.sh --apache yes --phpfpm yes --multiphp no \
  --vsftpd no --proftpd no --named no --mysql no --mysql8 no \
  --postgresql no --exim no --dovecot no --clamav no --spamassassin no \
  --iptables no --fail2ban no --quota no --api no --webterminal no \
  --port 56464 --lang es

Confirma la instalación y completa usuario admin, contraseña, correo y hostname cuando los pida. Guarda los accesos que muestre al terminar. Si tu imagen mínima no tiene curl o certificados CA, primero ejecuta:

Bash:
apt-get update && apt-get install -y ca-certificates curl

Este bloque instala Hestia estable desde su repositorio oficial, con Nginx + Apache/PHP-FPM, sin correo, DNS ni bases de datos. Mantiene --iptables no --fail2ban no y utiliza el puerto 56464 para el panel. No desactives protecciones que ya existan en tu entorno.

Este Bash instala Hestia; Python prepara las plantillas después. No uses --force ni repitas una instalación incompleta sin revisar el error.

07-instalacion-hestia.webp

Extracto del registro de instalación; accesos ocultos.​

6. Reinicia y vuelve a entrar​


Cuando Hestia termine y solicite reiniciar:

Bash:
reboot

La sesión SSH se cerrará. Espera a que el VPS vuelva a responder y reconecta como root con los datos del proveedor. Todavía no agregues tus webs: primero va el barrido.

7. Ejecuta el barrido automático​


Este es el barrido de vhosts por IP, plantillas y paquetes sobrantes. Ejecuta el bloque una vez en el Hestia recién instalado:

Bash:
apt-get update && apt-get install -y git python3 && \
git clone --branch v1.2.0 --depth 1 \
  https://github.com/sysdopllc/hestia-reverse-proxy-forobeta.git \
  /root/hestia-reverse-proxy && \
python3 /root/hestia-reverse-proxy/setup.py finish

Indica la IP del servidor final cuando la pida. El resto queda automatizado:

  • Vhosts por IP: aparta los archivos de /etc/nginx/conf.d cuyo nombre completo es una IP. Evita los comodines 0* y 1*, que podrían alcanzar archivos de seguridad como 0rtt-anti-replay.conf.
  • Plantillas y paquetes: aparta lo sobrante de esta instalación limpia, conservando default, suspended y las dependencias o paquetes referenciados por el panel.
  • Proxy: genera rp.tpl y rp.stpl con tu origen, instala el mapa WebSocket, crea el paquete reverse-proxy con la CLI de Hestia y lo asigna a admin para las nuevas webs.
  • Respaldo y validación: conserva lo apartado con su manifiesto en /root/hestia-reverse-proxy-backups/FECHA. Comprueba Nginx antes de recargar; ante un fallo intenta restaurar la preparación y muestra cualquier error del rollback.

La salida muestra BARRIDO 1/3, 2/3 y 3/3, cada archivo apartado y la ruta del respaldo. No tienes que editar vhosts, copiar plantillas con nano ni asignar el paquete a mano.

08-barrido-automatico.webp

Las flechas señalan las fases del barrido y su respaldo.​

Se conserva el hostname inicial para el panel. Si hay otras webs, el script se detiene. No ejecutes este barrido sobre un Hestia en producción ni lo programes como limpieza periódica. Tampoco desinstala librerías o servicios base del panel.

v1.2.0 identifica los archivos de este proyecto, no una versión obligatoria de Hestia. Puedes revisar las plantillas publicadas y la restauración en el README.

8. Entra al panel Hestia​


Abre https://proxy.tudominio.com:56464, sustituyendo el hostname por el tuyo. Usa admin y la contraseña que elegiste al instalar. Si accedes inicialmente por IP y aparece un aviso de certificado, verifica la identidad del VPS; configura después un certificado válido para el hostname del panel.

09-acceso-hestia.webp

Introduce el usuario elegido durante la instalación.​

9. Agrega el dominio web​


Entra en Web → Añadir dominio web. Si Hestia muestra el aviso de que estás usando admin, lee el mensaje y pulsa Continuar para seguir este recorrido. Escribe el dominio real y selecciona la IP del VPS proxy. Después agrega www como alias si lo utilizas.

10-anadir-dominio.webp

1. Dominio web · 2. IP del proxy · 3. Guardar.​

El paquete preparado deja rp como plantilla de proxy automáticamente. La plantilla web y la del backend permanecen en default. El dominio del hostname del panel se conserva; no necesitas borrarlo para agregar tu web.

10. Apunta el DNS al proxy​


Cambia el registro A de la web hacia la IP del proxy. Haz lo mismo con www si utiliza un A; si es un CNAME, verifica que siga al dominio principal. El hostname del panel también debe resolver hacia el VPS proxy.

11-dns-proxy.webp

Los registros A apuntan al proxy; www sigue al dominio principal.​

Revisa los AAAA: no dejes publicada la IPv6 del servidor final. Esta receta utiliza el listener de la IP seleccionada en Hestia; publica una IPv6 del proxy únicamente después de comprobarla.

Para la primera emisión del certificado puedes usar Solo DNS. Así se publica la IP del proxy. No cambies MX ni registros de correo como parte de este paso.

11. Activa SSL y revisa la plantilla​


Con el DNS apuntando al proxy y el puerto 80 accesible, edita el dominio en Hestia. Activa Habilitar SSL y Utilizar Let's Encrypt, incluyendo los alias que realmente uses. Guarda y espera el resultado.

12-ssl-hestia.webp

1. Habilitar SSL · 2. Solicitar el certificado con Let’s Encrypt.​

Abre la web por HTTPS. Cuando funcione, activa la redirección automática a HTTPS. Deja HSTS para después de validar todo. En Opciones Avanzadas confirma Plantilla Proxy: rp; las otras plantillas siguen en default. La lista de extensiones que muestre Hestia no limita rp: esta plantilla reenvía todas las rutas al origen.

13-plantilla-rp.webp

Plantilla Proxy: rp. Las otras dos permanecen en default.​

Con la nube de Cloudflare, utiliza Full (strict) y un certificado válido en el proxy. Corrige los errores TLS; no los tapes con Flexible.

Hay dos extremos HTTPS que mantener: el proxy y el servidor final. Las plantillas verifican el certificado del origen usando el dominio visitado como SNI. Si tu origen utiliza otro nombre, revisa la opción --tls-name del README antes de prepararlo.

La renovación del origen debe seguir funcionando tras cambiar DNS. Utiliza DNS-01, un hostname gestionado por el proveedor u otro mecanismo compatible. Hestia atiende su propio challenge localmente; no lo reenvía al origen. Conserva el acceso a /.well-known/acme-challenge/ para renovar el certificado del proxy.

12. Prueba el resultado​


Abre el dominio y www. Revisa imágenes, login, formularios, subidas, robots.txt, sitemap y redirecciones. Debe aparecer el mismo contenido que en el servidor final.

14-sitio-por-proxy.webp

La misma web del paso 4, ahora a través del VPS proxy.​

Pasaron 11 comprobaciones reales, repetidas tras reconstruir el dominio y reemitir el certificado frontal mediante Hestia. Restauré el barrido: 132 archivos sin diferencias.

15-pruebas-reales.webp

Resultado de la batería real; sus límites se explican debajo.​

WebSocket se probó aparte con Nginx en un contenedor. No se probaron todos los CMS, la nube de Cloudflare ni la renovación automática del origen. Consulta el registro de validación para conocer el alcance. Los hostnames temporales ya se retiraron.

Preguntas frecuentes​


¿Por qué aparece un 502? Revisa conexión al origen, puerto, certificado y SNI. Busca la causa en /var/log/nginx/domains. Corrige el fallo conservando la validación TLS.

¿Cloudflare muestra 521 o 526? Para 521, revisa A/AAAA y que el proxy escuche en 80/443. Para 526, comprueba el certificado y la cadena del proxy con Full (strict).

¿Let's Encrypt devuelve 403/404? Revisa DNS, IPv6, puerto 80 y acceso al challenge. El WAF no debe bloquearlo. No fuerces HTTPS antes de tener un certificado funcional.

¿Aparece otro robots.txt o sitemap? Comprueba que la plantilla sea rp y revisa la caché externa. Estas plantillas solicitan ambos archivos al origen.

¿Todos los visitantes tienen la IP del proxy? Configura el origen para interpretar las cabeceras de IP real solo desde tu proxy. Una exclusión de firewall no establece esa confianza. Con Cloudflare, verifica también la IP real en Nginx y confía exclusivamente en sus rangos oficiales.

¿Se pierde al reconstruir el dominio? La plantilla rp quedó conservada en la prueba real de reconstrucción. Una actualización futura de Hestia puede reponer plantillas estándar; no programes purgas automáticas. El barrido es para la instalación nueva.

¿El origen queda imposible de descubrir? No. Revisa historial DNS, correo, subdominios, IPv6 y filtraciones de la aplicación. Si administras el origen, restringe su acceso web al proxy y a los servicios necesarios, conservando acceso administrativo y renovación SSL. En hosting compartido, coordínalo con el proveedor. Este montaje no añade por sí solo protección DDoS.

Referencias: instalación oficial de Hestia, plantillas de Hestia, proxy HTTPS en Nginx y Cloudflare Full (strict).

Si algo falla, comenta el paso y el mensaje de error sin publicar accesos. Puedes aportar tus mejoras a la guía.

1727642370916.webp

Extra final · Montaje con IA​


También puedes encargarle el montaje a un agente sin escribir tú una sola línea en la consola. Nada de golpes de karate 😄. Necesita herramientas y acceso SSH autorizado; un chat sin conexión al servidor solo puede orientarte. Configura el acceso por un canal privado, nunca dejando credenciales en el foro.

Una opción es ChatGPT Plus, con Codex incluido y precio base de US$20 al mes, según los planes oficiales de OpenAI. Es opcional. Consulta límites e impuestos; VPS y API se pagan aparte.

Envía estos tres prompts por separado y sustituye los campos entre corchetes:

Quiero montar un Reverse Proxy con https://github.com/sysdopllc/hestia-reverse-proxy-forobeta, versión v1.2.0. VPS: [alias SSH o IP]. Origen: [IP]. Dominio y alias: [dominio, www si lo uso]. DNS: [proveedor; Cloudflare sí/no]. Usa mi acceso privado sin mostrar secretos. Lee README, VALIDATION y el código. Comprueba sistema operativo, recursos, webs existentes, IP distintas y HTTPS del origen. Esta fase es solo lectura: presenta el plan y dime si el VPS cumple. No reinstales, borres ni cambies DNS; si algo no encaja, explícalo.

Autorizo el plan revisado para ese VPS nuevo dedicado. Haz tú la instalación con el Bash oficial de Hestia y la preparación v1.2.0 del repo; no me des comandos para copiarlos. Conserva el barrido automático con respaldo y manifiesto, manteniendo las dependencias del panel. Usa sus CLI y plantillas nativas. Configura dominio, HTTPS y el mecanismo de renovación de ambos extremos. Mantén --iptables no y --fail2ban no, sin desactivar protecciones existentes ni validación TLS. Muéstrame los registros exactos antes de cambiar DNS y espera mi confirmación. Si aparecen datos existentes o un fallo, detente sin forzar.

Comprueba dominio y www, HTTPS hasta el origen, robots.txt, sitemap, login, formulario, subida, IP del visitante y WebSocket si se utiliza. Prueba la reconstrucción de un dominio desde Hestia y revisa certificados y renovación. Conserva evidencia y corrige solo dentro del alcance autorizado. Entrégame URL del panel, ubicación del respaldo, pruebas realizadas y pendientes. No declares terminado lo que no hayas probado ni cambies el servidor final sin autorización específica.
 
Última edición:
Maravilloso, muchisimas gracias.
 
Gracias tigre, te has lucido con este tutorial!
 
gracias, esto me servirá mucho en las próximas semanas.
 
Excelente man. Te felicito y gracias también.
 
Calidad en su maxima expresiòn
 
Muchas gracias Carlos, excelente aporte a la comunidad!
 
eres un crack 😎

buen tutorial
 
Se va a favoritos. En un día de estos lo pruebo, solo por curiosidad y aprendizaje 😅
 
Excelente tutorial para quienes desean ocultar sus servidores.
 
Fascinante, muchas gracias
 
Si que es Bellisimoo 🙂
 
Gran aporte muchas gracias 👍 👍 👍
 
Gracias por el tutorial eres un crack!!
 
Atrás
Arriba