Mejores Prácticas para Fortalecer la Seguridad SSH en Servidores Linux

Asegura tu servidor Linux de inmediato dominando estas técnicas esenciales de fortalecimiento de SSH. Esta guía experta proporciona pasos prácticos, centrándose en los cambios de configuración en `sshd_config`. Aprende a deshabilitar el inicio de sesión root de alto riesgo, implementar autenticación obligatoria basada en claves para eliminar contraseñas débiles, cambiar el puerto predeterminado e instalar Fail2Ban para limitar eficazmente la velocidad contra ataques de fuerza bruta. Protege tu sistema transformando SSH en un canal robusto y seguro.

34 vistas

Mejores prácticas para reforzar la seguridad de SSH en servidores Linux

Secure Shell (SSH) es la columna vertebral de la administración remota para prácticamente todos los servidores Linux. Aunque es increíblemente potente y generalmente seguro desde el principio, SSH es también el objetivo principal de actores maliciosos que intentan obtener acceso no autorizado mediante ataques de fuerza bruta, ataques de diccionario y relleno de credenciales (credential stuffing).

Reforzar su configuración SSH es posiblemente el paso más crítico al asegurar una nueva implementación de Linux. Al implementar algunas prácticas esenciales, yendo más allá de la simple autenticación de nombre de usuario y contraseña, puede reducir drásticamente su superficie de ataque, minimizar el ruido en sus registros y garantizar que solo los usuarios autorizados que utilicen métodos seguros puedan acceder a su sistema.

Esta guía describe los pasos esenciales y procesables para asegurar el servicio SSH en cualquier distribución de Linux, centrándose en el archivo de configuración principal: /etc/ssh/sshd_config.


Prerrequisito: Copia de seguridad de la configuración

Antes de realizar cualquier cambio en la configuración del demonio SSH (sshd_config), es fundamental crear una copia de seguridad. Una configuración incorrecta puede bloquearle el acceso a su servidor. Pruebe siempre exhaustivamente los cambios.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)

Después de editar el archivo, compruebe la sintaxis antes de reiniciar el servicio:

sudo sshd -t

Si la prueba es satisfactoria, puede reiniciar el servicio SSH de forma segura (el comando varía según la distribución):

# Para sistemas que usan systemd (la mayoría de las distribuciones modernas)
sudo systemctl restart sshd

1. Deshabilitar el inicio de sesión como root

Permitir el inicio de sesión directo como usuario root es uno de los mayores riesgos de seguridad. Si un atacante logra descifrar una contraseña por fuerza bruta, obtiene instantáneamente el control total del sistema. En su lugar, los usuarios que no son root deben iniciar sesión primero y elevar privilegios usando sudo.

Paso de configuración

Abra /etc/ssh/sshd_config y localice la directiva PermitRootLogin. Cambie su valor a no.

# Antes:
# PermitRootLogin yes

# Después (Mejor práctica):
PermitRootLogin no

Nota importante

Asegúrese de haber creado y configurado al menos un usuario estándar con privilegios sudo antes de deshabilitar el inicio de sesión de root. De lo contrario, se le bloqueará el acceso administrativo.

2. Implementar la autenticación obligatoria basada en claves

La autenticación por contraseña es susceptible a ataques de fuerza bruta y de diccionario. Las claves SSH, que consisten en una clave pública (en el servidor) y una clave privada (en el cliente), ofrecen una seguridad significativamente mayor debido a su extrema complejidad y longitud.

A. Generar e instalar claves

  1. Generar el par de claves (en su máquina cliente local):
    bash ssh-keygen -t ed25519 -C "[email protected]"
  2. Copiar la clave pública (al servidor):
    bash ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip

B. Deshabilitar la autenticación por contraseña

Una vez que confirme que puede iniciar sesión correctamente utilizando su clave SSH, deshabilite por completo la autenticación por contraseña.

# Deshabilitar contraseñas
PasswordAuthentication no

# Asegurar que las claves estén habilitadas
PubkeyAuthentication yes

Mejor práctica: Utilice tipos de clave fuertes como Ed25519 o RSA de 4096 bits. Proteja siempre la clave privada con una contraseña segura.

3. Cambiar el puerto SSH predeterminado (Defensa en profundidad)

El puerto SSH predeterminado (puerto TCP 22) es escaneado constantemente por bots automatizados. Cambiar el puerto a un número alto y no estándar (por ejemplo, 2222, 22222 o superior a 30000) reduce significativamente la cantidad de ruido en los registros de su servidor y lo hace invisible para los escáneres casuales.

Paso de configuración

En /etc/ssh/sshd_config, cambie la directiva Port:

