Hace unos días estaba en casa tranquilo mirando mi contenido que tengo en mi servidor PLEX armado en mi RaspberryPi cuando de repente se me cae la conexión. Intento nuevamente y se vuelve a caer. Ya ofuscado, intento una tercera vez y directamente el servidor no funciona. ¿Qué pasó?

Intentando acceder con mi móvil por medio de SSH al server tampoco podía. Entonces lo que hice fue directamente tomar el teclado que tengo para la Pi, poner la fuente correcta en la TV para ver que estaba pasando.

El error indicaba un desbordamiento de memory en el kernel y varias cosas más. No lo podía creer. Hacía un día había hecho un backup del sistema para moverlo a uno microSD más grande y pensé que éso estaba generando problema.

Reinicio la Pi (apagándolo a la fuerza) y ya viendo todo el reboot levanto htop para ver lo procesos que arrancan a funcionar. Entro a fijarme y al momento empiezo a ver intentos de logueo con el usuario root de la Pi. Eso solo en htop, entonces lo que hago es ir al log de autenticaciones en /var/log/aut.log.

Mirando el log y preguntando a unos compañeros que saben más del tema de administración de sistemas, confirmo que estaba siendo atacado. Uno de los riesgos de tener un servidor abierto hacia afuera.

Al momento, uno de los compañeros me indica que sin perder tiempo instale fail2ban, una herramienta que chequea el logueo en el sistema. Asi que me puse a ello y se los explico.

Disclaimer: éstos pasos fueron hechos en el sistema Raspbian para RaspberryPi. Para otro tipo de distro GNU/Linux buscar el comando adecuado o preguntar en los comentarios de blog.

Instalar fail2ban

Lo primero que hice fue instalar ésta aplicación que controla lo logueos indeseados en nuestro sistema. Su instalación es super sencilla:

sudo apt install fail2ban

Una vez que la instalamos hacemos una pequeña configuración en el archivo jail.conf

sudo nano /etc/fail2ban/jail.conf

Ahí buscamos el apartado de SSH y ponemos lo siguiente:

[ssh]

enabled = true

port = 22

filter = sshd

logpath = /var/log/auth.log

bantime = -1

maxretry = 5

Con ésto indicamos el máximo posible de reintentos de logueo, la ruta del archivo .log y la habilitación o no del control del puerto ssh. Si nuestra configuración de ssh usa otro puerto entonces debemos modificar el valor port. Lo demás servicios seguramente estarán en false asi que si necesitás modificar el control de logueo de otro servicio podés hacerlo ahí.

Una vez que aplicamos ésta configuración tenemos que reiniciar el servicio: sudo service fail2ban restart

Desbloquear el acceso a ROOT por ssh

La segunda cosa que hice fue bloquear el acceso del usuario root por ssh. ¿Que quiere decir ésto?, bueno que el usuario root no puede ser usado como usuario de acceso desde afuera de nuestro servidor, ésto hace que si o si tengamos otro usuario que debamos utilizar para loguearse desde afuera. Si ese usuario no tiene privilegios sudo (o sea de root) mucho mejor porque aumentamos un poco más la seguridad de nuestro servidor a la hora de conectarnos desde afuera o de querer recibir algún ataque externo.

Para ésto vamos a hacer lo siguiente. Editamos el archivo sshd_config:

sudo nano /etc/ssh/sshd_config

En éste archivo modificaremos el parámetro PermitRootLogin de yes a no.

Una vez hecho ésto, guardamos el archivo y reiniciamos el servicio ssh:

sudo service ssh restart

Y listo! Con éstos sencillos pasos le estamos dando un poco más de seguridad a nuestro servidor hecho con una RaspberryPi. Obviamente también aplica a cualquier server casero que tengamos en casa con una distro GNU/Linux.