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.
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.
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.
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
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.
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
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
En sistemas basados en Debian/Ubuntu:
sudo apt install fail2ban
En sistemas basados en RHEL/CentOS/Fedora:
sudo dnf install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
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
sudo systemctl restart fail2ban
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.