Recherche de site Web

Comment prévenir les attaques par force brute SSH en utilisant Fail2ban sur Linux


Linux est un système d'exploitation populaire pour les serveurs et autres appareils. Il est connu pour sa stabilité, sa sécurité et sa flexibilité. Cependant, aucun système d'exploitation n'est à l'abri des attaques. L'un des types d'attaques les plus courants contre les serveurs Linux est une attaque par force brute. Dans ce guide étape par étape, nous vous montrerons comment installer et configurer fail2ban sur un système Linux et comment prévenir les attaques SSH par force brute avec Fail2ban.

Avant d'entrer dans le sujet, permettez-moi de donner une brève introduction à l'attaque par force brute et à fail2ban.

Qu'est-ce qu'une attaque par force brute ?

Une attaque par force brute est un type de cyberattaque qui tente de deviner un mot de passe ou d'autres informations secrètes en essayant toutes les combinaisons possibles jusqu'à ce que la bonne soit trouvée.

Dans une attaque par force brute, un attaquant tente de deviner le mot de passe d'un utilisateur en essayant à plusieurs reprises différentes combinaisons de caractères. Cela peut être une attaque très longue et coûteuse en ressources informatiques, mais elle réussit souvent parce que de nombreuses personnes utilisent des mots de passe faibles.

Les attaques par force brute peuvent être utilisées pour accéder à une variété de choses, y compris :

  • Comptes utilisateurs sur les sites web et applications,
  • Fichiers et dossiers protégés par mot de passe
  • Clés de chiffrement,
  • Appareils réseau,
  • Systèmes informatiques.

Heureusement, il existe de nombreux logiciels de sécurité qui peuvent prévenir les attaques par force brute. Fail2ban en fait partie.

Qu'est-ce que Fail2ban ?

Fail2ban est un logiciel libre et open-source de prévention des intrusions qui peut aider à protéger les serveurs Linux contre les attaques par force brute. Il fonctionne en surveillant les journaux du système pour détecter les tentatives de connexion échouées. Si Fail2Ban détecte un grand nombre de tentatives de connexion échouées provenant d'une seule adresse IP, il bloquera automatiquement cette adresse IP pendant une durée spécifiée. Cela empêche l'attaquant de continuer l'attaque.

Fail2ban est un outil très polyvalent qui peut être utilisé pour protéger une grande variété de services, y compris SSH, HTTP et FTP. Il est également très facile à installer et à configurer.

Une fois Fail2ban installé, vous pouvez simplement spécifier les services que vous souhaitez protéger et le nombre de tentatives de connexion échouées qui déclencheront une interdiction.

Fail2ban est un outil précieux pour tout administrateur Linux qui souhaite améliorer la sécurité de ses serveurs. C'est un moyen simple et efficace de protéger contre les attaques par force brute, qui sont l'une des menaces les plus courantes pour les serveurs Linux.

Fail2ban est écrit en Python et son code source est librement disponible sur GitHub. Il devrait fonctionner sur toute distribution Linux, macOS et systèmes BSD*.

Fonctionnalités de Fail2ban

Fail2ban est un outil de sécurité avec plusieurs fonctionnalités conviviales qui aident à protéger votre système contre les accès non autorisés et les attaques :

  1. Blocage d'IP : Fail2ban peut bloquer automatiquement les adresses IP qui tentent d'accéder à votre système en utilisant des identifiants de connexion incorrects ou des méthodes non autorisées.
  2. Règles dynamiques : Il détecte de manière dynamique les comportements suspects dans les journaux et crée des règles pour bloquer les adresses IP malveillantes, ce qui le rend adaptable aux menaces en évolution.
  3. Gestion de la prison : Fail2ban organise ses mesures de protection en « prisons » pour différents services (comme SSH ou les serveurs web), ce qui facilite la concentration sur des zones spécifiques de la sécurité.
  4. Alertes par e-mail : Il envoie des notifications par e-mail lorsque des activités suspectes sont détectées, vous permettant de rester informé des menaces potentielles pour la sécurité.
  5. Liste blanche : Vous pouvez spécifier des adresses IP de confiance qui devraient être exemptées des interdictions afin d'éviter le blocage accidentel des utilisateurs ou services de confiance.
  6. Temps de bannissement personnalisables : Fail2ban vous permet de définir combien de temps les adresses IP bloquées restent bannies, vous aidant à équilibrer sécurité et flexibilité.
  7. Incréments de temps de bannissement : Cela peut augmenter les durées de bannissement pour les contrevenants récidivistes, décourageant les attaquants persistants en rendant les bannissements plus longs à chaque infraction suivante.
  8. Rapports Whois : Fail2ban peut fournir des informations supplémentaires sur les adresses IP bannies en incluant des rapports whois dans les notifications par email.
  9. Intégration avec les pare-feux : Il fonctionne parfaitement avec divers systèmes de pare-feu (comme iptables ou UFW) pour appliquer efficacement les interdictions.
  10. Débannissement automatique : Fail2ban peut supprimer automatiquement les adresses IP de la liste des bannis après l'expiration de la période de bannissement, garantissant que les utilisateurs légitimes retrouvent l'accès.
  11. Support IPv6 : Il prend en charge à la fois les adresses IPv4 et IPv6, ce qui le rend compatible avec les technologies réseau modernes.
  12. Configuration flexible : Fail2ban vous permet de personnaliser les paramètres pour répondre à vos exigences de sécurité et adapter la protection à votre environnement spécifique.

