Administración del servidor

Redireccionamiento de puertos SSH (enrutamiento) en Linux

En este tutorial, cubriremos el redireccionamiento de los puertos SSH en Linux. Esto es una función de la utilidad SSH que los administradores de Linux utilizan para crear relés encriptados y seguros a través de diferentes sistemas.

Puedes utilizar los redireccionamientos de los puertos SSH (SSH enrutamiento) para crear una conexión segura entre dos o más sistemas. Las aplicaciones pueden entonces utilizar esos túneles para transmitir datos.

Tus datos son tan seguros como su encriptación, es por esto que el redireccionamiento de los puertos SSH es un mecanismo popular para utilizar. Continúa leyendo para averiguar más y ver como configurar el redireccionamiento de los puertos SSH de tus propios sistemas.

 

 

¿Qué es el redireccionamiento de los puertos SSH?

Para simplificarlo, el redireccionamiento de los puertos SSH involucra establecer un túnel SSH entre dos o más sistemas y entonces configurar el Sistema para transmitir a un tipo específico de tráfico a través de esa conexión.

Existen algunas pocas cosas que puedes hacer con esto: redireccionamiento local, redireccionamiento remoto, y redireccionamiento dinámico de puertos. Cada configuración requiere sus propios pasos para configurarse, por lo que repasaremos cada uno de ellos más adelante en este tutorial.

Redireccionamiento Local de Puertos es utilizado para hacer disponible a un recurso externo en la red local. Un túnel SSH es establecido en un Sistema remoto, y el tráfico de la red local puede utilizar ese túnel para transmitir los datos de un lado a otro, accediendo al sistema remoto y a la res como si fuera parte de la red local.

El Redireccionamiento Remoto de Puertos es el exacto opuesto. Un túnel SSH es establecido, pero el sistema remoto es capaz de acceder a tu red local.

El redireccionamiento dinámico de puertos establece un servidor proxy SOCKS. Puedes configurar aplicaciones para conectar el proxy y transmitir todos los datos a través de él. El uso más común de esto es para búsquedas web privadas o para hacer que tu propia conexión pareciera que se originó en un país o una localidad diferente.

Puedes utilizar el redireccionamiento de Puerto SSH para configurar una red privada virtual (VPN). Necesitaras un programa extra para este Puente. Cubriremos este detalle más Adelante en este tutorial.

¿Por que utilizar el redireccionamiento de puertos SSH?

Debido a que el SSH crea conexiones encriptadas, es una solución ideal si tienes aplicaciones que transmiten datos de texto plano o utiliza un protocolo sin encriptar. Esto es completamente cierto para las aplicaciones heredadas.

También es popular utilizarlo para conectarse a una red local desde afuera- por ejemplo, un empleado utilizando un túnel SSH para conectarse al intranet de una compañía.

Puedes pensar que se parece a una VPN. Las dos son muy similares, pero la creación de túneles SSH es para tráfico especifico, mientras que las VPN, son más para establecer conexiones generales.

Los redireccionamientos de puertos SSH te permitirán acceder a los recursos remotos solo con establecer un túnel SSH. El único requerimiento es que tengas acceso SSH al Sistema remoto, e idealmente, la autenticación de clave publica configurada para SSH sin contraseñas.

¿Cuántas sesiones son posibles?e?

Técnicamente, puedes especificar tantas sesiones de redireccionamiento de puertos como desees. Las redes utilizan 65535 puertos diferentes, y tú eres capaz de redireccionar cualquiera de ellos que desees.

Cuando estés redireccionando el tráfico, se consciente de que usas ciertos puertos. Por ejemplo, el Puerto 80 está reservado para HTTP. Por lo que tu solo querrías redireccionar tráfico por el Puerto 80 si tu intención es redireccionar requerimientos web.

El Puerto que tú redirecciones en tu Sistema local no tiene que coincidir con el del servidor remoto. Por ejemplo, puedes redireccionar el Puerto 8080 en el servidor local al puerto 80 en el servidor remoto.

Si no te importa que Puerto estas utilizando en el Sistema local, selecciona uno entre, 2000 y 10000 ya que estos puertos son raramente utilizados. Los números pequeños esta típicamente reservados para ciertos protocolos.

Redireccionamiento Local

El redireccionamiento local involucre redireccionar un Puerto desde el sistema de un cliente al servidor. Te permite configurar un Puerto en tu propio sistema para que todas las conexiones a ese puerto se redirecciones a través del túnel SSH.

Utiliza el interruptor -L en tu comando SSH para especificar el redireccionamiento local. La sintaxis general del comando es como se muestra a continuación:

$ ssh -L local_port:remote_ip:remote_port [email protected]

