Mejores Prácticas de Seguridad SSH: Fortaleciendo tu Servidor y Cliente

Esta guía completa describe las mejores prácticas de seguridad esenciales para las conexiones SSH. Aprende a fortalecer tu servidor deshabilitando la autenticación por contraseña, cambiando los puertos predeterminados y limitando el acceso. Descubre hábitos cruciales del lado del cliente, incluida la protección de claves privadas y la verificación de claves de host. También cubrimos medidas avanzadas como la autenticación de dos factores y Fail2ban para proteger tu acceso remoto contra intrusiones no autorizadas.

42 vistas

Mejores Prácticas de Seguridad SSH: Fortaleciendo su Servidor y Cliente

Secure Shell (SSH) es una herramienta indispensable para administradores de sistemas y desarrolladores, que permite el acceso remoto seguro a servidores y otros dispositivos de red. Si bien SSH ofrece un cifrado robusto por defecto, su seguridad puede mejorarse significativamente implementando una serie de mejores prácticas tanto en el lado del servidor como en el del cliente. Este artículo profundiza en medidas de seguridad críticas diseñadas para fortalecer sus conexiones SSH, proteger contra vulnerabilidades comunes y prevenir el acceso no autorizado.

Descuidar la seguridad SSH puede dejar sus sistemas expuestos a ataques de fuerza bruta, amenazas de hombre en el medio (man-in-the-middle) y violaciones de datos no autorizadas. Al adoptar las prácticas descritas a continuación, puede fortalecer significativamente su postura de seguridad y garantizar la integridad y confidencialidad de sus operaciones remotas.

Fortalecimiento de la Seguridad del Lado del Servidor

La configuración de su servidor SSH (sshd_config) es primordial para establecer una base segura para el acceso remoto. Estos cambios impactan directamente cómo los clientes se conectan y autentican a su servidor.

1. Deshabilitar la Autenticación por Contraseña

La autenticación por contraseña es inherentemente vulnerable a los ataques de fuerza bruta. Reemplazarla con autenticación basada en claves SSH es una de las mejoras de seguridad más efectivas que puede realizar.

  • Por qué: Las claves SSH son mucho más complejas que las contraseñas y no se pueden adivinar ni descifrar fácilmente mediante métodos de fuerza bruta. Proporcionan una forma de autenticación mucho más sólida.
  • Cómo: Edite su archivo sshd_config (típicamente ubicado en /etc/ssh/sshd_config) y establezca PasswordAuthentication no. Después de realizar los cambios, reinicie el servicio SSH:

    ```bash
    sudo systemctl restart sshd

    o en sistemas más antiguos:

    sudo service ssh restart
    ```

    Importante: Asegúrese de haber configurado y probado con éxito la autenticación basada en claves SSH antes de deshabilitar la autenticación por contraseña para evitar quedarse fuera.

2. Usar un Puerto No Estándar

Si bien no es una medida de seguridad principal contra atacantes sofisticados, cambiar el puerto SSH predeterminado (22) puede reducir el ruido de los bots automatizados que escanean servidores vulnerables.

  • Cómo: En sshd_config, cambie la directiva Port. Por ejemplo, para usar el puerto 2222:

    Port 2222

    Recuerde actualizar las reglas de su firewall para permitir el tráfico en el nuevo puerto y especificar el puerto al conectarse desde su cliente:

    bash ssh -p 2222 usuario@su_ip_del_servidor

3. Limitar el Acceso de Usuarios y Grupos

Controle qué usuarios y grupos tienen permitido iniciar sesión a través de SSH.

  • AllowUsers y AllowGroups: Use estas directivas en sshd_config para especificar explícitamente quién puede conectarse.
    AllowUsers administrador usuario1 AllowGroups usuarios_ssh
  • DenyUsers y DenyGroups: Alternativamente, use estas para bloquear usuarios o grupos específicos.

4. Deshabilitar el Inicio de Sesión del Usuario Root

El inicio de sesión directo como root a través de SSH debe deshabilitarse para evitar que los atacantes apunten directamente a la cuenta más poderosa. En su lugar, los usuarios deben iniciar sesión con sus propias cuentas y usar sudo para tareas administrativas.

  • Cómo: Establezca PermitRootLogin no en sshd_config.

5. Configurar Tiempo de Espera Inactivo y Keepalives

Evite que las sesiones SSH activas y desatendidas permanezcan abiertas indefinidamente.

  • ClientAliveInterval y ClientAliveCountMax: Estas configuraciones del lado del servidor envían paquetes nulos al cliente a intervalos regulares para verificar si la conexión sigue activa. Si el cliente no responde después de ClientAliveCountMax intentos, el servidor desconecta la sesión.
    ClientAliveInterval 300 # Envía un paquete cada 5 minutos ClientAliveCountMax 2 # Desconecta después de 2 respuestas perdidas (10 minutos)

