Cómo usar el túnel SSH inverso para permitir conexiones externas a su PC

Cómo usar el túnel SSH inverso para permitir conexiones externas a su PC

Si tiene la suerte de que su proveedor de servicios de Internet (ISP) le proporcione una dirección IP dedicada, puede configurar un servidor doméstico y ponerlo a disposición de Internet agregando algunas reglas de reenvío de puertos a su enrutador. Pero si su ISP le hace compartir esa IP con sus vecinos, entonces el reenvío de puertos no ayudará. Otros proveedores simplemente bloquean las conexiones entrantes a través de reglas de firewall.

Puede eludir todas estas restricciones con la ayuda de un servidor privado virtual. Cualquier cosa funcionará, incluso si tiene menos de 512 MB de RAM, ya que todo lo que tiene que hacer es redirigir el tráfico de la red. Esto es muy ligero en CPU y RAM. El servidor recibirá conexiones entrantes y las redirigirá a su computadora a través de lo que se llama un «túnel SSH inverso». De esta manera, puede configurar cualquier tipo de servidor doméstico, con costos mensuales muy bajos.

Imagine que crea un servidor NextCloud para cargar/sincronizar sus archivos. Obtiene la privacidad de tener esos archivos en su servidor doméstico y luego puede comprar un disco duro de 6 TB para obtener todo el espacio que necesita. Solo tiene que pagar una factura de electricidad mensual y menos de $ 5 / mes por un servidor privado virtual. Eso es mucho más barato que la factura mensual de un servidor con 6 TB de espacio.

Nota: Esto solo funciona para redirigir el tráfico de red TCP. TCP es utilizado por cosas como servidores web (puerto 80/tcp). UDP es utilizado por algunos servidores de juegos (no todos), por ejemplo, Counter Strike (puerto 27015/UDP). La tunelización UDP es posible, pero con algunos «trucos», que pueden ser el tema de un tutorial futuro.

Windows 10 ahora tiene un cliente SSH incorporado

Ya no es necesario usar PuTTY para iniciar conexiones SSH. De hecho, para este tutorial usará este cliente integrado para configurar el túnel. Lea el tutorial sobre el cliente OpenSSH de Windows 10 si aún no está familiarizado con él.

Preparar servidor privado virtual para conexiones de túnel

Crea un Servidor Privado Virtual con tu proveedor favorito, como océano digital, Linodo, Vultr, o cualquier otra cosa que prefieras. Lo más importante es elegir una ubicación de servidor que esté lo más cerca posible de usted para minimizar la latencia de la red. Intente configurar el servidor de tal manera que pueda iniciar sesión en la cuenta raíz directamente, preferiblemente con una clave SSH, ya que es más seguro. Esto es necesario si desea que el servidor escuche las conexiones que llegan a los puertos por debajo de 1024, los llamados puertos privilegiados.

Abra el símbolo del sistema (o una terminal si está en Linux) e inicie sesión en el servidor a través de SSH.

Edite la configuración del servidor OpenSSH:

nano /etc/ssh/sshd_config

Si no inició sesión como root sino como usuario normal, deberá usar este comando; de lo contrario, no podrá guardar el archivo:

sudo nano /etc/ssh/sshd_config

Desplácese hacia abajo hasta que encuentre una variable llamada «GatewayPorts». La línea puede verse así: #GatewayPorts no. Elimine el «#» anterior (para descomentar) y cambie la línea a GatewayPorts yes.

ssh-reverse-gateway-puertos-habilitar

Si no puede encontrar la línea, simplemente desplácese hacia abajo hasta el final y agregue la línea usted mismo:

Presione Ctrl + X, luego presione y, y finalmente Enter para guardar el archivo.

Vuelva a cargar el demonio SSH para que se adapte a la nueva configuración.

systemctl reload ssh.service

Salga de la sesión SSH.

Cómo configurar un túnel SSH inverso

Los parámetros de comando son los mismos en los sistemas operativos Linux, Windows e incluso BSD. La sintaxis general es:

ssh -R remote_port:host:localport your_username@IP-of-server
  • remote_port le dice al servidor que redirija las conexiones que le llegan en ese puerto.
  • host le dice al servidor a qué dirección IP se debe redirigir la conexión. 127.0.0.1 se utilizará aquí para redirigir a su propia computadora.
  • localport indica a qué puerto se deben redirigir los paquetes de datos. Aquí, debe poner el número de puerto en el que escucha su aplicación, instalada en su computadora local.

Por ejemplo, para reenviar todas las conexiones que vienen en el puerto 80 (al servidor) y enviarlas al puerto 8080 en su computadora local, el comando sería:

ssh -R 80:127.0.0.1:8080 root@203.0.113.1

Esto supone que tiene un servidor web, como Apache o Nginx, que escucha en el puerto 8080 en su máquina local. Pero si Apache/Nginx está escuchando en el puerto 80 predeterminado, entonces no hay problema en usar el mismo puerto dos veces en el comando anterior (ya que se refieren al puerto 80 en un servidor diferente).

ssh -R 80:127.0.0.1:80 root@203.0.113.1

En este punto, si alguien ingresa la dirección IP de su servidor privado virtual en la barra de direcciones de un navegador, su computadora local redirigirá y atenderá su conexión.

ssh-reverse-testing-tunnel

En la imagen de arriba, un servidor web sencillo para Chrome se utilizó que escucha en el puerto 8887 de forma predeterminada. Puede probar esta configuración usted mismo instalando la aplicación y luego usando el comando, como en la imagen.

Vale la pena mencionar que para mantener activo el túnel, su sesión SSH debe permanecer activa. Para cerrar el túnel, escriba exit en la ventana del símbolo del sistema/terminal.

Conclusión

Como puede ver, no es difícil crear un túnel SSH inverso, pero proteger un sitio web sí lo es. Entonces, si elige implementar una idea como un servidor NextCloud local, aíslelo al menos en una máquina virtual. De esta manera, si su sitio web se ve comprometido, al menos el resto de su sistema operativo no sufrirá daños.

Y, ya sabes… ¡siempre haz una copia de seguridad de lo que no quieras arriesgarte a perder!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas