Hardening avanzado de SSH: defensa contra fuerza bruta, túneles seguros y configuración enterprise

Guía completa para asegurar SSH a nivel profesional: endurecimiento, cifrado moderno, mitigación de fuerza bruta, claves, MFA y monitoreo.

Hardening avanzado de SSH: defensa contra fuerza bruta, túneles seguros y configuración enterprise

SSH es la puerta de entrada más utilizada para administrar servidores Linux y, por lo tanto, también uno de los vectores de ataque más frecuentes.

Un servicio SSH mal configurado puede permitir:

  • Ataques de fuerza bruta
  • Accesos no autorizados
  • Movimientos laterales
  • Escaladas de privilegios
  • Robo de claves

En este artículo aprenderás a implementar un SSH Zero Trust, endurecido al máximo y adaptado a entornos empresariales o de alta seguridad.


1. Deshabilitar configuraciones inseguras por defecto

Edición del archivo:

1
sudo nano /etc/ssh/sshd_config

Desactivar login directo de root

1
PermitRootLogin no

Desactivar contraseñas

1
2
PasswordAuthentication no
KbdInteractiveAuthentication no

Limitar protocolos

1
Protocol 2

Deshabilitar autenticación insegura

1
2
3
HostbasedAuthentication no
RhostsRSAAuthentication no
RSAAuthentication no

2. Cambiar el puerto SSH de forma inteligente

1
Port 2222

No es una medida de seguridad absoluta, pero reduce ruido, fuerza bruta y escaneo.

Abrir el puerto en el firewall

1
sudo ufw allow 2222/tcp

3. Claves SSH modernas y seguras

Generar claves modernas recomendadas (ed25519)

1
ssh-keygen -t ed25519 -a 200 -C "admin@server"

Alternativa segura (RSA 4096)

1
ssh-keygen -t rsa -b 4096 -o -a 200

Deshabilitar claves antiguas en sshd

1
PubkeyAcceptedKeyTypes=ssh-ed25519,ssh-rsa

4. Activar autenticación multifactor (MFA)

Mucho más seguro que claves solas.

Instalar Google Authenticator PAM

1
sudo apt install libpam-google-authenticator

Ejecutar configuración por usuario

1
google-authenticator

Editar PAM

1
sudo nano /etc/pam.d/sshd

Añadir:

1
auth required pam_google_authenticator.so nullok

Habilitar MFA en sshd

1
ChallengeResponseAuthentication yes

5. Limitar accesos por usuario, grupo y IP

Acceso solo a usuarios concretos

1
AllowUsers admin deploy

Acceso por grupos

1
AllowGroups admins

Acceso solo desde ciertas IP

1
2
Match Address 192.168.1.0/24
    PasswordAuthentication no

6. Timeouts agresivos para romper ataques

1
2
3
LoginGraceTime 20
ClientAliveInterval 30
ClientAliveCountMax 2

Esto reduce sesiones colgadas y bots intentando conexiones masivas.


7. Cifrado moderno (Kex, MACs, Ciphers)

Reemplazar cifrados inseguros

1
2
3
KexAlgorithms curve25519-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512,hmac-sha2-256

Ver soportes del servidor

1
2
3
ssh -Q cipher
ssh -Q kex
ssh -Q mac

8. Mitigar fuerza bruta con Fail2Ban

Instalar

1
sudo apt install fail2ban -y

Configurar

1
sudo nano /etc/fail2ban/jail.local
1
2
3
4
5
[sshd]
enabled = true
maxretry = 3
bantime = 1h
findtime = 10m

Reiniciar

1
sudo systemctl restart fail2ban

9. Wazuh / OSSEC para análisis en tiempo real

Para detección avanzada:

  • Cambios en archivos
  • Intentos de acceso
  • Fuerza bruta distribuida
  • SSH hijacking

Instalación rápida Wazuh

1
2
curl -sO https://packages.wazuh.com/4.8/wazuh-agent.deb
sudo dpkg -i wazuh-agent.deb

10. Port knocking avanzado (port-knock)

Abre el puerto SSH solo tras enviar una secuencia de “golpes”.

Configuración con knockd

1
sudo apt install knockd
1
2
3
[options]
start_command = ufw allow 2222
stop_command = ufw deny 2222

11. SSH sobre WireGuard (Zero Trust real)

Crear túnel seguro

1
wg genkey | tee wg.key | wg pubkey > wg.pub

SSH limitado exclusivamente al túnel

1
ListenAddress 10.10.10.1:22

12. Registros avanzados con auditd

Instalar auditd

1
sudo apt install auditd

Auditar acceso a claves

1
auditctl -w /home/*/.ssh/ -p war -k ssh_keys

Auditar configuraciones

1
auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config

13. Monitorizar intentos de fuerza bruta en tiempo real

Comando útil

1
sudo tail -f /var/log/auth.log

Detección con awk

1
awk '/Failed password/ {print $1,$2,$3,$11}' /var/log/auth.log

14. Reglas avanzadas de iptables

Limitar conexiones simultáneas

1
iptables -A INPUT -p tcp --syn --dport 2222 -m connlimit --connlimit-above 3 -j DROP

Limitar velocidad

1
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

15. Verificación automática de integridad SSH

Script de autocomprobación

1
2
3
if ! sha256sum -c /etc/ssh/sshd_config.sha256; then
  echo "⚠ CONFIG SSH ALTERADA"
fi

16. Proteger claves SSH del usuario

Permisos correctos

1
2
3
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

Evitar ssh-agent en memoria persistente


17. SSH con certificados (CA interna)

Método de autenticación enterprise.

Crear CA

1
ssh-keygen -f ssh_ca -t ed25519

Firmar claves

1
ssh-keygen -s ssh_ca -I usuario -n usuario id_ed25519.pub

Configurar servidor

1
TrustedUserCAKeys /etc/ssh/ca.pub

18. Evitar ataques MITM

Revisar fingerprint siempre

1
ssh-keyscan -H server.com >> ~/.ssh/known_hosts

Usar DNSSEC + SSHFP

1
ssh-keygen -r dominio.com

19. Buenas prácticas adicionales

  • Deshabilitar SSHv1
  • Usar logs remotos
  • Usar banners legales
  • Limitar SFTP
  • Rotar claves automáticamente
  • Bloquear países completos con geoip
  • Autenticación por hardware (YubiKey)

20. Configuración final completa recomendada (sshd_config)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Port 2222
Protocol 2
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
Usedns no
LoginGraceTime 20
ClientAliveInterval 30
ClientAliveCountMax 2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
KexAlgorithms curve25519-sha256
MACs hmac-sha2-512,hmac-sha2-256
AllowUsers admin
TrustedUserCAKeys /etc/ssh/ca.pub

Conclusión

Un SSH seguro no se basa en una sola medida, sino en un conjunto de capas:

  • Cifrado moderno
  • Autenticación fuerte
  • Restricciones de acceso
  • Firewalls
  • Monitoreo
  • Reglas antibruteforce
  • Integridad del sistema

Implementar todo este hardening eleva tu servidor al nivel de seguridad requerido en infraestructuras críticas, empresas y entornos cloud modernos.

“La seguridad no es un estado, es un proceso continuo.”