6. Habilitar Solo el Protocolo 2

El protocolo SSH versión 1 está obsoleto y tiene vulnerabilidades de seguridad conocidas. Asegúrese de que solo esté habilitado el Protocolo 2.

  • Cómo: Establezca Protocol 2 en sshd_config.

7. Fortalecer las Claves del Host

Asegúrese de que las claves del host de su servidor estén protegidas y se administren adecuadamente.

  • Permisos: Verifique que los archivos de claves del host (por ejemplo, /etc/ssh/ssh_host_rsa_key) tengan permisos restrictivos (por ejemplo, 600) y sean propiedad de root.

Mejores Prácticas de Seguridad del Lado del Cliente

Proteger su máquina cliente y sus claves SSH es tan crucial como el fortalecimiento del lado del servidor.

1. Proteja sus Claves Privadas

Su clave SSH privada es la puerta de acceso a sus servidores. Trátela con el máximo cuidado.

  • Permisos: Asegúrese de que su archivo de clave privada (por ejemplo, ~/.ssh/id_rsa) tenga permisos estrictos (por ejemplo, 600 o 400) para que solo usted pueda leerlo.
    bash chmod 600 ~/.ssh/id_rsa
  • Frases de Contraseña: Siempre use una frase de contraseña segura para cifrar su clave privada. Esto agrega una capa adicional de seguridad, requiriendo la frase de contraseña incluso si el archivo de clave se ve comprometido.
  • Evite Copiar: No comparta su clave privada con nadie ni la almacene en ubicaciones inseguras.

2. Use el Reenvío del Agente SSH con Prudencia

El reenvío del agente SSH le permite usar sus claves SSH locales para autenticarse en servidores remotos sin copiar sus claves privadas a esos servidores. Si bien es conveniente, puede ser un riesgo de seguridad si el servidor remoto se ve comprometido.

  • Habilitar: ssh -A usuario@su_ip_del_servidor
  • Mejor Práctica: Use el reenvío del agente solo cuando sea absolutamente necesario y desconéctese lo antes posible. Considere deshabilitarlo por defecto en la configuración de su cliente.

3. Verifique las Huellas Digitales de las Claves del Host

Cuando se conecta a un servidor SSH por primera vez, su cliente le pide que verifique la huella digital de la clave del host del servidor. Esto ayuda a prevenir ataques de hombre en el medio.

  • Cómo: Siempre verifique la huella digital contra una fuente confiable (por ejemplo, proporcionada por su proveedor de hosting o administrador del sistema). Si la huella digital cambia inesperadamente en conexiones posteriores, podría indicar un problema de seguridad.

4. Mantenga Actualizado el Software Cliente SSH

Asegúrese de que su software cliente SSH (OpenSSH, PuTTY, etc.) se mantenga actualizado para beneficiarse de los últimos parches y funciones de seguridad.

Medidas de Seguridad Avanzadas

Más allá de los pasos fundamentales, considere estas técnicas avanzadas:

1. Autenticación de Dos Factores (2FA)

Implemente 2FA para una capa adicional de seguridad. Esto generalmente implica una combinación de algo que usted sabe (su clave SSH o contraseña) y algo que usted tiene (un código de una aplicación de autenticación o un token de hardware).

  • Herramientas: Google Authenticator, Duo Security o tokens de hardware se pueden integrar con PAM (Módulos de Autenticación Conectables) para SSH.

2. Fail2ban

Fail2ban es un marco de software de prevención de intrusiones que escanea archivos de registro (por ejemplo, /var/log/auth.log) y prohíbe IPs que muestran signos maliciosos: demasiados fallos de contraseña, búsqueda de exploits, etc. Actualiza las reglas del firewall para rechazar las IPs durante un tiempo especificado.

  • Instalación: Generalmente disponible a través de administradores de paquetes (sudo apt install fail2ban o sudo yum install fail2ban).
  • Configuración: Configure las "jails" en /etc/fail2ban/jail.local para monitorear los registros SSH y definir tiempos y umbrales de prohibición.

3. Configuración del Firewall

Utilice un firewall (como ufw, firewalld o iptables) para restringir el acceso a su puerto SSH (ya sea predeterminado o personalizado) solo desde direcciones IP o rangos confiables.

  • Ejemplo (ufw):
    bash sudo ufw allow from ip_confiable to any port 22 sudo ufw enable

Conclusión

Proteger sus conexiones SSH es un proceso continuo, no una configuración única. Al aplicar diligentemente estas mejores prácticas del lado del servidor y del cliente, puede mitigar significativamente los riesgos asociados con el acceso remoto. Priorizar la autenticación con claves SSH, los controles de acceso robustos y las herramientas de monitoreo como Fail2ban forman la base de un entorno SSH seguro. La revisión y actualización regular de sus configuraciones de seguridad garantizará que sus sistemas permanezcan protegidos contra amenazas en evolución.