← Volver al listado de tecnologías

Capítulo 3: SSH Avanzado - Hardening y 2FA

Por: SiempreListo
linuxseguridadssh2fahardeningtotp

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:

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á:

  1. Autenticación con clave pública (automática si usas ssh-agent)
  2. 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

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:

  1. Accede por consola física o panel del proveedor
  2. Edita /etc/pam.d/sshd y comenta la línea de google-authenticator
  3. Reinicia SSH
  4. 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