Introducción a HTTP Tunneling
I – Introduccion
Con este documento pretendo introducir unas nociones muy básicas sobre la tecnica ‘HTTP Tunneling‘.
No esta destinado para personas avanzadas o medias en la materia.
Recomiendo visitar las paginas citadas para poder tener una información completa y detallada sobre el tema.
Ruego me perdonen los puristas del lenguaje por las bestialidades (como tunel y derivados) y el escaso esfuerzo por la traducción correcta aquí cometidos.
II – Nociones Basicas
Tunneling
Entiendo protocolo como la forma de comunicarse de dos o mas entidades de sistemas diferentes , propongo este pequeño esquema :
Entidad A --------Protocolo P (datos)---------- Entidad B
En este caso el protocolo P es propio al tipo de las entidades A y B.
El tunneling consiste en encapsular un protocolo dentro de otro.
Quizas ayude la siguiente ilustracion :
Entidad A ----Protocolo Z (protocolo P(datos))-- Entidad B
HTTP Tunneling
El protocolo HTTP es de aplicación y usa el protocolo TCP como transporte. En circunstancias normales , cuando un cliente web visita una pagina, se establecen una o mas conexiones TCP al puerto 80 (usualmente) del servidor web , usando el protocolo HTTP.
Ejemplo:
HTTP Navegador (Firefox) -------------------- Servidor Web (Apache)
El http tunneling consiste en encapsular cualquier protocolo que use el tcp como transporte, puesto que es el que usa http.
Esquemita tipico :
PASO 1 :
Protocolo P Datos de Aplicación ---------- Cliente 'TUNELIZADOR'
y a partir de ahi :
PASO 2:
HTTP (TUNELIZADOR)Cliente ----- Falso servidor (DESTUNELIZADOR)
Y finalmente :
PASO 3:
Protocolo P Falso servidor Web ----------- Datos de Aplicación (Destunelizador)
En este ejemplo, escojemos dos aplicaciones A y B que se comunican mediante el protocolo P que usa TCP para transporte.
En el primer paso, los datos de la aplicacion son enviados al cliente tunelizador , quien encapsula esos datos dentro del protocolo http (ver sección 3-Implementacion). La aplicacion y el cliente tunelizador no tienen porque estar en la misma maquina, basta con que sea accesible.
En el segundo paso, el cliente tunelizador envia una peticion standard http al falso servidor WEB , este último, la desencapsula y envia los datos a la aplicacion destino, que como en el primer paso, no es
necesario que sea la misma maquina la que corra la aplicacion y el falso servidor web.
Por sencillez, llamare CT al cliente tunelizador y SDT al serviddor destunelizador, valga la redundancia.
Si por ejemplo , queremos tunelizar el protocolo SSH (secure shell),
tenemos el esquema siguiente :
SSH TCP SSH Cliente SSH --------CT----- SDT -------- Server SSH Host A Host A Host B Host C
Nota: Bastaria con solo 2 hosts A y B , pero pueden participar hasta 4.
Configuraremos nuestre cliente SSH para que se conecte con nosotros mismos , al puerto tcp en el que hayamos configurado el CT.
El CT enviara los datos al SDT usando el protocolo HTTP , para ello podra utilizar si es necesario un proxy web (tema tratado en la siguiente seccion) .
El Host B , SDT, enviara los datos desencapsulados al Host C , servidor de SSH.
De esta forma, el host A y el host C establecen una comunicacion SSH a traves del tunnel virtual sobre http, siendo este tunnel 100 % transparente para la aplicacion en cuestion , salvo en lo que a direcciones se refiere, puesto que el cliente del host A ha conectado consigo mismo y no directamente con C.
II – Y para que tanto lio ?
Seguramente os esteis preguntando porque se organiza tanto jaleo Aunque el protocolo http use al TCP para el transporte , en muchas ocasiones no es posible una comunicacion directa por TCP entre dos
máquinas Es el caso por ejemplo de una red interna de una empresa o universidad en la que la salida hacia internet esta limitada a un proxy unicamente WEB.
Ejemplo:
HTTP HTTP Lan Interna---- Proxy WEB SQUID ---- Site WEB
En este caso, en teoría, no es posible una conexion TCP desde la lan interna hacia el exterior, la unica salida es vía HTTP.
Es el unico caso real en el que veo muy necesaria la utilización de la técnica de HTTP Tunneling , si sabeís de algun otro caso, no dudeis en mandarmelo y completare esta sección.
IV – Implementacion
Para implementar el cliente y el servidor de tunneles http , es de obligada lectura el RFC del protocolo HTTP, disponible en castellano en : http://lucas.hispalinux.es (seccion Estandáres).
Basicamente, consiste en encapsular los datos del cliente en las peticiones POST. Para los datos provienentes del servidor , no hay tal necesidad, puesto que puede devolver el tipo de datos que quiera , siempre y cuando lo especifique. Para detalles sobre la implementacion, la pagina web del ejemplo
comentado es una excelente fuente de información.
V – Ejemplo de Implementacion: HttpTunnel por
Lars Brinkhoff – http://www.nocrew.org/software/httptunnel.html
Este software se distribuye gratuitamente bajo la licencia GPL Este es un excelente ejemplo, puesto que esta estructurado de la forma comentada anteiromente .
A fecha de hoy , estan disponibles el clasico tarbal (tar.gz), paquetes .deb para Debian GNU/Linux y los binarios precompilados para plataformas win9x y NT/2k.
Los dos ejecutables que nos interesan son : hts y htc , servidor y cliente respectivamente . No requieren muchos parametros , pero veamos el ejemplo de una situación típica :
+ Host A : equipo de una LAN interna , se conecta a internet a traves del host proxy.lan.interna , que es un proxy web (puerto 8080).
+ Host B : algunLugar.com , equipo de internet , rulando el servicio de telnetd y en el cual tenemos una cuenta con la que acceder.
En la maquina B , deberiamos ejecutar :
hts -F localhost:23 9000
Lo que conseguimos, es hacer que las conexiones HTTP al puerto 9000 sean desencapsuladas y redirigdas al puerto 23 ( demonio de telnet) de la misma maquina.
En la maquina A, podemos ejecutar :
htc -F 1001 -P proxy.lan.interna algunLugar.com:9000
El cliente se quedara a la esperade conexiones el puerto local 1001, los datos recibidos seran encapsulados y enviados a algunLugar.com ,puerto 9000, usando el protocolo http.El cliente utilizara el proxy proxy.lan.interna para comunicarse con el servidor algunLugar.com.
Si todo ha ido bien, al conectarnos al puerto 1000, en el host A, veremos el bonito login de la maquina B. (para conectarnos , bastaria con ejecutar telnet localhost 1000 en el host A).
Es probable que tarde unos instantes en conectar e incluso que sea necesario establecer otra conexion para lograrlo, recomiendo que probeis primero sin proxy , ya que este ultimo puede dar algun problemilla incial.
Otro ejemplo es Htthost – http://www.htthost.com/, pero es de pago. Introduce nociones nuevas como la introduccion de banners publicitarios , etc.
VI – Saludos y publicidad barata
La tecnica de HTTP Tunneling esta en vias de desarrollo para la herramienta Aladino Pangea. Se trata de una herramienta de administración remota segura y eficaz de equipos Windows 9x/Nt..
Nota: este texto ha sido redactado usando Emacs (vi* sux XD ) a traves de una conexion SSH tunelizada; en la universidad en la que estudio solo disponemos de salida a internet a traves de un proxy web.Vamos , lo que os quiero decir es que la historia funciona realmente.
Autor : zgor . zgor@int80h.net / http://int80h.net
Fecha: 7-11-2001
Ultima revision: 7-11-2001

