Configurando Túneles SSH (locales, remotos y dinámicos)
Vializar el tráfico a través de túneles SSH seguros es una forma de saltarse las restricciones de un cortafuego. Además, es una forma de encriptar el tráfico de red sobre una conexión no segura. En este tutorial te enseñaré cómo configurar túneles SSH que pueden ser tan útiles.
Configurando un Túnel Local hacia un Servidor
Las conexiones SSH pueden ser usadas para pasar, a través de un tunel, el tráfico desde puertos en una estación local hacia puertos en una estación remota. Esto es lo que se conoce como túneles ssh locales.
Una conexión local es una forma de acceder a una ubicación de red desde tu computador local a través de una estación remota. Primero, una conexión SSH es establecida en tu estación remota. En dicha estación, una conexión es hecha hacia una dirección de red externa (o interna) especificada por el usuario y el tráfico hacia esa ubicación pasa por el túnel a través de tu computadora local en un puerto especificado.
Para establecer un túnel local hacia tu servidor remoto, debes de especificar la opción -L cuando te conectes y especificar los siguientes datos:
- El puerto local por el cual quieres acceder a la conexión tunelizada.
- La estación a la que quieres que tu servidor remoto se conecte.
- El puerto al que quieres que se conecte tu servidor remoto.
Cada uno de los datos anteriores deben ser especificados en orden y separados por dos puntos. Por ejemplo, para conectarse a host.com en el puerto 80 desde mi servidor remoto y habilitar el túnel por el puerto 8888 debo hacer esto:
1 |
$ ssh -f -N -L 8888:host.com:80 usuario@mi.servidor.remoto.com |
La opción -f, hace que el cliente SSH sea ejecutado en background y la opción -N, indica que no debe abrirse un Shell o ejecutar un programa en el servidor remoto. Si abres un navegador web y lo apuntas a la dirección http://127.0.0.1:8888 podrás ver el contenido de host.com en el puerto 80. Para host.com es como si estuvieras visitándolo desde mi.servidor.remoto.com.
Debido que en el ejemplo anterior la conexión fue enviada a ejecutarse en background, para terminarla debes encontrar su PID. Esto puede hacerse localizando qué proceso tiene abierto el puerto 888:
1 2 |
$ ps aux | grep 8888 -v grep 1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:host.com:80 usuario@mi.servidor.remoto.com |
Donde el PID es el número de la segunda columna, en este caso 5965. Para terminar dicho proceso, ejecuta:
1 |
$ kill 5965 |
Otra opción es ejecutar la conexión sin la opción -f y terminar la conexión presionando “Ctrl+c”.
De forma general los túneles ssh locales se implementan de la siguiente forma:
1 |
$ ssh -L puerto_local:sitio_o_IP_a_acceder:puerto_del_sitio_a_acceder usuario@servidor_remoto |
Configurando un Túnel Remoto hacia un Servidor
Las conexiones SSH pueden ser empleadas para enviar, a través de túneles, tráfico desde puertos en una estación local hacia puertos en una estación remota. Esto es lo que se conoce como túneles ssh remotos.
En un túnel remoto, una conexión es hecha hacia una estación remota. Durante la creación del túnel, un puerto remoto es especificado. Este puerto, en la estación remota, será tunelizado hacia una combinación de estación y puerto que es conectada desde la computadora local. Esto permitirá a la computadora remota acceder a una estación a través de tu computadora local. Este tipo de túnel es útil si necesitas acceso a una red interna que no permite conexiones externas.
Para establecer un túnel remoto hacia tu servidor remoto, debes especificar la opción -R y además, los siguientes datos:
- El puerto al cual la estación remota puede acceder para establecer la conexión a través del túnel.
- La estación a la cual quieres que tu computadora local se conecte.
- El puerto al cual quieres que tu computadora local se conecte.
Estas opciones deben especificarse en orden y separadas por dos puntos. Por ejemplo, para conectarse a host.com en el puerto 80 en tu computadora local, haciendo la conexión disponible en tu estación remota en el puerto 8888 debes hacer esto:
1 |
$ ssh -f -N -R 8888:host.com:80 usuario@mi.servidor.remoto.com |
La opción -f, hace que el cliente SSH sea ejecutado en background y la opción -N, indica que no debe abrirse un Shell o ejecutar un programa en el servidor remoto. Si abres un navegador web en la estación remota y lo apuntas a la dirección http://127.0.0.1:8888 podrás ver el contenido de host.com en el puerto 80.
Debido a que en el ejemplo anterior la conexión fue enviada a ejecutarse en background, para terminarla debes encontrar su PID. Esto puede hacerse localizando qué proceso tiene el puerto 888 abierto:
1 2 |
$ ps aux | grep 8888 -v grep 1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:host.com:80 usuario@mi.servidor.remoto.com |
Donde el PID es el número de la segunda columna, en este caso 5965. Para terminar dicho proceso ejecuta:
1 |
$ kill 5965 |
Otra opción es ejecutar la conexión sin la opción -f y terminar la conexión presionando “Ctrl+c”.
De forma general los túneles ssh remotos se implementan de la siguiente forma:
1 |
$ ssh -R puerto_remoto:sitio_o_IP_a_acceder:puerto_del_sitio_a_acceder usuario@servidor_remoto |
Configurando un Túnel Dinámico hacia un Servidor Remoto
Un túnel dinámico es similar a un túnel local en que permite a una computadora local conectarse a otros recursos a través de una estación remota. Un túnel dinámico hace esto simplemente especificando un solo puerto local. Las aplicaciones que utilicen este mecanismo deben ser capaces de comunicarse usando el protocolo SOCKS para que los paquetes puedan ser correctamente redireccionados hacia la otra parte del túnel.
El tráfico que es pasado hacia el puerto local será enviado hacia la estación remota. Desde ahí, el protocolo SOCKS será interpretado para establecer una conexión con la ubicación final deseada. Esta configuración permite a las aplicaciones que soportan SOCKS conectarse a cualquier ubicación a través del servidor remoto, sin múltiples túneles estáticos.
Para establecer una conexión de túnel dinámico debes especificar la opción -D, así como el puerto local por el cual se tendrá acceso al túnel. Por ejemplo, para establecer un túnel dinámico en el puerto 7777:
1 |
$ ssh -f -N -D 7777 usuario@mi.servidor.remoto.com |
La opción -f, hace que el cliente SSH sea ejecutado en background y la opción -N, indica que no debe abrirse un Shell o ejecutar un programa en el servidor remoto.
Una vez activo el túnel dinámico puedes especificar en tu aplicación (como un navegador web) que use el puerto 7777. Recuerda que la aplicación debe soportar el protocolo SOCKS.
Debido a que, en el ejemplo anterior, la conexión fue enviada a ejecutarse en background para terminarla debes encontrar su PID. Esto puede hacerse localizando qué proceso tiene el puerto 888 abierto:
1 2 |
$ ps aux | grep 7777 -v grep 1001 5965 0.0 0.0 48168 1136 ? Ss 12:28 0:00 ssh -f -N -L 8888:host.com:80 usuario@mi.servidor.remoto.com |
Donde el PID es el número de la segunda columna, en este caso 5965. Para terminar dicho proceso, ejecuta:
1 |
$ kill 5965 |
Otra opción es ejecutar la conexión sin la opción -f y terminar la conexión presionando “Ctrl+c”.
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir