Endurecimiento de SSH en Linux: controles concretos antes del kernel
Guía técnica de endurecimiento de SSH en Linux: parámetros de sshd_config, restricción de origen, cuentas, claves, permisos y verificación continua.
En la mayoría de servidores Linux empresariales, el vector de entrada más explotado no es un fallo del kernel ni un módulo cargado de más: es SSH. Cuentas con contraseña, root accesible directamente, claves sin passphrase y puertos de administración alcanzables desde redes no corporativas concentran buena parte del riesgo real. Este artículo no propone una secuencia general de priorización de controles de hardening Linux —ese ángulo ya está cubierto en el blog de Mister IT—, sino que se enfoca en un subconjunto técnico concreto: qué endurecer en el servicio SSH y en las cuentas que lo usan, con criterios verificables.
Por qué SSH merece un tratamiento propio
SSH es el único servicio que casi todo servidor Linux expone. A diferencia de un motor de base de datos o un servidor web, no se puede apagar si no se usa: es la vía de administración. Eso lo convierte en un objetivo permanente y en un punto donde un error de configuración tiene consecuencias directas sobre la operación.
Tres razones justifican tratarlo como bloque independiente dentro del hardening:
- Es alcanzable por defecto. Un servidor recién aprovisionado suele aceptar autenticación por contraseña y permitir
rootdirecto hasta que alguien lo cambia. - Concentra credenciales. Claves privadas, agentes,
known_hostsy configuraciones de~/.sshson activos que rara vez se inventarían. - Su configuración es verificable. A diferencia de controles de kernel con efectos difusos,
sshd_configy los permisos de~/.sshse pueden auditar de forma objetiva y automatizable.
Controles sobre sshd_config que conviene revisar primero
La configuración del demonio SSH es el punto de partida. Estos parámetros son los que aparecen con más frecuencia mal configurados en entornos productivos:
PermitRootLogin: debe estar ennoo, si se requiere por razones operativas justificadas, enprohibit-passwordcon clave y origen restringido.yescon contraseña es el caso más grave.PasswordAuthentication: en servidores con acceso administrativo nominal,no. La autenticación por clave pública elimina el vector de fuerza bruta y de reutilización de credenciales.PermitEmptyPasswords: siempreno. Su presencia enyessuele indicar configuración heredada sin revisión.PubkeyAuthentication:yes, con algoritmos modernos. Conviene revisarPubkeyAcceptedAlgorithmspara excluirssh-rsacon SHA-1 cuando la flota lo permita.X11Forwarding:nosalvo necesidad explícita. Reduce superficie y evita túneles no previstos.AllowTcpForwardingyPermitTunnel:nocuando no se usan. Limitan el uso del servidor como pivote.MaxAuthTriesyLoginGraceTime: valores bajos (por ejemplo, 3 y 30s) reducen la ventana de intentos automatizados.ClientAliveIntervalyClientAliveCountMax: cierran sesiones inactivas, útil en consolas olvidadas.
Cualquier cambio en sshd_config debe validarse con sshd -t antes de reiniciar el servicio. Un error de sintaxis que impida arrancar sshd en un servidor remoto puede dejar el activo inaccesible hasta intervención por consola.
Restricción de origen y separación de planos
Endurecer la autenticación sin restringir el origen deja la mitad del trabajo hecho. Un servidor con clave pública obligatoria pero alcanzable desde cualquier red sigue expuesto a intentos, escaneos y explotación de vulnerabilidades del propio demonio.
Controles concretos:
- Filtrado por origen en el firewall del host (nftables, firewalld) o en la ACL de red, limitando el puerto 22 a rangos de administración conocidos.
Match Addressensshd_configpara aplicar políticas distintas según el origen: por ejemplo, exigir MFA o clave específica desde redes menos confiables.AllowUsers/AllowGroupspara limitar qué cuentas pueden autenticarse, en lugar de confiar en que nadie más lo intentará.- Bastión o jump host cuando el número de servidores lo justifica. Centraliza autenticación, registro y control de acceso, y reduce los puntos con SSH expuesto.
- Puerto no estándar: no es un control de seguridad real, pero reduce ruido de escaneo automatizado. No debe presentarse como medida de protección.
La separación de planos —administración por una vía distinta al tráfico de aplicación— es especialmente relevante en servidores con exposición a Internet. Si el mismo puerto que sirve tráfico sirve administración, cualquier compromiso del servicio de aplicación acerca al atacante al plano de control.
Cuentas, claves y permisos: el control que suele quedar pendiente
La configuración del demonio es solo una parte. El estado de las cuentas y las claves determina qué puede hacer quien logra autenticarse.
Puntos a revisar:
- Cuentas con shell válido. En
/etc/passwd, cualquier cuenta que no requiera login interactivo debería tener/sbin/nologino/bin/false. Cuentas de servicio con/bin/bashson un hallazgo recurrente. - Claves autorizadas.
~/.ssh/authorized_keysacumula claves a lo largo del tiempo. Conviene inventariarlas, asociarlas a una persona o sistema, y eliminar las que no tengan dueño identificable. - Claves sin passphrase. En cuentas humanas, una clave sin passphrase equivale a una contraseña almacenada en disco. En cuentas de automatización puede ser aceptable si el acceso está restringido por origen y comando forzado.
- Permisos.
~/.sshen700,authorized_keysen600, propiedad del usuario correcto. Permisos laxos hacen quesshdrechace la clave o, peor, que otro usuario local pueda modificarla. sudoy escalada. El acceso administrativo debería pasar porsudocon registro, no por sesión directa deroot. Revisar/etc/sudoersy/etc/sudoers.d/para detectar reglasNOPASSWDamplias oALL=(ALL) ALLsin justificación.- Rotación y revocación. Definir cómo se retira el acceso cuando alguien deja la organización o cambia de rol. Sin este procedimiento, el inventario de claves se degrada rápido.
Verificación y registro: cómo saber que el control sigue en pie
Un control aplicado una vez no permanece aplicado. Los cambios de configuración, las reinstalaciones y las excepciones operativas reintroducen configuraciones inseguras.
Mecanismos razonables:
- Verificación periódica automatizada de los parámetros críticos de
sshd_configy de los permisos de~/.ssh, con alerta ante desviación. - Registro de autenticaciones (
/var/log/auth.log,journald) enviado a un colector central fuera del propio servidor. Sin esto, un compromiso puede borrar la evidencia local. - Sincronización horaria (chrony o NTP) correcta: sin ella, la correlación de eventos entre servidores es inviable.
- Auditoría de comandos privilegiados vía
sudoconlog_outputo reglas deauditdsobreexecve, según el nivel de detalle requerido. - Revisión de intentos fallidos como señal operativa: un aumento sostenido de intentos contra un servidor puede indicar reconocimiento previo.
En el contexto chileno, esta capa de trazabilidad es la que sostiene la preparación frente a marcos como la Ley 21.719: evidencia de accesos, cambios y responsables. Conviene hablar de preparación y de evidencia disponible, no de cumplimiento garantizado.
Cómo encajar esto en una operación existente
Este bloque de controles no reemplaza una estrategia de hardening más amplia, pero sí se puede abordar como unidad acotada, con alcance y verificación claros. Un orden operativo razonable:
- Inventariar servidores con SSH expuesto y clasificar por criticidad y origen de acceso.
- Aplicar los controles de
sshd_configen preproducción, validar consshd -ty desplegar por ventana. - Restringir origen en firewall o ACL, empezando por los activos de mayor exposición.
- Limpiar cuentas y claves con un inventario explícito de responsables.
- Consolidar registro centralizado y verificación periódica de la configuración.
Si tu operación necesita ordenar estos controles sobre inventario real y no sobre plantillas genéricas, en Hardening & Seguridad trabajamos el endurecimiento de SSH y de los planos de administración con criterio de exposición y criticidad.
Conversemos sobre cómo evaluar Hardening & Seguridad en tu operación.