Cómo montar nuestro propio servidor de túneles siempre online (1ª parte)

Se conoce como túnel o tunneling a la técnica que consiste en encapsular un protocolo de red sobre otro (protocolo de red encapsulador) creando un túnel de información dentro de una red de computadoras. La técnica de tunelizar se suele utilizar para trasportar un protocolo determinado a través de una red que, en condiciones normales, no lo aceptaría. Otro uso de la tunelización de protocolos es la creación de diversos tipos de redes privadas virtuales.

El tunneling puede ser usado también para circunvalar un cortafuegos.

A más de uno nos ha hecho falta alguna que otra vez un túnel, ya pudiera ser SSH, DNS, ICMP o HTTP, bien fuese para securizar conexiones o saltarnos alguna que otra restricción...por no decir lo bien que nos puede venir tener este tipo de server montado a la hora de auditar redes.

En esta serie de posts vamos a montarnos nuestro propio proveedor de estos servicios el cual estará siempre dispuesto a echarnos una mano.

Vamos a abordar diferentes técnicas de tunneling (aunque no todas) y veremos para qué sirven, veremos cómo podemos hacer un 'wake on wan' para solo tener el server funcionando cuando lo necesitemos. Y también veremos como podemos lidiar con el problema de que nuestra ip no sea fija...
Para nuestro propósito echaremos mano de nuestra querida raspberry pi y el sistema operativo whezzy-raspbian (aunque bien pudiera ser un server normal con debian instalado y quizás he optado por raspberry dado su bajo consumo y porque recientemente a caído una en mis manos ....os vais a hartar!!).

A lo que nos ocupa...

CREANDO UN SUBDOMINIO 


Lo primero que tenemos que hacer con el fin de encontrar nuestro server entre esta selva de hosts que es Internet y como requisito para algún servicio de nuestro servidor, es hacer que el nombre de un subdominio apunte a nuestra ip-publica. Esto podemos conseguirlo de distintas formas pero quizás la más simple y económica (totalmente gratis) sea registrarnos en  http://freedns.afraid.org:


Una vez registrados iremos ala sección subdominios y generaremos dos entradas nuevas. 
Por ejemplo :
                                       
hackpy.chikenkiller.com A <tu ip puplica>  

   dns4hackpy.chikenkiller.com NS hackpy.chikenkiller.com
  (hackpy y dns4hackpy es sustituible por cualquier cosa)


NOTA: para saber nuestra ip-publica desde la consola typear :

apt-get install curl 
curl ipinfo.io
Tras guardar, tan solo nos queda esperar que nuestro dominio se propague  por el mundo... mientras esto ocurre seguro que una duda asalta vuestra  mente... ¿Y qué pasará cuando mi proveedor de Internet me cambie la ip?

Tranquilo chato tenemos una solución (hay unas cuantas)... volvemos a nuestra raspberry e instalamos Inadyn

DNS-DINAMICO


Inadyn es un cliente de actualización escrito en C que actualiza registros DNS. Lo que hará sera comprobar nuestra ip publica y cuando cambie actualizara el registro de freedns.afraid.org.

Para instalarlo:

apt-get install inadyn

Para configurarlo crearemos el archivo /etc/inadin.conf y escribiremos lo siguiente en su interior.

nano inadyn.conf

--username tu_username 
--password tu_pass 
--update_period 60000 
--forced_update_period 320000
--alias tudominio.chikenkiller.com,Tu token
 --background 
--dyndns_system default@freedns.afraid.org 
--log_file /var/log/inadyn.log
--syslog# /etc/inadyn.conf 

Para conseguir nuestro numero token debemos ir a la sección dinamic-dns y pinchar en wgetscript.


Bajamos  el archivo y lo abrimos con un editor de texto y vemos nuestro token el cual pondremos en el archivo de configuración de inadyn.conf
Podemos comprobar que todo esta donde debe estar:

inadyn
nano /var/log/inadyn.log
Ya tan solo nos queda que inadyn haga la comprobación; y si ha cambiado nuestra ip la actualice automáticamente en freedns.afraid.org.
Para ello añadiremos la siguiente linea a nuestro crontab mediante el comando:

nano /etc/crontab
 15 10   * * *   root    /usr/sbin/inadyn
Esto lo que hará sera comprobar y actualizar nuestra ip freedns.afraid.org todos los dias a las 10:15.

Pues ya hizimos la parte mas dura...hemos conseguido poder acceder a nuestro server con nuestro nombre de dominio, es hora de que le hagamos un ping....

ping  hackpy.chikenkiller.com

MONTANDO NUESTRO SERVICIO DNS-TUNNEL


