El archivo de configuración SSH en su sistema 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 funciones específicas deseadas por el usuario o reforzar la seguridad contra posibles ataques. Si bien acciones relativamente simples, como cambiar el puerto ssh en sus dispositivos, a menudo pueden eliminar una gran cantidad de «llamadas en frío» 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 de SSH?
En los sistemas Linux, puede encontrar el archivo de configuración ssh de todo el sistema en «/etc/ssh/ssh_config».
En los sistemas macOS, el mismo archivo se encuentra en «/private/etc/ssh/ssh_config», que tiene un enlace simbólico a «/etc/ssh/ssh_config» por motivos de compatibilidad.
Un segundo archivo ssh_config específico del usuario se puede ubicar en “~/.ssh/ssh_config” (el símbolo “~” representa 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 puede crear fácilmente.
En el futuro, nos referiremos a este archivo de configuración como «ssh_config» para mayor claridad y simplicidad.
Editando el archivo ssh_config
Para editar el archivo ssh_config, abra una ventana de Terminal y edite el archivo con su editor de texto preferido. 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 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 cómo shell seguro, más conocido como el ssh
comando de terminal, opera en su sistema. El archivo ssh_config está organizado por hosts. Cada host contiene configuraciones específicas para ese host. Comodines como *
se puede usar para hacer coincidir varios nombres de host con una sola declaración.
Las opciones se declaran mediante un par clave/definición. Hay muchas llaves disponibles. Puede encontrar una explicación detallada de la funcionalidad de cada tecla en la página de manual de ssh_config.
Fortalecimiento de su 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 tengan el propietario y el usuario configurados 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 /etc/ssh/sshd_config sudo chmod og-rwx /etc/ssh/sshd_config
Confirmar protocolo SSH 2
Asegúrese de utilizar 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 su ssh_config:
También puede configurar implícitamente su protocolo mediante el uso de cifrados, que configurará automáticamente el protocolo en 2 para usar cifrados modernos.
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
No permitir contraseña vacía
Asegúrese de que cada cuenta SSH use una contraseña al iniciar sesión bloqueando las contraseñas vacías.
No permitir inicio de sesión raíz
La raíz rara vez se debe usar para la mayoría de los usos de Linux. Evitar el inicio 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 es también una cuenta que es objeto de ataques. Las opciones para PermitRootLogin incluyen «sí», «sin contraseña», «solo comandos forzados» o «no». El valor predeterminado es «sí». Para detener el inicio de sesión como root por completo, use la línea a continuación.
Cambiar el número de puerto
Puede cambiar el número de puerto de 22 (el valor 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 busquen puertos abiertos y ataquen lo que esté abierto. Además de eso, deberá asegurarse de que cualquier persona que acceda a través de este puerto conozca el nuevo número y que cualquier cliente o software utilice ese nuevo número de puerto.
Para ajustar el puerto, edite el demonio ssh principal en «/etc/ssh/sshd_config». Deberá agregar una nueva línea especificando el puerto siguiendo la sintaxis Port XXXXX.
Acceso restringido
Si tiene varias personas que acceden a su servidor, es posible que desee restringir el uso de ssh por completo. Para esos casos, puede permitir y denegar tanto a usuarios como a grupos. Para esto, querrá usar una de las siguientes claves, seguida de los valores que le gustaría permitir o denegar: DenyUsers, AllowUsers, DenyGroups y AllowGroups. Esto se completa en este orden, por lo que incluso si permite a un usuario si está en la sección «usuarios denegados», se le negará.
AllowUsers ramesh john jason AllowGroups sysadmin dba DenyUsers cvs apache jane DenyGroups developers qa
Actualizar el LoginGraceTime
De forma predeterminada, la cantidad de tiempo que una persona tiene para permanecer 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. Configure la hora usando LoginGraceTime.
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 alias en ssh_config. El siguiente alias permite al usuario conectarse al dev
servidor con las opciones especificadas simplemente escribiendo ssh dev
en la línea de comando.
Host dev HostName dev.example.com Port 22222 User 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 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 pares de claves seguras
ssh es más seguro y conveniente cuando se usa 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 usando el IdentityFile
llave.
Host dev HostName dev.example.com Port 22222 User foobar IdentityFile ~/.ssh/dev.example.key
Como en los ejemplos anteriores, este comando ssh se ejecutará 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 de ssh son algunas de las claves más comunes que se encuentran en los archivos ssh_config.
Compression
: esta tecla acepta «sí» o «no» como argumentos y se utiliza para habilitar o deshabilitar la compresión para un host. Por lo general, esto 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 ssh. De menos detallado a más detallado, las opciones son SILENCIOSO, FATAL, ERROR, INFORMACIÓN, VERBOSO, DEPURACIÓN1, DEPURACIÓN2 y DEPURACIÓN3.
StrictHostKeyChecking
: Establezca una preferencia para agregar hosts al archivo unknown_hosts. «sí» nunca agregará hosts_conocidos. “no” siempre se agregará a hosts_conocidos. «preguntar», que es la opción predeterminada, le preguntará al usuario antes de agregarlo al archivoknown_hosts. “yes” brinda la mayor seguridad contra ataques de caballos de Troya, 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.
UserKnownHostsFile
: especifique la ruta para un archivo de hosts_conocidos específico del usuario.
Reenvío de conexión
ssh se usa a menudo para reenviar conexiones, lo que permite 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
: defina una conexión para reenviar el tráfico de un puerto local a una máquina remota. Esto canaliza la conexión a través de la red remota.
RemoteForward
: Defina un puerto remoto para ser tunelizado desde un puerto local. Esta es la opción inversa a la anterior.
DynamicForward
: 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 configurar 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.