,

Guía de Buenas practicas para SSH

En esta entrada vamos a ver las buenas practicas que se deben realizar para poder asegurar correctamente el servicio y así evitar cualquier incidente de seguridad llámese ataque o un acceso no autorizado por un tercero, sin más que agregar iniciemos.

  1. Introducción a SSH
    1.1 ¿Qué es SSH?
    1.2 ¿Cómo funciona SSH?
  2. Configuración inicial
    2.1 Instalación y configuración básica de un servidor SSH.
  3. Claves seguras
  4. Deshabilitar el Acceso Root
  5. Cambiar el puerto predeterminado
  6. Límite de intentos de inicio de sesión
  7. Limitar los usuarios permitidos
  8. Utilizar Firewall
    Conclusión

1. Introducción a SSH

1.1 ¿Qué es SSH?

SSH, o Secure Shell, es un protocolo de red que permite a los usuarios acceder y gestionar de forma segura sistemas remotos a través de una conexión cifrada, esto sirve para descartar posibles ataques, secuestro de sesiones e interceptaciones.

1.2 ¿Cómo funciona SSH?

SSH o Secure Shell funciona creando una conexión cifrada entre dos dispositivos (normalmente un cliente y un servidor) en una red. Esta conexión cifrada permite a los usuarios autenticados interactuar de forma segura con el sistema remoto, enviando comandos y transmitiendo datos protegidos de  posibles ataques de escucha o manipulación.

En la siguiente imagen explico cómo es que funciona:


2. Configuración Inicial

2.1 Instalación y configuración básica de un servidor SSH.

NOTA : recuerda que lo instalaremos en el que sería tu servidor.

En este caso utilizaremos el servicio openssh-server.

1. Abre tu terminal

2. Actualicemos el administrador de paquetes.

Tercero, instale el SSH servicio


3. Claves seguras

Claves seguras, ¿a qué te refieres?

¡No!, no es usar contraseñas muy largas, es algo más seguro y efectivo que eso. Atención, las claves seguras se componen de 2, clave pública y clave privada.

Clave pública: se copia en el servidor al que se desea acceder.
Clave privada: se almacena de forma segura en el cliente.
   
💡Consejo

1. Abre tu terminal

2. Generando las claves

ssh-keygen: comando propio de ssh para generar claves seguras.

-t rsa: Especifica el tipo de clave que se creará.

-b 4096: Especifica el número de bits de la clave que se creará.

3. Una vez generadas las claves, el primer proceso es decidir dónde quieres guardarlas, por defecto los dejaré ahí, pero puedes cambiar su ubicación. entonces solo nos queda presionar enter.

4.El siguiente paso es ingresar una contraseña, esto es opcional, pero mi recomendación es establecer una, para agregar otra capa de seguridad .

5. Listo, nuestras claves se han creado correctamente.

Ahora que ya sabes cómo crear claves seguras, te invito a investigar cómo utilizarlas. 


4. Deshabilitar el Acceso Root

Deshabilitar el acceso root nos permitirá proteger nuestro servidor de la escalada de privilegios sobre el usuario más importante del sistema (root).

NOTA: antes de comenzar a editar cualquier archivo de configuración, es obligatorio crear una copia de seguridad del mismo, para evitar que nuestro servicio deje de funcionar debido a una configuración incorrecta.

1. abre tu terminal

2. Vaya a la ruta del servicio, en este caso /etc/ssh/ y hagamos una copia de seguridad del archivo sshd_config.


3. Como podemos observar realizamos la copia del archivo indicando con la extensión .bak que sería una copia de seguridad.

4. Ahora podemos editar el archivo, en este caso voy a utilizar el editor nano, de la siguiente manera.

5. Buscamos la línea que contiene la instrucción PermitRootLogin, normalmente la mayoría de directivas están comentadas con un signo #, entonces lo que tenemos que hacer es descomentar y activar con la palabra no

6. Una vez que terminemos de editar podemos guardar los cambios y salir. 

7. Cada cambio que apliquemos al archivo de configuración, siempre va a ser necesario reiniciar el servicio para poder realizar los cambios.


5. Cambiar el puerto predeterminado

Cambiar el puerto predeterminado es otra práctica para proteger su servidor contra reconocimiento activo y ataques automatizados.

NOTA: hay que tener en cuenta que los primeros 1024 puertos ya tienen un servicio asociado, por lo que tendremos que ocupar un puerto después del 1024, pero también tenemos el puerto libre 65535.

