Cómo personalizar la configuración de SSH para obtener la máxima seguridad

El archivo de configuración de SSH en su sistema Unix controla el funcionamiento del shell seguro. Puede utilizarse para facilitar el uso del comando ssh, configurar funciones específicas deseadas por el usuario o reforzar la seguridad contra posibles ataques. Aunque acciones relativamente sencillas, como cambiar el puerto ssh en sus dispositivos, pueden eliminar a menudo un gran número de «llamadas frías» de ssh en su máquina, el archivo de configuración de ssh puede hacer mucho más que eso.

¿Dónde está el archivo de configuración SSH?

En los sistemas Linux, puede encontrar el archivo de configuración ssh de todo el sistema en «etcsshssh_config».

En los sistemas macOS, el mismo archivo se encuentra en «privateetcsshssh_config», que está enlazado simbólicamente con «etcsshssh_config» por compatibilidad.

Un segundo archivo ssh_config específico del usuario puede encontrarse en «~.sshssh_config» (el símbolo «~» representa el directorio de inicio). Este archivo sustituye al archivo de configuración de todo el sistema, permitiéndole establecer opciones específicas del usuario sin cambiar la configuración del sistema. Los sistemas no siempre se envían con un archivo «~.sshssh_config», pero puede crearse fácilmente.

En adelante, nos referiremos a este archivo de configuración como «ssh_config» para mayor claridad y simplicidad.

Relacionado: Cómo habilitar los inicios de sesión SSH sin contraseña en Linux

Edición del archivo ssh_config

Para editar el archivo ssh_config, abra una ventana de Terminal y edite el archivo con su editor de texto preferido. En esta demostración utilizaremos nano, pero se puede utilizar vi o emacs en su lugar.

sudo nano etcsshssh_config

Esto abrirá un archivo con docenas de líneas comentadas que explican lo que hace el archivo, pero no es una explicación completa.

¿Qué es el archivo ssh_config y qué hace ssh_config?

El archivo ssh_config se utiliza para controlar el funcionamiento del shell seguro, más conocido como el comando de terminal ssh, en su sistema. El archivo ssh_config está organizado por hosts. Cada host contiene configuraciones específicas para ese host. Se pueden utilizar comodines como * para hacer coincidir varios nombres de host con una sola declaración.

Las opciones se declaran utilizando un par clave-definición. Hay muchas claves disponibles. Puede encontrar una explicación detallada de la funcionalidad de cada clave en la página man de ssh_config.

Endureciendo su configuración SSH

Bloquear los archivos: antes de editar el archivo, asegúrese de que tanto el archivo ssh_config como el sshd_config tienen el propietario y el usuario establecidos como root. En la mayoría de los casos también querrá desautorizar los permisos a cualquiera que no sea root.

sudo chown root:root etcsshsshd_config
sudo chmod og-rwx etcsshsshd_config

Confirme el protocolo SSH 2

Asegúrese de que está utilizando el más nuevo y moderno Protocolo 2 en lugar del Protocolo 1. El protocolo más antiguo funciona con una comprobación de integridad más débil y es generalmente menos seguro.

Para establecer explícitamente el Protocolo, utilice lo siguiente en su ssh_config:

Protocolo 2

También puede establecer implícitamente su protocolo utilizando Ciphers, que establecerá automáticamente Protocol a 2 para utilizar Ciphers modernos.

Ciphers aes128-ctr,aes192-ctr,aes256-ctr

Desautorizar contraseña vacía

Asegúrese de que cada cuenta SSH utiliza una contraseña al iniciar la sesión bloqueando las contraseñas vacías.

PermitirContraseñasVacías no

No permitir el inicio de sesión de root

El root debería ser utilizado raramente para la mayoría de los usos de Linux. Impedir el inicio de sesión de root le permitirá bloquear las cuentas a lo que se necesita específicamente y no conceder el uso en todo el sistema. Esta es también una cuenta que es objetivo de ataques. Las opciones para PermitRootLogin incluyen «sí», «sin-contraseña», «sólo-comandos-forzados» o «no». El valor por defecto es «sí». Para detener completamente el inicio de sesión de root, utilice la línea siguiente.

PermitRootLogin no

Cambiar el número de puerto

Puede cambiar el número de puerto de 22 (el predeterminado) como forma de limitar los accesos directos a su servidor en ese puerto. Esto limitará a la mayoría de las personas que están utilizando un script que va a ese puerto, o que están atacando ese puerto manualmente. Sin embargo, esto no limitará a los que escanean los puertos abiertos y atacan lo que esté abierto. Además de eso, tendrá que asegurarse de que cualquiera que acceda a través de este puerto sea consciente del nuevo número, y que ese nuevo número de puerto sea utilizado por cualquier cliente o software.

Para ajustar el puerto, edite el demonio ssh principal en «etcsshsshd_config». Querrá añadir una nueva línea especificando el puerto siguiendo la sintaxis Puerto XXXXX.

