Services et serveurs

Fail2Ban - Bannir automatiquement les intrus

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.

Debian



Code BASH :
apt install fail2ban


CentOS



Les dépôts EPEL doivent être activés.
Code BASH :
yum install fail2ban


Gentoo



Code BASH :
emerge -av fail2ban

Lancer le service au démarrage :
Code BASH :
rc-update add fail2ban


Voila, fail2ban est installé.


Il faut maintenant le configurer pour les différents services.


Configurer les services



Les services se configurent dans le fichier /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  = 600                   #temps de bannissement en secondes
maxretry = 3                      #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



SSH



Nous allons configurer fail2ban pour bannir les intrus passant par ssh.

Voici un exemple de service actif, intrus banni au bout de 3 essais pour une durée de 15 minutes, juste sur le port SSH (paramètres par défaut).
Code :

[sshd]
enabled  = true
port     = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s


Si on change le port de SSH par exemple 1234

Code :
[sshd]
enabled  = true
port     = 1234
logpath = %(sshd_log)s
backend = %(sshd_backend)s


On peut aussi « écraser » les valeurs par défaut (maxretry, bantime) en rappelant les options dans le service concerné

Code :

[sshd]
enabled  = true
port     = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 2
bantime  = 3600


La récidive



Si le client récidive, on peut activer le filtre recidive qui poursuit le temps de ban :

Code BASH :
[recidive]
enabled = true
logpath  = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime  = 1w
findtime = 1d


Test de la configuration



Sur le serveur on lance un tailf /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.227.108.142
2015-04-09 11:33:56,636 fail2ban.filter         [22561]: INFO    [sshd] Found 212.227.108.142
2015-04-09 11:34:22,988 fail2ban.filter         [22561]: INFO    [sshd] Found 212.227.108.142
2015-04-09 11:34:23,353 fail2ban.actions        [22561]: NOTICE  [sshd] Ban 212.227.108.142



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:    2
`- Jail list:    recidive, 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:    0
|  |- Total failed:    41
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned:    1
   |- Total banned:    1
   `- Banned IP list:    212.227.108.142


Débannir une adresse IP



Pour débannir un client :

Code BASH :
fail2ban-client set jail unbanip ip


Exemple avec l'IP 212.227.108.142 (Celle du serveur Linuxtricks au moment de la rédac de l'article), bannie du jail sshd :

Code BASH :
fail2ban-client set sshd unbanip 212.227.108.142


Si le recidive est actif, évidemment, débloquer recidive aussi :

Code BASH :
fail2ban-client set recidive unbanip 212.227.108.142
Cette page a été vue 55691 fois