Llegado este punto vamos a empezar a incluir servicios en nuestro pequeño servidor . El primero de estos sera el dns-tunnel.

No vamos a entrar en materia a cerca de que es y para que sirve el protocolo DNS lo doy por asumido , más adelante escribiré un articulo sobre el bastionado de este protocolo en el cual seré mucho mas extenso, dada su importancia crítica me parece muy interesante >:D.

Bueno la idea general es a groso modo: El cliente encapsulará el trafico IP en el protocolo DNS y lo dirigirá a un falso servidor DNS (el nuestro) el cual desencapsulará dicho tráfico y responderá al cliente de la misma forma, haciendo "transparente" dicha comunicación al IDS,IPS (algunos). 

Dada que esta técnica no es nueva y ampliamente conocida no siempre tiene éxito por si sola, no esperéis metérsela a algún famoso proveedor de Internet que no colará...aunque en su tiempo coló. Por el contrario algunos administradores de red pasan por alto esta posibilidad de comunicación (os sorprendería cuantos) lo cual hace las delicias de algunos avispados que logran navegar sin pagar, saltarse el firewall corporativo, pasarse por el forro el hot spot etc, etc, como ya vimos en un articulo de hackplayers.

Bueno al turrón!!!

Para este menester haremos uso de la famosa herramienta iodine la cual esta en los repos y su configuración y manejo la hacen ideal para nuestros propositos. 
 

INSTALACION Y CONFIGURACION DE IODINE

En la consola y como root de nuestra raspberry (o cualquier sistema debian o derivado..).

apt-get install iodine

Luego pasaremos a editar su fichero de configuracion de la siguiente forma:

nano /etc/default/iodine

 # Default settings for iodine. This file is sourced from
# /etc/init.d/iodined
START_IODINED="true"
IODINED_ARGS="10.0.0.1  dns4hackpy.chikenkiller.com"
IODINED_PASSWORD="un password para la comunicacion"

Guardamos y tipeamos los siguientes comandos:

 echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A POSTROUTING -t nat -s 10.0.0.0/24 -o eth0 -j MASQUERADE
(Suponiendo que eth0 es nuestra interfaz de salida a internet)

/etc/init.d/iodined restart 

ya tenemos el servicio corriendo!!

UPS!!! se me olvidaba.... ni que decir tiene que para que esto funcione deberemos tener el puerto UDP 53 abierto en nuestro router...y podemos proteger el servicio de gente indiscreta aparte de con la< contraseña de marras...con Latch como ya vimos en esta entrada..

Para conectarse el cliente:

 iodine -f dns4hackpy.chikenkiller.com

 
ahora para poder navegar libremente deberemos enrutar el tráfico...


ENRUTADO DEL TRAFICO DEL CLIENTE


Una vez arrancado ionine ejecutaremos el comando route para ver nuestra tabla de rutas:

route

Lo que haremos a continuación sera cambiar nuestro GW por la ip pública del servidor (podemos hacernos un script con estas lineas para que sea mas cómodo y llamarlo por ejemplo route-dns-tunel.sh)


 route add -host la ip publica del server gw 10.0.0.1
 route del default 192.168.1.1
  route add default gw 10.0.0.1

y ya podremos navegar mediante nuestro DNS-Tunnel!!!



En la siguiente captura veremos a nuestro ordenador navegando por DNS-TUNNEL; como antes he dicho, canta muchísimo esta técnica y se detecta fácilmente...aunque hay formas de mitigar y llegar a camuflar bastante mas este tipo de trafico..


Hasta aquí por hoy  ...os emplazo a una segunda entrada donde seguiremos viendo el tema del tunneling..

Espero haber sido de ayuda.

Manuel ;D

27 comentarios :

  1. Yo tengo algo similar. Por desgracia, al final me he limitado a Cygwin porque la máquina que tengo siempre encendida es Windows, pero aún así he conseguido tener mis túneles para casos de apuros! ;)

    Buen comienzo de la serie ;)

    ResponderEliminar
    Respuestas
    1. no tienes por que tenerla siempre encendida mas adelante explicare como se puede llebar a cabo un wake on wan (no es el caso de la rasberry se olvidaron de esta posibilidad) estate atento,..... un saludo

      Eliminar
    2. se me olvidaba si ya estas con cygwin.....que te impide el salto a linux??? veras que se te abre un mundo muy gratificante...te animo a que lo hagas

      Eliminar
    3. Es un servidor que utilizo, que no depende de mi usar Linux..., si no, está claro que usaría Linux, y más para estas tareas.
      Y el encenderlo es lo mismo, realmente está siempre encendido, así que no es problemático.

      Eliminar
  2. Esto de que haya caido en tus manos un Rpi es una buenisima noticia, me interesará mucho ver que haces con ella ^^

    ResponderEliminar
    Respuestas
    1. XD XD de momento tengo un problema......que solo tengo una!!

      Eliminar
    2. A mi me pasa lo mismo, lo que pasa es que lo solucioné con varias SDs. Pásate si tienes un rato por mi blog en una de las entradas que están en la principal que tengo hecho domotica con la Rpi, por si te interesase continuar el código y sacar algo más relevante como con lo de Latch :)

      Eliminar
    3. Me ha molao mucho tu trabajo con la RPI!! jajaja esta cojonudo para cuando mas entradas??? estoy en ascuas...

      PD: me comprao 3 SD!!

      Eliminar
  3. Que vuelta a la carga Manuel¡¡¡
    Manos a la obra que está muuuu chulo.Ya se me ocurren diabluras, se podría esconder la Rpi en unas oficinas...ejem, bueno eso no que no se debe.... -;)

    ResponderEliminar
  4. Me encanta el blog, pero este tipo de posts me fascinan. Muchas gracias

    ResponderEliminar
    Respuestas
    1. Gracias!!! Vota en el bitacoras!!! (haciendo patria)

      Eliminar
  5. Saludos Manuel, gracias por volver a la carga con este genial post. Lamentablemente me he quedado con la conexión del cliente.
    Cuando lanzo iodine en el cliente...
    Enter password:
    Opened dns0
    Opened UDP socket
    Sending DNS queries for subdomaindns.chickenkiller.com to 8.8.8.8
    Autodetecting DNS query type (use -T to override)..................
    iodine: No suitable DNS query type found. Are you connected to a network?
    iodine: If you expect very long roundtrip delays, use -T explicitly.
    iodine: (Also, connecting to an "ancient" version of iodined won't work.)
    Googleando he visto que el server iodine en escucha
    root@raspberrypi:/etc# iodined -f 10.0.0.1 subdomaindns.chickenkiller.com
    Enter password:
    Opened dns0
    Setting IP of dns0 to 10.0.0.1
    Setting MTU of dns0 to 1130
    Opened UDP socket
    Listening to dns for domain subdomaindns.chickenkiller.com
    ¿Me puedes comentar algor? te estaría muy agradecido, más todavía.
    Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. si sigues el post al pie de la letra no deberias tener problemas.... mira que tengas el puerto UDP abierto en tu router y dirijido a tu maquina..seguro que es un problema de enrutamiento

      Eliminar
    3. Disculpa mi torpeza, tenía abierto el 56 en vez del 53.. meresco al menos un golpe de remo. Muchas gracias.

      Eliminar
  6. Muy buen tuto,
    Esto si lo hago sobre una maquina virtual no hay ningun problema, ¿verdad?
    Estaba buscando algo sobre tuneles y me ha venido al pelo, pues me hace falta crear uno para navegar.

    Muchas Gracias.
    Un Saludo

    ResponderEliminar
    Respuestas
    1. si tienes cuidado con el enrutamiento no deberias tener problemas....recuerda que para que funcione el server tiene que estar en otra red

      Eliminar
    2. Muchas gracias, aunque ahora estoy oyendo mucho el tema de Raspberry pi, y quizás me compre uno para probarlo.

      Un Saludo.

      Eliminar
  7. Hola!

    Pones este comentario:

    "como antes he dicho, canta muchísimo esta técnica y se detecta fácilmente...aunque hay formas de mitigar y llegar a camuflar bastante mas este tipo de trafico"

    ¿puedes darme una pista?

    saludos

    ResponderEliminar
    Respuestas
    1. Para ganar la guerra es importante conocer a tu enemigo...te dejo un whiite paper muy interesante..
      http://www.sans.org/reading-room/whitepapers/dns/detecting-dns-tunneling-34152

      hay herramientas de dns tunel en las que te dejan tocar parametros de los paquetes y ayuda a que el trafico no sea tan filtrable...y detectable

      Eliminar
    2. Pero en android como puedo hacer todo eso ?????

      Eliminar
  8. como puedo tener un usurio en dns4hackpy.chikenkiller.com, quien pueda ayudar favor de responder a osquel@yahoo.com

    ResponderEliminar
  9. no se puede...puesto que solo se hizo para la practica :D

    ResponderEliminar
  10. Zorry la pregunta, tengo un server DNS y una IP Publica y he creado los registros para hacerlo con mi server, sin embargo NO logro conexion, podrias ayudarme, ya sea por este medio o por mi correo jrgonzaf@gmail.com, estaria agradecido, podria bonificarte por la ayuda si te parece oportuno.

    ResponderEliminar