El sistema tras activar el segundo factor#
En el artículo anterior se configuró SSH para exigir dos factores: primero la clave privada, después un código TOTP generado por Google Authenticator. El objetivo es que una clave robada, por sí sola, no sea suficiente para obtener acceso.
Esa configuración, combinada con Fail2ban para bloquear IPs con intentos fallidos reiterados, cubre los dos vectores de ataque principales en SSH: fuerza bruta y credenciales comprometidas.
Sin embargo, hay un caso que conviene ajustar: cuando la infraestructura incluye una VPN privada, exigir el código TOTP desde esa red introduce fricción sin aumentar la seguridad. Conectarse a través de la VPN ya implica haber superado su propia autenticación.
TOTP en una red de confianza#
En una infraestructura con VPN WireGuard entre nodos, cada conexión ya ha pasado por la autenticación criptográfica del túnel. Añadir el TOTP encima es redundante.
OpenSSH resuelve esto con el bloque Match, que permite aplicar directivas distintas según el origen de la conexión.
Eximir la red VPN del segundo factor#
Al final de /etc/ssh/sshd_config, añadir:
Match Address 192.168.100.0/24
AuthenticationMethods publickeySustituir 192.168.100.0/24 por el rango de la red VPN.
Cualquier conexión originada fuera de ese rango sigue exigiendo publickey,keyboard-interactive. Solo las conexiones que provienen del segmento VPN se autentican únicamente con la clave.
Reiniciar el servicio:
sudo systemctl restart sshEl orden de factores y su implicación#
AuthenticationMethods publickey,keyboard-interactive aplica los dos factores en secuencia. OpenSSH valida primero la clave; solo si es válida presenta el prompt del código TOTP.
Esto tiene una consecuencia relevante: un atacante sin clave autorizada nunca llega al segundo factor. El TOTP no es el primer punto de contacto — es la barrera que se activa después de superar la autenticación por clave.
Gestión con múltiples usuarios: la opción nullok#
La directiva nullok en /etc/pam.d/sshd permite que usuarios sin el archivo .google_authenticator configurado accedan sin código:
auth required pam_google_authenticator.so nullokEs útil en entornos con varios usuarios donde la activación del segundo factor se realiza de forma gradual. La contrapartida es que esos usuarios acceden con un único factor.
Cuando todos los usuarios relevantes tengan el segundo factor configurado, eliminar nullok:
auth required pam_google_authenticator.soA partir de ese punto, cualquier usuario sin el archivo configurado no podrá conectarse por SSH desde internet.
Códigos de emergencia#
Al generar el secreto con google-authenticator, el comando presenta cinco códigos de emergencia. Son de un solo uso y sustituyen al código TOTP cuando el dispositivo móvil no está disponible.
Dónde conservarlos:
- Impresos en papel, fuera del servidor
- En un gestor de contraseñas offline
- Nunca en el mismo equipo donde reside la clave SSH
Si se pierden tanto el móvil como los códigos de emergencia, las únicas alternativas son conectarse desde la red VPN (donde el TOTP está eximido) o acceder por consola física al servidor.
Verificar los tres escenarios#
Antes de dar por cerrado el setup, conviene probar los tres casos posibles:
Desde internet — clave y código correctos:
$ ssh usuario@servidor
(usuario@servidor) Verification code: 847293
$Desde internet — código incorrecto:
$ ssh usuario@servidor
(usuario@servidor) Verification code: 000000
Permission denied (publickey,keyboard-interactive).Desde la VPN — acceso directo:
$ ssh usuario@servidor
$La conexión desde la VPN no solicita código.
Tres capas independientes#
Con estas piezas activas, el acceso SSH queda cubierto por controles complementarios:
- Fail2ban — bloquea IPs con intentos fallidos reiterados. Contiene los ataques de fuerza bruta.
- TOTP — exige el dispositivo móvil además de la clave. Neutraliza el valor de una clave comprometida.
- VPN — proporciona acceso directo desde la red de confianza, sin fricción adicional.
Cada capa cubre el hueco que las otras dejan. Fail2ban no actúa si la clave ya fue robada. El TOTP no es una defensa absoluta si el atacante accede también al dispositivo. La VPN reduce la superficie expuesta a internet al mínimo operativo.