Recherche de site Web

Comment installer et configurer Fail2Ban pour sécuriser le serveur Linux


Ce guide détaillé vous apprend ce qu'est Fail2Ban, comment le configurer et comment l'utiliser pour fournir une couche de sécurité supplémentaire sur votre système Linux.

Qu’est-ce que Fail2Ban ?

Si vous avez activé SSH, veuillez vérifier l'historique de connexion de votre serveur Linux. Vous serez surpris de voir un grand nombre d’adresses IP tenter de se connecter à votre serveur via SSH.

Si vous n'avez mis en place aucun mécanisme pour dissuader ces tentatives de connexion, votre système est susceptible d'être attaqué par force brute. Fondamentalement, un script/bot continuera de tenter une connexion SSH à votre système en essayant diverses combinaisons de nom d'utilisateur et de mots de passe.

C’est là qu’intervient un outil comme Fail2Ban. Fail2Ban est un logiciel gratuit et open source qui aide à sécuriser votre serveur Linux contre les connexions malveillantes. Fail2Ban bannira l'IP (pendant un certain temps) s'il y a un certain nombre de tentatives de connexion infructueuses.

Fail2Ban fonctionne immédiatement avec les paramètres de base, mais il est également extrêmement configurable. Vous pouvez le modifier à votre guise et créer des filtres et des règles selon vos besoins.

Ça a l'air intéressant? Pourquoi ne pas tester Fail2Ban ? Lisez et suivez le reste de l'article et essayez Fail2Ban vous-même.

Installation de Fail2Ban sur Linux

Vous pouvez deviner la popularité de Fail2Ban grâce au fait qu’il est disponible dans les référentiels officiels de toutes les principales distributions Linux. Cela rend l’installation de Fail2Ban une tâche simple.

Installez Fail2Ban sur CentOS et Red Hat

Vous devez être un utilisateur root ou sudo pour installer un nouveau logiciel sur votre système.

Vous devez vous assurer que votre système est à jour et que le référentiel EPEL est installé.

sudo yum update && sudo yum install epel-release

Vous pouvez maintenant installer Fail2Ban avec la commande suivante :

sudo yum install fail2ban

Installez Fail2Ban sur Ubuntu et Debian

Tout d’abord, assurez-vous que votre système est mis à jour :

sudo apt update && sudo apt upgrade -y

Maintenant, installez Fail2Ban avec cette commande :

sudo apt install fail2ban

Comprendre le fichier de configuration Fail2Ban

Il existe deux fichiers de configuration principaux dans Fail2Ban : /etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf. Laissez-moi vous expliquer ce qu'ils font.

/etc/fail2ban/fail2ban.conf : Il s'agit du fichier de configuration pour les paramètres opérationnels du démon Fail2Ban. Les paramètres tels que le niveau de journalisation, le fichier journal, le socket et le fichier pid sont définis ici.

/etc/fail2ban/jail.conf : c'est ici que toute la magie opère. Il s'agit du fichier dans lequel vous pouvez configurer des éléments tels que la durée d'interdiction par défaut, le nombre de tentatives avant d'interdire une adresse IP, la liste blanche des adresses IP, les informations d'envoi de courrier, etc. Fondamentalement, vous contrôlez le comportement de Fail2Ban à partir de ce fichier.

Maintenant, avant de modifier ces fichiers, Fail2Ban conseille de faire une copie avec le fichier .local pour ces fichiers de configuration. C'est parce que les fichiers de configuration par défaut peuvent être écrasés dans les mises à jour et vous perdrez tous vos paramètres.

sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Comprenons maintenant le fichier jail.conf. Si vous utilisez la commande less pour lire ce gros fichier, cela peut sembler assez déroutant. Le fichier conf essaie de tout expliquer avec beaucoup trop de commentaires. Alors laissez-moi simplifier cela pour vous.

Le fichier jail.conf est divisé en services. Il existe une section [Par défaut] et elle s'applique à tous les services. Et puis vous pouvez voir différents services avec leurs paramètres respectifs (le cas échéant). Tous ces services sont entre parenthèses. Vous verrez des sections comme [sshd], [apache-auth], [squid] etc.

Si je supprime les commentaires, la section par défaut ressemble à ceci :

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

Laissez-moi vous expliquer la signification de certains de ces paramètres.

  • bantime : définissez la durée de l'interdiction. La valeur par défaut est de 10 minutes.

  • findtime : La fenêtre dans laquelle l'action sur une IP sera effectuée. La valeur par défaut est de 10 minutes. Supposons qu'une mauvaise connexion ait été tentée par une certaine adresse IP à 10h30. Si la même IP atteint le nombre maximum de tentatives avant 10h40, elle sera bannie. Dans le cas contraire, la prochaine tentative ratée après 10h40 sera comptée comme première tentative ratée.

  • maxretry : le nombre de tentatives échouées avant qu'une action ne soit entreprise

  • usedns : le paramètre « warn » tente d'utiliser le DNS inversé pour rechercher le nom d'hôte et l'interdire en utilisant le nom d'hôte. Le définir sur no interdira les adresses IP, pas le nom d'hôte.

  • destemail : L'adresse email à laquelle les alertes seront envoyées (à configurer)

  • expéditeur : le nom de l'expéditeur dans l'e-mail de notification

  • mta : agent de transfert de courrier utilisé pour les e-mails de notification

  • banaction : ce paramètre utilise le fichier /etc/fail2ban/action.d/iptables-multiport.conf pour définir l'action après le nombre maximal de tentatives infructueuses.

  • protocole : le type de trafic qui sera abandonné après l'interdiction

Si vous souhaitez apporter des modifications à n'importe quelle prison (ou à l'ensemble des prisons), comme le nombre maximal de tentatives, la durée d'interdiction, la durée de recherche, etc., vous devez modifier le fichier jail.local.

Comment utiliser Fail2Ban pour sécuriser le serveur Linux

Laissez-moi vous montrer quelques-unes des façons dont vous pouvez utiliser Fail2Ban pour renforcer la sécurité Linux.

Notez que vous devez être un utilisateur root ou disposer d'un accès sudo pour exécuter les commandes fail2ban.

Activez Fail2Ban sur votre serveur et vérifiez toutes les prisons en cours d'exécution

Vous pouvez utiliser les commandes systemd pour démarrer et activer Fail2Ban sur votre serveur Linux :

systemctl start fail2ban
systemctl enable fail2ban

Une fois Fail2Ban activé, vous pouvez voir l'état et les prisons actives avec la commande fail2ban-client :

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

Au cas où vous vous poseriez la question, la prison sshd est activée par défaut.

Voir le journal Fail2Ban

Le journal Fail2Ban se trouve dans /var/log/fail2ban.log. Les fichiers journaux sont au format suivant :

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

Vous pouvez voir qu'il identifie les adresses IP et les bannit lorsqu'elles franchissent le seuil de tentative maximale.

Voir les adresses IP interdites par Fail2Ban

Une solution consiste à vérifier le statut d’une certaine prison. Vous pouvez utiliser le client Fail2Ban à cet effet.

fail2ban-client status <jail_name>

Par exemple, si vous devez voir toutes les mauvaises connexions SSH interdites par Fail2Ban, vous pouvez l'utiliser de la manière suivante. La sortie afficherait le nombre total de tentatives échouées et le nombre total d’adresses IP interdites.

root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

Le système qui tente de se connecter via SSH à partir de l'échec de la connexion devrait obtenir une erreur comme celle-ci

ssh: connect to host 93.233.73.133 port 22: Connection refused

Comment bannir définitivement une IP avec Fail2Ban

Vous savez maintenant que l’interdiction imposée à une adresse IP par Fail2Ban est temporaire. Par défaut, la durée est de 10 minutes et l'attaquant peut tenter de se reconnecter après 10 minutes.

Cela présente un risque de sécurité car les attaquants pourraient utiliser un script qui tente de se connecter après un intervalle de 10 minutes.

Alors, comment mettre en place une interdiction permanente en utilisant Fail2Ban ? Il n’y a pas de réponse claire à cela.

À partir de la version 0.11 de Fail2Ban, le temps de bannissement sera automatiquement calculé et les IP persistantes verront leur temps de bannissement augmenté de façon exponentielle.

Mais si vous vérifiez votre version de Fail2Ban, vous utilisez probablement la version 0.10.

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

Dans les versions antérieures, vous pouviez utiliser un bantime négatif (bantime=-1) et cela aurait été équivalent à un ban permanent mais si vous essayez cette méthode, vous verrez probablement une erreur du type 'Démarrage de fail2ban : ERREUR NOK : (' L'image disque de la base de données est mal formée',)'.

Une solution de contournement pas si simple serait d'augmenter le bantime à quelque chose comme 1 jour, 1 semaine, 1 mois ou 1 an. Cela pourrait contourner le problème jusqu'à ce que la nouvelle version soit disponible sur votre système.

Comment débannir l'IP bloquée par Fail2Ban

Vérifiez d’abord si l’adresse IP est bloquée ou non. Puisque Fail2Ban fonctionne sur iptables, vous pouvez consulter iptable pour voir les IP bannies par votre serveur :

iptables -n -L

Vous devrez peut-être utiliser la commande grep s'il y a beaucoup trop d'adresses IP interdites.

Si vous trouvez l'adresse IP spécifiée dans la sortie, elle est bannie :

La prochaine étape consiste donc à trouver quelle « prison » interdit ladite adresse IP. Vous devrez utiliser la commande Grep avec les journaux fail2ban ici.

Comme vous pouvez le voir dans le résultat ci-dessous, l'adresse IP est interdite par la prison sshd.

root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

Maintenant que vous connaissez le nom de la prison bloquant l'IP, vous pouvez débloquer l'IP à l'aide du client fail2ban :

fail2ban-client set <jail_name> unbanip <ip_address>

Comment mettre l'IP sur liste blanche dans Fail2Ban

Ce ne sera pas une bonne chose si vous vous bannissez, n'est-ce pas ? Pour ignorer qu'une adresse IP soit bannie par la session en cours de Fail2Ban, vous pouvez mettre l'adresse IP sur liste blanche à l'aide d'une commande comme celle-ci :

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

Vous pouvez facilement trouver votre adresse IP sous Linux. Dans mon cas, c'était

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

Si vous souhaitez ajouter définitivement l'adresse IP à la liste blanche, vous devez modifier le fichier de configuration de la prison. Allez dans ladite section prison et ajoutez la ligne ignoreip comme ceci :

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

Si vous souhaitez mettre sur liste blanche une adresse IP de toutes les prisons de votre système, ce serait une meilleure idée de modifier le fichier /etc/fail2ban/jail.local et d'ajouter une ligne sous la section DEFAULT comme ce que nous avons vu ci-dessus.

Vous devrez redémarrer Fail2Ban pour prendre en compte cette modification.

Comment voir la liste blanche IP d'une prison

Vous pouvez voir toutes les adresses IP mises sur liste blanche par une prison en utilisant cette commande :

fail2ban-client get <JAIL_NAME> ignoreip

Il devrait montrer toutes les adresses IP ignorées par Fail2Ban pour cette prison :

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

Comment supprimer une adresse IP de la liste blanche Fail2Ban

Si vous supprimez l'adresse IP de la liste blanche d'une certaine prison, vous pouvez utiliser cette commande :

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

Si vous souhaitez supprimer définitivement l'adresse IP, vous devez modifier le fichier /etc/fail2ban/jail.local.

Quoi d'autre ?

Vous pouvez faire beaucoup plus de choses avec Fail2Ban. Ce guide vous donne les bases pour démarrer avec Fail2Ban. Je n'ai pas abordé de sujets tels que les actions, les notifications par courrier électronique, les filtres, etc.

Une fois que vous connaissez les bases de Fail2Ban, vous pouvez commencer à en explorer davantage. Pour le moment, jouez simplement avec et ajoutez une couche de sécurité supplémentaire à SSH sur votre serveur Linux.

Articles connexes: