miércoles, 30 de abril de 2008

Un par de TIPs rápidos sobre túneles SSH

Esto iban a ser un par de comandos para el apartado ful scripts, pero luego he pensado que quizá merecía la pena montar un mini-artículo que explicase de qué iba el tema.

  • Túnel a través de ssh

  • Muchas veces tenemos que acceder a servicios de una LAN que no están accesibles directamente desde internet; sin embargo, sí tenemos conexión de ssh.
    La solución es muy sencilla, crear un tunel a través del ssh (esto se puede hacer también a través del putty si tienes la desgracia de que el S.O. del cliente es un windows...

    Escenario:
    • Servicio ssh escuchando en internet en la IP pública 64.233.183.99
    • En otra máquina dentro de la misma LAN está escuchando una BBDD postgres en la IP 192.168.10.69 en el puerto 5432
    • Conectamos nuestro portátil a una Wireless que algún alma caritativa tiene abierta (0 no) y creamos un túnel con el siguiente comando:
    ssh -CvNL 5432:192.168.10.69:5432 bpk@64.233.183.99

    Explicando rápidamente el tema:
    • C -->Habilita la compresión, para minimizar el uso de ancho de banda
    • v -->Verbose. Útil para ver cuando y cómo se establecen las conexiones dentro del tunel.
    • N -->Para que no levante una shell ni permita ejecutar comandos en el servidor destino. Útil si tenemos un usuario para estos menesteres que no tiene shell
    • L -->Con este parámetro estamos levantando el túnel que necesitamos. Concretamente le estamos diciendo que escuche en el puerto local del protátil 5432 y que lo que reciba por ahí lo reenvíe a la IP 192.168.10.69 al puerto 5432 a través de la conexión SSH.
    • usuario@IP_pública -->Los datos con los que levantaríamos una conexión típica de SSH.
    Una vez establecida la conexión SSH sólo tendremos que decirle a nuestro cliente preferido de postgres que se conecte a la IP local 127.0.0.1 en el puerto 5432 y listo.


    Otro posible escenario sería:
    • Servicio ssh escuchando en internet en la IP pública 89.185.234.89
    • En otra máquina dentro de la misma LAN tiene montado un servidor FTP que sólo está accesible desde dentro de la red con la IP 172.26.0.69
    • Tenemos que realizar un backup del pr0n en nuestro portátil. Para ello creamos el túnel con el siguiente comando:
    ssh -CvNL 10000:172.26.0.69:21 bpk@89.185.234.89

    Y desde otro terminal:
    ftp 127.0.0.1 10000

    La idea es la misma, aunque creo que es más intuitivo así.


    Este tipo de túneles se pueden empalmar para ir saltando de máquina en máquina dentro de las distintas subredes de la empresa, pero no quiero complicar el ejemplo, así que eso queda como deberes para cuando lo necesitéis ^_~

  • Túnel Dinámico a través de ssh

  • Otro uso práctico de túneles. En este caso túneles dinámicos.
    Si estáis en una red no confiable (sipe, lo sé, todas las redes son no confiables, pero unas lo son menos que otras). Pongamos por caso que el vecino con wireless que mencionaba más arriba es un pequeño cabroncete, y le encanta jugar con nuestro tráfico de formas que no nos resultan agradables (no como lo haría la madre de Juako). A través de ssh podemos levantar un túnel dinámico que se comportará como un proxy SOCKS y sólo tendremos que configurar nuestro navegador (o la aplicación que sea) para que utilice el proxy que hemos creado. Por supuesto, conseguiríamos el mismo resultado con una VPN, pero este método tiene la ventaja de que no tenemos que montar ningún servicio adicional y siempre es más común tener un ssh escuchando que una VPN montada.

    Escenario:
    • Servicio ssh escuchando en la IP pública 64.233.183.99 (máqina dentro de una red confiable)
    • Ejecutamos el siguiente comando en el portátil que está conectado a internet desde la WIFI del vecino cabrón.
    ssh -CvND 7777 bpk@64.233.183.99

    En este caso, la 'D' es la encargada de levantar el túnel dinámico, y el puerto en el que el que está escuchando el proxy SOCKS es el 7777


    Notas referentes al firefox:

    Recomiendo usar Add-ons como FoxyProxy para poder alternar configuraciones de distintos proxys (dinámicos, TOR, SQUID...) de una forma rápida y cómoda.

    Si vamos a tunelar el tráfico, conviene comprobar que el parámetro "network.proxy.socks_remote_dns" esté en "true" para que así vaya también por el túnel.
    Para comprobar/cambiar el valor: En la barra de direcciones del firefox vamos a "about:config" y buscamos este parámetro (podemos filtrar por "dns" para encontrarlo antes)


    UPDATE - Notas referentes al servidor SSH:

    Si tienes problemas y no funciona el túnel, comprobar que está habilitado en el servidor. Para ello editar el archivo de configuración /etc/ssh/sshd_config y buscar el siguiente parámetro:
    AllowTcpForwarding yes

    Y ya que estáis editando el archivo, no está de más capar el acceso a root como medida de seguridad:
    PermitRootLogin no

    Seguidores