Herramientas

Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad

SSH es una de las piezas más críticas en cualquier servidor Linux. Es la puerta de entrada para la administración remota y, por tanto, uno de los primeros objetivos en auditorías de seguridad o escaneos de vulnerabilidades con herramientas como Nessus u OpenVAS.

Uno de los hallazgos más habituales en estos análisis es el temido “SSH Weak KEX”, que indica que el servidor aún permite algoritmos de intercambio de claves (Key Exchange, KEX) considerados débiles u obsoletos. Aunque el sistema funcione “correctamente”, mantener estos algoritmos activos supone un riesgo innecesario.

En esta entrada veremos, paso a paso, cómo endurecer (hardening) la configuración de SSH en Rocky Linux 9, deshabilitando KEX inseguros y asegurándonos de que el servidor solo acepte algoritmos modernos y robustos, sin comprometer la compatibilidad con clientes actuales.

¿Por qué es importante el intercambio de claves (KEX)?

Antes de entrar en comandos, merece la pena detenerse brevemente en la parte conceptual.

El Key Exchange es el mecanismo que permite a cliente y servidor SSH acordar una clave criptográfica segura al inicio de la conexión. Si este proceso utiliza algoritmos antiguos (por ejemplo, algunos basados en SHA-1), toda la sesión se debilita, aunque el resto de la configuración sea correcta.

Por eso, eliminar KEX obsoletos no es solo “cumplir una auditoría”: es cerrar una puerta real a posibles ataques criptográficos.

Crear un archivo de configuración de hardening

En Rocky Linux 9 (y en el resto de distribuciones basadas en Red Hat Enterprise Linux, así como en sistemas modernos con OpenSSH), el archivo principal de configuración incluye directivas adicionales desde un directorio específico:

Include /etc/ssh/sshd_config.d/*.conf

Esto permite una aproximación mucho más limpia y mantenible: en lugar de modificar directamente sshd_config, podemos crear archivos específicos para cada objetivo.

Creamos nuestro archivo de hardening:

sudo vi /etc/ssh/sshd_config.d/hardening.conf

Y añadimos el siguiente contenido:

# Disable weak key exchange algorithms
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

Con esta configuración indicamos explícitamente que solo se permiten algoritmos de intercambio de claves seguros y modernos, dejando fuera opciones débiles como diffie-hellman-group1-sha1, que suelen ser las responsables de los avisos en auditorías.

Verificar la sintaxis antes de aplicar los cambios

Hay un paso que nunca debería omitirse cuando se trabaja con SSH: validar la configuración antes de reiniciar el servicio.

sudo sshd -t
  • Si el comando no devuelve ningún mensaje, la configuración es válida.
  • Si aparece algún error, es fundamental corregirlo antes de continuar.

Este pequeño gesto puede ahorrarte un bloqueo remoto del servidor.

Reiniciar el servicio SSH

Una vez validada la configuración, podemos aplicar los cambios:

sudo systemctl restart sshd

⚠️ Importante: no cierres tu sesión SSH actual hasta confirmar que puedes reconectarte correctamente. Una buena práctica consiste en abrir una segunda sesión de prueba antes de dar por finalizado el proceso.

Comprobar los algoritmos KEX activos

Para verificar que SSH está utilizando exactamente los algoritmos que hemos definido:

sshd -T | grep kex

La salida debería ser similar a:

kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

Esto confirma dos aspectos clave:

  • Los algoritmos débiles han sido eliminados.
  • El servidor sigue siendo compatible con clientes SSH modernos.

Prueba adicional (opcional, pero muy recomendable)

Si quieres ir un paso más allá, puedes comprobar activamente que un KEX débil ya no es aceptado. Desde otra máquina, intenta forzar un algoritmo antiguo:

ssh -oKexAlgorithms=diffie-hellman-group1-sha1 usuario@IP_DEL_SERVIDOR

El resultado esperado es:

no matching key exchange method found

Este mensaje es una buena señal: significa que el servidor rechaza activamente conexiones inseguras.

Conclusiones

Con este sencillo ajuste de hardening:

  • SSH utiliza exclusivamente algoritmos de intercambio de claves seguros.
  • Se eliminan hallazgos habituales como SSH Weak KEX en auditorías.
  • Se mantiene la compatibilidad con clientes actuales.
  • La configuración resulta limpia, mantenible y apta para entornos de producción.

Pequeños cambios como este marcan una gran diferencia en la superficie de ataque de un servidor. Y lo mejor es que, una vez aplicado, se convierte en un problema del que puedes olvidarte durante mucho tiempo.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

3 días ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

5 días ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

1 semana ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 semanas ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

2 semanas ago

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

3 semanas ago

This website uses cookies.