Duke
Join Date: Nov 2006
Location: 0x00CAFE
Posts: 3,366
|
Regnum por un túnel ssh, o cómo me salteé la seguridad de un firewall blando
DISCLAIMER:
No me hago responsable del uso de ésta información, como así de los daños que pueda causar por su mala utilización. Antes de aplicar cualquiera de los procedimientos se debe saber del tema y no "lanzarse a lo desconocido".
AbstractSe pretende explicar brevemente una técnica para saltearse un firewall que bloquee puertos específicos y que deje tan sólo algunos abiertos (fundamental). En teoría, la guía sirve para cualquier sistema operativo utilizando las herramientas apropiadas.
RequisitosGlobales- Regnum Online (para jugar)
- Servidor SSH fuera de la red con firewall
Linux- Tsocks, proxychains o equivalente (se usa tsocks en los ejemplos)
- Cliente SSH. Generalmente con el paquete de OpenSSH va perfecto
Windows- PuTTY (hace las veces de cliente OpenSSH)
- Sockschain o similar
Intro (saltearse esto si ya se conoce algo del tema... es la explicación aburrida)Conectarse al Regnum desde algún sitio con internet a menudo no es tan sencillo como usar el browser, ya que hay tecnologías de captive portal, traffic shapping o bloqueo de puertos que impiden siquiera conectarse al servidor.
Si uno ya cuenta con un servidor SOCKS5 dentro de la red y quiere utilizar el juego entonces la guía puede servir, pero supongo que ya sabrán resolverlo (o lo explicaré en otro post).
Información importante sobre la máquina servidora, la que está fuera del firewall y que cuenta con una conexión a internet decente, sin bloqueos y con un buen up/down stream. Cabe destacar que debe contener una capacidad de procesamiento razonable si es que ejecuta otros servicios.
La máquina servidora va a hacer las veces de salida de túnel por el cual se va a realizar el conexionado al servidor del Regnum. Los datos van a viajar encriptados por el túnel hasta la máquina cliente, donde el ssh le deriva los paquetes al servidor de SOCKS5 y éste al juego (sí, describí el camino a la inversa ).
En otras palabras, la transferencia de datos sería así:- Regnum trata de conectarse.
- El "sockificador" redirecciona los paquetes al servidor SOCKS5 (SSH).
- El cliente SSH recibe la información, la codifica y envía por un puerto determinado al Servidor de SSH.
- [acá está el firewall con un puerto como el 80 ó 443 abierto]
- [acá está Internet]
- Los datos llegan cifrados al servidor SSH, quien los desencripta y realiza la conexión al servidor del Regnum.
- Servidor del Regnum responde.
Puntos importantes:- Para Ra, la conexión sería totalmente transparente y no se daría cuenta que hay un túnel antes del cliente.
- La conexión está cifrada desde el cliente hasta el server SSH. Si uno se conecta en una red wifi abierta o con WEP todavía los datos serían seguros.
- No sólo se puede hacer con el Regnum, sino que con miles de aplicaciones.
- Realmente no sube mucho la latencia si es que se tiene una buena conexión y hay pocos saltos.
- El OS del servidor SSH es trivial.
Desarrollo:
Lado del Servidor
Primero vamos a configurar la máquina servidora. Tiene que ejecutar el servidor de OpenSSH en un puerto que el firewall tenga abierto. Para eso podemos hacer un nmap a nuestra computadora detrás del cortafuegos. Es conveniente usar puertos altos (>1024) porque no requieren privilegios de administrador.
Para setear el OpenSSH en otro puerto sólo tienen que iniciar el demonio sshd con -p y el puerto en cuestión. Es conveniente matar al demonio si es que ya está en ejecución.
Lado del Cliente
Ya que los comandos son útiles para otros programas aparte del Regnum voy a hacerlo por separado.
Linux Primero instalamos un programa como tsocks o proxychains. Yo prefiero tsocks porque es, a mi modo de ver, el más fácil para configurar y menos problemático en el momento de la compilación.
Ejemplos a continuación con tsocks.
Paso 1: crear el .tsocks.conf
Abrir el editor de texto preferido (vi, emacs (aunque si usás emacs no necesitás leer esto, ya lo sabés) nano, gedit) y crear un archivo llamado ".tsocks.conf" en el home de tu usuario. El archivo debe contener lo siguiente:
Code:
server = 127.0.0.1
server_type = 5
server_port = 1234
NOTA: el puerto "1234" es el mismo en el que debe escuchar el cliente ssh, y no es el del servidor ssh.
Paso 2: crear un script para routing (supertsocks)
Este script permite invocar a tsocks con un archivo de configuración predeterminado por el usuario (con lo que nos salteamos modificar el que está en el /etc/).
Code:
#!/bin/sh
TSOCKS_CONF_FILE=$HOME/.tsocks.conf
export TSOCKS_CONF_FILE
exec tsocks "$@"
Es necesario que tenga permisos de ejecución.
Code:
chmod +x supertsocks
¿Por qué no conectar directamente acá al servidor SSH? Porque cada vez que se ejecute el script se estaría llamando a una nueva instancia, y vemos que eso no es necesario (ni posible).
Paso 3: armando un script de conexión al servidor
Este es el paso más importante. Aquí se realiza la conexión y se levanta el túnel, por lo que es en el lado que más puede fallar (si es que el firewall analiza paquetes y filtra el ssh). Previo a continuar, pueden leer este post sobre túneles ssh de este mismo foro para más información.
Deberíamos utilizar un comando como el siguiente:
Code:
ssh -CND 1234 usuario@servidor.ssh.remoto -p puerto
- C activa la compresión
- N usa el túnel, pero no envía ningún comando
- D 1234 es el puerto del servidor SOCKS5 que armamos, y el mismo que el del .tsocks.conf
- p puerto es el puerto que está abierto a través del firewall, y el mismo que pusimos en el sshd.
Otra vez, tiene que tener permisos de ejecución.
Paso 4: ejecutar todo!
Primero se ejecuta la conexión al servidor ssh.
Luego se navega hasta el directorio del regnum (usualmente es /home/usuario/regnum).
Se ejecuta "$HOME/supertsocks ./rolauncher".
A disfrutar del juego en donde no deberían
WindowsPara el servidor
Es preferible utilizar el OpenSSH en un Sistema Operativo de Verdad, pero todavía pueden instalar OpenSSH. BULMA tiene una muy buena guía en español.
Para el Cliente
Paso 1: conseguir las herramientas
Putty: Public Text Terminal, de aquí. No necesita instalación, y está disponible para un sinnúmero de plataformas.
Freecap, de aquí.
Paso 2: configuración de freecap
Ir a File, luego a Settings y en donde dice "Default Proxy" escriben 127.0.0.1 y de puerto el que se quiera (ej: 1234). Por último, click en aplicar.
Para agregar un programa a la lista de "proxificado", se va a File, luego a new application y se llena con lo siguiente:
Profile name: Regnum
Program path: la ruta donde esté el regnum. Generalmente es C:\Archivos de Programa\NGD Studios\Regnum Online\rolauncher.exe
Click en aplicar.
Paso 3: configuración de PuTTY
Abrir el PuTTY, ir a SSH, luego Tunnels y marcar las siguientes opciones:
Seleccionar Dynamic, Auto y escribir en Source Port el puerto proxy (el 1234 de la guía en linux).
Hacer click en "add" y dirigirse a Sessions en el panel de la izquierda. Allí se debe escribir la dirección del servidor ssh.
Paso 4: correr el juego.
Una vez que se conectan al servidor SSH a través de putty, SIN CERRARLO, hacen doble click en el ícono del programa (en nuestro caso Regnum) del Freecap (el otro programa).
Bibliografía
No la usé toda, hay algunas que busqué para que se entienda mejor.
http://onlyubuntu.blogspot.com/2008/...x-to-surf.html
https://help.ubuntu.com/6.06/ubuntu/...sh-server.html
http://www.securityfocus.com/infocus/1816
http://www.freecap.ru/eng/?p=faq
__________________
I don't have a solution, but I admire the problem.
Last edited by ArcticWolf; 08-26-2008 at 03:20 AM.
|