Cómo proteger y fortalecer el servidor OpenSSH


Cuando se trata de acceder a dispositivos remotos como servidores, enrutadores y conmutadores, el protocolo SSH es muy recomendable dada su capacidad para cifrar el tráfico y protegerse de cualquiera que intente espiar sus conexiones.

Sea como fuere, la configuración predeterminada de SSH no es infalible y se necesitan ajustes adicionales para que el protocolo sea más seguro. En esta guía, exploramos diferentes formas que puede utilizar para proteger y fortalecer la instalación de OpenSSH en el servidor.

1. Configure la autenticación sin contraseña SSH

De forma predeterminada, SSH requiere que los usuarios proporcionen sus contraseñas al iniciar sesión. Pero aquí está la cuestión: los piratas informáticos pueden adivinar las contraseñas o incluso realizar un ataque de fuerza bruta utilizando herramientas especiales de piratería y obtener acceso a su sistema. Para estar seguro, se recomienda encarecidamente el uso de autenticación sin contraseña SSH.

El primer paso es generar un par de claves SSH que consta de una clave pública y una clave privada. La clave privada reside en su sistema host, mientras que la clave pública se copia al servidor remoto.

Una vez que la clave pública se haya copiado correctamente, ahora puede SSH en el servidor remoto sin problemas sin tener que proporcionar una contraseña.

El siguiente paso es deshabilitar la autenticación de contraseña. Para lograr esto, debe modificar el archivo de configuración SSH.

$ sudo vim /etc/ssh/sshd_config

Dentro del archivo de configuración, desplácese y busque la siguiente directiva. Descomente y cambie la opción 'yes' a 'no'

PasswordAuthentication no

Luego reinicie el demonio SSH.

# sudo systemctl restart sshd

En este punto, solo tendrá acceso al servidor remoto mediante la autenticación de clave SSH.

2. Deshabilitar las solicitudes de conexión sin contraseña SSH de usuario

Otra forma recomendada de fortalecer la seguridad de su servidor es deshabilitar los inicios de sesión SSH de los usuarios sin contraseña. Esto suena un poco extraño, pero a veces los administradores del sistema pueden crear cuentas de usuario y olvidarse de asignar contraseñas, lo cual es una muy mala idea.

Para rechazar solicitudes de usuarios sin contraseña, nuevamente, diríjase al archivo de configuración en /etc/ssh/sshd_config y asegúrese de tener la directiva a continuación:

PermitEmptyPasswords no

Luego reinicie el servicio SSH para que se efectúe el cambio.

$ sudo systemctl restart sshd

3. Deshabilitar los inicios de sesión SSH Root

Es obvio lo que puede suceder si un pirata informático logra forzar brutalmente su contraseña de root. Permitir el inicio de sesión de root remoto es invariablemente una mala idea que podría poner en peligro la seguridad de su sistema.

Por esta razón, siempre se recomienda que desactive el inicio de sesión de root remoto SSH y en su lugar se ciña a un usuario que no sea root. Una vez más, diríjase al archivo de configuración y modifique esta línea como se muestra.

PermitRootLogin no

Una vez que haya terminado, reinicie el servicio SSH para que se efectúe el cambio.

$ sudo systemctl restart sshd

De ahora en adelante, se desactivará el inicio de sesión de root remoto.

4. Utilice el protocolo SSH 2

SSH viene en dos versiones: protocolo SSH 1 y protocolo 2. El protocolo SSH 2 se introdujo en 2006 y es más seguro que el protocolo 1 gracias a sus sólidas comprobaciones criptográficas, cifrado masivo y algoritmos robustos.

De forma predeterminada, SSH usa el protocolo 1. Para cambiar esto al Protocolo 2 más seguro, agregue la línea siguiente al archivo de configuración:

Protocol 2

Como siempre, reinicie SSH para que los cambios entren en vigor.

$ sudo systemctl restart sshd

En el futuro, SSH utilizará el Protocolo 2 de forma predeterminada.

Para probar si el protocolo SSH 1 ya es compatible, ejecute el comando:

$ ssh -1 [email protected]

Recibirá un error que dice "El protocolo SSH v.1 ya no es compatible".

En este caso, el comando fue:

$ ssh -1 [email protected]

Además, puede simplemente especificar la etiqueta -2 solo para asegurarse de que el Protocolo 2 es el protocolo predeterminado en uso.

$ ssh -2 [email protected]

5. Establecer el valor inactivo del tiempo de espera de la conexión SSH

Dejar su PC desatendida durante períodos prolongados con una conexión SSH inactiva puede representar un riesgo para la seguridad. Alguien puede simplemente pasar y hacerse cargo de su sesión SSH y hacer lo que quiera. Para abordar el problema, es prudente, por lo tanto, establecer un límite de tiempo de espera inactivo que, cuando se exceda, se cerrará la sesión SSH.

Una vez más, abra su archivo de configuración SSH y localice la directiva "ClientAliveInterval". Asigne un valor razonable, por ejemplo, he establecido el límite en 180 segundos.

ClientAliveInterval 180

Esto implica que la sesión SSH se cancelará si no se registra actividad después de 3 minutos, lo que equivale a 180 segundos.

Luego reinicie el demonio SSH para efectuar los cambios realizados.

$ sudo systemctl restart sshd

6. Limite el acceso SSH a ciertos usuarios

Para una capa de seguridad adicional, puede definir los usuarios que requieren el protocolo SSH para iniciar sesión y realizar tareas remotas en el sistema. Esto evita que otros usuarios intenten acceder a su sistema sin su aprobación.

Como siempre, abra el archivo de configuración y agregue la directiva "AllowUsers" seguida de los nombres de los usuarios que desea otorgar. En el siguiente ejemplo, he permitido que los usuarios "tecmint" y "james" tengan acceso remoto al sistema a través de SSH. Cualquier otro usuario que intente obtener acceso remoto será bloqueado.

AllowUsers tecmint james

A partir de entonces, reinicie SSH para que los cambios persistan.

$ sudo systemctl restart sshd

7. Configure un límite para los intentos de contraseña

Otra forma en que puede agregar una capa de seguridad es limitando la cantidad de intentos de inicio de sesión SSH de manera que después de una cantidad de intentos fallidos, la conexión se interrumpa. Entonces, una vez más, diríjase al archivo de configuración y ubique la directiva "MaxAuthTries" y defina un valor para el número máximo de intentos.

En este ejemplo, el límite se ha establecido en 3 intentos como se muestra.

MaxAuthTries 3

Y finalmente, reinicie el servicio SSH como en los escenarios anteriores.

También puede encontrar útiles estos siguientes artículos relacionados con SSH:

  • How to Install OpenSSH 8.0 Server from Source in Linux
  • How to Install Fail2Ban to Protect SSH on CentOS/RHEL 8
  • How to Change SSH Port in Linux
  • How to Create SSH Tunneling or Port Forwarding in Linux
  • 4 Ways to Speed Up SSH Connections in Linux
  • How to Find All Failed SSH login Attempts in Linux
  • How to Disconnect Inactive or Idle SSH Connections in Linux

Ese fue un resumen de algunas de las medidas que puede tomar para asegurar sus conexiones remotas SSH. Es importante agregar que siempre debe asignar contraseñas seguras a los usuarios que tienen acceso remoto para frustrar los ataques de fuerza bruta. Esperamos que haya encontrado útil esta guía. Sus comentarios son bienvenidos.