Autenticación F2B en Linux con Google Authenticator

La autenticación de doble factor (2FA) con Google Authenticator y Fail2ban en Linux es una combinación de seguridad muy potente. Fail2ban protege contra ataques de fuerza bruta, mientras que Google Authenticator agrega una capa de seguridad adicional que requiere un código de un solo uso.

¿Cómo funcionan en conjunto?

  • Google Authenticator (2FA): Es un módulo PAM (Pluggable Authentication Module) que, al ser configurado para SSH, solicita un código de un solo uso (TOTP - Time-based One-Time Password) además de la contraseña.
  • Fail2ban: Es una herramienta que monitorea los archivos de registro (logs) para detectar intentos de acceso fallidos. Cuando se detectan intentos de fuerza bruta, Fail2ban bloquea la dirección IP del atacante en el cortafuegos.

La combinación de ambos es ideal: Fail2ban se encarga de los ataques a gran escala, y Google Authenticator asegura que, incluso si un atacante consigue una contraseña, no pueda acceder sin el código de 2FA.

Guía de configuración

La configuración se realiza en dos partes principales: primero, la configuración de Google Authenticator para 2FA y, segundo, la configuración de Fail2ban.

1. Configuración de Google Authenticator (2FA) para SSH

Paso 1: Instalar el módulo PAM

En sistemas basados en Debian/Ubuntu:

sudo apt update
sudo apt install libpam-google-authenticator

En sistemas basados en RHEL/CentOS/Fedora:

sudo dnf install google-authenticator

Paso 2: Configurar el usuario

Ejecuta el siguiente comando como el usuario para el que quieres habilitar la 2FA:

google-authenticator

Responde "y" a las preguntas. Se te mostrará un código QR y una "clave secreta". Escanéalo con tu aplicación de Google Authenticator y guarda los códigos de emergencia en un lugar seguro.

Paso 3: Modificar la configuración de PAM para SSH

Edita el archivo de configuración de PAM para SSH:

sudo nano /etc/pam.d/sshd

Añade la siguiente línea al principio del archivo:

auth required pam_google_authenticator.so

Paso 4: Modificar la configuración de SSH

Edita el archivo de configuración del demonio SSH:

sudo nano /etc/ssh/sshd_config

Busca y asegúrate de que las siguientes líneas estén configuradas de esta manera:

ChallengeResponseAuthentication yes
UsePAM yes

O, en versiones recientes:

KbdInteractiveAuthentication yes
UsePAM yes

Guarda los cambios y reinicia el servicio:

sudo systemctl restart sshd

2. Configuración de Fail2ban

Paso 1: Instalar Fail2ban

En sistemas basados en Debian/Ubuntu:

sudo apt install fail2ban

En sistemas basados en RHEL/CentOS/Fedora:

sudo dnf install fail2ban

Paso 2: Configurar un archivo local

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Paso 3: Editar el archivo de configuración de SSH

Abre el archivo jail.local:

sudo nano /etc/fail2ban/jail.local

Busca la sección [sshd] y asegúrate de que esté configurada así:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

Paso 4: Reiniciar el servicio Fail2ban

sudo systemctl restart fail2ban

Paso 5: Verificar el estado

sudo fail2ban-client status sshd

Con esto, tendrás un sistema SSH mucho más seguro, combinando la protección contra fuerza bruta de Fail2ban con la autenticación de doble factor de Google Authenticator.