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
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.
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
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
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
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.
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
Debemos rechazar los inicios de sesión remotos desde cuentas con contraseñas vacías.
PermitEmptyPasswords no
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
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
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
Especifica el archivo que se mostrará antes de la autenticación de un usuario en el sistema.
Banner /etc/issue
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
SSH puede emular el comportamiento del comando RSH obsoleto; simplemente desactiva el acceso inseguro a través de RSH.
IgnoreRhosts yes
Es recomendable deshabilitar esta opción, ya que inicialmente hemos definido que la autenticación será mediante clave pública.
HostbasedAuthentication no
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
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.
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.
Jorge García
Fullstack developer