Guía completa para asegurar SSH en Ubuntu

Aprende a proteger tu servidor Ubuntu con esta guía completa para asegurar SSH: configuraciones, claves y buenas prácticas.

Asegurar un servidor SSH es una de las primeras tareas que cualquier administrador de sistemas debería realizar tras instalar Ubuntu. Por defecto, el servicio SSH viene con configuraciones poco restrictivas que pueden dejar la puerta abierta a ataques de fuerza bruta o accesos no deseados. A continuación, te muestro los pasos prácticos que sigo en mis propios servidores para reforzar la seguridad de SSH.

Deshabilitar el acceso por contraseña y usar claves SSH

Lo primero es eliminar la autenticación por contraseña, que es vulnerable a ataques de diccionario. En su lugar, usaremos un par de claves pública/privada.

En tu máquina local, genera las claves si aún no las tienes:

ssh-keygen -t ed25519 -a 100

Copia la clave pública al servidor:

ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@tu-servidor

Ahora, edita el archivo de configuración SSH en el servidor (/etc/ssh/sshd_config) y cambia las siguientes líneas:

PasswordAuthentication no
PubkeyAuthentication yes

Reinicia el servicio para aplicar cambios:

sudo systemctl restart sshd

Cambiar el puerto por defecto y restringir usuarios

El puerto 22 es el blanco favorito de los bots. Cambiarlo reduce drásticamente el ruido en los logs. Elige un puerto alto, por ejemplo el 2222.

Añade o modifica esta línea en /etc/ssh/sshd_config:

Port 2222

Además, limita qué usuarios pueden conectarse por SSH. Si solo necesitas acceso para admin y backup, añade:

AllowUsers admin backup

Si usas grupos, mejor:

AllowGroups ssh-users

Recuerda ajustar las reglas del firewall si usas ufw:

sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload

Configurar autenticación de dos factores (opcional pero recomendado)

Si quieres una capa extra incluso con claves, instala Google Authenticator:

sudo apt install libpam-google-authenticator

Ejecuta el configurador para tu usuario:

google-authenticator

Sigue las instrucciones en pantalla y escanea el código QR con una app como Authy o Google Authenticator. Luego, edita /etc/pam.d/sshd y añade al principio:

auth required pam_google_authenticator.so

En /etc/ssh/sshd_config, cambia:

ChallengeResponseAuthentication yes

Y en la línea AuthenticationMethods, pon:

AuthenticationMethods publickey,keyboard-interactive

Reinicia SSH de nuevo. Ahora necesitarás tu clave SSH más el código de 6 dígitos para conectarte.

Proteger contra fuerza bruta con fail2ban

Fail2ban analiza los logs de SSH y bloquea IPs tras varios intentos fallidos. Instálalo:

sudo apt install fail2ban

Crea una copia de la configuración por defecto:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edita jail.local y busca la sección [sshd]. Actívala con:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600

Reinicia fail2ban:

sudo systemctl restart fail2ban

Puedes comprobar el estado con:

sudo fail2ban-client status sshd

Conclusión

Con estos ajustes, tu servidor SSH quedará mucho más protegido frente a accesos no autorizados. La combinación de claves SSH, cambio de puerto, restricción de usuarios y fail2ban forma una base sólida que aplico en todos mis servidores Ubuntu. Dedica diez minutos a hacerlo y dormirás más tranquilo.