El protocolo Secure Shell define un mecanismo para conectarse de forma segura a un host remoto. Originalmente, SSH estaba destinado a reemplazar a Telnet, la aplicación de Internet original para ejecutar sesiones de inicio de sesión remotas. Pero SSH se ha convertido en mucho más que una herramienta para la emulación de terminales, en gran parte porque proporciona los medios para enrutar de forma segura el tráfico de red a través de puertos y sistemas host definidos por el usuario. Estas conexiones se llaman túneles porque proporcionan una conexión a través de la cual se pueden transmitir datos de red seguros a través de una red no segura.

Un túnel SSH es una conexión segura entre un cliente SSH y un servidor SSH. El tráfico de red de la máquina local se enruta desde un puerto especificado arbitrario en el host local a través de la conexión SSH a un puerto específico en la máquina remota.

Para el caso de uso más básico, SSH se utiliza para iniciar una sesión de terminal con un servidor SSH remoto. Una vez realizada la conexión, el usuario puede emitir comandos remotos en ese servidor. Sin embargo, cuando la conexión segura utiliza el reenvío de puertos remoto, el túnel SSH proporciona un medio para atravesar redes privadas y los firewalls que las protegen.

Este tutorial muestra cómo utilizar túneles SSH para tres propósitos específicos:

Acceda a un recurso de Internet restringido desde dentro de un firewall mediante el reenvío de puertos SSH. Configure un servidor proxy SOCKS para la máquina local. Configure un túnel inverso SSH para evitar la protección del firewall y acceder a un servidor SSH dentro de una red privada.

SSH es una herramienta importante utilizada por profesionales de redes y seguridad de la información, así como por piratas informáticos y otros atacantes. Antes de experimentar con SSH en la red de una organización, asegúrese de consultar con el departamento de TI para determinar si se permiten los túneles SSH y asegurarse de que los experimentos no activen alarmas de ciberseguridad.

Preparándose para configurar un túnel SSH

Este tutorial se centra en el uso de la implementación OpenSSH del protocolo SSH en la interfaz de línea de comandos (CLI). Aunque existen implementaciones GUI de SSH, como PuTTY para Windows, los sistemas operativos modernos casi universalmente incluyen implementaciones CLI de SSH, incluido OpenSSH en las versiones de Windows 10 y posteriores, macOS y Linux.

Antes de intentar abrir un túnel SSH, siga los siguientes pasos:

Verifique que SSH esté instalado y ejecutándose en la máquina local, así como en el servidor SSH remoto. En sistemas Windows o sistemas basados ​​en Unix, esto se puede hacer abriendo una ventana de PowerShell (Windows) o una sesión de shell (sistemas basados ​​en Unix) e ingresando el ssh Sin ningún parámetro, el comando devuelve un mensaje que indica el uso correcto y los parámetros disponibles.

Además, verifique que el servidor SSH sshd se ejecuta en cualquier host que se vaya a utilizar para el acceso SSH. Si el anfitrión no tiene un demonio (programa de servidor) para que el servidor SSH se ejecute y escuche las solicitudes para abrir una conexión SSH, debe iniciarse antes de poder crear un túnel. Una forma de verificar esto es iniciar una conexión SSH con el servidor en cuestión. Si se acepta la conexión, entonces es seguro asumir que sshd está corriendo.

Este también es un buen momento para verificar que la cuenta de usuario que se utiliza en los servidores SSH tenga los permisos correctos. Como mínimo, la cuenta de usuario debe estar autorizada para emitir comandos de superusuario, utilizando el sudo comando, pero con limitaciones para evitar que la cuenta sea secuestrada y utilizada contra la organización.

Ejecutar el comando ssh para verificar que SSH esté instalado en el sistema Windows

Obtenga o verifique el nombre de host o la dirección IP del servidor remoto. La dirección IP del servidor siempre es suficiente, aunque tener el nombre de dominio puede facilitar la introducción de comandos SSH.

En los sistemas Windows, la dirección IP del sistema se puede determinar a través de la aplicación Configuración, en la opción Red e Internet, viendo las Propiedades de la interfaz de red que está actualmente conectada a Internet.

