fail2ban

Fail2Ban: Protéger les service sur linux

fail2ban est un logiciel qui permet de bannir automatiquement une adresses ip qui ont tentés en vain de se connecter un certain nombre de fois à un service.

Tout service connecté à Internet est susceptible d’être attaqué par des personnes
malveillantes. Si votre service nécessite une authentification comme ssh, les utilisateurs
non autorisés et les bots ( rebots) tenteront d’y accéder et donc à votre système et cela en essayant
à plusieurs reprises de s’authentifier à l’aide de différentes informations d’identification.

Heureusement , des services comme fail2ban ont été créés pour bloquer ces attaques.

Installation de fail2ban :

Sur CentOS :

Vu que fail2ban n’est pas disponible par défaut sur les dépôts de CentOS :

[root@server ~]# dnf install fail2ban
CentOS-7 - Base 894 kB/s | 10 MB 00:11
CentOS-7 - Updates 1.1 MB/s | 13 MB 00:12
CentOS-7 - Extras 980 kB/s | 310 kB 00:00
No match for argument: fail2ban
Error: Unable to find a match: fail2ban

Vous devez installer d’abord le dépôt via yum ou dnf :

[root@server ~]# yum install epel-release
.
.
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-11.noarch 1/1
Verifying : epel-release-7-11.noarch 1/1
Installed:
epel-release.noarch 0:7-11

Vous pouvez maintenant installer notre package en toute tranquillité :

[root@server ~]# yum install fail2ban
.
.
.
Running transaction
Installing : systemd-python-219-78.el7_9.3.x86_64 1/5
Installing : fail2ban-server-0.11.1-10.el7.noarch 2/5
Installing : fail2ban-sendmail-0.11.1-10.el7.noarch 3/5
Installing : fail2ban-firewalld-0.11.1-10.el7.noarch 4/5
Installing : fail2ban-0.11.1-10.el7.noarch 5/5
Verifying : fail2ban-0.11.1-10.el7.noarch 1/5
Verifying : fail2ban-sendmail-0.11.1-10.el7.noarch 2/5
Verifying : fail2ban-server-0.11.1-10.el7.noarch 3/5
Verifying : systemd-python-219-78.el7_9.3.x86_64 4/5
Verifying : fail2ban-firewalld-0.11.1-10.el7.noarch 5/5
Installed:
fail2ban.noarch 0:0.11.1-10.el7
Dependency Installed:
fail2ban-firewalld.noarch 0:0.11.1-10.el7 fail2ban-sendmail.noarch 0:0.11.1-10.el7 fail2ban-server.noarch 0:0.11.1-10.el7
systemd-python.x86_64 0:219-78.el7_9.3
Complete!

Sur Ubuntu :

[root@server ~]# apt install fail2ban

Maintenant démarrer le service et configurez-le pour qu’il soit démarré par défaut au démarrage du système ( Ubuntu et CentOS ):

[root@server ~]# systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:fail2ban(1)
[root@server ~]# systemctl start fail2ban.service
[root@server ~]# systemctl enable fail2ban.service
Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.
[root@server ~]# systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2021-09-12 07:35:27 EDT; 14s ago
Docs: man:fail2ban(1)
Main PID: 1988 (f2b/server)
CGroup: /system.slice/fail2ban.service
└─1988 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start
Sep 12 07:35:27 server systemd[1]: Starting Fail2Ban Service…
Sep 12 07:35:27 server systemd[1]: Started Fail2Ban Service.
Sep 12 07:35:27 server fail2ban-server[1988]: Server ready

Il faut maintenant configurer fail2ban.

Configuration de Fail2ban:

Le fichier de configuration par défaut de fail2ban est /etc/fail2ban/jail.conf, par contre la configuration ne doit pas être effectué dans ce fichier, car il peut être modifié en cas de mises à niveau du package.

Nous allons plutôt le copier et y effectuons les modification souhaités.

Copiez donc ce fichier et nommé le jail.local :

[root@server]# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
[root@server]# ll /etc/fail2ban/jail.local
-rw-r--r--. 1 root root 25740 Sep 12 08:10 /etc/fail2ban/jail.local

