Cómo securizar el servicio SSH de un servidor Raspberry Pi (desde MS Windows 10)

SSH (Secure SHell) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red.

Permite manejar por completo la computadora mediante un intérprete de comandos (en nuestro caso, la terminal CMD).

 

¿Por qué securizar el servicio SSH de nuestro servidor?

El la red hay programas que, basándose en diccionario, permiten realizar millones de intentos de conexión por ssh a nuestro servidor, hasta dar con el password de root. Es una cuestión de tiempo.

Hay hasta videos: Ataque de fuerza bruta a SSH con Hydra

Es por ello que la autentificación por usuario/password cada vez se utiliza menos.

 

Pautas a seguir para securizar el servicio SSH.

Utilizar autenticación mediante el par de llaves pública/privada (Public-Key/Private-Key).

De este modo, y si deshabilitamos el acceso mediante autenticación con usuario/password, solamente podrá acceder al sistema aquel equipo que tenga una llave autorizada en el servidor.

 

 

En nuestro ordenador MS Windows 10

La forma más rápida de crear un par de llaves, es abrir una terminal CMD

 

 

y ejecutar el siguiente comando:

ssh-keygen -t rsa

 

 

 

 

Este comando generará una llave pública y una privada, por defecto en el directorio C:\Users\tu_usuario\.ssh

La llave pública es un archivo de nombre id_rsa.pub
La llave privada es un archivo de nombre id_rsa

 

 

En el servidor Raspberry Pi

Deberemos añadir el contenido de la llave pública (id_rsa.pub) en el servidor SSH, concretamente en el fichero authorized_keys del usuario con el que vayamos a conectar.

Si fueramos a conectar como root, en nuestro servidor Raspberry Pi añadiríamos el contenido del archivo id_rsa.pub al archivo:

/root/.ssh/authorized_keys

(recuerda que pegar en Linux es Mayúsculas - Insert)

 

Si no existiera el directorio o el archivo, hemos de crearlos:

mkdir /root/.ssh
touch /root/.ssh/authorized_keys

 

De este modo accederíamos sin password al servidor, pues nuestra llave pública SSH está autorizada en el servidor.

Para permitir solamente el acceso por llave, y no por usuario/password, el archivo /etc/ssh/sshd_config del servidor lo configuraríamos de la siguiente forma:

PermitRootLogin yes
AllowUsers root
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
RSAAuthentication no
PasswordAuthentication no
UsePAM no
KerberosAuthentication no
GSSAPIAuthentication no

 

Solo quedaría asignar los permisos correctos, y reiniciar el servicio ssh:

chmod 0700 /root/.ssh/
chmod 0600 /root/.ssh/authorized_keys
service ssh restart