Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Túnel TCP con Cloudflare Tunnel


El tunelado TCP es útil porque puedes reenviar conexiones que no son sólo sitios web ejecutando HTTP(s). Los casos de uso donde esto se aplica es el reenvío de cosas como SSH, RDP o Postgres. Recientemente quise usar Cloudflare Tunnels para reenviar conexiones TCP para mi base de datos. Esto me permitiría acceder a mi base de datos desde cualquier parte del mundo usando un túnel seguro y protegido.

 


 

Protocolos Soportados

ServicioDescripciónEjemplo service valor
HTTP/SIncoming HTTP requests are proxied directly to your local service.https://localhost:8000
HTTP over Unix socketJust like HTTP, but using a Unix socket instead.unix:/home/production/echo.sock
HTTPS over Unix socketJust like HTTPS, but using a Unix socket instead.unix+tls:/home/production/echo.sock
TCPTCP connections are proxied to your local service.tcp://localhost:2222
SSHSSH connections are proxied to your local service. Learn more.ssh://localhost:22
RDPRDP connections are proxied to your local service. Learn more.rdp://localhost:3389
kubectl bastion modecloudflared will act like a jumphost, allowing access to any local address.bastion
Hello WorldTest server for validating your Cloudflare Tunnel setup.hello_world
HTTP statusResponds to all requests with the given HTTP status.http_status:404

Tunnel TCP - Cloudflared (CloudFlare Daemon Tunnel)

 

Los túneles TCP con CFT requieren que cloudflared se esté ejecutando tanto en el nodo de destino como en todos los nodos cliente conectados. (Esto sólo se aplica para TCP sin procesar y no para protocolos de capa 7). Vamos a instalarlo.

sudo apt-get update; sudo apt-get -y install cloudflared


Autentifica el nodo servidor con el comando:

cloudflared tunnel login 

y abre el enlace para autenticar en tu navegador. 

cloudflared abrirá una ventana del navegador y te pedirá que inicie sesión en su cuenta de Cloudflare. Si usted está trabajando en una máquina que no tiene un navegador, o una ventana del navegador no se inicia, puede copiar la URL de la salida de línea de comandos y visitar la URL en un navegador en cualquier máquina.


Una vez que inicies sesión, Cloudflare mostrará los sitios que ha añadido a su cuenta. Seleccione el sitio en el que creará un subdominio para representar el recurso. Por ejemplo, si planea compartir el servicio en tcp.site.com seleccione site.com de la lista.

Una vez seleccionado, cloudflared descargará un certificado comodín para el sitio. Este certificado permitirá a cloudflared crear un registro DNS para un subdominio del sitio.

  • Cert.pem

Este es el archivo de certificado emitido por Cloudflare cuando se ejecuta cloudflared tunnel login. Este archivo utiliza un certificado para autenticar su instancia de cloudflared y es necesario cuando crea nuevos túneles, elimina túneles existentes, cambia registros DNS o configura el enrutamiento de túneles desde cloudflared. Este archivo no es necesario para realizar acciones como ejecutar un túnel existente o gestionar el enrutamiento de túneles desde el panel de control de Cloudflare. 

El certificado de origen cert.pem es válido durante al menos 10 años, y el token de servicio que contiene es válido hasta su revocación.

Ahora podemos crear nuestro túnel:

cloudflared tunnel create postgres


Esto creará un túnel con un UUID. Anota el ID y vamos a configurar una ruta DNS que se utilizará para transportar nuestros paquetes desde nuestro reenviador local a través de la red de transporte de Cloudflare.

Archivo de credenciales

Este archivo se crea cuando ejecutas cloudflared tunnel create <NAME>. Almacena las credenciales de tu túnel en formato JSON, y es único para cada túnel. Este archivo funciona como un token que autentica el túnel al que está asociado. 


cloudflared tunnel route dns <TUNNEL_UUID> <SUBDOMINIO_DESEADO>


El subdominio deseado sería algo así como base de datos (db). Ahora debe tener un registro CNAME DNS personalizado aliasing db.<TU_DOMINIO>.com al dominio del túnel.

Para confirmar que ha funcionado:

cloudflared tunnel route ip show
Mostrar información:

cloudflared tunnel info <UUID or NAME>

Archivo de configuración

