Binary Coffee

Configurando SSH para usar Autenticación de Doble Factor (A2F - Two-Factor Authentication)

hack
Reci√©n he estado montando mi propio servidor de desarrollo, para proyectos personales. Y sucede, que no importa que tan larga sea la contrase√Īa que elija, siempre me queda esa sensaci√≥n de que alguien prodr√° acceder a mi servidor por SSH :). Esta paranoia despert√≥ en mi al ver en los logs del servidor (de cara a internet) intentos constantes de conexiones fallidas por SSH :). Para calmar - o al menos aliviar - esta paranoia, hoy les traigo un peque√Īo truco que permite asegurar a√ļn m√°s la autenticaci√≥n por usuario y contrase√Īa a un servidor SSH. Para esto vamos a utilizar un m√≥dulo [PAM](https://es.wikipedia.org/wiki/Pluggable_Authentication_Modules) que habilita la [Autenticaci√≥n de Doble Factor (A2F)](https://es.wikipedia.org/wiki/Autenticaci%C3%B3n_de_m%C3%BAltiples_factores) en nuestro servidor SSH. ## Instalaci√≥n ``` sudo apt install libpam-google-authenticator ``` De esta forma a√Īadimos al sistema el m√≥dulo [PAM `pam_google_authenticator.so`](https://wiki.archlinux.org/index.php/Google_Authenticator). > Este m√≥dulo lo puedes utilizar no solo para configurar el servicio SSH, sino tambi√©n para todo aquel servicio que utlice PAM como mecanismo de autenticaci√≥n. ## Configurando `google-authenticator` Ejecuta `google-authenticator` en un terminal ``` # google-authenticator ``` Esto te generar√° un c√≥digo QR y te har√° una serie de preguntas. Puedes utilizar las siguientes respuestas (fueron las que yo utilic√©), pero estas depender√°n de tus necesidades: ``` - Make tokens "time-base": yes - Update the `.google_authenticator` file: yes - Disallow multiple uses: yes - Increase the original generation time limit: no - Enable rate-limiting: yes ``` Luego de contestarlas, necesitas abrir tu aplicaci√≥n generadora de Tokens OTP ([Microsoft Authenticator](https://play.google.com/store/apps/details?id=com.azure.authenticator&hl=es_419), [Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=es), ...) y escanear el c√≥digo QR para sincronizar la generaci√≥n de tokens. > **IMPORTANTE** Se recomienda guardar los c√≥digos de emergencia de recuperaci√≥n de forma segura (impr√≠malos y gu√°rdelos en un lugar seguro), ya que son la √ļnica forma de entrar en el sistema (a trav√©s de SSH) cuando se pierde el tel√©fono m√≥vil (es decir, el generador OTP). Tambi√©n se almacenan en ~/.google_authenticator, para que puedas buscarlos en cualquier momento siempre que est√©s conectado. ## Configurando el servidor SSH Ahora tenemos que expecificarle a nuestro servidor SSH que debe utilizar este m√≥dulo. - Primero habilitamos en el archivo `/etc/pam.d/sshd` el m√≥dulo recien instalado, agregando la siguiente configuraci√≥n al final del archivo. ``` auth required pam_google_authenticator.so ``` - Luego modificamos el archivo `/etc/ssh/sshd_config`, habilitando la configuraci√≥n: ``` ChallengeResponseAuthentication yes ``` - Y finalmente reiniciamos el servicio SSH: ``` sudo systemctl restart sshd.service ``` **NOTA** Es importante se√Īalar que esta configuraci√≥n no afecta al modelo de autenticaci√≥n por llaves p√ļblicas. Por lo tanto, si tienes una llave p√ļblica configurada para acceder a tu servidor SSH, no necesitar√°s proveer ning√ļn token OTP para poder acceder. Espero esto les ayude a calmar los nervios como a mi :).
Opiniones
noavatar
@uranio-235 Si eres el admin del VPS, te recomuendo configures perimero tu llave SSH, just in case :).
noavatar
en una vps, configurar esto es un riesgo tremendo, ya que no se puede prbar la autenticación antes, si algo queda mal, pues te jodes ;-) sería bueno una forma de probar el código debidamente sincronizado, antes de lanzar a hacer un ssh restart