En esta entrada vamos a hablar sobre cómo configurar una conexión segura, usando SSH, entre nuestra Raspberry Pi y un cliente.
Por si no conoces qué es SSH, estamos hablando de un protocolo que sirve para transmitir información de manera segura entre dos equipos, un servidor y un cliente. Aunque más bien, nos permite controlar completamente el servidor remoto como si estuviésemos delante. También permite la transferencia de archivos, como si de una FTP se tratase. Es decir, un gran poder, y como bien sabemos los frikis, conlleva una gran responsabilidad. Por ello es imprescindible asegurar bien la conexión.
Servidor y cliente
Como hemos dicho antes, necesitamos dos figuras: un cliente y un servidor. El cliente puede ser cualquier equipo: PC con Windows/Linux, MacOS, iPhone, Android, etc. El servidor, en nuestro caso, la Raspberry Pi, pero podemos usar cualquier equipo con Unix/Linux.
Si contamos con Raspbian en nuestra Raspberry Pi, vamos a tener el trabajo muy fácil, ya que viene instalado en la imagen oficial (OpenSSH). En este caso sólo tenemos que activarlo y cambiar unos ajustes. Tenemos dos opciones, la fácil y «bonita» o la de toda la vida.
La fácil: abrimos la terminal y respiramos profundamente:
alfonso@REDDOX:~$sudo raspi-config
Con este comando lanzaremos el asistente de configuración, donde podremos cambiar varios ajustes importantes de nuestra Rasberry, entre ellos habilitar el servicio/demonio SSH. En dicho asistente, tendremos que entrar en Interfacing Options-> P2 SSH. Ahí nos preguntará si queremos habilitar el SSH. Diremos que Sí/Yes.
El servicio encargado de gestionar las conexiones SSH se llama OpenSSH.
La forma de toda la vida es simplemente activar el servicio con el siguiente comando:
alfonso@REDDOX:~$sudo service openssh start
Y listo. Ya tenemos nuestro servidor escuchando en el puerto 22 para recibir una conexión. Ahora sólo quedaría instalar en nuestro Windows la aplicación Putty, la cual nos permitirá conectarnos a nuestra RPi introduciendo una dirección, nombre de usuario y contraseña.
Hablo de Windows porque tanto en MacOS como en Linux, tenemos nuestra querida terminal con la que nos podemos conectar rápidamente usando el siguiente comando:
alfonso@REDDOX:~$ssh usuario@192.168.1.100
Si es la primera vez que conectamos, nos pedirá autorización para almacenar la clave, y posteriormente la contraseña de usuario. Una vez hecho, estaremos en la terminal de nuestra Raspberry pi, como si estuviéramos físicamente en ella.
Ajustes en el servidor
Como indicaba, con los pasos descritos anteriormente, ya tendríamos listo el sistema. Pero hay que puntualizar algunas cosas para afinar y conseguir un plus de seguridad.
Para ello, deberíamos editar el archivo de configuración de OpenSSH. Con vuestro editor favorito (el mío es nano).
sudo nano /etc/ssh/sshd_config
Dentro del documento, tenemos muchas cosas para tocar, por lo que sería buena idea hacer copia de seguridad (sudo cp). Lo que nos interesa es principalmente es:
PermitRootLogin yes
Esta opción nos pregunta si vamos a permitir identificarnos vía SSH con el usuario root. ¡Nunca!¡Warning!¡Peligro! Hay que cambiarlo por ‘no’. Y no te preocupes, para acceder y gestionar nuestro equipo no necesitamos acceder como root. Y si necesitas cambiar algo, tenemos herramientas como sudo.
Port 22
Esta opción establece el puerto de escucha. Hay que cambiarlo por cualquier otro puerto. Cuidado que no entre en conflicto con otros servicios.
El puerto por defecto es el 22, y eso lo sabe todo el mundo, tu, yo y los amigos de lo ajeno, por lo que sería una buena medida cambiar el puerto por otro, como el 9876, por ejemplo. No es infalible en absoluto, pero todo suma.
MaxAuthTries 2
Aquí vamos a establecer el número de intentos de conexión. Es decir, su nos equivocamos a la primera, sólo nos queda otro intento más. Si nos equivocamos, nos bloqueará el acceso durante un tiempo. Dos intentos está bien. Si nos equivocamos a la primera, tenemos otra más.
LoginGraceTime 15
En segundos, especifica el tiempo que tenemos para introducir nombre de usuario y contraseña. No hace falta pensarlo mucho tiempo.
Firewall y NAT
Llegamos a la parte final. Ahora toca el paso del firewall. Tenemos que permitir conexiones entrantes en el puerto que hayamos especificado. Pongamos por ejemplo que usamos el 22 y usamos ufw como gestor de firewall.
Las reglas a aplicar serían:
alfonso@REDDOX:~$ sudo ufw allow 22/tcp # Puerto de conexión alfonso@REDDOX:~$ sudo ufw enable # Activar firewall
Si queremos conectarnos desde el exterior de nuestra casa/oficina, y nuestra Raspberry está de tras de un router, necesitaremos dirigir los puertos hacia nuestro equipo. Este paso es más delicado, ya que cada router es un mundo. Buscando en Google «abrir puntos router» más el modelo de tu router, seguro que encuentras cómo hacerlo. En caso contrario, pon un comentario e intentaremos arreglarlo.