# Antes:
# Port 22

# Después (Puerto no estándar de ejemplo):
Port 22222

Advertencia: Ajuste del cortafuegos requerido

Si cambia el puerto, debe actualizar su cortafuegos (por ejemplo, iptables, firewalld o Grupos de Seguridad de AWS) para permitir el tráfico en el nuevo puerto. No hacerlo resultará en una pérdida inmediata de conexión.

Ejemplo usando firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload

4. Limitar el acceso a usuarios y grupos específicos

Para aplicar un control de acceso estricto, debe definir explícitamente qué usuarios o grupos están autorizados a conectarse a través de SSH. Esto limita los posibles puntos de entrada, incluso si una cuenta está comprometida o no se utiliza.

Directivas de configuración

Utilice una o ambas de las siguientes directivas en sshd_config:

  1. Permitir usuarios específicos:
    config AllowUsers alice bob
  2. Permitir grupos específicos:
    config AllowGroups sshaccess admins

Si estas directivas están presentes, cualquier usuario o grupo no incluido explícitamente se le negará el acceso.

5. Aplicar protocolos y cifrados más estrictos

Asegúrese de estar utilizando el moderno y seguro Protocolo SSH 2 y fuerce el uso de cifrados criptográficos y Códigos de Autenticación de Mensajes (MACs) fuertes.

Pasos de configuración

Verifique que los protocolos heredados y vulnerables estén deshabilitados:

Protocol 2

# Denegar métodos de autenticación heredados inseguros
HostbasedAuthentication no
IgnoreRhosts yes

Si bien las implementaciones modernas de SSH a menudo están bien configuradas por defecto, definir explícitamente cifrados y MACs fuertes puede prevenir ataques de degradación. Un conjunto mínimo recomendado incluye:

Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256

6. Implementar limitación de velocidad e detección de intrusiones (Fail2Ban)

Incluso con autenticación basada en claves, la sondeo continuo por parte de bots consume recursos y satura los registros. Fail2Ban es una herramienta crítica que monitorea los registros en busca de intentos de inicio de sesión fallidos (u otra actividad sospechosa) y ajusta dinámicamente el cortafuegos para prohibir temporal o permanentemente la dirección IP de origen.

Pasos generales de instalación y configuración

  1. Instalar Fail2Ban:
    ```bash
    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban

    RHEL/CentOS/Fedora

    sudo dnf install fail2ban
    `` 2. **Configurar la 'cárcel' (Jail) SSH:** Fail2Ban utiliza configuraciones llamadas 'jails'. La 'jail'sshdpredeterminada es muy eficaz para monitorear/var/log/auth.log` (o equivalente) en busca de fallos repetidos en el servicio SSH y aplicar automáticamente prohibiciones temporales.

  2. Asegurar que el servicio se esté ejecutando:
    bash sudo systemctl enable fail2ban sudo systemctl start fail2ban

Fail2Ban mitiga significativamente los intentos automatizados de fuerza bruta y se considera obligatorio para los servidores accesibles desde Internet.

7. Otras directivas esenciales para reforzar SSH

Estos ajustes menores ayudan a administrar sesiones y reducen la posible ventana de ataque:

Directiva Valor recomendado Propósito
ClientAliveInterval 300 Envía un paquete nulo cada 300 segundos (5 minutos) para mantener la sesión activa.
ClientAliveCountMax 3 Número máximo de comprobaciones de 'vida' fallidas antes de la desconexión (15 minutos de tiempo inactivo total).
UsePAM yes Habilita los Módulos de Autenticación Conectables (PAM) para políticas de seguridad adicionales del sistema local.
PermitEmptyPasswords no Prohíbe que los usuarios con contraseñas vacías inicien sesión (debería ser no por defecto).

Resumen de la lista de verificación de refuerzo

Utilice esta lista de verificación para asegurarse de que su servidor cumple con los estándares básicos de refuerzo de SSH:

  1. [ ] Realizar una copia de seguridad de sshd_config antes de realizar cambios.
  2. [ ] Establecer PermitRootLogin no.
  3. [ ] Establecer PasswordAuthentication no (después de configurar las claves).
  4. [ ] Cambiar el Port a un valor no estándar.
  5. [ ] Actualizar el cortafuegos para permitir el nuevo puerto.
  6. [ ] Usar AllowUsers o AllowGroups para restringir el acceso.
  7. [ ] Establecer Protocol 2.
  8. [ ] Instalar y configurar Fail2Ban.
  9. [ ] Comprobar la configuración con sshd -t antes de reiniciar.

Al implementar estas mejores prácticas, transforma SSH de un posible pasivo a un canal de administración remota altamente seguro.