Androide

Cómo configurar el túnel ssh (reenvío de puertos)

Mysql: Tunelizando la conexión por medio de SSH

Mysql: Tunelizando la conexión por medio de SSH

Tabla de contenido:

Anonim

El túnel SSH o el reenvío de puertos SSH es un método para crear una conexión SSH encriptada entre un cliente y una máquina servidor a través de la cual se pueden retransmitir los puertos de servicios.

El reenvío de SSH es útil para transportar datos de red de servicios que utilizan un protocolo no encriptado, como VNC o FTP, para acceder a contenido geo-restringido o evitar firewalls intermedios. Básicamente, puede reenviar cualquier puerto TCP y hacer un túnel del tráfico a través de una conexión SSH segura.

Hay tres tipos de reenvío de puertos SSH:

  • Reenvío de puertos locales. - Reenvía una conexión desde el host del cliente al host del servidor SSH y luego al puerto del host de destino. Reenvío de puerto remoto. - Reenvía un puerto desde el host del servidor al host del cliente y luego al puerto del host de destino. Reenvío de puerto dinámico. - Crea un servidor proxy SOCKS que permite la comunicación a través de una variedad de puertos.

, hablaremos sobre cómo configurar túneles SSH cifrados locales, remotos y dinámicos.

Reenvío de puerto local

El reenvío de puerto local le permite reenviar un puerto en la máquina local (cliente ssh) a un puerto en la máquina remota (servidor ssh), que luego se reenvía a un puerto en la máquina de destino.

En este tipo de reenvío, el cliente SSH escucha en un puerto determinado y hace un túnel de cualquier conexión a ese puerto al puerto especificado en el servidor SSH remoto, que luego se conecta a un puerto en la máquina de destino. La máquina de destino puede ser el servidor SSH remoto o cualquier otra máquina.

El reenvío de puertos locales se usa principalmente para conectarse a un servicio remoto en una red interna, como una base de datos o un servidor VNC.

En Linux, macOS y otros sistemas Unix para crear un reenvío de puerto local pasan la opción -L al cliente ssh :

ssh -L LOCAL_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER

Las opciones utilizadas son las siguientes:

  • LOCAL_PORT : la IP de la máquina local y el número de puerto. Cuando se omite LOCAL_IP el cliente ssh se une a localhost. DESTINATION:DESTINATION_PORT : la IP o el nombre de host y el puerto de la máquina de destino. SERVER_IP : el usuario SSH remoto y la dirección IP del servidor.

Puede usar cualquier número de puerto mayor que 1024 como LOCAL_PORT . Los números de puertos inferiores a 1024 son puertos privilegiados y solo pueden ser utilizados por root. Si su servidor SSH está escuchando en un puerto que no sea el 22 (el predeterminado) use la opción -p .

El nombre de host de destino debe poder resolverse desde el servidor SSH.

Supongamos que tiene un servidor de base de datos MySQL que se ejecuta en la máquina db001.host en una red interna (privada), en el puerto 3306 al que se puede acceder desde la máquina pub001.host y desea conectarse utilizando su cliente local mysql máquina al servidor de la base de datos. Para hacerlo, puede reenviar la conexión de esta manera:

ssh -L 3336:db001.host:3306 [email protected]

Una vez que ejecute el comando, se le pedirá que ingrese la contraseña de usuario SSH remota. Después de ingresarlo, iniciará sesión en el servidor remoto y se establecerá el túnel SSH. Es una buena idea configurar una autenticación basada en clave SSH y conectarse al servidor sin ingresar una contraseña.

Ahora, si señala su cliente de base de datos de máquina local a 127.0.0.1:3336 , la conexión se reenviará al servidor MySQL db001.host:3306 través de la máquina pub001.host que actuará como un servidor intermedio.

Puede reenviar múltiples puertos a múltiples destinos en un solo comando ssh. Por ejemplo, tiene otro servidor de base de datos MySQL que se ejecuta en la máquina db002.host y desea conectarse a ambos servidores desde su cliente local que ejecutaría:

ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]

Para conectarse al segundo servidor, usaría 127.0.0.1:3337 .

Cuando el host de destino es el mismo que el servidor SSH, en lugar de especificar la IP del host de destino o el nombre de host, puede usar localhost .

Supongamos que necesita conectarse a una máquina remota a través de VNC que se ejecuta en el mismo servidor y no es accesible desde el exterior. El comando que usarías es:

ssh -L 5901:127.0.0.1:5901 -N -f [email protected]

La opción -f le dice al comando ssh que se ejecute en segundo plano y que -N no ejecute un comando remoto. Estamos usando localhost porque el VNC y el servidor SSH se están ejecutando en el mismo host.

Reenvío de puerto remoto

El reenvío de puerto remoto es lo opuesto al reenvío de puerto local. Le permite reenviar un puerto en la máquina remota (servidor ssh) a un puerto en la máquina local (cliente ssh), que luego se reenvía a un puerto en la máquina de destino.

En este tipo de reenvío, el servidor SSH escucha en un puerto determinado y canaliza cualquier conexión a ese puerto al puerto especificado en el cliente SSH local, que luego se conecta a un puerto en la máquina de destino. La máquina de destino puede ser la máquina local o cualquier otra.

En Linux, macOS y otros sistemas Unix para crear un reenvío de puerto remoto pasan la opción -R al cliente ssh :

ssh -R REMOTE_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER

Las opciones utilizadas son las siguientes:

  • REMOTE_PORT : la IP y el número de puerto en el servidor SSH remoto. Un REMOTE vacío significa que el servidor SSH remoto se enlazará en todas las interfaces. DESTINATION:DESTINATION_PORT : la IP o el nombre de host y el puerto de la máquina de destino. SERVER_IP : el usuario SSH remoto y la dirección IP del servidor.

El reenvío de puertos locales se usa principalmente para dar acceso a un servicio interno a alguien desde el exterior.

Supongamos que está desarrollando una aplicación web en su máquina local y desea mostrar una vista previa a su compañero desarrollador. No tiene una IP pública, por lo que el otro desarrollador no puede acceder a la aplicación a través de Internet.

ssh -L 8080:127.0.0.1:3000 -N -f [email protected]

El comando anterior hará que el servidor ssh escuche en el puerto 8080 y canalice todo el tráfico desde este puerto a su máquina local en el puerto 3000 .

Ahora su compañero desarrollador puede escribir the_ssh_server_ip:8080 en su navegador y obtener una vista previa de su increíble aplicación.

Reenvío de puerto dinámico

El reenvío dinámico de puertos le permite crear un socket en la máquina local (cliente ssh) que actúa como un servidor proxy SOCKS. Cuando un cliente se conecta a este puerto, la conexión se reenvía a la máquina remota (servidor ssh), que luego se reenvía a un puerto dinámico en la máquina de destino.

De esta manera, todas las aplicaciones que usan el proxy SOCKS se conectarán al servidor SSH y el servidor reenviará todo el tráfico a su destino real.

En Linux, macOS y otros sistemas Unix para crear un reenvío de puerto dinámico (SOCKS) pasan la opción -D al cliente ssh :

ssh -D LOCAL_PORT SSH_SERVER

Las opciones utilizadas son las siguientes:

  • LOCAL_PORT : la IP de la máquina local y el número de puerto. Cuando se omite LOCAL_IP el cliente ssh se une a localhost. SERVER_IP : el usuario SSH remoto y la dirección IP del servidor.

Un ejemplo típico de un reenvío de puerto dinámico es hacer un túnel del tráfico del navegador web a través de un servidor SSH.

El siguiente comando creará un túnel SOCKS en el puerto 9090 :

ssh -D 9090 -N -f [email protected]

Una vez que se establece el túnel, puede configurar su aplicación para usarlo. Este artículo explica cómo configurar Firefox y el navegador Google Chrome para usar el proxy SOCKS.

El reenvío de puertos debe configurarse por separado para cada aplicación que desee tunelizar el tráfico.

Configurar el túnel SSH en Windows

Los usuarios de Windows pueden crear túneles SSH utilizando el cliente PuTTY SSH. Puedes descargar PuTTY aquí.

  1. Inicie Putty e ingrese la dirección IP del servidor SSH en el campo Host name (or IP address) del Host name (or IP address) .

    Aparecerá una nueva ventana pidiéndole su nombre de usuario y contraseña. Una vez que ingrese su nombre de usuario y contraseña, iniciará sesión en su servidor y se iniciará el túnel SSH.

    La configuración de la autenticación de clave pública le permitirá conectarse a su servidor sin ingresar una contraseña.

Conclusión

Le hemos mostrado cómo configurar túneles SSH y reenviar el tráfico a través de una conexión SSH segura. Para facilitar su uso, puede definir el túnel SSH en su archivo de configuración SSH o crear un alias Bash que configurará el túnel SSH.

seguridad ssh