GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar el túnel SSH inverso en Linux

Reverse SSH es una técnica que se puede usar para acceder a sistemas (que están detrás de un firewall) desde el mundo exterior.

Como ya sabe, SSH es un protocolo de red que admite la comunicación criptográfica entre los nodos de la red. Con este protocolo, puede realizar un inicio de sesión remoto seguro, una copia segura desde/hacia una máquina remota, etc.

Por lo general, hará lo siguiente para conectarse a un servidor remoto de forma segura mediante el comando ssh.

$ ssh [your-account-login]@[server-ip]

¿Qué es SSH inverso?

SSH es una herramienta muy buena para acceder a máquinas o servidores remotos de forma segura. Pero el problema surge cuando intenta conectarse a un servidor remoto que está detrás de un firewall y este firewall niega cualquier conexión entrante o solicitud de transferencia de datos que no tenga una solicitud saliente anterior. Esto significa que solo se permitirían aquellas conexiones iniciadas por la máquina del servidor remoto. Este es un problema real para aquellos que desean acceder a esta máquina servidor de forma remota.

Reverse SSH proporciona una técnica a través de la cual puede simular un SSH normal en esta máquina de servidor remoto.

El principal problema es que el firewall está rechazando la conexión ssh que su máquina está tratando de establecer con la máquina del servidor remoto. Pero sabe que el mismo firewall no tendrá ningún problema con las conexiones que se originan en la máquina del servidor. Entonces, ¿por qué no pedirle a alguien que esté detrás del firewall que haga algo con lo que pueda lograr su objetivo de acceder de forma remota al servidor? Para hacer esto tenemos que usar la opción ssh -R.

Esta es la descripción de la opción ssh -R de la página man:

-R [bind_address:]puerto:host:hostport

Especifica que el puerto dado en el host remoto (servidor) se reenviará al host y puerto dados en el lado local. Esto funciona mediante la asignación de un socket para escuchar el puerto en el lado remoto, y cada vez que se realiza una conexión a este puerto, la conexión se reenvía a través del canal seguro y se realiza una conexión al puerto de host hostport desde la máquina local.

Entonces puede usar el comando ssh, con la opción -R, (desde el servidor en nuestro caso) para conectarse a su máquina, asignar un puerto allí y asegurarse de que cualquier solicitud de conexión en ese puerto se reenvíe al puerto ssh del servidor remoto. /P>

En lugar de que su máquina haga un ssh, la máquina del servidor hace un ssh y, a través del reenvío de puertos, se asegura de que pueda volver a la máquina del servidor.

¿Cómo crear un túnel SSH inverso?

Aquí está el comando que su amigo sentado en el lado del servidor remoto debe ejecutar en el servidor:

ssh -fN -R 7000:localhost:22 username@yourMachine-ipaddress

Por lo tanto, esta solicitud de conexión ssh que se origina desde el servidor remoto a su máquina se asegurará de que cualquier solicitud de conexión ssh para el puerto 7000 en su máquina se reenvíe al puerto 22 del servidor remoto.

Ahora haga una solicitud de conexión ssh desde su máquina a su propia máquina en el puerto 7000:

ssh username@localhost -p 7000

Aquí, aunque puede parecer que está haciendo ssh en el host local, su solicitud se reenviará al host remoto. Por lo tanto, debe usar su cuenta 'nombre de usuario' en el servidor remoto y cuando se le solicite la contraseña, ingrese la contraseña correspondiente.

Esto debería aclarar la mayoría de los aspectos relacionados con la técnica de ssh inverso. Pero, hay una trampa. El problema es que primero debe pedirle a un amigo suyo, que está sentado detrás del firewall, que cree una conexión ssh. Esto no es factible siempre.

Para superar este problema, lo que puede hacer es configurar una máquina que está fuera del firewall (como la suya) de manera que siempre esté encendida. Llamemos a esta máquina como machine_z.

El beneficio de machine_z es que una vez puede hacer esta configuración inversa de ssh y dejarlo así. En cualquier momento, cuando necesite iniciar sesión en la máquina remota, puede acceder a machine_z en un puerto específico (como se muestra anteriormente) y su solicitud de conexión se reenviará a la máquina del servidor remoto y Voila, ejecutará comandos en el control remoto. servidor.

En una nota relacionada, también puede configurar SSH sin contraseña para conectarse a otro servidor sin ingresar la contraseña.

Algunas configuraciones que necesita configurar en machine_z incluirían:

  • Asegúrese de que los parámetros TCPKeepAlive, ClientAliveInterval, ClientAliveCountMax y GatewayPorts estén configurados en los valores adecuados. Estos parámetros se encuentran en el archivo /etc/sshd_config o /etc/ssh/sshd_config
  • Si realiza algunos cambios en los parámetros anteriores, debe reiniciar el demonio sshd para reflejar los cambios.
  • Además, asegúrese de ejecutar el primer comando ssh (que se ejecuta desde el servidor remoto a machine_z) usando el comando nohup para que esta sesión ssh sea inmune a los bloqueos que pueden ocurrir cuando un usuario cierra la sesión.

Linux
  1. Configurar Apache Traffic Server como proxy inverso en Linux

  2. Cómo usar SSH en Linux desde Android

  3. Cómo configurar SSH sin contraseña en Linux

  4. Cómo configurar el inicio de sesión SSH sin contraseña en Linux

  5. Cómo SCP desde un servidor Linux a un cliente Windows

Cómo configurar el servidor de respaldo usando Rsnapshot en Linux

Cómo configurar el servidor de transmisión de medios usando Jellyfin en Linux

Cómo configurar la autenticación multifactor para SSH en Linux

Ssh:¿cómo funciona el túnel Ssh inverso?

Cómo SSH en su servidor Linux desde Windows

Cómo SSH al servidor a través de Linux