Cómo asegurar tu servidor SSH con autenticación de clave pública Ed25519

SSH es una de las herramientas más utilizadas para la administración remota de servidores, pero también una de las más atacadas por ciberdelincuentes. Para proteger un servidor de intentos de acceso no autorizados, es fundamental configurar SSH de forma segura. En este artículo, se explica cómo mejorar la seguridad del servidor mediante la autenticación con claves públicas Ed25519, una de las opciones más seguras y eficientes en la actualidad.

¿Por qué usar Ed25519 y no otros algoritmos?

SSH admite varios algoritmos de clave pública, pero no todos ofrecen la misma seguridad:

  • DSA: Obsoleto y poco seguro. No debe usarse.
  • RSA: Aceptable, pero requiere claves de al menos 2048 bits para una seguridad adecuada. Puede volverse vulnerable ante ataques cuánticos en el futuro.
  • ECDSA: Más eficiente que RSA, pero con preocupaciones sobre la influencia de la NSA en los estándares de cifrado de NIST.
  • Ed25519: La opción más moderna y recomendada, con alta seguridad, eficiencia y resistencia a ataques cuánticos.

Por su rapidez, menor tamaño de clave y resistencia a ataques criptográficos, Ed25519 es la mejor opción para autenticar SSH en la actualidad.


1. Generar un par de claves Ed25519

Desde tu equipo local (no en el servidor), genera un nuevo par de claves SSH con el siguiente comando:

ssh-keygen -o -a 256 -t ed25519 -C "$(hostname)-$(date +'%d-%m-%Y')"
  • -o asegura que la clave se almacene en formato seguro.
  • -a 256 aumenta la cantidad de iteraciones para fortalecer la clave contra ataques de fuerza bruta.
  • -t ed25519 indica el uso del algoritmo Ed25519.
  • -C agrega un comentario con el nombre del host y la fecha.

Cuando se te pida una contraseña (passphrase), introdúcela para una capa adicional de seguridad.

Los archivos generados son:

  • ~/.ssh/id_ed25519Clave privada (no compartir nunca).
  • ~/.ssh/id_ed25519.pubClave pública (se copia al servidor).

2. Asegurar la clave privada en el equipo local

Es esencial proteger la clave privada con los permisos correctos para evitar accesos no autorizados:

chmod 700 ~/.ssh
chmod 400 ~/.ssh/id_ed25519

Esto impide que otros usuarios lean o modifiquen el archivo.


3. Configurar la clave pública en el servidor

Para permitir el acceso SSH con la clave Ed25519, copia la clave pública al servidor:

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

Si el comando no está disponible, puedes hacerlo manualmente:

cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Esto asegurará que solo el usuario tenga acceso a sus claves SSH.


4. Configurar SSHD para mejorar la seguridad

Edita el archivo de configuración del servidor SSH:

sudo nano /etc/ssh/sshd_config

Asegúrate de que incluya estas opciones:

Protocol 2
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
AuthenticationMethods publickey
HostKey /etc/ssh/ssh_host_ed25519_key
KexAlgorithms curve25519-sha256
Ciphers [email protected],[email protected]
MACs [email protected]

Guarda y reinicia el servicio:

sudo systemctl restart sshd

Esto desactiva el acceso con contraseña y solo permite autenticación con claves Ed25519.


5. Medidas adicionales de seguridad

Deshabilitar el acceso directo a root

Nunca se debe permitir el acceso SSH con el usuario root:

PermitRootLogin no

En su lugar, usa un usuario con privilegios sudo.


Cambiar el puerto de SSH

Para evitar ataques automatizados, cambia el puerto por uno alto (ej. 4822):

Port 4822

Luego, permite el nuevo puerto en el firewall:

sudo ufw allow 4822/tcp

Limitar SSH a direcciones IP específicas

Si te conectas siempre desde la misma IP, restringe el acceso:

sudo ufw allow from TU_IP to any port 4822

Otra opción es usar una VPN para ocultar el puerto SSH completamente.


Activar Fail2Ban para bloquear ataques

Fail2Ban protege contra intentos repetidos de acceso no autorizado:

sudo apt install fail2ban -y
sudo systemctl enable fail2ban

Edita la configuración en /etc/fail2ban/jail.local:

[sshd]
enabled = true
port = 4822
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600

Reinicia el servicio:

sudo systemctl restart fail2ban

Ahora, cualquier IP con más de 5 intentos fallidos será bloqueada por 1 hora.


Proteger SSH con iptables

Para reforzar la seguridad sin usar Fail2Ban, usa iptables para limitar conexiones SSH:

sudo iptables -A INPUT -p tcp --dport 4822 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 4822 -m state --state NEW -m recent --update --seconds 3600 --hitcount 5 -j DROP

Esto bloquea IPs que hagan más de 5 intentos en una hora.


6. Verificar que todo funcione correctamente

Para probar la conexión, usa:

ssh -i ~/.ssh/id_ed25519 -o PasswordAuthentication=no usuario@servidor-ip -p 4822

Si todo está bien configurado, accederás sin que se solicite una contraseña.


Conclusión

Configurar SSH con claves Ed25519 es una de las formas más efectivas de proteger un servidor contra ataques. Junto con medidas adicionales como Fail2Ban, cambio de puerto y restricciones en el firewall, se puede reducir drásticamente el riesgo de accesos no autorizados.

Mantener la seguridad del servidor es un proceso continuo, por lo que es fundamental actualizar el software, monitorear los logs y aplicar buenas prácticas de administración.

Referencia: Cryptsus

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio