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

El archivo de configuración SSH en Unix controla cómo funciona el shell seguro. Se puede usar para hacer que el comando ssh sea más fácil de usar, configurar ciertas funciones requeridas por el usuario o reforzar la seguridad contra posibles ataques. Si bien las acciones relativamente simples, como cambiar el puerto ssh en sus dispositivos, a menudo pueden eliminar una gran cantidad de "llamadas en frío" en su dispositivo, el archivo de configuración ssh puede hacer mucho más que eso.

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

¿Dónde está el archivo SSH?

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

En los sistemas Linux, puede encontrar el archivo de configuración ssh de todo el sistema en "/etc/ssh/ssh_config".

في sistemas macOS , el archivo en sí se encuentra en "/private/etc/ssh/ssh_config", que enlaza con "/etc/ssh/ssh_config" para compatibilidad.

Se puede especificar un segundo archivo ssh_config de usuario en “~/.ssh/ssh_config” (el “~” es el directorio de inicio). Este archivo reemplaza el archivo de configuración de todo el sistema, lo que le permite establecer opciones específicas del usuario sin cambiar la configuración del sistema. Los sistemas no siempre se envían con un archivo “~/.ssh/ssh_config”, pero se pueden crear fácilmente.

De ahora en adelante, nos referiremos a este archivo de configuración como “ssh_configPor claridad y sencillez.

Edite el archivo ssh_config

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

sudo nano / etc / ssh / ssh_config

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

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

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

El archivo ssh_config se utiliza para controlar cómo funciona en su sistema el shell seguro, conocido como el comando de terminal ssh. El archivo ssh_config está organizado por hosts. Cada host tiene una configuración específica para ese host. Los comodines se pueden utilizar como * Para hacer coincidir múltiples nombres de host con una sola declaración.

Las opciones se definen mediante el par clave/definición. Hay muchos interruptores disponibles. Puede encontrar una explicación detallada de las funciones de cada tecla en la página hombre ssh_config.

Configura tu SSH

Bloquear archivos: antes de editar el archivo, asegúrese de que los archivos ssh_config y sshd_config tengan privilegios de administrador y usuario raíz. En la mayoría de los casos, también deberá denegar los permisos a cualquier persona, excepto al enrutamiento.

sudo chown root:root /etc/ssh/sshd_config

sudo chmod og-rwx /etc/ssh/sshd_config

Confirmar protocolo SSH 2

Asegúrese de estar utilizando el protocolo 2 más nuevo y moderno en lugar del protocolo 1. El protocolo anterior funciona con una verificación de integridad más débil y, en general, es menos seguro.

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

Protocol 2

También puede configurar implícitamente su propio protocolo usando Ciphers, que configurará automáticamente el protocolo en 2 para el uso de Ciphers modernos.

Ciphers aes128-ctr، aes192-ctr، aes256-ctr

No permitir una contraseña en blanco

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

PermitEmptyPasswords no

No permitir que root inicie sesión

El enraizamiento rara vez es obligatorio para la mayoría de los usuarios de Linux. La prevención de los inicios de sesión raíz le permitirá bloquear cuentas específicamente para lo que se necesita y no otorgar el uso de todo el sistema. Esta también es una cuenta objeto de ataques. Las opciones de PermitRootLogin incluyen Sí, Sin contraseña, Solo comandos forzados o No. El valor predeterminado es "sí". Para dejar de rootear por completo, tenemos que escribir 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 el acceso directo a su servidor en ese puerto. Esto restringirá a la mayoría de las personas que usan un script que va a ese puerto o que atacan ese puerto manualmente. Sin embargo, esto no limitará a aquellos que buscan puertos abiertos y atacan lo que esté abierto. Además, deberá asegurarse de que cualquier persona que ingrese a través de ese puerto conozca el nuevo número y que este nuevo número de puerto esté siendo utilizado por cualquier cliente o programa.

Para configurar el puerto, edite el servidor ssh principal en "/etc/ssh/sshd_config". Deberá agregar una nueva línea especificando el puerto siguiendo la sintaxis Puerto XXXXX.

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

Acceso limitado

Si tiene varias personas accediendo a su servidor, es posible que desee restringir el uso de ssh por completo. Para estos casos, puede permitir y bloquear usuarios y grupos. Para ello, deberá utilizar una de las siguientes claves, seguida de los valores que desea permitir o denegar: DenyUsers, AllowUsers, DenyGroups y AllowGroups. Esto se completó en este orden, por lo que incluso si permite que un usuario esté en la sección Aprobado, será rechazado.

AllowUsers ramesh john jason

AllowGroups sysadmin dba

DenyUsers cvs apache jane

DenyGroups developers qa

Actualización de LoginGraceTime

De forma predeterminada, la cantidad de tiempo que una persona debe permanecer inactiva sin iniciar sesión es de XNUMX minutos. Reducir esto ayudará a prevenir comunicaciones no autorizadas. Una sugerencia típica es un minuto o menos. Configure la hora usando LoginGraceTime.

LoginGraceTime 1m

Personalización de configuraciones de SSH

Crear alias

Las opciones de la línea de comandos de Ssh se pueden especificar a través de los alias en ssh_config. Los siguientes alias permiten al usuario conectarse a un servidor dev Seleccione opciones simplemente escribiendo desarrollador ssh en la línea de comando.

Host dev

    HostName dev.example.com

    Port 22222

    User foobar

El siguiente comando funciona cuando se ejecuta:

ssh foobar@dev.example.com -p 22222

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

Autenticación con claves seguras

ssh es más seguro y conveniente cuando se usa con 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.

Host dev

    HostName dev.example.com

    Port 22222

    User foobar

    IdentityFile ~/.ssh/dev.example.key

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

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

Poner otras opciones de ssh

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

Compresión: esta clave acepta "sí" o "no" como argumento y se utiliza para habilitar y deshabilitar la compresión para el host. Por lo general, esto no es necesario a menos que la conexión sea increíblemente lenta.

Nivel de registro: establezca el nivel de detalle en los registros ssh del lado del cliente. De menos detallado a más detallado, las opciones son SILENCIOSO, FATAL, ERROR, INFORMACIÓN, VERBOSO, DEPURACIÓN1, DEPURACIÓN2 y DEPURACIÓN3.

Comprobación estricta de claves de host: Establezca una preferencia para agregar otro host a unknown_hosts. Nunca agregará "sí" a hosts_conocidos. Siempre agregará "no" a hosts_conocidos. Preguntar, que es el predeterminado, preguntará al usuario antes de agregarlo al archivoknown_hosts. Sí proporciona la máxima seguridad contra los ataques de troyanos, pero puede ser tedioso con un archivoknown_hosts mal administrado. No es el menos seguro, pero puede hacer que la conexión a una gran cantidad de hosts temporales sea menos dolorosa.

UsuarioConocidoHostsArchivo: especifique la ruta del archivo de hosts_conocidos del usuario.

Reenvío de llamadas

ssh se usa a menudo para redirigir las conexiones, lo que permite la conexión local al túnel a través de una conexión remota. Las siguientes opciones se pueden utilizar para configurar el desvío de llamadas.

Reenvío local: especifica una conexión para reenviar el tráfico del puerto local a una máquina remota. Esto tuneliza la conexión a través de la red remota.

Remoto Adelante: defina un puerto remoto para enrutar fuera de un puerto local. Esta es la opción opuesta a la anterior.

Avance Dinámico: configure un puerto local para usarlo 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 mediante el comando ssh. Es una forma de crear alias y accesos directos complejos que ayuda a aumentar la seguridad al hacer que las partes más seguras de ssh sean más fáciles de usar.

Ir al botón superior