2008-10-16

Saltar un proxy que requiere autenticación

Bueno lo que pasa es que en mi post anterior sobre como saltar firewalls usando el OpenSSH no dije como se hacía cuando el proxy que ibamos a saltar tenía autenticación, como es el caso concreto del proxy de la universidad, si usamos por ejemplo el cliente que viene con el OpenSSH for Windows NUNCA vamos a poder pasar por que ese no sabe nada de proxy y siempre va a intentar conexión directa, entonces pailas.

[NOTA:] Me he dado cuenta que poner al OpenSSH a servir por el 443 es mejor que hacerlo servir por el 80 ya que algunos ISPs bloquean el puerto 80 (como es mi caso con ETB) pero el puerto 443 no está bloqueado por los ISPs ni por los firewalls, ya que es el puerto del HTTPS.

Bueno, para este ejemplo necesitamos:


Bueno, entonces, ya sabemos que debemos tener configurado el equipo relevador para aceptar conexiones SSH a través de un puerto accesible por el firewall, en este caso vamos a decir que es el puerto 443.

Para este ejemplo voy a mostrar como jugar en el servidor de Lineage 2 de TehGamers, voy a asumir que ya tienen instalado y configurado el cliente y que ya tienen su archivo de hosts en la carpeta correspondiente y que funciona bien (esto es en el equipo donde vamos a jugar, el equipo relevador no es necesario que tenga instalado el cliente ni el archivo de hosts modificado).

Bueno, lo primero que necesitamos es la información de a que puertos se conecta el cliente de Lineage II, esa información está en internet, pero para que no tengan que ir más lejos:

  • 2106 para el servidor de autenticación
  • 7777 para el servidor del juego
  • 2009 para el servidor del game guard
  • 80 se conecta también al de autenticación

Así que ya sabemos que puertos debemos relevar, ahora viene la parte complicada que es hacer todos los tweaks que necesitamos para que esto funcione, así que comencemos:

Lo primero que hay que hacer es modificar el archivo de hosts del equipo donde vamos a jugar (aquel que está dentro del firewall y tiene instalado el cliente) El archivo de hosts del servidor TehGamers luce más o menos así:

# Tehgamers patch edited this three lines...
91.185.193.200 l2authd.lineage2.com
91.185.193.200 l2patcher.lineage2.com
216.107.250.194 nProtect.lineage2.com

Lo que necesitamos entonces es redireccionar esas conexiones al localhost, para ello modificamos el archivo así:

# Direcciones modificados para el port forwarding:
127.0.0.1 l2authd.lineage2.com
127.0.0.1 l2patcher.lineage2.com
127.0.0.1 nProtect.lineage2.com

# Tehgamers patch edited this three lines...
# 91.185.193.200 l2authd.lineage2.com
# 91.185.193.200 l2patcher.lineage2.com
# 216.107.250.194 nProtect.lineage2.com

Noten que lo único que hice fue comentar las líneas originales del servidor y agregar tres nuevas todas apuntando al localhost, la razón de esto es que en el momento en que quiera volver a jugar por fuera del firewall pues invierto las líneas comentadas y ya.

Ahora hay que configurar Putty para que haga el port forwarding, abrimos putty y lo primero que vemos es esto:


Aca debemos introducir los campos necesarios, en Hostname (or IP Address) introducimos la ip del equipo relevador o el dominio que apunta a él y en Port pues el puerto que estemos usando (el 443 en mi caso). Lo siguiente que hacemos es ir a Connection -> Proxy en la parte izquierda, la ventana muestra lo siguiente:


Aquí debemos introducir la información del proxy, pues creo que no hay mucho que explicar, pero por ejemplo en el caso de la universidad será: el proxy es HTTP así que seleccionar esa opción en Proxy Type, luego en la dirección del proxy pues: proxy.unal.edu.co, lo siguiente es el puerto, que es el 8080. Listo, lo único que falta es meter el nombre de usuario y la contraseña del SIA y ya, habremos configurado el Putty para pasar por el proxy de la Universidad que requiere autenticación.

¿No es tan dificil verdad?

