Installation de fail2ban

Comment installer fail2ban

Comme dit sur https://github.com/fail2ban/fail2ban, Fail2Ban analyse les fichiers journaux tels que /var/log/auth.log et bloque les adresses IP effectuant un nombre excessif de tentatives de connexion infructueuses. Pour ce faire, il modifie les règles du pare-feu système afin de bloquer les nouvelles connexions provenant de ces adresses IP, pendant une durée configurable. Cela permet de bloquer la plupart des attaques de déni de service (DDOS) et la récupération des mots de passe par brute force.

La procédure d'installation par OS est donnée sur https://github.com/fail2ban/fail2ban/wiki/How-to-install-fail2ban-packages
donc globalement pour une base RedHat ou Ubuntu faire

#Sur base RedHat
yum update -y && yum install epel-release -y
yum install fail2ban

#Sur base Debian
apt update && apt upgrade
apt install fail2ban
Lien vers le fichier : cliquez ici Copier le code

Activer et lancer le service avec

systemctl start fail2ban
systemctl enable fail2ban
Lien vers le fichier : cliquez ici Copier le code

L'aide est affichée avec

fail2ban-client -h
Lien vers le fichier : cliquez ici Copier le code

Comme indiqué sur https://github.com/fail2ban/fail2ban/wiki/Proper-fail2ban-configuration ou https://doc.ubuntu-fr.org/fail2ban
il est recommandé de ne pas travailler sur le fichier de configuration d'origine mais sur un fichier nommé jail.local
jail.local est automatiquement lu lors de l'initialisation de fail2ban.
Pour cela tapez les commandes suivantes :

cd /etc/fail2ban
sudo cp jail.conf jail.local
Lien vers le fichier : cliquez ici Copier le code

Pour l'éditer on va utiliser nano a avec la commande
sudo nano jail.local

sudo nano /etc/fail2ban/jail.local
Lien vers le fichier : cliquez ici Copier le code

Vous pouvez lire le contenu du fichier pour prendre connaissance de divers paramètres, voir ce que vous voulez éventuellement modifier, le noter à part puis tout effacer pour ne mettre que vos paramètres customisés

Exemple où ici on passe le bantime à 1H
Le paramètre findtime définit la fenêtre de temps pendant laquelle Fail2ban compte les tentatives. Si un hôte dépasse maxretry tentatives durant ce laps de temps, il est banni pendant la durée définie par bantime. Les deux paramètres sont indépendants, mais on choisit généralement un bantime supérieur au findtime.

ignoreip permet de paramétrer des exclusions. Typiquement si votre serveur est chez un fournisseur type OVH, cloudwatt etc.. et que vous le gérez de chez vous, il faut mettre une exclusion sur votre ip publique afin de ne pas vous bloquer vous même.
entrez plusieurs ip en les séparant avec un espace. Votre ip publique peut être récupérée par exemple sur whatismyipaddress.com, il faudra y accoler /32 pour que l'exclusion correspond exactement à cette adresse ip. Dans ces exclusions il est recommandé de mettre également 127.0.0.1/8 et ::1. qui correspondent respectivement aux adresses loopback IPv4 et IPv6.

Le seul service (jail) monitoré est ici sshd

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
ignoreip = 127.0.0.1/8 ::1 27.12.42.18/32

[sshd]
enabled = true
Lien vers le fichier : cliquez ici Copier le code

Les services / jails disponibles sont visibles avec

ls /etc/fail2ban/jail.d
ls /etc/fail2ban/filter.d
Lien vers le fichier : cliquez ici Copier le code

Typiquement on voit ici tout ce qui est disponible pour Apache

Si on veut activer apache-auth.conf, et ajuster des paramètre, on peut par exemple ajouter

[apache-auth]
enabled = true
port    = http,https
logpath = /var/log/apache2/error.log
maxretry = 5
Lien vers le fichier : cliquez ici Copier le code

Les paramètres spécifiques des jails sont visibles dans /etc/fail2ban/jail.conf qu'on peut voir avec par exemple

grep -A10 apache-auth /etc/fail2ban/jail.conf
Lien vers le fichier : cliquez ici Copier le code

Les paramètres globaux sont eux dans /etc/fail2ban/jail.conf dans la section [DEFAULT] dont on peut voir le début par exemple avec

grep -A60 ^.DEFAULT /etc/fail2ban/jail.conf
Lien vers le fichier : cliquez ici Copier le code

D'autres actions/options sont visibles dans

man jail.conf
Lien vers le fichier : cliquez ici Copier le code

Votre fichier de configuration modifié, relancez le service avec la commande

sudo systemctl restart fail2ban
Lien vers le fichier : cliquez ici Copier le code

Vous pouvez vérifier si les prisons sont correctement lancées avec la commande

sudo fail2ban-client status
Lien vers le fichier : cliquez ici Copier le code

Résultat

Vous pouvez contrôler une prison spécifique avec par exemple ici sshd

fail2ban-client status sshd
Lien vers le fichier : cliquez ici Copier le code

Les logs fail2ban sont dans

/var/log/fail2ban.log
Lien vers le fichier : cliquez ici Copier le code

Vous pouvez arrêter une prison avec un stop. Exemple

sudo fail2ban-client stop ssh
Lien vers le fichier : cliquez ici Copier le code

Résultat

Un
sudo fail2ban-client start ssh

doit normalement le faire repartir mais cela n'a pas fonctionné dans mon cas.
Aussi j'ai dû effecter un reload :

sudo fail2ban-client reload
Lien vers le fichier : cliquez ici Copier le code

Suite à quoi un status indique bien que le jail de SSH est reparti

Les lignes ci-dessous permettent de créer un script qui regarde les ip bannies sur tous les jails

sudo nano checklist_ban
#!/bin/bash
#lancer le script en sudo 
JAILS=$(fail2ban-client status | grep " Jail list:" | sed 's/`- Jail list:\t//g' | sed 's/,//g')
for j in $JAILS
do
echo "$j $(fail2ban-client status $j | grep " Currently banned:" | sed 's/   |- Currently banned:\t//g')"
done
Lien vers le fichier : cliquez ici Copier le code
Publicité