1. Abre tu terminal

2. Abra el archivo de configuración sshd con el editor nano.

nano /etc/ssh/sshd_config

3. Para cambiar el puerto predeterminado, en este caso el puerto 22 necesitamos encontrar la directiva #Port 22, aquí eliminamos el signo # y cambiamos el número de puerto, esta vez lo configuraremos en 5000.

4. Una vez hayamos cambiado el puerto guardamos y cerramos el archivo de configuración.

5. De la misma forma y como cada cambio que realizamos es necesario reiniciar el servicio.

systemctl restart ssh

6. Límite de intentos de inicio de sesión

Limitar los intentos fallidos de inicio de sesión es una práctica importante para proteger el servicio SSH contra ataques de fuerza bruta. 

Al limitar la cantidad de intentos fallidos permitidos, puede evitar que los atacantes realicen una gran cantidad de intentos de inicio de sesión con diferentes combinaciones de contraseñas en un corto período de tiempo.

1. Abrir el archivo de configuración

2. Identificar la directiva MaxAuthTries y MaxSessions.

MaxAuthTries: corresponde al número de intentos de inicio de sesión que permitirá el servicio, para verificar si contiene una autenticación válida.

MaxSessions: establece el número máximo de sesiones SSH simultáneas que un usuario puede tener al mismo tiempo.

💡Consejo 

Si su sistema requiere un alto nivel de seguridad o donde el riesgo de ataques es mayor, en mi experiencia como administrador es mejor configurar MaxAuthTries en 2 o incluso menos. 

En el caso de MaxSessions es diferente porque debe adaptarse a las necesidades y casos de uso específicos de tu sistema. Un límite razonable para MaxSessions podría ser 2 o 3, especialmente en sistemas con usuarios restringidos o en entornos donde no se espera que un solo usuario necesite múltiples sesiones SSH simultáneas. Así lo configuraremos a continuación:

3. Guarde el archivo de configuración.

4. Reinicie el servicio para ver los cambios aplicados.

systemctl restart ssh

7. Limitar los usuarios permitidos

Limite los usuarios que tienen acceso SSH al servidor solo a aquellos que realmente lo necesitan.

1. Abre tu terminal

2. Segundo, abra el archivo de configuración ssh

3. Busque la directiva AllowUsers. Si no existe, puedes agregarlo al final del archivo, en este caso lo agregaré al final del archivo.

Recuerda que puedes agregar los usuarios que consideres necesarios, y de igual forma ten en cuenta que están separados por un espacio después de la directiva. 

4. reinicie el servicio para ver los cambios aplicados.

 systemctl restart ssh

8. Utilizar Firewall

En esta sección usaremos el UFW (Uncomplicated Firewall) para definir qué direcciones IP pueden acceder al servidor vía SSH.

1. abre tu terminal

2. Verifique si el servicio UFW está instalado.

ufw status

Estado: inactivo

Si no está instalado, pruebe el siguiente comando:

apt install ufw

Una vez que tengamos el servicio instalado podemos comenzar.

3. En primer lugar tenemos que identificar las direcciones ip a las que daremos acceso. A efectos prácticos utilizaré la siguiente dirección:

192.168.0.172

4. Habilite el firewall

ufw enable

5. Denegar todo el tráfico entrante, según su consideración y administración.

ufw default deny incoming

6. Establecer nuestra regla de acceso

Agregue reglas de firewall que permitan el tráfico SSH solo desde direcciones IP autorizadas. Esta regla permite el tráfico SSH desde la dirección IP especificada al puerto 5000. Tenemos que repetir el comando para cada dirección IP autorizada.

ufw allow from 192.168.0.172 to any port 5000 proto tcp 

ufw: cortafuegos

allow from 192.168.0.172: permitir conexiones desde la fuente 192.168.0.172

any port 5000: conexión al puerto 5000

proto tcp: usando el protocolo TCP

7. Permite que el firewall tenga en cuenta las reglas agregadas.

ufw enable

Conclusión

Las buenas prácticas de SSH son esenciales para garantizar una conexión remota segura y confiable. Al utilizar la autenticación de clave pública, limitar a los usuarios, cambiar el puerto predeterminado y deshabilitar el acceso raíz, fortalece la seguridad y minimiza la exposición a riesgos potenciales. Mantener su software actualizado y realizar auditorías periódicas complementa una sólida estrategia de seguridad SSH.