[NOTA:] Si están preocupados por que quede registro de que jugaron Lineage dentro de la universidad en el proxy no se preocupen, las conexiones del SSH van encriptadas con al menos 128 bits, así que no hay peligro, lo único que ellos verán serán paquetes encriptados que van al 443 (un puerto en el que es normal que fluya informacion encriptada).

Bueno, ahora hay que configurar el forwarding: eso lo hacemos en Connection -> SSH -> Tunnels:


Aca debemos agregar cada uno de los puertos a los que le vamos a hacer forwarding, para ello debemos tener en cuenta el archivo de hosts, entonces:

  1. Para el puerto 2106 que va al servidor de autenticación, la redirección es: Source port: 2106, Destination: 91.185.193.200:2106
  2. Para el puerto 7777 que va al servidor del juego, la redirección es: Source port: 7777, Destination: 91.185.193.200:7777
  3. Para el puerto 2009 que va al servidor del game guard, la redirección es: Source port: 2009, Destination: 216.107.250.194:2009
  4. Para el puerto 80 que va al servidor de autenticación la redirección es: Source port: 80, Destination: 91.185.193.200:80

Lo que se está haciendo aquí es decirle al Putty que todo lo que entre al computador local (el que tenemos por dentro del firewall) por el puerto 2106 lo reenvie a la 91.185.193.200 en el puerto 2106 haciendo uso del equipo relevador, y así con el resto de los puertos. Notese que coloqué las direcciones IP en vez de los nombres de los hosts, la razón de esto es que el equipo relevador no tiene el archivo de Hosts, si lo tuviera se podrían haber usado los nombres de los hosts.

Cuando estén listos todos los tuneles simplemente hay que darle Open al putty.

Listo, si hacemos un netstat -n -a -p TCP -b veremos entre otras entradas:

TCP 127.0.0.1:7777 0.0.0.0:0
LISTENING 3852
[Putty.exe]

TCP 127.0.0.1:2106 0.0.0.0:0
LISTENING 3852
[Putty.exe]

TCP 127.0.0.1:2009 0.0.0.0:0
LISTENING 3852
[Putty.exe]

TCP 127.0.0.1:80 0.0.0.0:0
LISTENING 3852
[Putty.exe]

Estas entradas en el netstat confirman que el forwarding está listo, ahora debemos probar que efectivamente las direcciones están siendo atendidas por nuestro propio equipo, para ello hacemos ping a las direcciones del archivo de hosts:

Haciendo ping a l2authd.lineage2.com [127.0.0.1] con 32 bytes de datos:

Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"

Estadísticas de ping para 127.0.0.1:
Paquetes: enviados = 4, recibidos = 4, perdidos = 0

(0% perdidos),


Tiempos aproximados de ida y vuelta en milisegundos:

Mínimo = 0ms, Máximo = 0ms, Media = 0ms

Si todas son respondidas por el localhost (se resuelven al 127.0.0.1) entonces ya estamos listos, ahra si, abrimos el Lineage y a divertirnos.

[NOTA:] Esto en realidad no funciona, por que después de haber autenticado con el auth server este le dice al cliente en que dirección IP está el servidor del juego al cual se va a conectar, de modo que el cliente nunca hace un DNS Lookup para localizar el servidor del juego y por tanto no hay forma de engañarlo para que se conecte al localhost. Así que, cuando intenta hacer la conexión por el proxy muere.

Para poder hacerlo habría que usar una técnica que se llama ip-forwarding que conciste en engañar al sistema para que mande los paquetes que van a determinada dirección a otra, estoy investigando el asusnto pero todavía no he conseguido nada, para Windows al menos. De todos modos les dejo el post para que sepan como brincarse los Firewall que tienen proxy con autenticación.

7 comentarios:

Hugo dijo...

Hola Sergio!

Excelente explicacion de tunneling. Para complementarte, un par de cositas:

Puertos que en la practica pueden usarse son los de FTP (20 y sobre todo 21), Telnet/SSH (22, 23), Sendmail (25), DNS (53, y tampoco levanta sospechas), pop mail (109 y 110), nntp News (119), Line Printer (515), SQL Server (1521, 3306, 4333) y Acceso Remoto (22, 5631, 5632, 5800, 5801, 5900, 5901
)

Para los analizadores de paquetes, has probado cifrarlos usando KPI? te puedes apoyar en tu servidor fuera del firewall para lograrlo y funciona chevere.

::HMG::

MarianoGL dijo...

Hola Sergio

El motivo de mi correo es de consulta,, resulta que yo trabajo en una empresa en donde algunas de las paginas de internet estan bloqueadas, y me interesa acceder a la pagina www.logmein.com, hasta hace 1 semana todavia podia entrar, pero resulta que ya no, me pone un error.

El servidor proxy está rechazando las conexiones
Firefox está configurado para usar un servidor proxy que está rechazando las conexiones.
Compruebe la configuración de proxy para asegurarse de
que es correcta.
Compruebe la configuración de proxy para asegurarse de
que es correcta.


Mi consulta es si tu sabes si hay alguna manera de pasar los filtros para poder acceder a logmein.com

Sergio dijo...

¿Que tal Mariano?

Bueno verás, es bastante posible que loa administradores de red de tu empresa hayan bloqueado el acceso a logmein por que esta página es la página de las redes virtuales Hamachi además de otros servicios de red a través de internet similares. Algunas empresas consideran estas redes virtuales peligrosas y por eso las bloquean.

La respuesta a tu pregunta es si, hay una forma de acceder a logmein.com aunque el proxy la bloquee siguiendo el procedimiento que esta descrito en este post y en el post anterior. Solo hay un problema y es que si no tienes privilegios de aministrador en el equipo de tu lugar de trabajo (algo que es muy posible y lo más probable) no podrás modificar el archivo de hosts y por tanto no podrás desviar las conexiones.

Hay una posibilidad que podría funcionar pero el procedimiento es un poco largo para explicartelo en un comentario de blog, dejame tu coreo o escribeme a sergio.bobillier@gmail.com y con gusto te ayudare.

Elkin Siabato dijo...

Bueno... me pareció super bueno el tema... sin embargo tengo un problema... Explico como esta el asunto:

Quiero poder jugar MRO el cual utiliza puertos 6500 UDP y TCP.

Desde mi casa no podia, asi es que lo que hice fue entrar al modem, y habilitar los puertos 6500 para la ip de mi computadora(ya que tengo dos PC). y LISTO! Podia jugar desde mi PC... (QUE LOGRO!!! JE JE :P)

Bueno... ahora viene lo interesante... Desde mi trabajo poder jugar MRO, teniendo presente que hay un proxy que LOGICAMENTE no me tiene a mi computador del trabajo activados los puertos 6500 UDP Y TCP.

Ja... pues la solucion es hacer un tunel y listo... Eso hice..

Tengo conexión SSH a mi casa desde mi trabajo (sin problemas... pues cargo desde mi explorador del trabajo www.whatismyip.com y me sale la ip de mi router de mi casa). Esto funciona correctamente.

Sin embargo, cuando lanzo el juego y lo abro con FREECAP ( el cual me permite coger cualquier aplicacion y meterle la configuracion de red que yo quiera) aunque si tengo internet y me muestra las partidas... cuando va a conectarse (es decir cuando va a verfiicar que los puertos estan abiertos) PAILAS.... NO FUNCIONA... ME SIGUE DICIENDO QUE LOS PUERTOS NOS ESTAN ABIERTOS!!!! OHHH... QUE PODRA SER??? Agradezco su ayuda... Por cierto... lo agregue a mi google talk, para haber si me pega la ayudita.

Gracias nuevamente.

Mateo mosquera laguna dijo...

hola una preguntica, ya que sabes como es el proxy unal podrias aclararme el host que no tengo ide a que cual sea

Mateo mosquera laguna dijo...

hola una preguntica, ya que sabes como es el proxy unal podrias aclararme el host que no tengo ide a que cual sea

Sergio Bobillier dijo...

Hola Mateo,
El proxy de la Universidad Nacional era (cuando escribí el artículo) proxy.unal.edu.co. Ahora creo que ya no puedes salir a través de ese host, creo que ahora hay varios proxies, proxy2.unal.edu.co, proxy3.unal.edu.co, ..., etc.

Pero la verdad no sé si se puedan usar directamente, hasta donde yo sé ahora hay que usar un archivo de configuración automática del proxy que solo funciona con los exploradores web.

Lamento no poder ayudarte mas.