← VOLVER

LABORATORIO · INFRAESTRUCTURA

Acceso SSH seguro

En este laboratorio conecté un servidor Ubuntu local con Cloudflare Tunnel y protegí el acceso con Zero Trust. Así puedo abrir una sesión SSH desde el navegador sin exponer el puerto 22 en el router. Estos pasos resumen la arquitectura y su despliegue.

El recorrido de la conexión
Navegador→Cloudflare Access→Túnel saliente→SSH del servidor

Cloudflared mantiene una conexión saliente hacia Cloudflare. Access comprueba quién puede entrar y la terminal SSH se muestra en el navegador.

Privacidad: los dominios, correos, usuarios y direcciones de esta guía son ejemplos. No publiques el token del túnel, contraseñas, claves privadas, correo administrador ni IP privada de tu servidor. El token permite ejecutar el túnel; si se expone, rótalo desde Cloudflare.

Antes de empezar

01

Servidor Linux

Un servidor Ubuntu o Debian encendido, OpenSSH Server activo y una cuenta Linux autorizada. Necesitarás permisos de administrador para instalar Cloudflared.

sudo systemctl status ssh
02

Dominio y Cloudflare

Un dominio propio añadido a Cloudflare, una cuenta de Cloudflare Zero Trust y acceso al panel del registrador para configurar sus nameservers.

Configuración paso a paso

01

Conecta el dominio a Cloudflare

  1. Añade el dominio en el panel de Cloudflare y revisa los registros DNS que se hayan importado.
  2. Antes de cambiar nameservers, compara los registros DNS existentes y recrea los que necesites en Cloudflare, incluidos los del correo o de otras webs.
  3. En el registrador, sustituye los nameservers por los dos valores concretos que Cloudflare asigna a tu zona. No uses valores de ejemplo.
  4. Espera a que Cloudflare confirme que el dominio está activo.
02

Crea el túnel remoto

  1. En el dashboard, abre Networking → Tunnels y crea un túnel Cloudflared.
  2. Selecciona Linux y copia el comando de instalación que genera Cloudflare para ese túnel.
  3. Ejecuta el comando en el servidor Ubuntu o Debian. El comando contiene el token privado del túnel.
sudo systemctl status cloudflared

Comprueba que el servicio está activo y que el túnel aparece conectado en el dashboard.

03

Añade la ruta SSH pública

  1. Abre el túnel y entra en Routes → Add route → Published application.
  2. Elige tu dominio y un subdominio, por ejemplo ssh.ejemplo.com.
  3. En Service, selecciona SSH y escribe localhost:22 si Cloudflared y SSH están en el mismo servidor.

Si SSH está en otra máquina de tu red local, indica su dirección local y el puerto 22. No hace falta abrir el puerto SSH en el router.

04

Protege el acceso con Zero Trust

  1. En Zero Trust → Access controls → Applications, crea una aplicación Self-hosted para ssh.ejemplo.com.
  2. Activa Allow access through browser-based SSH sessions y selecciona SSH.
  3. Usa Cloudflare como proveedor de identidad y crea una política Allow que coincida con el correo exacto autorizado.
  4. Deja el acceso denegado para quien no coincida con esa política. Si está disponible, limita también el inicio de sesión a miembros de tu cuenta de Cloudflare.

Para la terminal web, usa políticas Allow o Block; no uses reglas Bypass ni Service Auth.

05

Conéctate desde el navegador

  1. Abre https://ssh.ejemplo.com e inicia sesión con la identidad permitida en Cloudflare Access.
  2. Cuando aparezca la terminal, introduce el usuario Linux y autentícate ante el servidor SSH.

En SSH/VNC desde el navegador, el prefijo del correo autenticado debe coincidir con el usuario del servidor. Por ejemplo, alex@ejemplo.com corresponde al usuario Linux alex.

06

Verifica los dos servicios

Comprueba el servicio SSH y el conector del túnel en el propio servidor:

sudo systemctl status ssh
sudo systemctl status cloudflared

Prueba la URL con una cuenta autorizada y confirma que una cuenta no incluida en la política recibe una denegación.

Problemas habituales

Mensaje o síntomaQué revisar
Unable to find your Access applicationQue el hostname configurado en Access coincida exactamente con la ruta pública del túnel.
There are no login methods availableQue haya un proveedor de identidad habilitado y permitido para la aplicación.
That account does not have accessQue el correo autenticado coincida con el de la política Allow.
La terminal aparece en blancoQue esté activada la terminal SSH en el navegador, que el túnel esté conectado y que las políticas sean compatibles.
El servidor rechaza el usuarioQue exista ese usuario Linux y que el prefijo de su correo coincida con él.

Documentación oficial: SSH desde el navegador · Terminal renderizada en el navegador · Seguridad de los tokens de túnel.

JON ANDRÉS · CYBERSECURITY