Recherche de site Web

Comment bloquer les attaques SSH Brute Force à l'aide de SSHGUARD


SSHGuard est un démon open source qui protège les hôtes des attaques par force brute. Il y parvient grâce à la surveillance et à l'agrégation des journaux système, à la détection des attaques et au blocage des attaquants à l'aide de l'un des backends du pare-feu Linux : iptables, FirewallD, pf . et ipfw.

Initialement conçu pour fournir une couche de protection supplémentaire au service OpenSSH, SSHGuard protège également une large gamme de services tels que Vsftpd et Postfix. Il reconnaît plusieurs formats de journaux, notamment Syslog, Syslog-ng et les fichiers journaux bruts.

SSHGuard est assez similaire à Fail2ban sauf qu'il est écrit en C (Fail2ban est écrit en Python), c'est-à-dire plus léger et offre moins de fonctionnalités.

Dans ce guide, nous montrerons comment installer et configurer SSHGuard pour bloquer les attaques par force brute SSH sur votre serveur Linux.

Étape 1 : Installer SSHGuard sur Linux

Nous commençons par l'installation de SSHGuard sur Linux.

Installer SSHGuard sur Debian/Ubuntu

Tout d'abord, mettez à jour les listes de packages, puis installez SSHGuard à partir des référentiels par défaut à l'aide du gestionnaire de packages apt.

sudo apt update
sudo apt install sshguard

Une fois installé, le service SSHGuard démarre automatiquement, et vous pouvez le vérifier à l'aide de la commande :

sudo systemctl status sshguard

Installer SSHGuard sur les systèmes RHEL

Pour les distributions basées sur RHEL telles que CentOS, Rocky et AlmaLinux, commencez par installer le référentiel EPEL en tant que fourni dans la commande ci-dessous.

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo dnf install epel-release

Une fois EPEL en place, continuez et installez SSHGuard à l'aide du gestionnaire de packages dnf.

sudo dnf install sshguard 

Une fois installé, démarrez et configurez SSHGuard pour qu'il démarre au démarrage ou au redémarrage du système.

sudo systemctl start sshguard
sudo systemctl enable sshguard

Assurez-vous de vérifier que SSHGuard fonctionne comme prévu.

sudo systemctl status sshguard

Étape 2 : Configuration de SSHGuard sous Linux

SSHGuard surveille activement le journal systemd /var/log/auth.log, /var/log/secure et syslog-ng fichiers journaux pour les tentatives de connexion ayant échoué.

Pour chaque tentative de connexion infructueuse, l'hôte distant est banni pendant une durée limitée qui, par défaut, est définie à 120 secondes. Par la suite, la durée du bannissement est multipliée par 1,5 à chaque tentative de connexion échouée.

L'heure à laquelle les hôtes incriminés sont bannis, ainsi que d'autres paramètres, sont spécifiés dans le fichier sshguard.conf. Vous pouvez accéder au fichier de configuration à l'aide de l'éditeur vim comme indiqué.

sudo vim /etc/sshguard/sshguard.conf

Sur les distributions basées sur RHEL, le fichier de configuration se trouve dans le chemin suivant.

sudo vim /etc/sshguard.conf

Voici un exemple du fichier de configuration affiché depuis Ubuntu/Debian.

Concentrons-nous sur l'option principale.

  • La directive BACKEND pointe vers le chemin complet de l'exécutable backend. Dans cet exemple, nous voyons que IPtables est défini comme backend de pare-feu par défaut.
  • La directive THRESHOLD bloque les attaquants lorsque leur score d'attaque dépasse la valeur spécifiée.
  • L'option BLOCK_TIME correspond au nombre de secondes pendant lesquelles un attaquant est bloqué après chaque tentative de connexion infructueuse successive. Par défaut, cette valeur est définie sur 120 après la première tentative. Cela augmente à chaque tentative de connexion échouée.
  • L'option DETECTION_TIME fait référence au temps en secondes pendant lequel l'attaquant est enregistré ou mémorisé par le système avant que son score ne soit réinitialisé.
  • L'option WHITELIST_file pointe vers le chemin complet du fichier de liste blanche qui contient les hôtes qui ne sont pas censés être sur liste noire./li>

Étape 3 : Configurer SSHGuard pour bloquer les attaques SSH Brute Force

Pour parer aux attaques par force brute, vous devez configurer les pare-feu suivants pour qu'ils fonctionnent avec sshguard.

Bloquer les attaques SSH à l'aide d'UFW

Si UFW est installé et activé sur votre système Ubuntu/Debian, modifiez le fichier /etc/ufw/before.rules.

sudo vim etc/ufw/before.rules

Ajoutez les lignes suivantes juste après la section allow all on loopback.

allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

Enregistrez le fichier et redémarrez UFW.

sudo systemctl restart ufw

Essayez maintenant de vous connecter au serveur à partir d'un autre système avec des informations d'identification erronées et notez que vous serez verrouillé pendant 120 secondes après l'échec de la première tentative de connexion.

Vous pouvez le vérifier en consultant le fichier journal auth.log.

sudo tail -f  /var/log/auth.log

Après l'échec de la prochaine tentative de journalisation, le temps de blocage passe à 240 secondes, puis à 480 secondes, puis à 960 secondes, et ainsi de suite.

Bloquer les attaques SSH à l'aide de Firewalld

Si vous exécutez firewalld, assurez-vous qu'il est configuré et activé. Exécutez ensuite la commande suivante pour activer sshguard sur votre zone préférée.

sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

Pour appliquer les modifications, rechargez Firewalld et sshguard.

sudo firewall-cmd --reload
sudo systemctl restart sshguard

Vérifiez ensuite la règle comme suit :

sudo firewall-cmd —-info-ipset=sshguard4

Bloquer les attaques SSH à l'aide d'Iptables

Si vous utilisez toujours Iptables, commencez par créer une nouvelle règle de chaîne pour sshguard dans Iptables pour commencer à bloquer les méchants.

iptables -N sshguard

Ensuite, mettez à jour la chaîne INPUT pour diriger le trafic vers sshguard et bloquer tout le trafic provenant de parties malveillantes.

iptables -A INPUT -j sshguard

Pour bloquer des ports spécifiques tels que SSH, POP et IMAP des abuseurs, exécutez la commande :

iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard

Et enfin, enregistrez la règle pour que les modifications entrent en vigueur.

iptables-save > /etc/iptables/iptables.rules

Étape 4 : Comment mettre sur liste blanche les hôtes bloqués par SSH

Pour ajouter un hôte bloqué à la liste blanche, spécifiez simplement son nom d'hôte ou son adresse IP dans le fichier de liste blanche qui se trouve dans :

/etc/sshguard/whitelist - Ubuntu/Debian 
/etc/sshguard.whitelist - RHEL-based distros

Ensuite, assurez-vous de redémarrer le démon sshguard et le backend du pare-feu pour que les modifications s'appliquent.

Dans ce guide, nous avons montré comment bloquer les attaques SSH Bruteforce à l'aide du démon SSHGuard sur les serveurs Linux. Vos commentaires sont les bienvenus.