Cómo listar los inicios de sesión SSH fallidos en Linux
«No hay blanco ni negro, sólo hay matices de gris. No podemos decir si es bueno o malo».
Y a veces tenemos que indagar en los tonos de gris y buscar problemas antes de que se produzcan. Una de estas comprobaciones podría ser la búsqueda de intentos fallidos de inicio de sesión SSH. Afortunadamente, Ubuntu cuenta con una solución lo suficientemente sencilla pero potente como para detectar la mayoría de los casos en los que alguien deja pasar contraseñas débiles y ataques de fuerza bruta.
Cada intento de inicio de sesión en el servidor SSH se registra en un archivo llamado auth.log ubicado en /var/log/auth.log por el demonio rsyslog.
Los administradores pueden revisar los registros para ver si hay un tráfico entrante extraño. Un archivo de registro contiene mucha información en texto plano, pero no es fácil leer toda la salida. Tenemos que aprender a utilizar grep para buscar en el archivo de registro y en este ejemplo nos centraremos en los intentos fallidos.
Instalación de OpenSSH
OpenSSH es un servicio que proporciona acceso remoto seguro a los sistemas en forma de protocolo de capa de aplicación, también incluye el programa de línea de comandos scp. Inicia sesión como usuario root o cambia a un usuario con privilegios sudo, y luego utiliza el siguiente comando para instalar OpenSSH:
sudo apt-get update
sudo apt-get install openssh-server -y
Este comando debería instalar OpenSSH y sus dependencias. Deberías ver que también se instalan paquetes adicionales porque OpenSSH requiere bastantes para funcionar correctamente.
Tras la instalación, puedes habilitar ssh escribiendo el siguiente comando en la ventana del terminal:
sudo systemctl enable ssh
Deberías ver una salida similar a la de la imagen de abajo en tu ventana de terminal si el comando ha tenido éxito:
Los siguientes comandos se pueden utilizar para detener SSH en máquinas Ubuntu en caso de que quieras desactivarlo:
sudo systemctl stop ssh
Se puede iniciar de nuevo ejecutando:
sudo systemctl start ssh
Para comprobar si el servidor SSH se está ejecutando puedes utilizar el siguiente comando:
sudo systemctl status ssh
Deberías ver una salida similar en tu terminal:
En la captura de pantalla anterior, puedes ver que el servidor SSH ya se está ejecutando y está habilitado, lo que significa que se ejecutará en el momento del arranque.
Cómo encontrar todos los intentos de inicio de sesión SSH fallidos
Un intento fallido de inicio de sesión puede deberse a varias razones y no sólo a un exploit de inicio de sesión automatizado. Un intento de inicio de sesión fallido puede ocurrir cuando:
- Un usuario puede escribir mal su contraseña.
- Intenta utilizar una contraseña incorrecta para iniciar la sesión.
- El servidor está bajo un ataque de fuerza bruta y los hackers intentan adivinar la contraseña utilizando scripts automatizados.
La forma más sencilla de listar todos los intentos fallidos de inicio de sesión SSH es utilizar el siguiente comando:
grep "Failed password" /var/log/auth.log
Deberías ver una salida similar en tu terminal:
Los siguientes comandos pueden utilizarse para mostrar los inicios de sesión SSH fallidos en CentOS o RHEL en una versión ligeramente modificada del comando anterior:
grep "Failed" /var/log/secure
grep "authentication failure" /var/log/secure
Como alternativa, podemos ver los registros utilizando el demonio Systemd con el comando journalctl:
journalctl _SYSTEMD_UNIT=ssh.service | egrep "Failed|Failure"
Para mostrar una lista de todas las direcciones IP responsables de los intentos fallidos de inicio de sesión SSH, con el número de intentos al lado, puedes utilizar este comando:
grep "Failed password" /var/log/auth.log | awk ‘{print $11}’ | uniq -c | sort -nr
Es inevitable que se produzca un intento de inicio de sesión fallido de vez en cuando. Sin embargo, sigue siendo crucial identificar los inicios de sesión fallidos en tu servidor. Es importante identificar las direcciones IP que atacan frecuentemente a tu servidor SSH y tomar las medidas necesarias.
Conclusión
En esta guía, hemos cubierto cómo encontrar los intentos fallidos de inicio de sesión SSH en una máquina Linux. También hemos aprendido un enfoque diferente que implica el uso del comando journalctl. Esperamos que este artículo te haya resultado útil. No dudes en aportar tu opinión o cualquier pregunta que tengas en la sección de comentarios.