Volver a la página principal
sábado 27 enero 2024
13

Guía de Hardening SSH en Debian

Mejorando la seguridad de SSH

Es relevante destacar que en este artículo, la búsqueda se realizó en el puerto 22, que es el puerto por defecto del servicio SSH.

SSH es ideal para mantener la confidencialidad e integridad de los datos intercambiados entre sistemas. Además, una de sus ventajas principales es la autenticación del servidor mediante el uso de clave pública.

En esta ocasión, realizaremos algunas configuraciones para mejorar la seguridad de este servicio de administración remota tan utilizado.

La mayoría de los cambios se realizan en el archivo /etc/ssh/sshd_config

1. Autenticación SSH siempre basada en clave pública

El servidor OpenSSH admite varias formas de autenticación. Recomendamos el uso de la autenticación basada en clave pública. Para esto, debe crear el par de claves utilizando el siguiente comando ssh-keygen en su computadora de escritorio/portátil local.

Aquí tienes un enlace de Digital Ocean, que muestra cómo crear el par de claves y agregarlas al servidor.

2. Cambio de puerto por defecto

La mayoría de los ataques a este servicio se producen mediante herramientas automáticas que intentan con usuarios y contraseñas comunes en el puerto 22.

Cambiar el puerto evitará en gran medida este tipo de ataques.

Port 300

3. Limitar la vinculación IP

La directiva ListenAddress especifica en qué direcciones IP se abrirá el puerto para ofrecer el servicio. Si el sistema tiene más de una dirección IP, ya sea IPv4 o IPv6, es conveniente limitar esta escucha solo a las necesarias. Por defecto, viene configurado en ALL, por lo que el servicio se abrirá en todas las interfaces disponibles del sistema.

ListenAddress 192.168.1.xx

4. Deshabilitar el usuario ROOT para inicio de sesión

El usuario administrador del sistema no debería autenticarse directamente en el equipo. Se recomienda modificar este parámetro para dejarlo en “no”

PermitRootLogin no

5. Limitar el acceso SSH de los usuarios del sistema

AllowUsers habilita qué usuarios tienen permitido el uso del servicio SSH. Puedes especificar varios usuarios. Por defecto, permite a todos los usuarios del sistema iniciar sesión por SSH, pero es recomendable limitar el acceso solo a aquellos que realmente necesitan utilizar este servicio.

AllowUsers usuario1 usuario2

Al igual que con AllowUsers, AllowGroups permite especificar el grupo o los grupos de usuarios autorizados a acceder mediante SSH al sistema.

6. Deshabilitar inicio de sesión basado en contraseña

Todos los inicios de sesión basados en contraseñas deben estar deshabilitados. Solo debe permitir inicios de sesión basados en claves públicas.

AuthenticationMethods publickey
PubkeyAuthentication yes

En algunas versiones antiguas de SSHD, sería así:

PubkeyAuthentication yes

7. Deshabilitar contraseñas vacías

Debemos rechazar los inicios de sesión remotos desde cuentas con contraseñas vacías.

PermitEmptyPasswords no

8. Limitar intentos de autenticación fallida

Con el parámetro MaxAuthTries, especificamos el máximo número de intentos de autenticación fallida por conexión. Recomendamos configurarlo en un valor como 3.

MaxAuthTries 3

9. Ajuste de LoginGraceTime

Con esta directiva, especificamos cuántos segundos se permite que un usuario permanezca con una conexión abierta sin haberse autenticado correctamente. Recomendamos que este valor sea, por ejemplo, 60.

LoginGraceTime 60

10. Limitar conexiones simultáneas no autenticadas

Con la directiva MaxStartups especificamos el número máximo permitido de conexiones simultáneas no autenticadas; los intentos de conexión siguientes serán denegados hasta que uno de los anteriores complete correctamente el proceso completo. Esto ayuda a evitar posibles ataques de fuerza bruta. Por defecto, está configurado en 10, recomendamos establecer un valor menor, por ejemplo, 3.

MaxStartups 3

11. Habilitar un banner de advertencia para los usuarios de SSH

Especifica el archivo que se mostrará antes de la autenticación de un usuario en el sistema.

Banner /etc/issue

12. Configurar el intervalo de tiempo de espera de cierre de sesión inactiva

Se puede establecer un intervalo de tiempo de inactividad para las sesiones SSH. De esta forma, si un usuario deja la sesión desatendida, esta se cerrará automáticamente después de transcurrido el tiempo.

ClientAliveInterval 300
ClientAliveCountMax 0

13. Deshabilitar archivos .rhosts

SSH puede emular el comportamiento del comando RSH obsoleto; simplemente desactiva el acceso inseguro a través de RSH.

IgnoreRhosts yes

14. Deshabilitar la autenticación basada en el host

Es recomendable deshabilitar esta opción, ya que inicialmente hemos definido que la autenticación será mediante clave pública.

HostbasedAuthentication no

15. Deshabilitar X11forwarding

X11 es el servidor gráfico utilizado por la mayoría de las distribuciones Linux. Este servidor permite, entre otras cosas, el forwarding a través de SSH. Esto significa que es posible ejecutar aplicaciones gráficas de una máquina remota exportando la interfaz gráfica a nuestro escritorio local. Si no necesitas utilizar este servidor gráfico, es mejor tenerlo deshabilitado.

X11forwarding no

16. Chroot (Bloquear usuarios a sus directorios de inicio)

De forma predeterminada, los usuarios pueden navegar por los directorios del servidor, como /etc/, /bin, entre otros. Puedes proteger SSH utilizando Chroot para bloquear a los usuarios en sus directorios personales. Esta configuración se mostrará próximamente en un nuevo artículo.

17. Comprobación de configuración

Para verificar el archivo de configuración y detectar cualquier error antes de reiniciar SSHD, ejecuta:

sshd -t

Para concluir, es importante considerar que puedes limitar el acceso a este servicio solo a la LAN de la organización o a través de una VPN en casos que requieran acceso externo.

Compartir:
Autor:
User photo

Jorge García

Fullstack developer