GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo mejorar la seguridad SSH en Ubuntu 18.04

El servicio SSH es el principal punto de acceso a su Servidor Cloud y, al mismo tiempo, uno de los servicios más expuestos a ataques. Esta guía te ayudará a mejorar la seguridad del servicio gracias a diferentes trucos y técnicas.

Cambiando puerto de escucha

El puerto predeterminado para escuchar la conexión SSH es 22:cambiar esta configuración permitirá nublar el servicio y aumentar la seguridad de la conexión.

Para evitar interferencias con otros servicios existentes en la máquina, es una buena práctica verificar qué puertos están actualmente en uso, usando el comando netstat:

$ netstat -n -l
    
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0 0 127.0.0.1:3306          0.0.0.0:* LISTEN
tcp        0 0 127.0.0.53:53           0.0.0.0:* LISTEN
tcp        0 0 0.0.0.0:22              0.0.0.0:* LISTEN
tcp6       0 0 :::80                   :::* LISTEN
tcp6       0 0 :::22                   :::* LISTEN
udp        0 0 127.0.0.53:53           0.0.0.0:*

A través del parámetro -l pasado a netstat, obligarlo a imprimir todas las conexiones que están en estado LISTEN. En este ejemplo se utilizan los siguientes puertos:

  • Servicio MySQL 3306

  • 22 SSH

  • 80 Apache2 / HTTP

  • 53 DNS

Para cambiar de puerto, simplemente edite el archivo de configuración en /etc/ssh/sshd_config, descomentando la directiva Port:

#Port 22

Luego establezca un nuevo valor, posiblemente alto, para evitar que sea interceptado por cualquier software de escaneo automático de puertos (por ejemplo, 2200, 5574, 1022):

Port 5574

Para aplicar el cambio, cargue el servicio a través de:

$ sudo service sshd reload
. Mantenga viva la conexión usando recargar de tal manera que corrija cualquier error y verifique cualquier nuevo acceso con otro cliente SSH

Una vez aplicado el cambio, conéctese a su servidor especificando el nuevo puerto. Por ejemplo, si está utilizando el cliente SSH desde la línea de comandos:

$ ssh [email protected]<SERVER.IP> -p 5574

Uso de claves para autenticación

Muy utilizado por su seguridad, el acceso a través de claves RSA es una alternativa al inicio de sesión basado en contraseña. En este tipo de autenticación, el cliente genera una clave privada y la clave pública relacionada que se instala en la máquina del servidor para autenticar al cliente sin ambigüedades. .

Para instalar la clave pública, el cliente primero debe generar el par de claves usando el comando ssh-keygen:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file where to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Antes de continuar con la generación, ssh-keygen solicita una frase de contraseña opcional que se puede usar para la autenticación. En este ejemplo para facilitar el acceso se ha dejado vacío el siguiente archivo.

Una vez terminado, el software guardará dos archivos en el lugar designado:

  • id_rsa:la clave privada del cliente, no se debe compartir con nadie.

  • id_rsa.pub:la clave pública compartible.

Para preparar el entorno del servidor, cree un archivo llamado authorized_keys en la carpeta .ssh dentro de la carpeta del usuario que usará para iniciar sesión:

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

Asegúrese de que el archivo tenga los permisos indicados anteriormente.

Luego proceda pegando la clave pública previamente preparada por la máquina cliente:

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd [email protected]

Guarde el archivo y vuelva a cargar el servicio SSH:

$ sudo service sshd reload

En este punto debería ser posible acceder al servidor sin que se requiera ninguna contraseña:

$ ssh [email protected]<SERVER.IP>

Si todo funciona correctamente, deshabilite el acceso con contraseña desde la máquina servidor modificando el archivo /etc/ssh/sshd_config, con los siguientes parámetros:

ChallengeResponseAuthentication no
    PasswordAuthentication no

Recuerde que puede agregar otras claves públicas simplemente guardándolas al final del archivo ~/.ssh/authorized_keys en la máquina servidor.

Limitación de tiempos de disponibilidad del servicio

Una estrategia para reducir accesos no deseados y ataques de fuerza bruta es reducir los tiempos de disponibilidad del servicio SSH. Si está seguro de que no necesita conectarse al servidor en determinados horarios (por ejemplo, de las 23:00 a las 08:00 del día siguiente), establezca un horario automático para bloquear el puerto de conexión.

Para ello, utilice el cortafuegos predeterminado llamado iptables, pero, antes de continuar con la configuración, recuerde que iptables, por su naturaleza, no guarda la configuración introducida.

Para guardar y cargar la configuración más rápido, use el paquete iptables-persistent, que vuelve a cargar la configuración guardada al iniciar el sistema.

Luego continúe instalando el paquete:

$ sudo apt-get install iptables-persistent

Después de completar su instalación, ingrese una "cadena" para bloquear el servicio SSH:

$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh

De esta manera, todas las conexiones destinadas al puerto 22 (si su servicio SSH usa otro puerto, cambie este valor) pasarán por la cadena "chain-ssh" recién creada.

Guarde la configuración actual (que será cargada por iptables-persistent) con el comando:

$ sudo iptables-save > /etc/iptables/rules.v4

Luego cree un cronograma para ingresar y eliminar la regla en la cadena modificando el crontab de la siguiente manera:

$ sudo crontab -e
    
# m h  dom mon dow   command
0 23   * * *   iptables -A chain-ssh -j DROP
0 8    * * *   iptables -F chain-ssh

Como puede ver, con la primera operación se agrega una regla DROP de las conexiones a las 11:00 p. m., mientras que la segunda operación vacía la cadena a las 08:00 a. m. para restaurar el servicio.

Guarde el archivo para aplicar los cambios.


Linux
  1. Cómo configurar el inicio de sesión SSH sin contraseña

  2. Cómo generar un par de claves SSH (con ejemplos)

  3. Cómo configurar claves SSH

  4. Cómo configurar claves SSH en Ubuntu 16.04

  5. Cómo configurar claves SSH en Ubuntu 18.04

Cómo crear una frase de contraseña de clave SSH en Linux

Cómo habilitar el servidor SSH en Ubuntu 22.04

Cómo cambiar el puerto SSH en Ubuntu

Cómo agregar una clave pública SSH al servidor

¿Cómo cambiar el puerto SSH en Ubuntu?

Cómo instalar Ansible en Ubuntu 18.04