Services et serveurs

Fail2Ban - Bannir automatiquement les intrus

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

fail2ban_logo



Qu'est ce que fail2ban



fail2ban est un logiciel qui se charge d'analyser les logs de divers services installés sur la machine, pour bannir automatiquement un hôte via iptables pour une durée déterminée, en cas d'échec après X tentatives.
C'est un élément essentiel pour sécuriser son système, et éviter des intrusions via brute-force.

Installer fail2ban



Pour installer fail2ban, installer le paquet fail2ban.

Pour Fedora, RHEL et dérivées (Nécessite EPEL) :
Code BASH :
dnf install fail2ban


Pour Debian, Ubuntu et dérivées :
Code BASH :
apt install fail2ban


Pour Gentoo :
Code BASH :
emerge -av fail2ban


Ne pas oblier de lancer le service et l'activer au démarrage.
Pour systemd :
systemctl enable --now fail2ban

Pour OpenRC :
Code BASH :
rc-update add fail2ban



Configurer les services



Configuation principale



Le fichier principal de configuration est /etc/fail2ban/jail.conf.

La section [DEFAULT] indique les prises de décisions par fail2ban si dans chaque service rien n'est défini
Code :
ignoreip = 127.0.0.1/8            #adresses IP ignorées par les actions de fail2ban
bantime  = 10m                   #temps de bannissement en secondes (ou en minutes avec suffixe m, heures avec h)
maxretry = 5                      #nombre d'essais au bout du quel fail2ban bannit notre intrus
banaction = iptables      # Méthode de BAN (iptables = Que le port concerné / iptables-multiport = Tous les ports / ...)
protocol = tcp               # protocole par défaut des jails définies ci-dessous
enabled = false             # Statut par défaut des jails définies ci-dessous (par défaut tout désactivé)


Pour ignorer plusieurs IP, on les sépare par un espace. Des adresses ou réseaux peuvent être spécifiés :
Code BASH :
ignoreip = 127.0.0.1 192.168.21.0/24 212.1.2.3


Dans les bonnes pratiques, si on veut configurer des services spécifiques, on pourra s'inspirer des exemples présents dans /etc/fail2ban/jail.conf mais on fera des fichiers dans /etc/fail2ban/jail.d

Après chaque modification de la configuration, on prendra soin de redémarrer le service fail2ban !


SSH



Nous allons configurer fail2ban pour bannir les intrus passant par ssh.
On créra donc un fichier /etc/fail2ban/jail.d/ssh.conf par exemple.

Voici un exemple de configuration :
Code :
[sshd]
enabled  = true
port = 22
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 4
bantime  = 3600
ignoreip = 127.0.0.1 192.168.21.0/24 212.1.2.3


Voici quelques explications :
[sshd] : Ceci définit une "prison" (jail) spécifique pour le service SSH.
enabled = true : Active cette configuration pour SSH.
port = 22 : Spécifie le port SSH à surveiller (22 est le port par défaut).
logpath = %(sshd_log)s : Indique le chemin du fichier journal SSH à analyser. %(sshd_log)s est une variable qui sera remplacée par le chemin réel du fichier journal SSH.
backend = %(sshd_backend)s : Définit le backend à utiliser pour lire les journaux. %(sshd_backend)s est une variable qui sera remplacée par le backend approprié.
maxretry = 4 : Nombre maximal de tentatives échouées avant le bannissement (ici 4).
bantime = 3600 : Durée du bannissement en secondes (ici 1 heure).
ignoreip = 127.0.0.1 192.168.21.0/24 212.1.2.3 : Liste des adresses IP ou réseaux à ne jamais bannir (127.0.0.1, Réseau 192.168.21.x, IP spécifique


Test de la configuration



Sur le serveur on peut suivre les actions via :
Code BASH :
tail -f /var/log/fail2ban.log


On tente de se connecter en SSH (dans mon exemple) plus de 2 fois et on vérifie qu'on est bien banni:

Code :
2015-04-09 11:33:33,985 fail2ban.jail           [22561]: INFO    Jail 'sshd' started
2015-04-09 11:33:53,431 fail2ban.filter         [22561]: INFO    [sshd] Found 212.x.x.x
2015-04-09 11:33:56,636 fail2ban.filter         [22561]: INFO    [sshd] Found 212.x.x.x
2015-04-09 11:34:22,988 fail2ban.filter         [22561]: INFO    [sshd] Found 212.x.x.x
2015-04-09 11:34:23,353 fail2ban.actions        [22561]: NOTICE  [sshd] Ban 212.x.x.x



fail2ban-client : Gérer fail2ban



Présentation du client fail2ban-client



Fail2ban est livré avec un client nommé fail2ban-client.

Pour voir les jails actifs, on peut utiliser :
Code BASH :
fail2ban-client status


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


Pour voir le statut d'un jail particulier (exemple avec sshd) :
Code BASH :
fail2ban-client status sshd


Code :
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     31
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   212.x.x.x


Débannir une adresse IP



Pour débannir un client :
Code BASH :
fail2ban-client set jail unbanip ip


Exemple avec l'IP 212.x.x.x, bannie du jail sshd :
Code BASH :
fail2ban-client set sshd unbanip 212.x.x.x