En termes simples, Fail2ban est comme un gardien de sécurité numérique qui surveille les "portes" de votre système, identifie les menaces potentielles et agit pour empêcher les visiteurs indésirables d'entrer tout en laissant passer ceux de confiance.

Pourquoi envisager d'utiliser Fail2ban ? Pourquoi ne pas simplement utiliser l'authentification SSH par clé publique ?

Pourquoi ne pas simplement appliquer le chiffrement par clé publique dans SSH et désactiver les mots de passe ? Inutile de s'embêter avec fail2ban lorsqu'il est littéralement impossible de forcer un mot de passe car il est désactivé. L'un de nos lecteurs a posé cette question.

Appliquer l'authentification par clé publique SSH et désactiver l'authentification par mot de passe dans SSH est en effet une mesure de sécurité efficace et peut réduire considérablement le risque d'attaques par force brute. Cependant, il y a quelques raisons pour lesquelles on pourrait encore envisager d'utiliser Fail2ban :

  1. Compatibilité et commodité : Certains systèmes ou applications peuvent nécessiter une authentification par mot de passe pour certains utilisateurs ou scénarios. Désactiver complètement les mots de passe peut ne pas être envisageable dans tous les cas. Fail2ban offre une couche de sécurité supplémentaire sans éliminer totalement l'option d'authentification par mot de passe.
  2. Erreur humaine : Les configurations du système peuvent parfois être accidentellement mal configurées, laissant l'authentification par mot de passe activée par inadvertance. Fail2ban agit comme un filet de sécurité, protégeant contre les configurations incorrectes potentielles ou les modifications.
  3. Surveillance et Rapports : Fail2ban offre des fonctionnalités de journalisation et de rapports qui peuvent fournir des informations précieuses sur les tentatives d'authentification, même si l'authentification par mot de passe est désactivée. Ces journaux peuvent être utiles pour l'audit et pour identifier les menaces potentielles à la sécurité.
  4. Environnements complexes : Dans des environnements serveur complexes, plusieurs services peuvent fonctionner avec différentes méthodes d'authentification. Fail2ban peut être configuré pour protéger contre les attaques par force brute sur plusieurs services, offrant une solution de sécurité unifiée.
  5. Sécurité adaptative : La capacité de Fail2ban à ajuster les temps de bannissement et à s'adapter aux menaces évolutives en fait un outil de sécurité flexible. Il peut aider à traiter non seulement les attaques par force brute, mais aussi d'autres formes de comportements suspects.

En résumé, bien que désactiver l'authentification par mot de passe et se fier uniquement au chiffrement par clé publique soit une pratique de sécurité solide, Fail2ban peut compléter cette approche en offrant des mesures de sécurité supplémentaires et une adaptabilité dans divers environnements de serveur. Il fournit une défense plus complète contre les menaces potentielles.

Prérequis

Ceci est un guide pratique. Pour suivre, assurez-vous d'avoir un système Debian ou basé sur Debian comme Ubuntu.

  • Comment Installer Debian 12 Bookworm [Un Guide Étape par Étape]
  • Comment Installer Ubuntu 22.04 LTS Édition Serveur

Pour les besoins de ce guide, j'utiliserai l'édition serveur de Debian 12 Bookworm.

1. Installer Fail2ban

Tout d'abord, mettez à jour l'index des paquets sur votre système en exécutant la commande suivante :

$ sudo apt update

Ensuite, installez fail2ban en exécutant la commande suivante :

$ sudo apt install fail2ban

2. Configurez Fail2ban pour empêcher les attaques par force brute SSH

Une fois l'installation terminée, accédez au répertoire de configuration en exécutant la commande suivante :

$ cd /etc/fail2ban/

Dans ce répertoire, vous trouverez le fichier de configuration principal de fail2ban nommé « jail.conf ». Cependant, il est recommandé de faire une copie du fichier de configuration et d'utiliser la copie au lieu de modifier le fichier original.

Pour ce faire, exécutez :

$ sudo cp jail.conf jail.local

Ouvrez le fichier de configuration copié avec votre éditeur de texte préféré. Dans cet exemple, nous utiliserons l'éditeur nano :

$ sudo nano jail.local

Dans ce fichier, vous pouvez configurer les paramètres pour divers services tels que SSH, Apache et plus encore. Par exemple, pour configurer la protection SSH, localisez la section [sshd] et effectuez les modifications suivantes :

[sshd]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1800
ignoreip = 127.0.0.1/8

Configurer la prison sshd dans Fail2ban

