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_ed25519
→ Clave privada (no compartir nunca).~/.ssh/id_ed25519.pub
→ Clave 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