Revisa el ejemplo de abajo:

$ ssh -L 80:example1.com:80 example2.com

Redireccionamiento Local

Este comando reenviaría todas las peticiones a example1.com a example2.com. Cualquier usuario de este sistema que abra un navegador de Internet e intente navegar a example1.com hará que, en segundo plano, su solicitud se envíe a example2.com en su lugar y se muestre un sitio web diferente.

Ese comando es útil cuando se configura el acceso externo a la intranet de una empresa o a otros recursos de la red privada.

Probar el redireccionamiento de puertos SSH

Para ver si tu redireccionamiento de puertos está trabajando correctamente, puedes utilizar el comando netcat. En la máquina del cliente (el Sistema donde corriste el comando SSH-L), tipea el comando netcat con esta sintaxis:

$ nc -v remote_ip port_number

Probar el redireccionamiento de puertos SSH

Si el Puerto es redireccionado y los datos son capaces de atravesar la conexión exitosamente, Netcat retornara un mensaje de éxito, y so no funciona, la conexión expirara.

Si estas teniendo problemas hacienda funcionar el redireccionamiento del Puerto, asegúrate de ser capaz de entrar (SSH) en el servidor remoto normalmente y que tienes configurados los puertos correctamente. También, verifica que la conexión no está siendo bloqueada por cortafuegos.

Túneles SSH Persistentes (Utilizando AutoSSH)

Autossh es una herramienta que puede ser utilizada para crear túneles SSH persistentes. El único prerrequisito es que necesitas tener una clave de autenticación publica configurada entre tus sistemas a menos que quieras que cada vez que la conexión muera y se restablezca se solicite una contraseña.

Autossh puede que no esté instalado por defecto en su Sistema, pero puedes instalarlo rápidamente utilizando apt, yum, o cualquier paquete administrador que tu distribuidor utiliza.

$ sudo apt-get install autossh

El comando autossh va a lucir prácticamente idéntico al comando SSH que corrimos anteriormente.

$ autossh -L 80:example1.com:80 example2.com

Túneles SSH Persistentes utilizando AutoSSH

Autossh se asegurará que los túneles sean reestablecidos automáticamente en caso de que se cierren debido a la inactividad, se reinicie remotamente la máquina, se pierda la conexión a la red, etc.

Redireccionamiento remoto

El redireccionamiento remoto es utilizado para dar a las maquinas acceso remoto a tu Sistema. Por ejemplo, si tú quieres un servicio en tu computadora local que sea accesible para un sistema (s) en la red privada de tu compañía, podrías configurar el redireccionamiento remoto para que logre este cometido.

Para configurar esto, emite un comando SSH con la siguiente sintaxis:

$ ssh -R remote_port:local_ip:local_port [email protected]

Si tienes un servidor local en tu computadora y te gustaría conceder acceso a él desde una red remota, tu podrías redireccionar el Puerto 8080 (Puerto alternativo común de http) en el Sistema remoto al Puerto 80 (Puerto http) en tu Sistema local.

$ ssh -R 8080:localhost:80 [email protected]

Redireccionamiento remoto

Redireccionamiento dinámico

El redireccionamiento dinámico SSH hará que el SSH actúe como un servidor SOCKS proxy. En lugar de redireccionar el tráfico a un puerto especifico (en la forma en que los redireccionamientos locales y remotos lo hacen), esto redireccionará el tráfico a través de un rango de puertos.

Si alguna vez ha utilizado un servidor proxy para visitar un sitio web bloqueado o ver un contenido restringido en la localidad (como ver cosas en Netflix que no está disponible en tu país); probablemente tu utilizas un servidor SOCKS.

También proporciona privacidad, ya que puedes encaminar tu tráfico a través de un servidor SOCKS con un redireccionamiento dinámico y prevenir que alguien espíe los archivos de registro para ver el tráfico en tu red (sitios web visitados, etc.).

Para configurar el redireccionamiento dinámico, utiliza el comando SSH con la siguiente sintaxis:

$ ssh -D local_port [email protected]

Por lo que, si queremos redireccionar tráfico desde el Puerto 1234 a nuestro servidor SSH:

$ ssh -D 1234 [email protected]

Una vez establecida esta conexión, puedes configurar aplicaciones para dirigir el tráfico a través de ella. Por ejemplo, en tu navegador web:

Socks proxy

Escriba la dirección de loopback (127.0.0.1) y el puerto que configuró para el reenvío dinámico de puertos, y todo el tráfico será reenviado a través del túnel SSH al host remoto (en nuestro ejemplo, el servidor SSH de likegeeks.com).

Redireccionamiento Múltiple

Para el redireccionamiento de puertos locales, si desea configurar más de un puerto para que sea reenviado a un host remoto, sólo tiene que especificar cada regla con un nuevo conmutador -L cada vez. La sintaxis del comando es así:

$ ssh -L local_port_1:remote_ip:remote_port_1 -L local_port_2:remote_ip:remote_port2 [email protected]

Por ejemplo, si desea redireccionar los puertos 8080 y 4430 a los puertos 192.168.1.1 80 y 443 (HTTP y HTTPS), respectivamente, usaría este comando:

$ ssh -L 8080:192.168.1.1:80 -L 4430:192.168.1.1:443 [email protected]

Para el redireccionamiento de puertos remotos, puede configurar más de un puerto para ser reenviado especificando cada nueva regla con el interruptor -R. La sintaxis del comando es así:

$ ssh -R remote_port1:local_ip:local_port1 remote_port2:local_ip:local_port2 [email protected]

 

Lista de puertos redireccionados

Puedes ver que túneles SSH están actualmente establecidos con el comando lsof.

$ lsof -i | egrep '\<ssh\>'

túneles SSH

En esta captura de pantalla, se puede ver que hay 3 túneles SSH establecidos. Añade la bandera -n para tener las direcciones IP listadas en lugar de resolver los nombres del servidor.

$ lsof -i -n | egrep '\<ssh\>'

túneles SSH n flag

Redireccionamiento Limitado

Por defecto, el redireccionamiento de puertos SSH está bastante abierto. Puedes crear libremente redireccionamientos de puerto locales, remotos y dinámicos a tu gusto.

Pero si no confías en algunos de los usuarios SSH de tu sistema, o simplemente quieres mejorar la seguridad en general, puedes poner algunas limitaciones en el reenvío de puertos SSH.

Hay un par de configuraciones diferentes que puedes configurar dentro del archivo sshd_config para poner limitaciones en el redireccionamiento de puertos. Para configurar este archivo, edítalo con vi, nano, o tu editor de texto favorito:

$ sudo vi /etc/ssh/sshd_config

PermitOpen puede utilizarse para especificar los destinos a los que se permite el redireccionamiento del puerto. Si sólo quiere permitir el redireccionamiento a ciertas direcciones IP o nombres de host, use esta directiva. La sintaxis es la siguiente:

PermitOpen host:port

PermitOpen IPv4_addr:port

PermitOpen [IPv6_addr]:port

AllowTCPForwarding puede utilizarse para activar o desactivar el redireccionamiento de puertos SSH o especificar qué tipo de redireccionamiento de puertos SSH está permitido. Las configuraciones posibles son:

AllowTCPForwarding yes #default setting

AllowTCPForwarding no #prevent all SSH port forwarding

AllowTCPForwarding local #allow only local SSH port forwarding

AllowTCPForwarding remote #allow only remote SSH port forwarding

Para ver más información sobre estas opciones, puedes revisar la página principal:

$ man sshd_config

 

Baja Latencia

El único problema real que surge con el reenvío de puertos SSH es que suele haber un poco de latencia. Probablemente no lo notes como un problema si estás haciendo algo menor, como acceder a archivos de texto o pequeñas bases de datos.

El problema se hace más evidente cuando se realizan actividades intensivas en la red, especialmente si tienes el reenvío de puertos configurado como servidor proxy  SOCKS.

La razón de la latencia es porque SSH está haciendo un túnel TCP sobre TCP. Esta es una forma terriblemente ineficiente de transferir datos y resultará en velocidades de red más lentas.

Podrías usar un VPN para prevenir el problema, pero si estás decidido a seguir con los túneles de SSH, hay un programa llamado sshuttle que corrige el problema. Las distribuciones basadas en Ubuntu y Debian pueden instalarlo con apt-ge:

$ sudo apt-get install sshuttle

Si el gestor de paquetes de tu distribución no tiene sshuttle en su repositorio, puedes clonarlo desde GitHub:

$ git clone https://github.com/sshuttle/sshuttle.git

$ cd sshuttle

$ ./setup.py install

La creación de un túnel con sshuttle es diferente del comando ssh normal. Para establecer un túnel que redireccione todo el tráfico (similar a una VPN):

$ sudo sshuttle -r [email protected]_ip -x remote_ip 0/0 -vv

comando sshuttle

Rompa la conexión con una combinación de teclas ctrl+c en la terminal. Alternativamente, para ejecutar el comando sshuttle como un demonio, agregue el interruptor -D a su comando.

¿Quieres asegurarte de que la conexión se ha establecido y que Internet te ve en la nueva dirección IP? Puedes ejecutar esto comando curl:

$ curl ipinfo.io

curl dirección IP

Espero que el tutorial le sea útil. Sigue viniendo.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

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