CLI Proxy para Cloudflare Access
Accede a recursos protegidos con Cloudflare Access Link to heading
Cloudflare Access es una solución fantástica dentro del stack de Zero Trust de Cloudflare. Permite asegurar el acceso a aplicaciones internas y recursos sin la necesidad de una VPN tradicional. En su lugar, cada solicitud a una aplicación es verificada para asegurar que proviene de un usuario autenticado y autorizado.
Cuando accedes a una aplicación protegida por Cloudflare Access a través de un navegador web, la experiencia es fluida. Cloudflare te redirige a tu proveedor de identidad para que inicies sesión. Una vez autenticado, se crea una cookie en tu navegador y puedes acceder a la aplicación sin problemas.
Pero, ¿qué sucede cuando necesitas acceder a estos recursos desde una herramienta? Aquí es donde las cosas se complican un poco.
Si únicamente necesitas hacer una petición, puedes usar el comando cloudflared access curl http://example.com
. Pero si necesitas usar una herramienta, entonces necesitas:
- Autenticarte usando
cloudflared access login http://example.com
. - Obtener un token de autenticación usando
cloudflared access token -app=http://example.com
. - Incluir este token en cada una de tus solicitudes como un encabezado HTTP (
cf-access-token
). Puedes encontrar más detalle en su documentación oficial.
Este proceso puede ser tedioso y requiere añadir lógica adicional a tus scripts o configurar tus herramientas para que manejen estos encabezados, lo cual no siempre es sencillo o posible.
Presentando cloudflared-proxy
Link to heading
Para simplificar este flujo de trabajo, he creado una nueva herramienta de código abierto: cloudflared-proxy
.
cloudflared-proxy
es un proxy inverso local que automatiza la autenticación de Cloudflare Access. Una vez configurado, te permite acceder a tus recursos protegidos desde cualquier herramienta sin tener que preocuparte por la gestión de tokens. Simplemente apuntas tu herramienta al puerto local del proxy, y este se encarga de añadir los encabezados de autenticación necesarios a cada solicitud.
¿Cómo Funciona? Link to heading
La herramienta utiliza cloudflared
para obtener el token de autenticación para un hostname específico y luego inicia un proxy inverso local. Cuando una solicitud llega a este proxy, la herramienta le inyecta automáticamente el encabezado de autenticación de Cloudflare Access antes de reenviarla al destino final.
Características Principales Link to heading
- Múltiples Endpoints: Puedes configurar proxies para varias aplicaciones simultáneamente.
- Configuración Flexible: Soporta configuración mediante flags, un archivo de configuración (YAML, JSON, etc.), o variables de entorno.
- Transparente para tus Herramientas: No necesitas modificar tus clientes o scripts. Simplemente úsalos como si el recurso estuviera disponible localmente.
Instalación y Uso Link to heading
Puedes descargar el binario directamente desde la página de Releases en GitHub.
Uso Básico Link to heading
El comando principal es run
, que inicia los proxies. Puedes especificar los endpoints que quieres proteger directamente desde la línea de comandos.
El formato es [PUERTO_LOCAL:]HOSTNAME[:PUERTO_DESTINO]
.
Ejemplo:
./cfproxy run -e app.dominio.com
Una vez que el proxy está en funcionamiento, puedes usar tus herramientas apuntando al puerto local. Por ejemplo, con curl
:
# En lugar de: curl https://app.dominio.com
# Usas:
curl http://localhost:8080
Uso con Fichero de Configuración Link to heading
Para una configuración más permanente, puedes usar un fichero YAML.
Ejemplo config.yaml
:
proxies:
- hostname: "app1.your-domain.com"
localPort: 8080
- hostname: "app2.your-domain.com"
localPort: 8081
destinationPort: 8443
Y luego ejecutar:
./cfproxy run -c /path/to/config.yaml
Conclusión Link to heading
cloudflared-proxy
nace de la necesidad de simplificar el acceso a recursos protegidos por Cloudflare Access desde entornos de desarrollo y CLI. Espero que os sea tan útil como a mí. ¡No dudéis en probarla, abrir issues o contribuir al proyecto en GitHub!