Capítulo 3: SSH Avanzado - Hardening y 2FA
Capítulo 3: SSH Avanzado - Hardening y 2FA
Hardening de sshd_config
Una configuración segura de SSH va más allá de solo deshabilitar contraseñas.
Configuración Recomendada
Edita /etc/ssh/sshd_config:
# Puerto (opcional - cambia solo si entiendes las implicaciones)
Port 22
# Protocolo y algoritmos seguros
Protocol 2
KexAlgorithms [email protected]
Ciphers [email protected],[email protected]
MACs [email protected],[email protected]
# Autenticación
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
# Timeouts y límites
LoginGraceTime 30
MaxAuthTries 3
MaxSessions 3
# Deshabilitar funciones innecesarias
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitUserEnvironment no
# Logs
LogLevel VERBOSE
Grupo SSH para Control de Acceso
Limita quién puede conectar por SSH:
# Crear grupo
sudo groupadd ssh-users
# Agregar usuario al grupo
sudo usermod -aG ssh-users tu_usuario
En /etc/ssh/sshd_config:
AllowGroups ssh-users
Esto bloquea SSH para cualquier usuario que no esté en el grupo.
Autenticación de Dos Factores (2FA)
Instalación
sudo apt update
sudo apt install libpam-google-authenticator
Configuración por Usuario
Cada usuario debe ejecutar:
google-authenticator
Responde a las preguntas:
- Time-based tokens: Sí
- Update .google_authenticator: Sí
- Disallow multiple uses: Sí (más seguro)
- Rate limiting: Sí
Escanea el código QR con tu app de autenticación (Google Authenticator, Authy, etc.).
Guarda los códigos de respaldo en un lugar seguro.
Configurar PAM
Edita /etc/pam.d/sshd:
sudo nano /etc/pam.d/sshd
Agrega al principio:
auth required pam_google_authenticator.so
Configurar SSH para 2FA
En /etc/ssh/sshd_config:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Reinicia SSH:
sudo systemctl restart sshd
Verificar 2FA
La conexión ahora pedirá:
- Autenticación con clave pública (automática si usas ssh-agent)
- Código de verificación (TOTP de 6 dígitos)
Eliminar Claves Diffie-Hellman Débiles
Las claves DH menores a 3072 bits son vulnerables:
# Hacer backup
sudo cp /etc/ssh/moduli /etc/ssh/moduli.backup
# Filtrar claves débiles
awk '$5 >= 3071' /etc/ssh/moduli | sudo tee /etc/ssh/moduli.safe
sudo mv /etc/ssh/moduli.safe /etc/ssh/moduli
Banner de Advertencia
Configura un banner legal:
sudo nano /etc/issue.net
Contenido sugerido:
***************************************************************************
AVISO DE SEGURIDAD
Este sistema es propiedad privada. El acceso no autorizado está prohibido.
Todas las actividades son monitoreadas y registradas.
***************************************************************************
En /etc/ssh/sshd_config:
Banner /etc/issue.net
Verificación Final
Test de Configuración
sudo sshd -t
No debería mostrar errores.
Test de Conexión
Desde otra terminal:
ssh -v usuario@servidor
La salida detallada mostrará los algoritmos negociados y el proceso de autenticación.
Troubleshooting
Bloqueado después de habilitar 2FA
Si pierdes acceso:
- Accede por consola física o panel del proveedor
- Edita
/etc/pam.d/sshdy comenta la línea de google-authenticator - Reinicia SSH
- Reconfigura 2FA
Códigos TOTP no funcionan
Verifica que la hora del servidor esté sincronizada:
timedatectl status
Si no está sincronizada:
sudo timedatectl set-ntp true