Está en la página 1de 4

Introduccion a la tecnica 'http tunneling'

----------------------------------------------------------------------

Autor : zgor . zgor@int80h.net


http://int80h.net
Fecha: 7-11-2001
Ultima revision: 7-11-2001

I - Introduccion

Con este documento pretendo introducir unas nociones muy basicas 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
informacion 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 traduccion correcta
aqui 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 Entidad
A --------protocolo P (datos)---------- 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 os ayude la siguiente ilustracion :

ENTIDAD ENTIDAD
A ----Protocolo Z (protocolo P(datos))-- B

http tunneling
--------------

El protocolo http es de aplicacion 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:

NAVEGADOR HTTP SERVIDOR WEB


NETSCAPE -------------------------------------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 :
Datos de Protocolo P
Aplicacion -------------------------------------- CLIENTE 'TUNELIZADOR'

y a partir de ahi :

PASO 2:
HTTP
CLIENTE -------------------------------------- FALSO SERVIDOR WEB
TUNELIZADOR DESTUNELIZADOR

y finalmente :

PASO 3:
Protocolo P
FALSO SERVIDOR WEB ------------------------------ Datos de
DESTUNELIZADOR Aplicacion

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 seccion 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 ultimo, 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 http 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
maquinas
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:

LAN http http SITE


INTERNA ----------- Proxy WEB SQUID ---------------- WEB

En este caso, en teoria, no es posible una conexion tcp desde la lan


interna hacia el exterior, la unica salida es via http

Es el unico caso real en el que veo muy necesaria la


utilizacion de la tecnica de http tunneling , si sabeis de algun otro
caso, no dudeis en mandarmelo y completare esta seccion

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 Estandares)

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 informacion

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 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 situacion tipica :

+ 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 inciial.

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
administracion remota segura y eficaz de equipos Windows 9x/Nt..

Me gustaria saludar a toda la gente que conozco , aunque suene un poco


a comodin :P

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

También podría gustarte