Fail2Ban - Bannir automatiquement les intrus
Table des matières
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.
Pour installer fail2ban, installer le paquet fail2ban.
Les dépôts EPEL doivent être activés.
Lancer le service au démarrage :
Voila, fail2ban est installé.
Il faut maintenant le configurer pour les différents 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
Pour ignorer plusieurs IP, on les sépare par un espace. Des adresses ou réseaux peuvent être spécifiés :
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).
Si on change le port de SSH par exemple 1234
On peut aussi « écraser » les valeurs par défaut (maxretry, bantime) en rappelant les options dans le service concerné
Si le client récidive, on peut activer le filtre recidive qui poursuit le temps de ban :
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:
Fail2ban est livré avec un client nommé fail2ban-client.
Pour voir les jails actifs, on peut utiliser :
Exemple :
Pour voir le statut d'un jail particulier (exemple avec sshd) :
Pour débannir un client :
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 :
Si le recidive est actif, évidemment, débloquer recidive aussi :
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