Este es un archivo YAML que funciona como el manual de instrucciones para cloudflared. cloudflared buscará automáticamente el archivo de configuración en el directorio predeterminado de cloudflared, pero puedes almacenar su archivo de configuración en cualquier directorio. Se recomienda especificar siempre la ruta de acceso de su archivo de configuración cada vez que se hace referencia a ella. Mediante la creación de un archivo de configuración, usted puede tener un control de grano fino sobre cómo su instancia de cloudflared funcionará. Esto incluye operaciones como lo que quiere que cloudflared haga con el tráfico (por ejemplo, proxy websockets al puerto xxxx o SSH al puerto yyyy), donde cloudflared debería buscar autorización (archivo de credenciales, token de túnel), y en qué modo debería ejecutarse (por ejemplo, warp-routing). En ausencia de un archivo de configuración, cloudflared proxy de tráfico saliente a través del puerto 8080.

Ahora vamos a configurar nuestro cloudflared config YAML ubicado en ~/.cloudflared.
~/.cloudflared/config.yaml

tunnel: <TUNNEL_UUID>
credentials-file: <PATH_TO_TUNNEL_UUID>.json
 
ingress:
  - hostname: <SUBDOMAIN>.<YOURDOMAIN>.com
    service: tcp://<PRIVATE_INTERNAL_IP>:<PORT>
    # catch all
  - service: http_status:404


Inicia el túnel con:

cloudflared tunnel run <UUID or NAME>

Esto es bueno para pruebas efímeras, pero vamos a configurarlo para que se inicie automáticamente como un servicio de Linux.

# instalar el servicio cloudflared
sudo cloudflared --config ~/.cloudflared/config.yml service install



Puedes editar la configuración del servicio con:

  sudo vim /etc/systemd/system/cloudflared.service

Para asegurarte de que se está ejecutando, comprueba el estado del servicio con:

  systemctl status cloudflared


Ahora que el túnel se está ejecutando, el cliente necesita conectarse también. Asegúrate de que cloudflared fue instalado en el cliente y también autenticado.

cloudflared access tcp --hostname <SUBDOMAIN>.<YOURDOMAIN>.com --url 127.0.0.1:<LOCAL_PORT_FORWARD>

El comando anterior tomará las conexiones TCP enviadas a localhost:5432 en mi caso y enviará los paquetes sobre el túnel asociado con el nombre de host especificado. En mi caso con Postgres, simplemente me conecto a la IP del host 127.0.0.1 con el puerto 5432 y será reenviado al nodo servidor Postgres.

Otro ejemplo crear tunnel:

cloudflared tunnel --hostname tcp.site.com --url tcp://localhost:7870


Acceder al tunnel como cliente:


cloudflared access tcp --hostname tcp.site.com --url localhost:9210 



Puedes ver la documentación de Cloudflare Tunnel aquí.

Usuario RDP

 

cloudflared access rdp --hostname rdp.example.com --url rdp://localhost:3389

 

Usuario SMB

cloudflared access tcp --hostname smb.example.com --url localhost:8445

Permisos de túnel


Los permisos de túnel determinan quién puede ejecutar y gestionar un túnel de Cloudflare. Dos archivos controlan los permisos para un túnel gestionado localmente:

  •  Un certificado de cuenta (cert.pem) se emite para una cuenta de Cloudflare cuando inicia sesión en cloudflared. Asegúrese de ser intencional acerca de las ubicaciones y máquinas en las que almacena este certificado, ya que este certificado permite a los usuarios crear, eliminar y administrar todos los túneles para la cuenta.
  •  Un archivo de credenciales de túnel (<TUNNEL-UUID>.json) se emite para un túnel cuando se crea el túnel. El archivo de credenciales sólo permite al usuario ejecutar ese túnel específico, y nada más. Por lo tanto, como administrador, puede compartir las credenciales del túnel con los usuarios que ejecutarán el túnel.

Consulta la tabla siguiente para comparar los dos archivos y los fines para los que están pensados.

Account certificateTunnel credential
File namecert.pem<TUNNEL-UUID>.json
PurposeAuthenticates your instance of cloudflared against your Cloudflare accountAuthenticates the tunnel it is associated with
ScopeAccount-wideTunnel-specific
File type.pem.json
Stored inDefault directoryDefault directory
Issued when runningcloudflared tunnel logincloudflared tunnel create <NAME>
Valid forAt least 10 years, and the service token it contains is valid until revokedDoes not expire
Needed toManage tunnels (for example, create, route, delete and list tunnels)Run a tunnel. Create a config file.

Fuentes:

https://ryan-schachte.com/blog/cf_tunnel_tcp/

https://developers.cloudflare.com/cloudflare-one/applications/non-http/cloudflared-authentication/arbitrary-tcp/


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.