La sécurité SSH est une priorité absolue lors de la configuration de votre serveur. Les paramètres SSH par défaut ne sont généralement pas assez robustes pour protéger votre serveur des attaques externes.
Par conséquent, des ajustements supplémentaires sont nécessaires pour fournir une sécurité décente contre les attaques par force brute. L’une d’elles consiste à implémenter fail2ban pour éloigner les utilisateurs non autorisés après un certain nombre de tentatives de connexion incorrectes. De même, vous pouvez tirer parti de la pam_faillock module pour implémenter une politique de verrouillage de compte.
Ce guide montrera comment verrouiller le compte d’un utilisateur système après un nombre précis de tentatives de connexion SSH infructueuses dans les distributions basées sur RedHat. Sur les distributions basées sur Debian, vous devez utiliser le module pam_tally2 pour verrouiller les connexions SSH ayant échoué.
Ici, l’objectif est d’appliquer une sécurité de serveur simple en verrouillant le compte d’un utilisateur après un nombre consécutif d’authentifications SSH infructueuses.
Qu’est-ce que le module pam_faillock ?
Le pam_faillock module fait partie du PAM Linux (Pluggable Authentication Modules), un utilitaire composé de bibliothèques partagées qui sépare les applications des méthodes d’authentification standard.
Il accepte les vérifications d’authentification de programmes tels que sshd, gdm, login et bien d’autres et authentifie l’utilisateur auprès de ces services ou applications dans les systèmes Linux. Nous avons brièvement expliqué la configuration de PAM pour auditer l’activité du shell de connexion des utilisateurs.
Le module enregistre les tentatives d’authentification échouées par utilisateur et verrouille temporairement le compte utilisateur si les tentatives d’authentification échouées dépassent une certaine limite. Les tentatives de connexion infructueuses sont stockées dans des fichiers par utilisateur dans le répertoire de pointage qui est /var/run/faillock/
par défaut.
Le pam_faillock module remplace pam_tally et pam_tally2 modules qui ont été obsolètes dans RHEL 7 et RHEL 8. Il offre plus de flexibilité et d’options que les deux modules.
Comment verrouiller l’utilisateur après l’échec des connexions SSH
Vous pouvez configurer la fonctionnalité ci-dessus dans le /etc/pam.d/system-auth et /etc/pam.d/password-auth fichiers, en ajoutant les entrées ci-dessous aux auth
section.
$ sudo vim /etc/pam.d/system-auth $ sudo vim /etc/pam.d/password-auth
Pour verrouiller ou refuser l’accès des utilisateurs au système après 3 tentatives SSH infructueuses et déverrouiller le compte utilisateur après 1200 secondes, ajoutez les lignes suivantes dans le auth
section.
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
Où:
audit
– permet l’audit des utilisateurs.deny
– permet de définir le nombre de tentatives (3 dans ce cas), après quoi le compte utilisateur doit être verrouillé.unlock_time
– règle l’heure (600 secondes = dix minutes) pendant lesquelles le compte doit rester verrouillé.
Notez que l’ordre de ces lignes est très important, de mauvaises configurations peuvent entraîner le verrouillage de tous les comptes d’utilisateurs.
Le auth
section dans les deux fichiers doit avoir le contenu ci-dessous organisé dans cet ordre :
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authselect is run. auth required pam_env.so auth sufficient pam_unix.so try_first_pass nullok auth required pam_deny.so auth required pam_faillock.so preauth silent audit deny=3 unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
Ensuite, naviguez vers le account
section et ajoutez la ligne suivante dans les deux fichiers ci-dessus.
account required pam_faillock.so
Après avoir ajouté les paramètres ci-dessus, il devrait apparaître comme suit.
Comment verrouiller la racine après l’échec des connexions SSH
Vous pouvez ajouter le even_deny_root
paramètre à auth
section pour verrouiller à la fois l’utilisateur et l’utilisateur normal. Dans cet exemple, le temps de déverrouillage pour les utilisateurs réguliers est 1200 secondes (20 minutes) et 3600 secondes (60 min ou 1 h) pour l’utilisateur root après 3 tentatives de connexion SSH infructueuses.
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=3600
Une fois que vous avez tout configuré. Vous pouvez redémarrer les services d’accès à distance comme sshdpour que la politique ci-dessus prenne effet, c’est-à-dire si les utilisateurs utilisent ssh pour se connecter au serveur.
$ sudo systemctl restart sshd
Ensuite, nous allons exécuter un test et vérifier si la configuration fonctionne.
Comment tester les tentatives de connexion infructueuses des utilisateurs SSH
À partir des paramètres ci-dessus, nous avons configuré le système pour verrouiller le compte d’un utilisateur après 3 tentatives d’authentification infructueuses.
Dans ce scénario, l’utilisateur tecmint
essaie de passer à l’utilisateur aaronkilik
mais après 3 logins incorrects à cause d’un mot de passe erroné, indiqué par le « Permission refusée » message, l’utilisateur d’aaronkilik compte est verrouillé comme indiqué par le « échec d’authentification” message de la quatrième tentative.
L’utilisateur racine est également informé des tentatives de connexion infructueuses sur le système, comme indiqué dans la capture d’écran ci-dessous.
Comment afficher les connexions SSH ayant échoué
Vous pouvez voir tous les journaux d’authentification SSH ayant échoué à l’aide du blocage utilitaire qui permet d’afficher et de modifier le journal des échecs d’authentification.
Vous pouvez afficher les tentatives de connexion échouées pour un utilisateur particulier comme celui-ci.
# faillock --user aaronkilik
Pour afficher toutes les tentatives de connexion infructueuses, exécutez faillock sans aucun argument comme suit :
# faillock
Comment déverrouiller l’utilisateur après l’échec des connexions SSH
Pour effacer les journaux d’échec d’authentification d’un utilisateur, exécutez cette commande.
# faillock --user aaronkilik --reset OR # fail --reset #clears all authentication failure records
Désactiver le verrouillage de l’utilisateur après l’échec des connexions SSH
Enfin, pour indiquer au système de ne pas verrouiller un utilisateur ou les comptes d’un utilisateur après plusieurs tentatives de connexion infructueuses, ajoutez l’entrée mise en évidence en gras, juste au-dessus de l’endroit où pam_faillock est d’abord appelé sous le auth
section dans les deux fichiers (/etc/pam.d/system-auth et /etc/pam.d/password-auth) comme suit.
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authselect is run. auth required pam_env.so auth sufficient pam_unix.so try_first_pass nullok auth required pam_deny.so auth [success=1 default=ignore] pam_succeed_if.so user in tecmint:aaronkilik auth required pam_faillock.so preauth silent audit deny=3 unlock_time=1200 auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
Comment désactiver le module Faillock
Pour désactiver le pam_failock module, exécutez la commande suivante :
# authconfig --disablefaillock --update
Pour plus d’informations, consultez le pam_faillock et blocage pages de manuel.
# man pam_faillock # man faillock
C’est tout! Dans cet article, nous avons montré comment appliquer une sécurité de serveur simple en verrouillant le compte d’un utilisateur après un nombre x de connexions incorrectes ou de tentatives d’authentification infructueuses.
C’est un moyen pratique de renforcer votre sécurité SSH contre les attaques par force brute. Utilisez le formulaire de commentaire ci-dessous pour nous faire part de vos questions ou de vos réflexions.