Autenticación segura al servidor SSH

En nuestro post anterior detallamos una serie de opciones que nos ayudan a aumentar la seguridad de nuestro servidor SSH. En esta oportunidad iremos un paso más allá para explicar las que quizás sean las opciones más importantes para lograr una autenticación segura.

Repasando

En el post anterior mencionamos que una medida de seguridad consiste en deshabilitar el acceso mediante SSH a root y especificar más bien una lista de usuarios que estuvieran autorizados a hacerlo. Si bien esto es una gran ayuda, ¿qué sucede si un atacante logra descifrar la contraseña de un usuario autorizado mediante técnicas (por ejemplo) de ingeniería social? Por fortuna, SSH nos permite deshabilitar el acceso usual mediante usuario y contraseña, y especificar un método más seguro y que no depende de estas credenciales. En la próxima sección veremos cómo lograr este objetivo.

Autenticación segura

Uno de los programas incluidos en la suite provista por OpenSSH (ssh-keygen) permite una clave pública y una privada, las cuales son prácticamente imposibles de descifrar mediante ataques de fuerza bruta. Para crear un par de claves RSA utilizaremos el siguiente comando:

ssh-keygen -t rsa

Como vemos en la Fig. 1, las claves privada y pública fueron almacenadas dentro de /home/gacanepa/.ssh bajo los nombres id_rsa y id_rsa.pub, respectivamente. Si lo deseamos, podemos elegir una frase de seguridad (passphrase en inglés), aunque generalmente se deja en blanco para que la conexión a posterior no requiera interacción con el usuario.

También, como podemos ver en la Fig. 1, podemos copiar la clave pública recién generada al servidor con IP 192.168.0.29 de la siguiente manera (Nota: antes de realizar este paso es necesario volver a configurar al servidor para que escuche en el puerto 22 nuevamente)

ssh-copy-id 192.168.0.29

tras lo cual se nos pedirá ingresar la contraseña del usuario actual por única vez. Es recomendable ahora volver a colocar el puerto que elegimos para SSH en el post anterior (2990).

Luego de copiar la clave pública podremos conectarnos a 192.168.0.29 SIN contraseña utilizando

ssh -p 2990 192.168.0.29

Esto es posible ya que al momento de iniciar la conexión se verifica que la clave pública almacenada en el servidor corresponda con la privada ubicada en el equipo local.

Para utilizar este tipo de autenticación exclusivamente y deshabilitar el acceso mediante contraseña, debemos 1) comentar las opciones

#LoginGraceTime 2m
#PermitRootLogin no
#AllowUsers gacanepa

2) asegurarnos de que PasswordAuthentication esté seteado en no y que PubkeyAuthentication esté habilitado:

PasswordAuthentication no
PubkeyAuthentication yes

Luego de guardar los cambios y de reiniciar el servidor veremos que la autenticación mediante clave pública debe ser exitosa (ver Fig. 2):

Autenticación segura sin contraseña
Figura 2 – Autenticación segura sin contraseña

Espero que este post les haya resultado de utilidad. ¡Nos leemos en breve!