Todo sobre el protocolo SSH en GNU/Linux

,
móviles Android más seguros para 2018

SSH (Secure Shell) es un protocolo seguro empleado principalmente para conectarse a servidores GNU/Linux remotos. Ofrece una interfaz en modo texto que, después de conectado con el servidor remoto, permite ejecutar comando en dicho servidor. En Universo-Digital estaremos abordando una serie de artículos que tienen como objetivo mostrarles todo lo referente al protocolo SSH desde el trabajo con servidores, clientes y llaves. Este es el primero de ellos.

Cómo funciona SSH

Cuando se realiza una conexión a través de SSH, es abierta una sesión de shell, la cual es una interfaz en modo texto que permite interactuar con el servidor al que se le realizó la conexión SSH. Durante el tiempo que esté activa la sesión SSH, cada comando que se ejecute en el terminal local será enviado a través de un tunel SSH encriptado y ejecutado en el servidor remoto.

Las conexiones SSH son implementadas mediante el modelo cliente-servidor. Por esto, se requiere un servicio conocido como demonio SSH (SSH deamon) ejecutándose en el servidor remoto para poder conectarse al servidor, desde la estación cliente. Este tipo de software escucha por conexiones entrantes en un puerto de red específico (de forma predeterminada es el puerto 22); auntentica los pedidos de conexiones y carga el entorno adecuado, siempre y cuando las credenciales proporcionadas por el usuario sean correctas.

Para poder realizar una conexión SSH hacia un servidor remoto, nuestra computadora debe tener un cliente SSH instalado. Este tipo de cliente permite comunicarse a través del protocolo SSH y le ofrece al servidor remoto el nombre de usuario y la contraseña para realizar la conexión. En GNU/Linux el cliente SSH viene instalado por defecto y puede accederse desde el terminal con el comando «ssh«. Para entornos Windows existen varios clientes SSH como Putty y Moba Xterm.

Cómo SSH autentica a los usuarios

Los clientes SSH normalmente se autentican a través de contraseñas (menos seguro y no recomendado, ya que es propenso a ataques de fuerza bruta; aunque existen métodos que, de cierta forma, minimizan la amenaza) o con llaves SSH (es mucho más seguro). Por defecto, muchos sistemas operativos GNU/Linux permiten  conectarse con el usuario root solo mediante llaves SSH.

Autenticación por contraseñas

Los inicios de sesión con contraseñas son encriptados y son fáciles de entender por nuevos usuarios. No obstante, en internet existen bots automatizados y usuarios maliciosos que tratan de descubrir la contraseña mediante ataques de fuerza bruta. Esto puede comprometer la seguridad del servidor si la contraseña es decubierta. De ahí la importancia de instalar algún sistema de prevención de intrusos (Intrusion Prevension System, IPS) como Fail2ban, para mitigar dicha amenza.

Autenticación por llaves SSH

Las llaves SSH son un conjunto de llaves criptográficas que deben coincidir entre ellas y pueden ser empleadas para la auntenticación. Cada conjunto contiene una llave pública y una privada. La llave pública puede ser compartida libremente sin problemas; mientras que la llave privada de ser bien resguardada y nunca expuesta a nadie.

Cuando un cliente se conecta a un servidor remoto mediante llaves SSH, le informa al servidor qué llave pública va a emplear para conectarse. El servidor por su parte, chequea en sus llaves autorizadas (authorized_keys) si la llave pública enviada está autorizada. Si es así, genera una cadena aleatoria y la encripta usando la llave pública. Este mensaje encriptado solo puede ser desencriptado con la llave privada asociada. Por ello, el servidor envía al cliente el mensaje encriptado para comprobar si este posee la llave privada asociada.

Establecimiento de conexión por llaves SSH

Establecimiento de conexión por llaves SSH

Una vez recibido este mensaje, el cliente lo desencripta con la llave privada. Luego combina la cadena aleatoria que es revelada con el ID de la sesión previamente negociada. Esto genera un hash MD5 a partir del valor anterior. Como el servidor ya tenía el mensaje original y el ID de la sesión, puede comparar el hash MD5 generado por esos valores. Así determina que el cliente debe tener la llave privada.

Conclusiones

Hasta aquí algunas generalidades sobre qué es el protocolo SSH y cómo funciona. Pudimos ver la diferencia de emplear la autentición por contraseñas (menos segura y no recomendada) o por llaves SSH. Además conocimos sobre el proceso de negociación de las llaves SSH. En el siguiente artículo de esta serie sobre el protocolo SSH trataremos ejemplos prácticos para el trabajo con SSH.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja una respuesta

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