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

El archivo de configuración SSH en su sistema Unix controla cómo funciona el 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. Mientras que acciones relativamente simples, como cambiar el puerto ssh en sus dispositivos, pueden a menudo eliminar un gran número de «llamadas frías» ssh en su máquina, el archivo de configuración ssh puede hacer mucho más que eso.

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

En sistemas Linux, puede encontrar su archivo de configuración ssh para todo el sistema en «/etc/ssh/ssh/ssh_config.»

En sistemas macOS, el mismo archivo se encuentra en «/private/etc/ssh/ssh_config», que está vinculado simbólicamente a «/etc/ssh/ssh_config» para su compatibilidad.

Un segundo archivo ssh_config específico del usuario puede encontrarse en «~/.ssh/ssh_config» (el símbolo «~» representa el directorio de inicio). Este archivo sustituye al archivo de configuración de todo el sistema, lo que le permite configurar opciones específicas del usuario sin cambiar la configuración del sistema. Los sistemas no siempre incluyen un archivo «~/.ssh/ssh_config», pero se puede crear 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 Terminal y edite el archivo con su editor de texto preferido. Usaremos nano en esta demo, pero se puede usar vi o emacs en su lugar.

sudo nano /etc/ssh/ssh_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 usa para controlar cómo funciona en su sistema el shell seguro, mejor conocido como el comando ssh terminal. 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 llaves disponibles. Una explicación detallada de la funcionalidad de cada tecla se puede encontrar en la página de manual ssh_config .

Endurecimiento de la configuración SSH

Bloqueo de 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 configurados como root. En la mayoría de los casos, también querrá denegar los permisos a cualquier persona que no sea root.

sudo chown root:root /etc/ssh/sshd_config
sudo chmod og-rwx /etc/ssh/sshd_config

Confirmar el protocolo SSH 2

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

Para establecer explícitamente el protocolo, use lo siguiente en su ssh_config:

Protocolo 2

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>»»»»>>>>>>>>>>>>>>>>>.

También puede establecer implícitamente su protocolo utilizando Cifras, que automáticamente establecerá el Protocolo a 2 para utilizar las Cifras modernas.

Cifras aes128-ctr,aes192-ctr,aes256-ctr

Deshabilitar contraseña vacía

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

PermitEmptyPasswords no>PermitEmptyPasswords

Deshabilitar el inicio de sesión de root

Rara vez se debe usar Root para la mayoría de los usos de Linux. La prevención del inicio de sesión de root le permitirá bloquear las cuentas específicamente para lo que se necesita y no permitir el uso en todo el sistema. Esta es también una cuenta que es objeto de ataques. Las opciones de PermitRootLogin incluyen «sí», «sin contraseña», «sólo comandos forzados» o «no». El valor por defecto es «sí». Para detener el inicio de sesión de root completamente, haga clic en la línea de abajo.

PermitRootLogin no

Cambiar el número de puerto

Puede cambiar el número de puerto de 22 (el predeterminado) como una forma de limitar los accesos directos a su servidor en ese puerto. Esto limitará a la mayoría de las personas que utilizan un script que va a ese puerto, o que atacan ese puerto manualmente. Sin embargo, esto no limitará a aquellos que exploren puertos abiertos y ataquen lo que esté abierto. Además, deberá asegurarse de que cualquier persona que acceda a través de este puerto conozca el nuevo número y de que el nuevo número de puerto sea utilizado por cualquier cliente o software.

Para ajustar el puerto, edite el demonio ssh principal en «/etc/ssh/sshd_config.» Deberá añadir una nueva línea que especifique el puerto siguiendo la sintaxis Puerto XXXXX.

Restringir el acceso

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

Permitir a los usuarios ramesh john jason
AllowGroups sysadmin dba
DenegarUsuarios cvs apache jane
DenyGroups desarrolladores qa>

Actualizar el LoginGraceTime

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

LoginGraceTime 1m

Personalización de Configuraciones SSH

Creación de alias

Las opciones de la línea de comandos Ssh se pueden especificar mediante alias en ssh_config. El siguiente alias permite al usuario conectarse al servidor de desarrollo con las opciones especificadas simplemente escribiendo ssh dev en la línea de comandos.

Desarrollo del host
HostName dev.example.com
Puerto 22222
Usuario foobar

Esto ejecuta el siguiente comando cuando se ejecuta:

ssh foobar@dev.example.com -p 22222

Tenga en cuenta que el puerto ssh se ha cambiado a 22222 para evitar las llamadas en frío. De lo contrario, es una conexión ssh muy simple, acortada por muchos caracteres por conveniencia.

Autenticación con pares de claves seguras

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

Desarrollo del host
HostName dev.example.com
Puerto 22222
Usuario foobar
IdentityFile ~/.ssh/dev.example.key

Como en los ejemplos anteriores, este comando ssh se ejecuta con ssh dev, ejecutando el siguiente comando equivalente en la línea de comandos:

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

Configuración de otras opciones de ssh

Las siguientes opciones ssh son algunas de las claves más comunes que se encuentran en los archivos ssh_config.

Compresión: Esta tecla toma «yes» o «no» como argumentos y se utiliza para habilitar la desactivación de la compresión para un host. Esto normalmente no es necesario a menos que la conexión sea increíblemente lenta.

LogLevel: Establezca el nivel de detalle en los registros del lado del cliente de ssh. De menos a más verboso, las opciones son QUIETO, FATAL, ERROR, INFO, VERBOSE, DEBUG1, DEBUG2, y DEBUG3.

StrictHostKeyChecking: Establezca una preferencia para agregar hosts al archivo known_hosts. «sí» nunca añadirá hosts conocidos. El «no» siempre se agregará a los hosts conocidos. «ask», que es la opción por defecto, le preguntará al usuario antes de agregarlo al archivo known_hosts. El «sí» proporciona la mayor seguridad contra ataques de caballos de Troya, pero puede ser tedioso con un archivo known_hosts mal administrado. El «no» es el menos seguro, pero puede hacer que la conexión con un gran número de huéspedes temporales sea menos dolorosa.

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

Reenvío de conexión

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

LocalForward: Defina una conexión para reenviar el tráfico de un puerto local a una máquina remota. Esto hace que la conexión se realice a través de la red remota.

RemoteForward: Defina un puerto remoto para ser tunelizado fuera de un puerto local. Esta es la inversa de la opción anterior.

DynamicForward: Configure un puerto local para utilizarlo 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 usando el comando ssh. Es una forma de configurar alias y atajos complejos que ayudan a aumentar la seguridad al hacer que las partes más seguras de ssh sean más fáciles de usar.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *