Inicio

P Á G I N A   E N   C O N S T R U C C I Ó N


Documentos de ayuda

Aumentar la seguridad de SSH

Los pasos seguidos en el proceso básico de configuración de nuestro servidor basado en RaspberryPi nos llevaron a poner en funcionamiento un servicio de SSH para poder conectarnos a una máquina headless o sin entorno gráfico. El servicio resultante permitía un acceso remoto a través de una terminal de texto ingresando una contraseña.

En esta ocasión, lo que vamos a hacer es aumentar la seguridad de ese servicio y, a la vez, la comodidad a la hora de conectarnos desde la máquina habitual. Nótese que me refiero a la máquina habitual porque doy por hecho que un servidor privado montado en el hogar o la oficina no suele recibir conexiones desde más de un lugar, es decir, lo habitual es conectarse desde nuestro ordenador personal o el del trabajo y poco más.

0- Configuración básica

Para comenzar, lo mejor es tocar un poco la configuración básica del servidor ssh. Se abre el archivo correspondiente:

# nano /etc/ssh/sshd_config

Primero hay que cambiar el puerto que el servidor de ssh está escuchando a la espera de conexiones. Hay que buscar la línea que define el puerto, que tendrá el aspecto tal que así: Port 22. Se descomenta borrando la almohadilla del comienzo de línea y se cambia el puerto por otro cualquiera. Mejor uno entre 49152 y 65535, este rango es libre para aplicaciones de usuarios. Por encima no hay más (son 2^16 puertos) y por debajo están registrados para aplicaciones de terceros. Los más conocidos son los 1024 primeros, pero cualquiera puede estar en uso.

Después se deshabilita el acceso de root. Si estuviera habilitado, un atacante no tendría más que adivinar la contraseña para entrar, pues el nombre ya lo sabe, y además tendría privilegios totales en el sistema. No es buena idea. Se busca la línea PermitRootLogin no , se descomenta (borrando la almohadilla) y se cambia el yes por no (en caso de que haya un yes, por supuesto.

Finalmente, se busca la línea Protocolo y se define el valor 2. Es para asegurarse de que no se utiliza una versión antigua e insegura del protocolo SSH.

Hasta aquí lo más básico. Se puede hacer más, pero con los pasos siguientes para usar claves de acceso creo que el resto de cambios son superfluos. De todos modos, te recomiendo la siguiente guía si quieres saber más y seguir retocando la configuración del servidor.

Ahora hay que reiniciar el servicio para aplicar los cambios: # systemctl restart ssh Y listo.

1- Clave pública y clave privada

El sistema que permitirá conectarse con seguridad a un servidor a través de SSH es análogo al de GPG, un sistema que combina claves públicas y privadas para asegurar la identidad de quien accede.

El sistema de claves públicas y privadas funciona como un sistema de candado y llaves. Salvando las diferencias, una clave pública es como un candado que solo la clave privada puede abrir. Por ello, teniendo una clave pública en el servidor (el candado), este será accesible desde un cliente que posea la clave privada (la llave del candado). Hay más información acerca de cómo funciona el par de claves en las guías que se enlazan desde la página de contacto

Para generar un par de claves:

$ ssh-keygen -b 4096

Se puede aceptar el directorio por defecto en el que se guarda la clave o cambiarlo a otro diferente, pero lo importante es proporcionar una contraseña para proteger la clave. De esta manera, aun en el caso de que alguien consiga acceder al ordenador que posee la clave privada, nos aseguramos de que no pueda conectarse al servidor sin conocer la contraseña.

A partir de aquí se da por hecho que el servidor tiene un servicio SSH que funciona y al que es posible conectarse con contraseña según se ha visto en la configuración básica

Tras la orden anterior, introducir una contraseña y confirmarla, se ha creado un par de claves que son el juego de candado y llave de que hablamos antes. Son dos ficheros con idéntico nombre y diferente extensión: el llamado id_rsa es la clave privada y se quedará en el ordenador actual (se debe transferir a otros ordenadores que deban tener acceso al servidor) y el llamado id_rsa.pub es la clave pública, que ha de estar en el servidor. El siguiente paso es transferir la clave pública al servidor y para ello es necesaria la orden siguiente:

$ scp .ssh/id_rsa.pub usuario@ip_del_servidor:/home/usuario/

Cuando pida la contraseña se introduce y de esta manera se copia la clave pública en el directorio del usuario. Es necesario recordar que, si se ha cambiado el puerto por defecto del servicio SSH (recomendado), debe indicarse con el parámetro -p.

2- Automatizar la conexión