Configurar un doble factor de autentificación al iniciar sesión por SSH nos permite verificar la identidad de la conexión por dos vías distintas. Así, con unos sencillos pasos añadiremos un extra de seguridad, ya que se requerirá la contraseña del usuario y un código de verificación externo que se renueva cada poco tiempo para iniciar sesión.
Requisitos para configurar 2FA
- Tener instalado en nuestro Smartphone (Android o iOS) la aplicación Google Authenticator.
- Ubuntu 16.04 LTS o superior
Instalación y configuración de 2FA con Google Authenticator
El primer paso necesario es instalar el módulo de PAM. Para esto accederemos por SSH y ejecutaremos el siguiente comando:
# sudo apt install libpam-google-authenticator
Editaremos el fichero de configuración de PAM para SSH:
# vi /etc/pam.d/sshd
Añadiremos la siguiente línea al final del archivo y guardaremos:
auth required pam_google_authenticator.so
Reiniciaremos el servicio de SSH para aplicar los cambios:
# sudo systemctl restart sshd.service
Editaremos el fichero de configuración del servicio de SSH:
# vi /etc/ssh/sshd_config
Cambiaremos el valor de "ChallengeResponseAuthentication" de "no" a "yes" y comentamos la variable "PasswordAuthentication":
ChallengeResponseAuthentication yes
#PasswordAuthentication yes
El último paso en el servidor es configurar Google Authenticator para poder añadir la clave secreta en la APP en nuestro Smartphone. Para ello ejecutamos el siguiente comando:
# google-authenticator
Se iniciará un proceso que nos realizará varias preguntas. Primero nos preguntará si los tokens de autentificación queremos que se basen en el tiempo y le indicaremos que sí con "y".
Do you want authentication tokens to be time-based (y/n) y
Al responder sí, nos aparecerá un código QR que deberemos fotografiar con la aplicación Google Authenticator para poder obtener los códigos basados en el tiempo y así poder iniciar sesión.
También nos facilitará la clave secreta con la cual podremos configurar la APP Google Authenticator, si no podemos realizarlo con la lectura del código y se nos proporcionará unos códigos de emergencia. Es importante guardar esta información en un sitio seguro.
Your new secret key is: CWCWJXGREVUEPOGSA4IIBOP4MQ
Your verification code is 188690
Your emergency scratch codes are:
40269362
85310855
22210098
58507831
63668065
A continuación nos realizará tres preguntas más y responderemos cómo en el siguiente ejemplo:
Do you want me to update your "/root/.google_authenticator" file? (y/n) y
Do you want to disallow multiple uses of the same authentication token? This restricts you to one login bout every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) n
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y
Volvemos a reiniciar el servicio de SSH, así en el próximo inicio de sesión ya estará habilitado la doble autentificación.
# sudo systemctl restart sshd.service
Configuración de la APP Google Authenticator en nuestro Smartphone
Cómo indicabámos al inicio, tendremos que acceder a Google Play o App Store para descargar la aplicación Google Authenticator y una vez instalada, iniciarla para añadir nuestro primer servidor.
La primera vez que abrimos la APP al no tener ninguna cuenta configurada nos pide configurar la primera cuenta. Haremos clic en "Escanear código QR" si disponemos de él o clic en "Introduce una llave" e insertaríamos la clave CWCWJXGREVUEPOGSA4IIBOP4MQ que se nos ha proporcionado antes.
Una vez ha reconocido los datos en la pantalla principal nos aparecerá la cuenta configurada con el código 471 797 (para el ejemplo). Este código va cambiando a medida que pasa el tiempo.
Conectar por SSH con el código de Google Authenticator
Conectaremos por SSH y veremos que primero nos pide la contraseña del usuario y una vez introducida correctamente nos pedirá el "verification code" que podremos ver en la APP instalada.
# ssh root@46.183.118.200
Password:
Verification code:
Con estos sencillos pasos hemos podido ver cómo añadir un plus de seguridad a nuestro acceso por SSH e impedir que intrusos logren acceder a nuestro servidor.