Cómo utilizar SSH Tunneling para acceder y navegar de forma segura en servidores restringidos

Un cliente SSH se conecta a un servidor Secure Shell, lo que le permite ejecutar comandos de terminal como si estuviera sentado frente a otra computadora. Sin embargo, un cliente SSH le permite «tunelizar» un puerto entre su sistema local y un servidor SSH remoto.

Hay tres tipos diferentes de túneles SSH y todos se utilizan para diferentes propósitos. Cada uno implica el uso de un servidor SSH para redirigir el tráfico de un puerto de red a otro. El tráfico se envía a través de la conexión SSH cifrada, por lo que no se puede monitorear ni alterar en tránsito.

Puedes hacer esto con ssh comando incluido en Linux, macOS y otros UNIX y sistemas operativos similares puede crear un archivo de configuración ssh para guardar su configuración. En Windows, que no incluye un comando ssh integrado, recomendamos la herramienta de forma gratuita en paz para conectarse a servidores SSH. También es compatible con el túnel SSH.

Direcciones de puertos locales: acceda a recursos remotos en su sistema local

La “dirección del puerto local” le permite acceder a los recursos de la red local que no están expuestos a Internet. Por ejemplo, probablemente desee acceder a un servidor de base de datos en su oficina en casa. Por razones de seguridad, este servidor de base de datos solo está configurado para aceptar conexiones desde la red de la oficina local. Pero si tiene acceso a un servidor SSH de oficina y ese servidor SSH permite conexiones fuera de la red de la oficina, entonces puede conectarse a ese servidor SSH doméstico y acceder al servidor de base de datos como si estuviera en la oficina. A menudo, esto se debe a que es más fácil proteger un solo servidor SSH contra ataques que acceder a una variedad de recursos de red diferentes.

Para hacer esto, establezca una conexión SSH al servidor SSH y dígale al cliente que redirija el tráfico desde un puerto específico en la computadora local, por ejemplo, el puerto 1234, a la dirección del servidor de la base de datos y su puerto en la red. Entonces, cuando intenta acceder al servidor de la base de datos desde el puerto 1234 en su computadora actual, «localhost», ese tráfico se «sintoniza» automáticamente a través de la conexión SSH y se envía al servidor de la base de datos. El servidor SSH está en el medio, redirigiendo el tráfico de un lado a otro. Puede utilizar cualquier línea de comando o herramienta gráfica para acceder al servidor de la base de datos como si se estuviera ejecutando en su computadora local.

Para usar direcciones locales, normalmente conéctese al servidor SSH, pero también proporcione -L argumento. La sintaxis es:

ssh -L local_port:remote_address:remote_port username@server.com

Por ejemplo, el servidor de la base de datos de su oficina probablemente esté ubicado en 192.168.1.111 en la red de la oficina. Tiene acceso al servidor SSH de la oficina en ssh.youroffice.com y su cuenta de usuario está en el servidor SSH bob . En este caso, su pedido se vería así:

ssh -L 8888:192.168.1.111:1234 bob@ssh.youroffice.com

Después de ejecutar este comando, podrá acceder al servidor de la base de datos en el puerto 8888 en localhost. Entonces, si el servidor de la base de datos proporciona acceso web, puede conectar http: // localhost: 8888 a su navegador web para acceder a él. Si tiene una herramienta de línea de comandos que requiere una dirección de red de base de datos, diríjala a localhost: 8888. Todo el tráfico enviado al puerto 8888 en su PC se sintonizará en 192.168.1.111:1234 en la red de su oficina.

Es un poco más confuso si desea conectarse a una aplicación de servidor que se ejecuta en el mismo sistema que el servidor SSH. Por ejemplo, probablemente tenga un servidor SSH ejecutándose en el puerto 22 de su computadora de escritorio, pero también tenga un servidor de base de datos ejecutándose en el puerto 1234 en el mismo sistema en la misma dirección. Desea acceder al servidor de base de datos doméstico, pero el sistema solo admite conexiones SSH en el puerto 22 y su firewall no permite otras conexiones externas.

En este caso, puede ejecutar un comando como este:

ssh -L 8888:localhost:1234 bob@ssh.youroffice.com

Cuando intenta acceder al servidor de la base de datos en el puerto 8888 en su computadora actual, el tráfico se envía a través de la conexión SSH. Una vez que llega al sistema que ejecuta el servidor SSH, el servidor SSH lo envía al puerto 1234 en «localhost», que es la misma computadora que ejecuta el servidor SSH. Entonces, «localhost» en el comando anterior significa «localhost» desde la perspectiva de un servidor remoto.

Para hacer esto en la aplicación PuTTY en Windows, seleccione Conectar> SSH> Túneles. Seleccione la opción «Local». Para «Puerto de origen», ingrese el puerto local. Para «Destino», ingrese la dirección de destino y el puerto con el formato dirección_remota: puerto_remoto.

Por ejemplo, si desea configurar el mismo túnel SSH que lo haría, debe ingresar 8888 como puerto de origen y localhost:1234 como destino. Luego haga clic en «Agregar», luego haga clic en «Abrir» para abrir la conexión SSH. Por supuesto, tendrá que ingresar la dirección y el puerto del servidor SSH en la pantalla principal de «Sesión» antes de iniciar sesión, por supuesto.

RELACIONADO: ¿Qué es el reenvío de agentes SSH y cómo se usa?

Reenvío de puerto remoto: acceda a los recursos locales en un sistema remoto

El «envío de puerto remoto» es una alternativa al reenvío local y se usa con menos frecuencia. Le permite colocar un recurso en su computadora local en el servidor SSH. Por ejemplo, probablemente esté ejecutando un servidor web en su computadora local. Pero su computadora está detrás de un firewall que no permite el tráfico al software del servidor.

Suponiendo que puede acceder a un servidor SSH remoto, puede conectarse a ese servidor SSH y usar la dirección remota del puerto. Su cliente SSH le dirá al servidor que redirija un puerto específico, por ejemplo, el puerto 1234, desde el servidor SSH a una dirección y puerto específicos en su computadora actual o red local. Cuando una persona accede al puerto 1234 en el servidor SSH, ese tráfico se «sintoniza» automáticamente a través de la conexión SSH. Cualquiera que tenga acceso al servidor SSH podrá acceder al servidor web que se ejecuta en su computadora. Esta es realmente una forma de atravesar los firewalls.

Para usar una dirección remota, use ssh ordenar con -R argumento. La sintaxis es básicamente la misma que la de la referencia local:

ssh -R remote_port:local_address:local_port username@server.com

Suponga que desea crear una aplicación de servidor que escuche en el puerto 1234 en la computadora local, que está disponible en el puerto 8888 en el servidor remoto SSH. La dirección del servidor es SSH ssh.youroffice.com y su nombre de usuario está en el servidor SSH grano. Ejecuta el siguiente comando:

ssh -R 8888:localhost:1234 bob@ssh.youroffice.com

Luego, alguien podría conectarse al servidor SSH en el puerto 8888 y esa conexión se conectará a la aplicación del servidor que ejecuta el puerto 1234 en la computadora local desde la que estableció la conexión.

Para hacer esto en PuTTY en Windows, seleccione Conectar> SSH> Túneles. Seleccione la opción «Remoto». Para «Puerto de origen», ingrese el puerto remoto. Para «Destino», ingrese la dirección de destino y el puerto como dirección_local: puerto_local.

Por ejemplo, si desea configurar el ejemplo anterior, debe ingresar 8888 como puerto de origen y localhost:1234 como destino. Luego haga clic en «Agregar», luego haga clic en «Abrir» para abrir la conexión SSH. Por supuesto, necesitará ingresar la dirección del servidor SSH y el puerto en la pantalla principal de «Sesión» antes de iniciar sesión.

Luego, las personas podrían conectarse al puerto 8888 en el servidor SSH y su tráfico se sintonizará en el puerto 1234 de su sistema local.

De forma predeterminada, el control remoto SSH solo escuchará las conexiones del mismo host. Es decir, solo las personas en el mismo sistema que el servidor SSH podrán conectarse. Esto es por razones de seguridad. Deberá habilitar la opción «GatewayPorts» en sshd_config en el servidor remoto SSH si desea reemplazar este comportamiento.

RELACIONADO: Cómo administrar el archivo de configuración SSH en Windows y Linux

Reenvío dinámico de puertos: utilice el servidor SSH como proxy

RELACIONADO: ¿Cuál es la diferencia entre una VPN y un proxy?

También hay «direcciones de puerto dinámicas», que funcionan de la misma manera que un proxy o una VPN. El cliente SSH creará un proxy SOCKS que puede configurar las aplicaciones para su uso. Todo el tráfico enviado a través del servidor proxy se enrutará a través del servidor SSH. Esto es como una dirección local: toma el tráfico local enviado a un puerto específico en su computadora y lo envía a través de la conexión SSH a una ubicación remota.

RELACIONADO: Por qué el uso de una red Wi-Fi pública puede ser peligroso, incluso al acceder a sitios web encriptados

Por ejemplo, probablemente esté utilizando una red Wi-Fi pública. Quiere navegar de forma segura sin tener que buscar. Si tiene acceso a un servidor SSH en casa, puede conectarse a él y usar direcciones de puerto dinámicas. El cliente SSH creará un proxy SOCKS en su computadora. Todo el tráfico enviado a ese servidor proxy se enrutará a través de la conexión al servidor SSH. Cualquiera que esté monitoreando la red Wi-Fi pública no podrá monitorear los sitios web de navegación o censura a los que puede acceder. Para cualquier sitio web que visite, es como sentarse en casa frente a su computadora. Esto también significa que solo puede usar este truco para acceder a sitios web en los EE. UU. Cuando se encuentra fuera de los EE. UU., Suponiendo que tenga acceso a un servidor SSH de EE. UU., Por supuesto.

Como otro ejemplo, es posible que desee acceder a la aplicación de su servidor de medios en su red doméstica. Por razones de seguridad, es posible que solo tenga un servidor SSH expuesto en Internet. No permita conexiones de Internet entrantes a su aplicación de servidor de medios. Puede configurar direcciones de puerto dinámicas, configurar un navegador web para usar el proxy SOCKS y luego acceder a los servidores que se ejecutan en su red doméstica a través del navegador web, como si estuviera sentado frente a la cooperación para los sistemas SSH domésticos. Por ejemplo, si su servidor de medios está en el puerto 192.168.1.123 en su red doméstica, puede conectar la dirección 192.168.1.123 en cualquier aplicación que utilice el proxy SOCKS y acceda al servidor de medios como si estuviera en su red doméstica.

Para usar direcciones dinámicas, ejecute el comando ssh con -D argumento, como este:

ssh -D local_port username@server.com

Por ejemplo, probablemente tenga acceso a un servidor SSH en ssh.yourhome.com y su nombre de usuario está en el servidor SSH bob . Desea utilizar lanzamientos dinámicos para abrir el proxy SOCKS en el puerto 8888 en su PC actual. Ejecuta el siguiente comando:

ssh -D 8888 bob@ssh.yourhome.com

Luego puede configurar un navegador web u otra aplicación para usar la dirección IP local (127.0.01) y el puerto 8888 .. Todo el tráfico de esa aplicación se redirigirá a través del túnel.

Para hacer esto en PuTTY en Windows, seleccione Conectar> SSH> Túneles. Seleccione la opción «Dinámico». Para «Puerto de origen», ingrese el puerto local.

Por ejemplo, si desea crear un proxy SOCKS en el puerto 8888, debe aplicar 8888 como puerto de origen. Luego haga clic en «Agregar», luego haga clic en «Abrir» para abrir la conexión SSH. Por supuesto, tendrá que ingresar la dirección y el puerto del servidor SSH en la pantalla principal de «Sesión» antes de iniciar sesión, por supuesto.

Luego, puede configurar una aplicación para acceder al proxy SOCKS en su computadora local (es decir, la dirección IP 127.0.0.1, que representa la computadora local) y especificar el puerto correcto.

RELACIONADO: Cómo configurar un proxy en Firefox

Por ejemplo, puede configurar Firefox para usar el proxy SOCKS. Esto es especialmente útil porque Firefox puede tener su propia configuración de proxy y no necesita utilizar la configuración de proxy a nivel del sistema. Firefox envía su tráfico a través del túnel SSH, mientras que otras aplicaciones suelen utilizar su conexión a Internet.

Cuando hagas esto en Firefox, selecciona «Configuración manual de proxy», ingresa «127.0.0.1» en el cuadro de host SOCKS e ingresa el puerto dinámico en el cuadro «Puerto». Deje en blanco los cuadros Proxy HTTP, Proxy SSL y Proxy FTP.

El túnel permanecerá activo y abierto mientras tenga abierta la conexión de sesión SSH. Cuando cierra sesión en SSH y cierra sesión en un servidor, el túnel también se cerrará. Vuelva a conectarse directamente al comando apropiado (o las opciones de PuTTY apropiadas) para volver a abrir el túnel.