Cette configuration met en place une prison Fail2ban nommée "[sshd]" pour protéger le service SSH (Secure Shell). Décomposons chaque partie :

  • enabled=true : Cette ligne indique que la jail "sshd" est activée, ce qui signifie qu'elle est active et surveillera les tentatives d'accès non autorisées.
  • port=ssh : Cela spécifie le numéro de port (22 par défaut) où le service SSH fonctionne. Fail2ban surveillera ce port pour toute activité suspecte.
  • filter=sshd : Cela fait référence au nom du filtre qui doit être appliqué pour surveiller le service SSH. Les règles du filtre définissent quels événements surveiller et comment détecter un comportement malveillant.
  • logpath=/var/log/auth.log : Cela spécifie le chemin vers le fichier journal (/var/log/auth.log) où sont enregistrés les événements liés à l'authentification pour SSH. Fail2ban analysera ce fichier journal à la recherche de signes de tentatives d'accès non autorisées.
  • maxretry=3 : Cela définit le nombre maximal de tentatives de connexion échouées autorisées avant que Fail2ban n'intervienne. S'il y a trois tentatives échouées consécutives ou plus depuis la même adresse IP, Fail2ban réagira.
  • bantime=1800 : Cela définit la durée en secondes pendant laquelle une adresse IP sera bannie si elle dépasse le nombre maximum de tentatives échouées autorisées. Dans ce cas, l'interdiction dure 1800 secondes (30 minutes).
  • ignoreip=127.0.0.1/8 : Cette ligne répertorie les adresses IP ou les plages d'IP qui doivent être ignorées par Fail2ban. Toute tentative provenant de ces adresses IP ne sera pas comptabilisée dans le nombre maximum de tentatives. Ici, localhost (127.0.0.1) est ignoré. Cette configuration est importante. Elle empêche de se retrouver bloqué hors de votre propre serveur fail2ban.

En résumé, cette configuration de jail Fail2ban nommée « [sshd] » surveille le service SSH sur le port par défaut 22. Elle utilise le filtre « sshd » pour analyser les événements d'authentification enregistrés dans le fichier /var/log/auth.log. Si une adresse IP échoue à se connecter trois fois ou plus, elle sera bannie pendant 30 minutes. De plus, l'hôte local est ignoré et ne déclenchera pas de bannissements. Cette configuration aide à protéger le service SSH contre les attaques par force brute en bannissant temporairement les adresses IP qui présentent un comportement suspect.

Dans cet exemple, nous vous avons montré comment sécuriser SSH contre les attaques par force brute. Vous pouvez toutefois configurer Fail2ban pour sécuriser d'autres services, par exemple FTP, Apache, etc., également.

Modifiez les valeurs ci-dessus selon vos besoins. Après avoir modifié les paramètres, enregistrez les changements et fermez le fichier en appuyant sur les touches CTRL+O puis CTRL+X.

À savoir : Vous pouvez également configurer des prisons individuelles dans le répertoire jail.d en créant des fichiers .conf séparés pour chaque prison. Cela vous permet de personnaliser les paramètres pour différents services ou scénarios.

3. Redémarrer et activer Fail2ban

Redémarrez fail2ban pour appliquer les nouveaux paramètres en exécutant la commande suivante :

$ sudo systemctl restart fail2ban

Pour s'assurer que fail2ban démarre automatiquement au démarrage, activez-le en exécutant la commande suivante :

$ sudo systemctl enable fail2ban

C'est tout ! Fail2ban est maintenant installé et configuré sur votre système Debian.

Vous pouvez vérifier son statut en exécutant la commande suivante :

$ sudo systemctl status fail2ban

Exemple de sortie :

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
     Active: active (running) since Mon 2023-09-04 12:01:03 IST; 2min 54s ago
       Docs: man:fail2ban(1)
   Main PID: 542 (fail2ban-server)
      Tasks: 5 (limit: 9347)
     Memory: 19.4M
        CPU: 198ms
     CGroup: /system.slice/fail2ban.service
             └─542 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Sep 04 12:01:03 debian12 systemd[1]: Started fail2ban.service - Fail2Ban Service.
Sep 04 12:01:03 debian12 fail2ban-server[542]: 2023-09-04 12:01:03,366 fail2ban.configreader   [542]: WARNING 'allowipv6' not defined in 'Definit>
Sep 04 12:01:03 debian12 fail2ban-server[542]: Server ready

4. Afficher les prisons activées

Pour afficher toutes les prisons activées, exécutez :

$ sudo fail2ban-client status

Exemple de sortie :

Status
|- Number of jail:	1
`- Jail list:	sshd

Pour ceux qui se posent la question, la commande fail2ban-client est utilisée pour interagir avec et gérer Fail2ban. Elle permet aux administrateurs de contrôler et de surveiller le service Fail2ban ainsi que ses « jails » (règles qui surveillent et bloquent les activités malveillantes).

Avec fail2ban-client, vous pouvez effectuer des tâches telles que recharger les configurations, vérifier l'état, redémarrer le service, bannir ou débannir des adresses IP et plus encore.

Si vous voulez afficher l'état d'une prison spécifique, par exemple sshd, exécutez :

$ sudo fail2ban-client status sshd

La sortie montre des informations détaillées sur l'état du 'sshd' jail dans Fail2ban. Elle fournit des informations sur les tentatives échouées, le fichier journal surveillé et toutes les adresses IP bannies.

Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:	

Voici une répartition de ce que chaque partie signifie dans la sortie ci-dessus.

  • État de la prison : sshd : Ce titre indique que les informations suivantes concernent la prison « sshd ».
  • Filtre : Cette section fournit des informations relatives aux règles de filtrage qui déterminent quels événements sont surveillés et traités.

    • Actuellement échoué : Cette ligne indique qu'il y a actuellement 0 tentatives échouées suivies par la prison "sshd".
    • Total failed : Cette ligne indique qu'aucune tentative échouée n'a été enregistrée par la prison « sshd ».
    • Liste des fichiers : /var/log/auth.log : Cette ligne spécifie le fichier journal (/var/log/auth.log) que le 'jail' "sshd" surveille pour les événements liés à l'authentification.
  • Actions : Cette section fournit des informations relatives aux actions que Fail2ban entreprend lorsque des comportements malveillants sont détectés.

    • Actuellement interdit : Cette ligne indique qu'il y a actuellement 0 adresses IP interdites par le module "sshd".
    • Total banned : Cette ligne indique qu'aucune adresse IP n'a été bannie par le « sshd » depuis le début.
    • Liste des IP bannies : Cette ligne montre qu'aucune adresse IP n'est actuellement bannie par le 'sshd' jail.
Vérifier l'état de la prison sshd

5. Tester Fail2ban

Fail2ban fonctionne en surveillant les fichiers journaux et en détectant les tentatives de connexion échouées, puis en bannissant les adresses IP fautives.

Une fois fail2ban installé et configuré, vous pouvez le tester pour vous assurer qu'il fonctionne correctement. Pour ce faire, essayez de vous connecter à votre serveur Linux utilisant Fail2ban avec un mot de passe incorrect plusieurs fois de suite. Après quelques tentatives échouées, fail2ban devrait bloquer automatiquement votre adresse IP.

À des fins de démonstration, je vais utiliser un système Debian 11 avec une IP de 192.168.1.101 pour me connecter en ssh au serveur fail2ban qui a une IP de 192.168.1.20.

$ ssh ostechnix@192.168.1.20

Après quelques tentatives infructueuses, vous verrez l'erreur « connexion refusée ».

ssh: connect to host 192.168.1.20 port 22: Connection refused

Connexion SSH refusée

Comme vous le voyez dans la sortie ci-dessus, il y a un message d'erreur de connexion refusée. Cela signifie que fail2ban a bloqué le système fautif.

Vous pouvez afficher les adresses IP bannies en affichant l'état de la prison sshd sur votre serveur fail2ban.

$ sudo fail2ban-client status sshd

Exemple de sortie :

Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	192.168.1.101

Afficher l'état de la prison sshd

Comme vous pouvez le voir, l'adresse IP 192.168.1.101 est bannie de la jail sshd après plusieurs tentatives de connexion SSH incorrectes. Cette adresse IP sera bannie pendant 30 minutes selon ma configuration. Vous pouvez bien sûr augmenter ou diminuer ce temps comme vous le souhaitez.

6. Comment interdire ou réautoriser manuellement une adresse IP

Pour bannir ou débannir manuellement une adresse IP en utilisant Fail2ban, vous pouvez utiliser la commande fail2ban-client. Voici comment vous pouvez le faire :

6.1. Bannir une adresse IP

Vous pouvez bannir une adresse IP en utilisant la commande suivante :

sudo fail2ban-client set <jail-name> banip <ip-address>

Remplacez <jail-name> par le nom de la prison spécifique à laquelle vous souhaitez appliquer l'interdiction (par exemple, « sshd » pour la prison SSH), et <ip-address> par l'adresse IP que vous souhaitez interdire.

Par exemple, pour interdire manuellement l'adresse IP "192.168.1.101" dans la prison "sshd", vous utiliseriez :

$ sudo fail2ban-client set sshd banip 192.168.1.101

Si vous voulez bloquer une adresse IP spécifique pour une durée personnalisée dans une prison, utilisez la commande suivante :

$ sudo fail2ban-client set <jail-name> bantime <time_in_seconds> --banip <ip_address>

Remplacez <jail-name> par le nom de la prison, <time_in_seconds> par la durée de l'interdiction souhaitée en secondes, et <ip_address> par l'adresse IP que vous souhaitez interdire.

Vous pouvez vérifier la liste des adresses IP bannies dans une prison spécifique en utilisant la commande fail2ban-client avec l'option « get » comme ci-dessous :

$ sudo fail2ban-client get sshd banned

Pour plus d'options et d'exemples d'utilisation, consultez la section d'aide en exécutant la commande suivante :

$ fail2ban-client --help

Ou,

$ fail2ban-client -h

6.2. Débloquer une adresse IP

Parfois, vous pourriez vouloir supprimer une adresse IP bloquée d'une certaine jail.

Pour lever manuellement l'interdiction (supprimer l'interdiction) d'une adresse IP, vous pouvez utiliser la commande suivante :

sudo fail2ban-client set <jail-name> unbanip <ip-address>

Remplacez <jail-name> par le nom de la prison (par exemple, "sshd") et <ip-address> par l'adresse IP que vous souhaitez débannir.

Par exemple, pour débloquer manuellement l'adresse IP "192.168.1.101" dans la prison "sshd", vous utiliseriez :

$ sudo fail2ban-client set sshd unbanip 192.168.1.101

Débloquer une adresse IP en utilisant la commande fail2ban-client

Gardez à l'esprit que bannir ou débannir manuellement une adresse IP peut contourner le comportement normal de Fail2ban, donc utilisez ces commandes avec prudence et seulement lorsque c'est nécessaire.

7. Augmenter la durée d'interdiction pour les récidivistes

Fail2ban offre l'option d'activer la fonctionnalité « Incrément du temps de bannissement », qui vous permet d'augmenter automatiquement la durée du bannissement pour les contrevenants répétés. Cela peut constituer un puissant moyen de dissuasion contre les attaquants persistants.

Ouvrez le fichier de configuration en utilisant votre éditeur de texte préféré :

$ sudo nano /etc/fail2ban/jail.local

Dans le fichier de configuration, trouvez et décommentez les lignes associées aux paramètres bantime.increment et bantime.factor.

[...]
bantime.increment = true
bantime.factor = 2
bantime.formula = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
[...]

Dans cet exemple, le paramètre bantime.increment est activé (true), et le bantime.factor est réglé sur 2. Cela signifie que la durée de l'interdiction sera doublée pour chaque interdiction suivante.

Après avoir effectué les modifications, enregistrez le fichier de configuration et fermez l'éditeur de texte.

Pour appliquer les modifications, redémarrez le service Fail2ban :

$ sudo systemctl restart fail2ban

Avec cette configuration, Fail2ban augmentera automatiquement la durée de l'interdiction pour les contrevenants récidivistes en fonction de la logique spécifiée. Cette fonctionnalité peut être efficace pour décourager les attaquants persistants en rendant les interdictions plus longues à chaque infraction suivante. Ajustez le paramètre bantime.factor pour correspondre au niveau d'augmentation souhaité.

N'oubliez pas de tester la configuration de manière approfondie pour vous assurer qu'elle correspond à vos objectifs et exigences en matière de sécurité.

8. Ajouter des adresses IP à la liste blanche

Mettre une adresse IP sur liste blanche consiste à autoriser des adresses IP spécifiques à contourner les mécanismes de bannissement de Fail2ban. Cela est utile pour éviter des bannissements accidentels pour des adresses IP que vous considérez comme fiables, comme votre propre adresse IP ou celles de services de confiance.

Ouvrez le fichier de configuration de fail2ban en utilisant votre éditeur de texte préféré :

$ sudo nano /etc/fail2ban/jail.local

Trouvez la ligne ignoreip. Décommentez-la en supprimant le # au début de la ligne, si elle est commentée. Ensuite, ajoutez les adresses IP que vous souhaitez mettre sur liste blanche, séparées par des espaces ou des virgules.

ignoreip = 127.0.0.1/8 192.168.1.123
[...]

Dans cet exemple, l'adresse IP 192.168.1.123 est sur la liste blanche. Vous pouvez ajouter d'autres adresses IP ou plages d'adresses IP en suivant le même format.

Après avoir effectué les modifications, enregistrez le fichier de configuration et fermez l'éditeur de texte.

Pour appliquer les modifications, redémarrez le service Fail2ban :

$ sudo systemctl restart fail2ban

Avec cette configuration, l'adresse IP que vous avez mise sur liste blanche ne sera pas soumise aux règles de bannissement de Fail2ban. Il est important de ne mettre sur liste blanche que les adresses IP en lesquelles vous avez confiance, car une mauvaise utilisation pourrait potentiellement compromettre les avantages en matière de sécurité de Fail2ban.

9. Voir les journaux de Fail2ban

Une fois que fail2ban est configuré, vous voudrez le surveiller pour vous assurer qu'il fonctionne correctement. Vous pouvez consulter les fichiers journaux de fail2ban pour voir s'il détecte et bloque les activités suspectes.

$ sudo tail /var/log/fail2ban.log

Exemple de sortie :

2023-09-04 13:04:44,614 fail2ban.filter         [2087]: INFO    [sshd] Found 192.168.1.101 - 2023-09-04 13:04:39
2023-09-04 13:04:46,216 fail2ban.filter         [2087]: INFO    [sshd] Found 192.168.1.101 - 2023-09-04 13:04:46
2023-09-04 13:04:52,122 fail2ban.filter         [2087]: INFO    [sshd] Found 192.168.1.101 - 2023-09-04 13:04:51
2023-09-04 13:04:52,417 fail2ban.actions        [2087]: NOTICE  [sshd] Ban 192.168.1.101
2023-09-04 13:34:51,119 fail2ban.actions        [2087]: NOTICE  [sshd] Unban 192.168.1.101
2023-09-04 13:37:05,961 fail2ban.filter         [2087]: INFO    [sshd] Found 192.168.1.101 - 2023-09-04 13:37:05
2023-09-04 13:37:09,422 fail2ban.filter         [2087]: INFO    [sshd] Found 192.168.1.101 - 2023-09-04 13:37:09
2023-09-04 13:37:15,328 fail2ban.filter         [2087]: INFO    [sshd] Found 192.168.1.101 - 2023-09-04 13:37:14
2023-09-04 13:37:15,372 fail2ban.actions        [2087]: NOTICE  [sshd] Ban 192.168.1.101
2023-09-04 13:50:16,214 fail2ban.actions        [2087]: NOTICE  [sshd] Unban 192.168.1.101

Voir les journaux Fail2ban

Si vous voulez surveiller les journaux de fail2ban en temps réel, ajoutez simplement le drapeau -f.

$ sudo tail -f /var/log/fail2ban.log

Vous utilisez également la commande grep pour localiser des détails particuliers dans les fichiers journaux de fail2ban, tels que les adresses IP, les agents utilisateurs ou les messages d'erreur. Cela vous permet de restreindre votre recherche et d'identifier des informations spécifiques qui vous intéressent.

Par exemple, si vous voulez rechercher et filtrer des résultats contenant une adresse IP, vous utiliseriez :

$ grep "192.168.1.101" /var/log/fail2ban.log

De même, vous pouvez filtrer les journaux contenant un user-agent spécifique (par exemple Bing) :

$ grep "Bing" /var/log/fail2ban.log

Filtrer les entrées de journal contenant des messages d'erreur.

$ grep "error" /var/log/fail2ban.log

Vous pouvez également trouver des adresses IP interdites ou non interdites avec la date et l'heure.

Pour localiser les adresses IP interdites ainsi que leur date et heure correspondantes, vous pouvez utiliser la commande suivante :

$ sudo grep 'Ban' /var/log/fail2ban.log
2023-09-04 13:04:52,417 fail2ban.actions        [2087]: NOTICE  [sshd] Ban 192.168.1.101
2023-09-04 13:37:15,372 fail2ban.actions        [2087]: NOTICE  [sshd] Ban 192.168.1.101

Cela vous aidera à suivre l'activité d'une adresse IP spécifique.

Pour afficher les adresses IP débloquées avec horodatage, exécutez :

$ sudo grep 'Unban' /var/log/fail2ban.log

10. Voir les règles de Fail2ban

Par défaut, Fail2ban ajoute des règles au pare-feu IPTables pour bloquer les adresses IP qui tentent un accès non autorisé. Ces règles sont généralement ajoutées à une chaîne définie par l'utilisateur spécifique à la prison (par exemple, f2b-sshd pour la prison SSH).

Vous pouvez utiliser la commande suivante pour voir les règles insérées par fail2ban :

$ sudo iptables -S

Exemple de sortie :

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N f2b-sshd
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A f2b-sshd -j RETURN

Comme vous pouvez le voir dans la sortie, les lignes qui contiennent la chaîne "f2b-" sont insérées par fail2ban.

Ici,

  • -N f2b-sshd : Cette ligne crée une nouvelle chaîne définie par l'utilisateur nommée f2b-sshd. Cette chaîne sera utilisée pour gérer les règles liées à la prison "sshd" de Fail2ban, qui est utilisée pour protéger l'accès SSH.
  • -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd : Cette ligne ajoute une règle à la chaîne INPUT. Elle spécifie que le trafic TCP entrant ciblant plusieurs ports (spécifiés par --dports 22) doit être dirigé vers la chaîne définie par l'utilisateur f2b-sshd. Cette règle est utilisée pour diriger le trafic lié au service SSH vers la chaîne Fail2ban.
  • -A f2b-sshd -j RETURN : Cette règle se trouve dans la chaîne f2b-sshd. Elle spécifie que si un paquet atteint cette règle dans la chaîne f2b-sshd, il doit être renvoyé à la chaîne précédente (dans ce cas, la chaîne principale INPUT). Cette règle aide à optimiser le traitement des paquets, en permettant à tous les paquets qui ne correspondent pas aux conditions définies par d'autres règles de la chaîne f2b-sshd de passer à d'autres règles ou chaînes sans traitement supplémentaire.

Pour filtrer et afficher uniquement les règles insérées par Fail2ban, vous pouvez utiliser l'option -L avec le nom de la chaîne. Voici comment vous pouvez le faire :

sudo iptables -L <chain-name>

Remplacez <chain-name> par le nom de la chaîne spécifique utilisée par Fail2ban. Par exemple, si vous souhaitez afficher les règles insérées par Fail2ban pour la prison SSH (f2b-sshd), vous exécuteriez :

$ sudo iptables -L f2b-sshd

Cette commande vous montrera les règles que Fail2ban a insérées dans la chaîne spécifiée. C'est un moyen utile de voir quelles adresses IP ont été bannies par Fail2ban pour un service ou prison spécifique.

Gardez à l'esprit que les règles de Fail2ban sont gérées dynamiquement, donc les règles peuvent changer en fonction de l'activité détectée et des temps de bannissement configurés.

Vous pouvez également utiliser la commande grep pour filtrer uniquement les règles insérées par fail2ban.

$ sudo iptables -S | grep f2b

Ou,

$ sudo iptables -L | grep f2b

11. Configurer Fail2ban pour utiliser UFW

Comme indiqué précédemment, Fail2ban utilise le pare-feu IPTables par défaut pour bannir les adresses IP. Vous pouvez également changer le pare-feu par défaut pour un autre.

Par exemple, pour configurer Fail2ban afin d'utiliser UFW (Uncomplicated Firewall), assurez-vous qu'il est installé :

$ sudo apt install ufw

Ouvrez le fichier de configuration jail.local dans un éditeur de texte, trouvez la ligne "banaction" et définissez sa valeur sur ufw.

[...]
banaction=ufw
[...]

Enregistrez le fichier et fermez-le.

Redémarrez le service fail2ban pour que les modifications prennent effet.

$ sudo systemctl restart fail2ban

À partir de maintenant, Fail2ban bloquera les adresses IP fautives en utilisant UFW.

12. Configurer les alertes par e-mail

Fail2ban est hautement personnalisable et peut être configuré pour surveiller un large éventail de fichiers journaux et de services. Vous pouvez également personnaliser les actions que fail2ban entreprend lorsqu'il détecte une activité suspecte, comme envoyer une notification par e-mail ou exécuter un script personnalisé.

Configurer des alertes par e-mail dans Fail2ban vous permet de recevoir des notifications concernant des incidents de sécurité et de prendre les mesures nécessaires. Vous pouvez configurer Fail2ban pour envoyer des e-mails avec des rapports whois à une adresse e-mail spécifiée.

Pour configurer fail2ban afin d'envoyer des alertes par e-mail, éditez le fichier de configuration jail.local :

$ sudo nano /etc/fail2ban/jail.local

À l'intérieur du fichier de configuration, trouvez les paramètres pertinents pour les alertes par e-mail. Ces paramètres se trouvent souvent près du haut du fichier. Définissez le destemail sur l'adresse e-mail où vous souhaitez recevoir les notifications, et définissez le sender sur l'adresse e-mail depuis laquelle les notifications seront envoyées.

[...]
destemail = admin@example.com
sender = f2b@example.com
mta=sendmail
[...]

Dans cet exemple, admin@example.com est l'adresse e-mail qui recevra les notifications, et f2b@example.com est l'adresse e-mail qui enverra les notifications. Remplacez les deux adresses e-mail par les vôtres.

Après avoir effectué les modifications, enregistrez le fichier de configuration et fermez l'éditeur de texte.

Si votre système n'a pas de serveur de messagerie fonctionnel configuré, vous devrez peut-être mettre en place un relais de messagerie ou configurer la livraison locale des emails. Assurez-vous que votre serveur est capable d'envoyer des emails.

Pour appliquer les modifications, redémarrez le service Fail2ban :

$ sudo systemctl restart fail2ban

Avec cette configuration, Fail2ban enverra des notifications par e-mail à l'adresse e-mail spécifiée chaque fois qu'une interdiction est déclenchée. Ces notifications peuvent inclure des rapports whois et d'autres informations liées à l'adresse IP bannie.

13. Quand ne pas utiliser Fail2ban

Bien que Fail2ban puisse améliorer la sécurité de votre système, il existe des scénarios où il pourrait ne pas être la meilleure solution. Voici quelques avertissements et considérations :

  1. Attaques triviales et dépendance à la journalisation : Fail2ban est efficace contre les attaques basiques, mais il dépend d'une journalisation correcte et de la disponibilité d'un démon de support. Si votre journalisation est insuffisante ou incohérente, l'efficacité de Fail2ban pourrait être compromise.
  2. Authentification par clé publique uniquement : Il n'est généralement pas nécessaire d'utiliser Fail2Ban avec sshd si seule l'authentification par clé publique est activée. Si vous avez déjà configuré l'authentification par clé SSH, fail2ban n'est pas requis.
  3. Pas de substitut à un VPN : Fail2ban ne remplace pas l'utilisation d'un réseau privé virtuel (VPN) pour sécuriser vos connexions. Évitez d'exposer des services directement à Internet sauf si cela est absolument nécessaire.
  4. Préoccupations concernant le spoofing IP : Fail2ban pourrait être vulnérable au spoofing IP. Si un attaquant connaît votre adresse IP, il peut envoyer des paquets avec un en-tête source falsifié, ce qui pourrait entraîner le blocage de votre IP. Pour remédier à cela, assurez-vous de spécifier l'adresse IP de votre serveur fail2ban dans la configuration ignoreip.

N'oubliez pas, Fail2ban est un outil qui complète vos mesures de sécurité, mais il est essentiel d'évaluer ses avantages en fonction de votre configuration et de vos besoins spécifiques.

14. Comment désinstaller Fail2ban

Pour supprimer fail2ban de votre système Linux, arrêtez le service fail2ban en utilisant les commandes suivantes :

$ sudo systemctl disable fail2ban
$ sudo systemctl stop fail2ban

Vous pouvez également utiliser la commande en une seule ligne suivante pour arrêter et désactiver le service fail2ban en même temps :

$ sudo systemctl disable fail2ban --now

Puis désinstallez fail2ban en utilisant la commande :

$ sudo apt remove fail2ban --purge

Questions Fréquemment Posées

Voici une liste de questions fréquemment posées et leurs réponses à propos de Fail2ban.

Q : Qu'est-ce que Fail2ban ?

A : Fail2ban est un outil de sécurité qui aide à protéger vos systèmes informatiques contre les tentatives d'accès non autorisées et les attaques par force brute en bannissant automatiquement les adresses IP qui montrent un comportement suspect.

Q : Comment fonctionne Fail2ban ?

A : Fail2ban surveille les fichiers journaux de services spécifiques (comme SSH ou les serveurs web). S'il détecte des tentatives de connexion échouées répétées ou d'autres activités malveillantes, il ajoute une interdiction temporaire à l'adresse IP responsable du comportement.

Q : Qu'est-ce qu'une prison dans Fail2ban ?

A : Une prison est un paramètre de configuration qui définit des règles et des actions pour un service spécifique. C'est comme un conteneur pour surveiller et gérer les menaces potentielles liées à ce service.

Q : Puis-je mettre sur liste blanche des adresses IP de confiance avec Fail2ban ?

A : Oui, vous pouvez mettre sur liste blanche les adresses IP de confiance pour éviter qu'elles ne soient accidentellement bannies. Cela est utile pour garantir l'accès aux utilisateurs ou services connus.

Q : Comment Fail2ban me notifie-t-il des événements de sécurité ?

A : Fail2ban peut envoyer des notifications par e-mail lorsqu'il bannit une adresse IP. Ces e-mails peuvent inclure des rapports whois pour fournir des informations supplémentaires sur l'IP bannie.

Q : Puis-je personnaliser la durée des bannissements dans Fail2ban ?

A : Oui, vous pouvez spécifier combien de temps une adresse IP reste bannie après avoir déclenché les règles de la prison. Cela vous permet d'équilibrer la sécurité et la flexibilité.

Q : Qu'est-ce que l'incrémentation du temps de bannissement dans Fail2ban ?

A : L'augmentation du temps de bannissement est une fonctionnalité qui augmente automatiquement la durée du bannissement pour les récidivistes. À chaque bannissement ultérieur, la durée du bannissement devient plus longue afin de dissuader les attaquants persistants.

Q : Fail2ban fonctionne-t-il avec les adresses IPv6 ?

A : Oui, Fail2ban prend en charge les adresses IPv4 et IPv6, ce qui le rend compatible avec les technologies réseau modernes.

Q : Fail2ban peut-il débloquer automatiquement les adresses IP ?

A : Oui, Fail2ban peut automatiquement supprimer les adresses IP de la liste des bannis après l'expiration de la période de bannissement. Cela garantit que les utilisateurs légitimes retrouvent l'accès avec le temps.

Q : La configuration de Fail2ban est-elle flexible ?

A : Absolument ! La configuration de Fail2ban est personnalisable pour correspondre à vos exigences de sécurité et adapter la protection à votre environnement spécifique.

Q : Fail2ban fonctionne-t-il avec différents systèmes de pare-feu ?

A : Oui, Fail2ban fonctionne parfaitement avec divers systèmes de pare-feu tels qu'iptables ou UFW, renforçant les mesures de sécurité de votre système.

Q : Comment puis-je intégrer Fail2ban avec des alertes par e-mail ?

A : Vous pouvez configurer Fail2ban pour envoyer des notifications par e-mail avec des rapports whois à une adresse e-mail spécifiée chaque fois qu'une activité suspecte est détectée.

Q : Puis-je augmenter la durée de l'interdiction pour les récidivistes dans Fail2ban ?

A : Oui, Fail2ban offre une fonctionnalité permettant d'activer l'augmentation du temps de bannissement, ce qui augmente la durée du bannissement pour les récidivistes. Cela décourage les attaquants persistants.

Q : Fail2ban est-il recommandé pour la sécurité des serveurs ?

A : Oui, Fail2ban est un outil largement utilisé pour renforcer la sécurité du serveur en empêchant les tentatives d'accès non autorisées et en protégeant contre les attaques par force brute.

Q : Fail2ban convient-il à la fois aux débutants et aux utilisateurs expérimentés ?

A : Oui, Fail2ban offre un équilibre entre simplicité et fonctionnalités avancées, ce qui le rend adapté aux utilisateurs ayant différents niveaux d'expérience en administration système et en sécurité.

Conclusion

Fail2ban est un outil essentiel pour améliorer la sécurité de votre serveur Linux. En surveillant les fichiers journaux et en bloquant automatiquement les adresses IP, fail2ban peut aider à prévenir les accès non autorisés à votre système. Avec la bonne configuration et personnalisation, fail2ban peut fournir une couche de protection supplémentaire à votre serveur Linux.

Avec fail2ban installé et configuré sur votre serveur Debian Linux, vous pouvez protéger votre serveur contre les attaques par force brute SSH et d'autres activités malveillantes. En suivant les étapes de ce guide, vous pouvez améliorer la sécurité de votre serveur et avoir l'esprit tranquille en sachant que votre système est protégé.

Ressources :

  • Site officiel de Fail2ban
  • Dépôt GitHub de Fail2ban

Image en vedette par Pete Linforth de Pixabay.