Cómo usar túneles SSH o reenvío de puertos

Cómo usar túneles SSH o reenvío de puertos
La creación de una conexión segura entre el host local y el host remoto se llama túnel SSH o reenvío de puertos. Todas las conexiones hechas por túneles SSH están encriptadas. Esta característica de SSH es útil para muchos fines, como la administración de la base de datos del servidor restringido de manera segura, implementando VPN básica (red privada virtual), utilizando diferentes servicios sin abrir puerto en el firewall, etc. El reenvío de puertos SSH se puede hacer de tres maneras diferentes. Estos son reenvío de puertos locales, reenvío de puertos remotos y reenvío de puertos dinámicos. Las formas de utilizar el túnel SSH o el reenvío de puertos se han explicado en este tutorial.

Requisitos previos

Antes de comenzar los pasos de este tutorial, se requerirán los siguientes pasos para completar.

A. Habilite el servicio SSH en Ubuntu si no está habilitado antes.

B. Genere los pares de teclas SSH para ejecutar los comandos en el servidor remoto. Ejecute el siguiente comando para crear la clave pública y la clave privada. La clave privada se almacenará en el servidor remoto, y las claves públicas se almacenarán en el cliente de forma segura.

$ ssh -keygen -t rsa

C. Ejecute el siguiente comando para abrir el sshd_config Archivo con el editor Nano para agregar algunas configuraciones necesarias.

$ sudo nano/etc/ssh/sshd_config

Agregue las siguientes líneas en el archivo para habilitar el inicio de sesión raíz y la autenticación basada en contraseña.

Contraseña Autenticación Sí
Permitrootlogin si

D. Ejecute el siguiente comando para reiniciar el servicio SSH.

$ sudo servicio ssh reiniciar

Reenvío de puertos locales

Se utiliza para reenviar un puerto desde la máquina cliente a un puerto de la máquina del servidor, y luego, que se reenviará a la máquina de destino. La máquina del cliente escucha en un puerto determinado y tuniza la conexión desde ese puerto al puerto particular de la máquina del servidor en este tipo de reenvío. Aquí, la máquina de destino puede ser cualquier servidor remoto u otra máquina. Este reenvío se utiliza principalmente en la red interna, como el servidor VNC (Virtual Network Computing).

Reenvío de puertos remotos

Lo opuesto al reenvío de puertos local es el reenvío de puertos remotos. Se utiliza para reenviar un puerto desde la máquina del servidor a un puerto de la máquina del cliente, y luego, que se reenviará a la máquina de destino. La máquina del servidor escucha en un puerto determinado y tuniza la conexión desde ese puerto al puerto particular de la máquina del cliente en este tipo de reenvío. Aquí, la máquina de destino puede ser cualquier máquina local u otra máquina.

Reenvío de puertos dinámico

Se utiliza para crear un socket en la máquina del cliente que funcionará como un servidor proxy de calcetines, y cuando un cliente se conecta al puerto, la conexión se reenviará a la máquina del servidor. A continuación, se reenviará al puerto dinámico de la máquina de destino. Las aplicaciones que utilizan el proxy de calcetines se conectarán a la máquina del servidor que reenviarán los tráficos a la máquina de destino.

Ejemplos de túneles SSH o reenvío de puertos

Los ejemplos de túneles y reenvío de puertos SSH se han mostrado aquí utilizando dos cuentas de servidor local. Puede seguir el mismo proceso para el servidor remoto. Aquí, el nombre de usuario de la máquina del servidor es 'fahmida', y el nombre de usuario de la máquina del cliente es 'Yasmin. Tres tipos de reenvío de puertos SSH se han mostrado aquí por tres ejemplos.

A. Acceder a recursos remotos desde la máquina del cliente
Se puede acceder a los recursos de la máquina remota desde la máquina del cliente utilizando el reenvío de puertos locales. Normalmente se conectará al servidor SSH, pero en este caso, debe usar la opción -l con el comando SSH definiendo el puerto local, la dirección remota y el puerto remoto. La sintaxis del reenvío del puerto local se da a continuación.

ssh -l local_port: remoto_address: remio_port [email protected]

Supongamos que el número de puerto local es 8080, La dirección IP del servidor remoto es 10.0.2.15, y el número de puerto remoto es 80. Ejecute el siguiente comando para conectarse con la máquina del servidor mediante reenvío de puertos locales. Aquí, el nombre de host de la máquina remota es 'Fahmida.comunicarse.bd.'

$ ssh -l 8080: 10.0.2.15:80 [email protected]

Después de conectarse con la máquina remota, el usuario de la máquina cliente podrá acceder a cualquier contenido de la máquina remota que se haya mostrado aquí. Un archivo de texto llamado registro.TXT existe en la máquina remota. Ahora, ejecute el siguiente comando desde la máquina del cliente para leer el contenido del archivo después de iniciar sesión en la máquina remota.

$ Cat Log.TXT

Ejecute los siguientes comandos para iniciar sesión desde la máquina remota.

$ Salida

La siguiente salida similar aparecerá después de ejecutar los comandos anteriores. La salida muestra el contenido del archivo de texto desde la máquina remota y la siguiente sesión de la máquina remota.

B. Acceder a los recursos locales desde la máquina del servidor
Se puede acceder a los recursos de la máquina local desde la máquina del servidor utilizando el reenvío de puertos remotos. Normalmente se conectará al servidor SSH, pero en este caso, debe usar la opción -r con el comando SSH definiendo el puerto remoto, la dirección local y el puerto local. La sintaxis del reenvío de puerto remoto se da a continuación.

SSH -R Remote_port: local_address: local_port [email protected]

Supongamos que el número de puerto remoto es 22, el nombre de host del servidor local es hostil, y el número de puerto local es 2345. Ejecute el siguiente comando para conectarse con la máquina del servidor mediante reenvío de puertos remotos. Aquí, el nombre de host de la máquina remota es 'Fahmida.comunicarse.bd.'

$ ssh -r 22: localhost: 2345 [email protected]

Después de conectarse con la máquina remota, el usuario de la máquina remota accederá a cualquier contenido de la máquina remota que se muestra aquí. Un archivo de texto llamado productos.TXT existe en el directorio de inicio de la máquina del cliente. Ahora, ejecute el siguiente comando después de conectarse con la máquina remota para leer el contenido del archivo local.

$ Cat/Home/Yesmin/Products.TXT
Ejecute los siguientes comandos para iniciar sesión desde la máquina remota.
[cc lang = "text" width = "100%" height = "100%" escapado = "true" thema = "Blackboard" Nowrap = "0"]
$ Salida

La siguiente salida similar aparecerá después de ejecutar los comandos anteriores. La salida muestra el contenido del archivo de texto desde la máquina del cliente y la siguiente sesión de la máquina remota.

C. Uso del servidor SSH como servidor proxy
El reenvío de puertos dinámicos se utiliza principalmente para acceder a la aplicación particular de la red interna utilizando un proxy de calcetines. La opción -d se usa con el comando ssh para el reenvío de puertos dinámicos. La sintaxis del reenvío de puerto dinámico se da a continuación.

ssh -d local_port [email protected]

Supongamos que el número de puerto local es 5050. Ejecute el siguiente comando para abrir un proxy de calcetines en el puerto 5050. Ahora, el usuario puede configurar cualquier navegador o aplicación para usar la dirección IP local y el puerto 5050 para redirigir todo el tráfico a través del túnel.

$ ssh -d 5050 [email protected]

Conclusión

Se han descrito tres formas diferentes de reenvío de puertos SSH en este tutorial para ayudar a los lectores a comprender el concepto de túnel SSH o reenvío de puertos.