← Volver al inicio
SSH Hardening OpenSSH Autenticación Claves

Guía de Hardening SSH

05/03/2022

Guía completa para securizar el servicio SSH en servidores Linux, reduciendo la superficie de ataque frente a fuerza bruta, acceso no autorizado y escuchas.

1. Archivo de configuración

# Ruta principal:
/etc/ssh/sshd_config

# Tras cada cambio, reiniciar el servicio:
systemctl restart sshd
# o
service ssh restart

2. Cambiar el puerto por defecto

# En /etc/ssh/sshd_config:
Port 2222   # Cambiar de 22 a otro puerto (1024-65535)

# Conectarse con el nuevo puerto:
ssh -p 2222 usuario@servidor

3. Deshabilitar login como root

PermitRootLogin no
# Opciones: yes | no | without-password | forced-commands-only

4. Autenticación por clave pública (sin contraseña)

# Generar par de claves en el cliente:
ssh-keygen -t ed25519 -C "mi_clave_segura"
# o RSA 4096:
ssh-keygen -t rsa -b 4096

# Copiar clave pública al servidor:
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor

# En sshd_config del servidor:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# Deshabilitar autenticación por contraseña (solo claves):
PasswordAuthentication no
ChallengeResponseAuthentication no

5. Limitar usuarios y grupos con acceso SSH

# Solo usuarios específicos:
AllowUsers usuario1 usuario2

# Solo grupos específicos:
AllowGroups sshusers admins

# Denegar usuarios específicos:
DenyUsers root oracle mysql

6. Configuraciones de seguridad adicionales

# Tiempo máximo para autenticarse:
LoginGraceTime 30

# Máximo de intentos de autenticación:
MaxAuthTries 3

# Máximo de sesiones simultáneas por conexión:
MaxSessions 3

# Desactivar reenvío X11 (si no es necesario):
X11Forwarding no

# Desactivar reenvío de agente SSH:
AllowAgentForwarding no

# Desactivar túneles TCP:
AllowTcpForwarding no

# Deshabilitar autenticación GSSAPI:
GSSAPIAuthentication no

# Banner de advertencia:
Banner /etc/ssh/banner.txt

7. Algoritmos criptográficos seguros

# Solo algoritmos modernos (en sshd_config):
KexAlgorithms curve25519-sha256,diffie-hellman-group14-sha256
Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
MACs hmac-sha2-512,hmac-sha2-256

# Verificar configuración sin reiniciar:
sshd -T | grep -E "kexalgorithms|ciphers|macs"

8. Fail2Ban — Protección contra fuerza bruta

apt install fail2ban

# Configuración en /etc/fail2ban/jail.local:
[sshd]
enabled  = true
port     = 2222          # Puerto SSH configurado
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3             # Intentos antes de bloquear
bantime  = 3600          # Segundos de bloqueo (1 hora)
findtime = 600           # Ventana de tiempo (10 min)

# Reiniciar Fail2Ban:
systemctl restart fail2ban

# Ver IPs bloqueadas:
fail2ban-client status sshd

Checklist de hardening SSH

MedidaParámetroValor recomendado
Puerto no estándarPort≠ 22
Sin login rootPermitRootLoginno
Solo claves públicasPasswordAuthenticationno
Tiempo de graciaLoginGraceTime30
Máx. intentosMaxAuthTries3
Sin X11X11Forwardingno
Fail2Ban activomaxretry3 intentos / 1h ban