Une fois le fichier copié, vous pouvez effectuer toutes vos modifications dans le nouveau fichier jail.local.

De nombreux services ayant besoin de protection sont déjà dans le fichier, Chacun est situé dans sa propre section, configuré et désactivé.

Configurer la section DEFAULT de fail2ban:

Editez le fichier jail.local :

[root@server]# vi /etc/fail2ban/jail.conf

La section DEFAULT couvre les règles de base que Fail2Ban sera appliquer à tous les services activés pour Fail2Ban qui ne sont pas remplacés dans la propre section du service.

ignoreip :

Ici vous devez mettre les adresse IP que vous souhaitez whitelistées, séparez les adresses par un espace. Vous pouvez mettre soit des adresse ip ou des adresse ip réseau.

#"ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
#will not ban a host which matches an address in this list. Several addresses
#can be defined using space (and/or comma) separator.
ignoreip = 127.0.0.1 192.168.50.0/24 196.125.3.55

banaction = iptables-multiport

Ce paramètre nous permet de s’assurer que nous utilisons iptables pour la configuration du firewall :

#iptables-multiport, shorewall, etc) It is used to define
#action_* variables. Can be overridden globally or per
#section within jail.local file
banaction = iptables-multiport

bantime :

Le nombre de secondes pendant lesquelles un hôte sera bloqué du serveur qui enfreint les règles. Ceci est particulièrement utile dans le cas des bots.

La valeur par défaut est fixée à 10 minutes vous pouvez l’augmenter à une heure (ou plus) si vous le souhaitez.

#"bantime" is the number of seconds that a host is banned.
bantime = 10m

C’est le temps dont dispose un hôte pour se connecter. la valeur par défaut est 10 minutes, cela signifie que si un hôte tente, et échoue, de se connecter plus que la valeur définit par maxretry dans les 10 minutes désignées, il sera banni.

#A host is banned if it has generated "maxretry" during the last "findtime"
seconds.
findtime = 10m

Maxretry :

C’est le nombre de tentatives de connexion incorrectes qu’un hôte peut avoir avant d’être banni.

#"maxretry" is the number of failures before a host get banned.
maxretry = 5

Fichier jail pour un service spécifique ( SSH ) :

c’est une bonne pratique de créer des fichiers jail séparés pour chacun des services que nous voulons protéger avec Fail2Ban.

Nous allons prendre comme exemple le service ssh, créons donc un fichier jail pour ce service :

[root@server]# vim /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true
port = ssh
action = iptables-multiport
logpath = /var/log/secure
maxretry = 5
bantime = 600

Enabled : Indique que la protection du service ssh est activé ( false pour le désactiver ).

port: Indique quel port Fail2Ban doit surveiller, 22 est le port par défaut, si vous utilisez un autre port il faut l’indiquer.

action: décrit les étapes que Fail2Ban prend en considération pour interdire une adresse IP correspondante. Chaque action fait référence à un fichier dans le répertoire /etc/fail2ban/action.d. L’action par défaut est iptables-multiport :

[root@server]# ll /etc/fail2ban/action.d/iptables-multiport.conf
-rw-r--r--. 1 root root 1508 Jan 11 2020 /etc/fail2ban/action.d/iptables-multiport.conf

logpath : Indique l’emplacement du fichier log.

maxretry et bantime : Je l’ai déja explqué avant.

Ensuite rédmarrez fail2ban :

[root@server fail2ban]# systemctl restart fail2ban

Pour afficher la liste des jails que vous avez créé taper la commande suivant :

[root@server fail2ban]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

Comment débloquer manuellement une adresse IP avec fail2ban :

Si, pour une raison quelconque, vous souhaitez débloquer une adresse IP que fail2ban a bloqué taper la commande suivante

[root@server jail.d]# fail2ban-client set JAIL 192.168.2.5

Et voilà c’est terminé, vous devriez maintenant être en mesure de configurer quelques configuration de base pour vos services. Fail2ban est très facile à configurer et il s’agit d’une bonne solution pour protéger tout type de service utilisant l’authentification.