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 establezcaPasswordAuthentication no. Después de realizar los cambios, reinicie el servicio SSH:```bash
sudo systemctl restart sshdo 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 directivaPort. Por ejemplo, para usar el puerto2222:Port 2222Recuerde 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.
AllowUsersyAllowGroups: Use estas directivas ensshd_configpara especificar explícitamente quién puede conectarse.
AllowUsers administrador usuario1 AllowGroups usuarios_sshDenyUsersyDenyGroups: 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 noensshd_config.
5. Configurar Tiempo de Espera Inactivo y Keepalives
Evite que las sesiones SSH activas y desatendidas permanezcan abiertas indefinidamente.
ClientAliveIntervalyClientAliveCountMax: 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 deClientAliveCountMaxintentos, 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 2ensshd_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,600o400) 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 fail2banosudo yum install fail2ban). - Configuración: Configure las "jails" en
/etc/fail2ban/jail.localpara 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.