El protocolo Secure Shell (SSH) establece conexiones remotas encriptadas entre los ordenadores. También habilita la tunelización.
Después de leer este artículo podrás:
Contenido relacionado
Suscríbete a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.
Copiar el enlace del artículo
El protocolo Secure Shell (SSH) es un método para enviar comandos de forma segura a un ordenador mediante una red no segura. SSH utiliza criptografía para autenticar y encriptar las conexiones entre dispositivos. SSH también permite la tunelización, o redireccionamiento de puertos, que es cuando los paquetes pueden cruzar las redes que de otro modo no podrían cruzar. SSH se utiliza a menudo para controlar los servidores a distancia, para gestionar infraestructuras y para transferir archivos.
Cuando viaja, el propietario de una tienda puede dar instrucciones a sus empleados desde lejos para asegurarse de que la tienda opere sin problemas mientras él no está. Del mismo modo, el SSH permite a los administradores gestionar servidores y dispositivos desde lejos. Los protocolos antiguos de gestión remota, como Telnet, transportaban los comandos de los administradores de manera que cualquiera pudiera verlos. (Imagina que los empleados pusieran al propietario de la tienda en el altavoz durante una llamada; todos los clientes de la tienda podrían oír las instrucciones privadas). A diferencia de Telnet, SSH es seguro — de ahí el nombre de Secure Shell.
Conexiones remotas encriptadas: el SSH establece una conexión entre el dispositivo de un usuario y una máquina lejana, a menudo un servidor. Utiliza encriptación para codificar los datos que atraviesan la conexión. Una parte interceptora solo encontraría algo como estática — datos aleatorios que no significan nada a menos que se descifren. (SSH utiliza métodos de encriptación que hacen que la desencriptación sea demasiado difícil para los extraños).
La capacidad de tunelizar: en redes, la tunelización es un método para mover paquetes a través de una red al utilizar un protocolo o ruta que normalmente no podrían utilizar. La tunelización funciona envolviendo paquetes de datos* con información adicional —llamados encabezados— para cambiar su destino. Los túneles de SSH utilizan una técnica llamada reenvío de puertos para enviar paquetes de una máquina a otra. El reenvío de puertos se explica con mayor detalle a continuación.
*Todos los datos que atraviesan una red se dividen en trozos más pequeños. Estos trozos se denominan "paquetes".
El SSH se ejecuta sobre el conjunto de protocolos TCP/IP, en el que se basa gran parte de Internet. TCP son las siglas en inglés para Protocolo de control de transmisión y dirección IP significa Protocolo de internet. TCP/IP empareja esos dos protocolos para formatear, enrutar y entregar paquetes. IP indica, entre otra información, a qué dirección IP debe ir un paquete (piensa en una dirección postal), mientras que TCP indica a qué puerto debe ir un paquete en cada dirección IP (piensa en el piso de un edificio o en el número de un apartamento).
TCP es un protocolo de capa de transporte: se ocupa del transporte y entrega de paquetes. Normalmente, se utilizan protocolos adicionales sobre TCP/IP para poner los datos transmitidos en un formulario que las aplicaciones puedan utilizar. El SSH es uno de esos protocolos. (Otros ejemplos incluyen HTTP, FTP y SMTP).
Estas claves "asimétricas" —llamadas así porque tienen valores diferentes— también hacen posible que los dos lados de la conexión negocien claves simétricas idénticas y compartidas para su posterior encriptación a través del canal. Una vez finalizada esta negociación, las dos partes utilizan las claves simétricas para encriptar los datos que intercambian.
En una conexión de SSH, ambas partes tienen un par de clave pública/privada y cada parte autentica a la otra utilizando estas claves. Esto diferencia al SSH de HTTPS, que en la mayoría de las implementaciones solo verifica la identidad del servidor web en una conexión cliente-servidor. (Otras diferencias incluyen que HTTPS no suele permitir al cliente acceder a la línea de comandos del servidor y que los firewalls a veces bloquean SSH, pero casi nunca HTTPS).
Aunque la criptografía de clave pública autentica los dispositivos conectados en SSH, un ordenador debidamente protegido seguirá requiriendo la autenticación de la persona que utiliza el SSH. A menudo, esto adopta la forma de introducir un nombre de usuario y una contraseña.
Una vez completada la autenticación, la persona puede ejecutar los comandos en la máquina remota, como si lo estuviera haciendo en su propia máquina local.
El reenvío de puertos es similar a reenviar un mensaje entre dos personas. Bob puede enviar un mensaje a Alicia, quien a su vez se lo pasa a Dave. Del mismo modo, el reenvío de puertos envía paquetes de datos dirigidos a una dirección IP y a un puerto de una máquina a una dirección IP y a un puerto de una máquina diferente.
Por ejemplo, imagina que un administrador quiere hacer un cambio en un servidor dentro de una red privada que gestiona y quiere hacerlo desde una ubicación remota. Sin embargo, por razones de seguridad, ese servidor solo recibe paquetes de datos de otros ordenadores de la red privada. En cambio, el administrador podría conectarse a un segundo servidor dentro de la red —que esté abierto a recibir tráfico de Internet— y luego utilizar el reenvío de puertos SSH para conectarse al primer servidor. Desde la perspectiva del primer servidor, los paquetes de datos del administrador se original del interior de la red privada.
Los sistemas operativos Linux y Mac vienen con el SSH incorporado. Las máquinas Windows pueden requerir que se tenga instalada una aplicación de cliente SSH. En ordenadores Mac y Linux, los usuarios pueden abrir la aplicación Terminal e introducir directamente los comandos SSH.
Técnicamente, el SSH puede transmitir cualquier dato arbitrario a través de una red y la tunelización SSH puede configurarse para una infinidad de propósitos. Sin embargo, los casos de uso de SSH más comunes incluyen:
El puerto 22 es el puerto por defecto para el SSH. A veces, los firewalls pueden bloquear el acceso a determinados puertos en los servidores detrás del firewall, pero dejar abierto el puerto 22. Por lo tanto, el SSH es útil para acceder a los servidores situados al otro lado del firewall: los paquetes dirigidos al puerto 22 no se bloquean y pueden reenviarse a cualquier otro puerto.
Cualquier protocolo puede ser objeto de abuso por parte de entes maliciosos y la naturaleza encriptada de SSH y sus capacidades de tunelización lo hacen especialmente atractivo para el atacante. El SSH se ha utilizado en una serie de ataques documentados para extraer datos privados, abrir rutas de puerta trasera en una red segura e incluso obtener acceso de raíz en los servidores.
Ciertos tipos de ataques también pueden robar claves SSH para acceder a los ordenadores y servidores privados. De hecho, la gestión de claves SSH es un gran problema de seguridad para las grandes organizaciones, ya que sus muchos servidores pueden utilizar miles o incluso millones de claves, y el seguimiento y actualización de esas claves es casi imposible. Una vez que un atacante consigue una clave, puede tener acceso continuo durante meses o años.
Una de las principales diferencias entre el SSH y otros protocolos de tunelización es la capa OSI en la que operan. GRE, dirección IP en IP, y IPsec son todos los protocolos de capa de red. Como tales, no conocen los puertos (un concepto de la capa de transporte), sino que operan entre direcciones IP. (La capa OSI exacta del SSH no está estrictamente definida, pero la mayoría de las fuentes lo describen como un protocolo de capa 7/capa de aplicación).
Otra diferencia es que el SSH utiliza TCP. TCP, como se describió anteriormente, es un protocolo de capa de transporte y uno de los principales utilizados en Internet. Otro protocolo de capa de transporte muy utilizado es el UDP, el User Datagram Protocol. UDP es un protocolo de transporte "best-effort" —que envía paquetes sin asegurar su entrega— lo que lo hace más rápido, pero a veces provoca la pérdida de paquetes. Aunque TCP es más lento que UDP, garantiza la entrega de todos los paquetes en orden y, por lo tanto, es más confiable.
IPsec utiliza exclusivamente UDP en lugar de TCP para permitir que los paquetes IPsec pasen a través de firewalls. Por lo tanto, los túneles IPsec suelen ser más rápidos que los túneles SSH, pero pueden perder paquetes en tránsito. GRE y IP en IP pueden utilizarse con TCP o UDP.
Por último, el SSH solo encripta una aplicación cada vez, no todo el tráfico que va y viene de un dispositivo. Esto distingue a SSH de IPsec, que encripta todo el tráfico de red, independientemente de la aplicación de la que provenga. Por esta razón, el SSH no se utiliza para configurar las VPN.
Aunque el uso del SSH está muy extendido, exponer los puertos de un servidor a Internet siempre es arriesgado. Cloudflare Zero Trust permite a las organizaciones tener sus servidores SSH disponibles en Internet sin el riesgo de abrir esos puertos de entrada. Los servidores se pueden conectar de forma segura a la red de Cloudflare. Los administradores y otros usuarios pueden acceder al servidor a través de Cloudflare al instalar un cliente de Cloudflare Warp en su dispositivo. Obtén más información aquí.