Restringir el acceso

Si tiene varias personas que acceden a su servidor, es posible que quiera restringir el uso de ssh por completo.En esos casos, puede permitir y denegar tanto a los usuarios como a los grupos. Para ello, deberá utilizar una de las siguientes claves, seguida de los valores que desee permitir o denegar: DenegarUsuarios, PermitirUsuarios, DenegarGrupos y PermitirGrupos. Esto se completa en este orden, así que aunque permita a un usuario si está en la sección «denyusers», será denegado.

AllowUsers ramesh john jason
AllowGroups sysadmin dba
DenyUsers cvs apache jane
DenyGroups desarrolladores qa

Actualizar el LoginGraceTime

Por defecto, la cantidad de tiempo que una persona tiene que estar inactiva sin iniciar sesión es de dos minutos. Limitar esto ayudará a prevenir conexiones no autorizadas. Una sugerencia típica es un minuto o menos. Establezca el tiempo utilizando LoginGraceTime.

LoginGraceTime 1m

Personalización de las configuraciones SSH

Creación de alias

Las opciones de la línea de comandos de Ssh pueden especificarse a través de alias en ssh_config. El siguiente alias permite al usuario conectarse al servidor dev con las opciones especificadas simplemente escribiendo ssh dev en la línea de comandos.

Host dev
HostName dev.example.com
Puerto 22222
Usuario foobar

Esto ejecuta el siguiente comando cuando se ejecuta:

ssh foobar@dev.example.com -p 22222

Observe que el puerto ssh se ha cambiado a 22222 para evitar las llamadas en frío. Por lo demás, se trata de una conexión ssh muy sencilla, acortada con muchos caracteres por comodidad.

Autenticación con pares de claves seguras

ssh es más seguro y conveniente cuando se utiliza con pares de claves público-privadas para la autenticación, en lugar de contraseñas. El archivo ssh_config puede declarar una clave específica para un host concreto utilizando la clave IdentityFile.

Host dev
Nombre del host dev.ejemplo.com
Puerto 22222
Usuario foobar
IdentityFile ~.sshdev.example.key

Al igual que en los ejemplos anteriores, este comando ssh con ejecutado con ssh dev, ejecutando el siguiente comando equivalente en la línea de comandos:

ssh -i ~.sshdev.example.key foobar@dev.example.com -p 22222

Configuración de otras opciones de ssh

Las opciones ssh que aparecen a continuación son algunas de las claves más comunes que se encuentran en los archivos ssh_config.

Compresión: Esta clave toma «sí» o «no» como argumentos y se utiliza para activar o desactivar la compresión para un host. Normalmente no es necesario a menos que la conexión sea increíblemente lenta.

LogLevel: Establece el nivel de detalle en los registros del lado del cliente ssh. Desde el menos verboso al más verboso, las opciones son QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG1, DEBUG2 y DEBUG3.

Comprobación estricta de las claves de los hosts: Establezca una preferencia para añadir hosts al archivo known_hosts. «sí» nunca añadirá a known_hosts. «no» siempre añadirá a known_hosts. «preguntar», que es la opción por defecto, preguntará al usuario antes de añadir al archivo known_hosts. «sí» proporciona la mayor seguridad contra los ataques de troyanos, pero puede ser tedioso con un archivo known_hosts mal gestionado. «no» es el menos seguro, pero puede hacer que la conexión a un gran número de hosts temporales sea menos dolorosa.

UserKnownHostsFile: Especifica la ruta para un archivo known_hosts específico del usuario.

Reenvío de conexiones

ssh se utiliza a menudo para reenviar conexiones, permitiendo que una conexión local haga un túnel a través de una conexión remota. Las siguientes opciones se pueden utilizar para configurar el reenvío de conexiones.

LocalForward: Define una conexión para reenviar el tráfico de un puerto local a una máquina remota. Esto hace un túnel de la conexión a través de la red remota.

RemoteForward: Define un puerto remoto para que haga un túnel hacia fuera de un puerto local. Es la opción inversa a la anterior.

DynamicForward: Configure un puerto local para que se utilice con un protocolo de reenvío dinámico.

Conclusión

La mayoría de las opciones de ssh_config existen para proporcionar formas más convenientes de realizar tareas específicas utilizando el comando ssh. Es una forma de configurar complejos alias y atajos que ayudan a aumentar la seguridad haciendo que las partes más seguras de ssh sean más fáciles de usar.

Deja un comentario

Este sitio web utiliza cookies para mejorar tu experiencia. Si continuas utilizando este sitio consideramos que estás de acuerdo con esto. Más información

Los ajustes de cookies en esta web están configurados para «permitir las cookies» y ofrecerte la mejor experiencia de navegación posible. Si sigues usando esta web sin cambiar tus ajustes de cookies o haces clic en «Aceptar», estarás dando tu consentimiento a esto.

Cerrar