El uso de túneles TCP con Cloudflare Tunnel representa una solución eficiente y segura para la gestión de conexiones remotas a servicios no basados en HTTP(s), como SSH, RDP y bases de datos como Postgres. Esta tecnología permite a los administradores de sistemas y desarrolladores conectarse a sus infraestructuras desde cualquier parte del mundo a través de un canal cifrado y protegido, sin necesidad de exponer los servicios directamente a internet.
¿Por qué usar túneles TCP con Cloudflare?
Tradicionalmente, la exposición de servicios como bases de datos a internet implica riesgos de seguridad significativos. Métodos convencionales como VPNs o el uso de IPs fijas pueden resultar en configuraciones complejas y vulnerabilidades potenciales. Con Cloudflare Tunnel, las conexiones son gestionadas a través de la red de Cloudflare, lo que proporciona varias ventajas clave:
- Mayor seguridad: No es necesario abrir puertos ni exponer servicios directamente en la red pública.
- Acceso flexible: Permite la conexión desde cualquier ubicación sin la necesidad de una VPN.
- Integración con Cloudflare Access: Posibilidad de controlar y restringir el acceso con autenticación de múltiples factores.
- Simplicidad en la configuración: Uso de comandos sencillos para establecer y mantener la conexión.
Configuración de un túnel TCP con Cloudflare
La configuración de un túnel TCP con Cloudflare requiere la instalación y autenticación de cloudflared
tanto en el servidor como en los clientes que accederán al servicio.
1. Instalación de cloudflared
El primer paso es actualizar el sistema e instalar cloudflared
:
sudo apt-get update
sudo apt-get -y install cloudflared
2. Autenticación y creación del túnel
Para que el servidor pueda iniciar la conexión con Cloudflare, es necesario autenticar cloudflared
:
cloudflared tunnel login
Al ejecutar este comando, se abrirá un enlace en el navegador donde se debe iniciar sesión en Cloudflare y autorizar el acceso.
Luego, se crea el túnel con un identificador único:
cloudflared tunnel create postgres
Este comando generará un UUID que identificará el túnel en la configuración de Cloudflare.
3. Configuración del DNS
Para que el tráfico sea enrutado correctamente, se debe configurar un registro DNS en Cloudflare:
cloudflared tunnel route dns <TUNNEL_UUID> database.<YOUR_DOMAIN>.com
Esto crea un CNAME que direcciona database.<YOUR_DOMAIN>.com
al túnel de Cloudflare.
4. Configuración del túnel en el servidor
Se debe configurar cloudflared
en el archivo YAML de configuración en ~/.cloudflared/config.yaml
:
tunnel: <TUNNEL_UUID>
credentials-file: <PATH_TO_TUNNEL_UUID>.json
ingress:
- hostname: database.<YOUR_DOMAIN>.com
service: tcp://<PRIVATE_INTERNAL_IP>:<PORT>
- service: http_status:404
Este archivo define el túnel y la forma en que se redirigirá el tráfico a la base de datos o servicio que se desea proteger.
5. Inicio del túnel como servicio
Para garantizar que el túnel se inicie automáticamente al arrancar el sistema, se instala el servicio en Linux:
sudo cloudflared --config ~/.cloudflared/config.yml service install
Si es necesario realizar ajustes, se puede editar el archivo de configuración del servicio en /etc/systemd/system/cloudflared.service
. Finalmente, para verificar que el servicio está activo, se ejecuta:
systemctl status cloudflared
6. Conexión desde el cliente
El cliente también debe tener cloudflared
instalado y autenticado. Para establecer la conexión con la base de datos, se ejecuta:
cloudflared access tcp --hostname database.<YOUR_DOMAIN>.com --url 127.0.0.1:<LOCAL_PORT_FORWARD>
Este comando redirige el tráfico del puerto local (por ejemplo, 5432
para Postgres) hacia el servidor remoto a través del túnel de Cloudflare.
A partir de ahí, la conexión con la base de datos se realiza como si estuviera alojada localmente:
psql -h 127.0.0.1 -p 5432 -U usuario -d basedatos
Conclusión
La implementación de túneles TCP con Cloudflare Tunnel proporciona una alternativa eficiente y segura para la gestión de conexiones remotas a servicios sensibles. Al eliminar la necesidad de exponer puertos y reducir la dependencia de VPNs tradicionales, esta solución facilita la administración y aumenta la seguridad de la infraestructura TI.
Además, su integración con Cloudflare Access permite establecer reglas de acceso avanzadas, mejorando el control sobre quién y cómo accede a los recursos internos. Para organizaciones y administradores de sistemas que buscan optimizar su seguridad sin comprometer la accesibilidad, esta tecnología representa una opción altamente recomendable.
vía: Ryan Schachte y CloudFlare