Los comandos para descubrir la dirección IP mediante la línea de comandos están disponibles para todos los sistemas operativos:

En sistemas Windows en la línea de comando, la dirección IP del sistema se puede determinar ingresando el comando PowerShell ipconfig que muestra la configuración de red, incluida la dirección IP, para todas las interfaces de red del sistema. En sistemas Linux, como los sistemas operativos basados ​​en Unix, que incluyen macOS, la dirección IP se puede determinar ingresando el comando Unix. ifconfig que muestra la configuración de red, incluida la dirección IP, para todas las interfaces de red del sistema. Encontrar la dirección IP de un host Linux usando la utilidad ifconfig Determine los números de puerto que se usarán para la redirección con el reenvío de puertos SSH. Para puertos asignados para uso con protocolos específicos, también conocidos como puertos conocidosconsulte el Registro de números de puerto de protocolo de transporte y nombres de servicio de la Autoridad de números asignados de Internet (IANA). Los puertos registrados en IANA más utilizados incluyen el puerto 80 (HTTP), 443 (HTTPS) y 22, que es el puerto predeterminado para usar SSH.

En general, se puede utilizar cualquier puerto no conocido, en el rango de 1024 a 65535, pero el puerto 1080 es el puerto registrado para SOCKS y se debe utilizar al configurar un túnel de reenvío de puertos dinámico que se utilizará como puerto. CALCETINES proxy.

Al configurar un túnel para el reenvío de puertos locales, por ejemplo, desde un servidor web en la red interna a un servidor externo, el puerto de origen y el puerto de destino podrían configurarse en 80 para transmisiones HTTP. Al configurar un túnel en un servidor local que se ejecuta como servidor SSH y servidor web, el puerto de entrada se puede configurar en 8080 para diferenciar el tráfico del túnel del tráfico web normal.

Revise el túnel planificado antes de la implementación y asegúrese de que todos los hosts involucrados sean accesibles desde los sistemas relevantes. Las cosas que se deben verificar antes de implementar el túnel incluyen lo siguiente: ¿Son accesibles los hosts? ¿Todos los hosts tienen instaladas versiones actualizadas e interoperables de SSH? ¿Los hosts que actúan como servidores SSH tienen instalado el software del servidor SSH? ¿Tiene el usuario permisos adecuados en los sistemas relevantes?

Una vez definidos los puntos finales del túnel, adoptar un enfoque paso a paso puede ayudar a simplificar la resolución de problemas, ya que cada componente del túnel se puede probar a medida que se enciende.

Inicialice el demonio SSH en cualquier sistema que actúe como servidor. Esto puede requerir una instalación por separado en algunos sistemas operativos. Para Windows (versión 10 y posteriores), el operador debe instalar e iniciar un ejecutable de servidor OpenSSH independiente mediante una línea de comando de PowerShell que se ejecuta con permisos de administrador. El siguiente comando se puede utilizar para inicializar un demonio de servidor OpenSSH instalado desde la línea de comandos de PowerShell:PS C:\Users\peter> Inicio-Servicio sshd El siguiente comando se puede utilizar en sistemas Ubuntu para iniciar el servidor OpenSSH:$ sudo servicio inicio ssh El sudo El comando requiere ingresar una contraseña autorizada para obtener acceso de superusuario para ejecutar el servicio del servidor.

Una vez que se establece la conectividad con todos los sistemas de terminales y se confirman los permisos de acceso a los programas SSH, la configuración del túnel suele ser sencilla. Sin embargo, algunas implementaciones de SSH pueden tener diferentes opciones disponibles. Para determinar qué versión de SSH está instalada en Windows, abra una ventana de PowerShell e ingrese el siguiente comando:

PS C:\Usuarios\ID de usuario> ssh -V

Verificación de la información de la versión de SSH en Windows PowerShell Para verificar la versión de SSH que se ejecuta en Linux, ingrese el siguiente comando:$ sudo servicio inicio ssh

Verificación de la información de la versión para SSH usando la opción -V en el shell de Linux

Cómo configurar un servidor proxy SOCKS

Una de las aplicaciones más prácticas de la tunelización SSH, un proxy SOCKS es un túnel que permite a un host dentro de una red privada, protegida por un firewall, acceder libremente a los recursos de la red en la Internet pública global. Los proxies SOCKS ofrecen una forma sencilla de proteger las comunicaciones de red sin una VPN.

Cuando se usa con SSH, SOCKS permite enrutar todo el tráfico de red desde el sistema local a través del túnel SSH seguro. Este tipo de túnel a veces se llama reenvío dinámico de puertos porque depende de la capacidad de SOCKS para dirigir el tráfico de red desde cualquier puerto del sistema local a cualquier puerto de cualquier sistema remoto.

Utilice el siguiente comando para iniciar un proxy SOCKS a través de un túnel SSH en un sistema Linux utilizando el servidor SSH servidor-ssh.ejemplo.com y cuenta de usuario pedro:

$ssh-D 1080 [email protected]

El -D La opción, para el reenvío dinámico de puertos de aplicaciones, habilita el reenvío de puertos SSH para todos los puertos, de entrada y de salida. En este ejemplo, el -D La opción identifica el puerto 1080 como el puerto en el host local que se utilizará para escuchar el tráfico del túnel. También permite que SSH administre la asignación de puertos de aplicaciones, de modo que cuando se establezcan conexiones a través del túnel, SSH funcione como un servidor proxy SOCKS. Cualquier aplicación de red que se tunelice a través del proxy SOCKS debe configurarse para comunicarse en este puerto, en lugar de en los puertos conocidos utilizados para la aplicación.

Configuración de un proxy SOCKS basado en SSH para el navegador Firefox

La configuración del proxy SOCKS en los navegadores web está bien documentada y se incluye en los ajustes de configuración del navegador, como se muestra en esta captura de pantalla. Otras aplicaciones pueden requerir cambios en un archivo de configuración para indicar al programa de aplicación que acceda al proxy. Alternativamente, los proxies SOCKS se pueden configurar a nivel del sistema operativo (por ejemplo, en la configuración de Windows) para que todas las aplicaciones de red utilicen el proxy.

El localhost sirve como proxy: acepta que el tráfico de red se tunelice en el puerto especificado (1080 para SOCKS) y el host SOCKS como localhost.

El comando enumerado anteriormente se puede refinar. Por ejemplo, el siguiente comando usa el mismo puerto, cuenta de usuario y host remoto pero agrega opciones:

$ ssh -D 1080 -C -N [email protected]

El -DO La opción permite la compresión para un mejor rendimiento en una red lenta, aunque, en redes rápidas, esta opción puede reducir el rendimiento.

El -NORTE La opción especifica que los comandos remotos no deben ejecutarse desde la sesión. Esto permite que un operador local inicie el reenvío de puertos sin permitir que se ejecute ningún comando en el servidor remoto.

Una vez que se abre el túnel de reenvío de puerto dinámico y la computadora local está configurada para usar un proxy SOCKS, el tráfico de red tunelizado se reenvía a la Internet pública a través del túnel.

Cómo configurar un túnel de reenvío de puertos SSH

El reenvío de puerto local permite al operador local evitar cualquier firewall o filtro para acceder a un servidor externo desde una red privada. Con el reenvío de puerto local, la máquina local no tener acceso directo a Internet y el servidor SSH, al que puede acceder directamente el sistema local, hace tener acceso a internet.

La conexión entre el sistema local y el servidor SSH se protege con autenticación al crear la sesión SSH, y los servidores SSH oficialmente designados utilizados para el reenvío de puertos generalmente se implementan con medidas de seguridad adicionales para una configuración de servidor reforzada.

El circuito SSH conecta el proceso SSH que se ejecuta en la computadora local con un proceso remoto. El proceso remoto es el servidor o recurso en el host externo, fuera de la red protegida. El software del cliente SSH escucha localmente los intentos de acceder al puerto asociado con el recurso remoto. Cuando el software del cliente SSH recibe datos en ese puerto, los reenvía a través del cifrado y…