El servidor SSH nos proporciona un canal de comunicación cifrado seguro entre dos hosts que no son de confianza a través de una red insegura. Aún así, no podemos decir con certeza que esté asegurado. Por lo general, es muy susceptible a muchos tipos de adivinación de contraseñas y ataques de fuerza bruta.
Para habilitar e iniciar el servidor SSH, los comandos se pueden ejecutar de las siguientes maneras:
sudo systemctl enable ssh sudo systemctl start ssh
Para verificar el estado de ejecución del servidor, ejecute el siguiente comando.
sudo systemctl status ssh
Cada plan para iniciar sesión en un servidor SSH es rastreado y registrado en un archivo de registro por el demonio rsyslog en Linux. Podemos ver fácilmente este archivo usando los comandos cat y grep.
Puede haber varias razones por las cuales se podría generar el intento fallido de inicio de sesión. A continuación se enumeran las tres razones más comunes:
- Error tipográfico: error de vinculación con contraseñas incorrectas
- Contraseña incorrecta: tratando de ingresar con la contraseña incorrecta
- Ataque de fuerza bruta: uso del diccionario para atacar con una combinación de ID de usuario y contraseñas comunes
Con cualquiera de los dos comandos que se dan a continuación, podemos ver todos los intentos fallidos de inicio de sesión:
grep "Failed password" /var/log/auth.log
cat /var/log/auth.log | grep "Failed password"
Para ver información adicional, use el siguiente comando:
egrep "Failed|Failure" /var/log/auth.log # It works the same way as grep -E does
Para filtrar solo la dirección IP de estos registros usando el siguiente comando. Esto mostrará una lista de direcciones IP junto con la cantidad de veces que se generó el registro desde la dirección IP.
grep "Failed password" /var/log/auth.log | awk '{print $11}' | uniq -c | sort -nr
El comando funciona de la siguiente manera:
- Enumere la «Contraseña fallida» usando el comando grep con los archivos /var/log/secure o /var/log/auth.log
- Imprimir IP/nombre de host con awk y comando de corte
- Formatee los datos con el comando ordenar (Opcional)
- Imprimir el total de intentos fallidos de inicio de sesión SSH con comandos uniq
Del mismo modo, también puede imprimir registros de errores de autenticación en el terminal:
grep "authentication failure" /var/log/auth.log | awk '{ print $13 }' | cut -b7- | sort | uniq -c
Alternativamente, también podemos ver los registros usando el demonio Systemd usando el comando journalctl.
journalctl _SYSTEMD_UNIT=ssh.service | egrep "Failed|Failure"
Comprobación de la configuración
Es una buena práctica verificar la configuración de los intentos fallidos de inicio de sesión en el servidor. Puede consultar el archivo /etc/pam.d/common-auth, que se utiliza con los módulos de autenticación conectables (PAM) de Linux dentro del sistema.
cat /etc/pam.d/password-auth
La configuración dentro de este archivo controla el umbral para los intentos de inicio de sesión fallidos antes de que la cuenta se bloquee temporalmente. Incluso podría ajustar el tiempo para este bloqueo temporal.
El siguiente segmento de código hará que PAM bloquee una cuenta temporalmente después de tres intentos fallidos de inicio de sesión. El bloqueo durará 300 segundos, que son 5 minutos.
auth required pam_tally2.so deny=3 unlock_time=300
Ocasionalmente, se esperan inicios de sesión fallidos, pero aún así, es crucial identificar los intentos fallidos de inicio de sesión en su servidor. La IP que golpea con frecuencia su servidor debe identificarse de inmediato y debe bloquearse dentro del firewall para evitar posibles ataques a su servidor.