LINUX:Fail2Ban
→ retour au menu pour contrer les attaques
But
"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 le firewall "iptables" pour une durée déterminée, après un certain nombre de tentatives infructueuses. Il s'intéresse spécialement aux authentifications. C'est un élément essentiel pour sécuriser son système, et éviter des intrusions via brute-force.
Installation
Pour installer ce programme, exécutez la commande suivante:
dnf install fail2ban-server
et éventuellement:
dnf install fail2ban-mail dnf install fail2ban-sendmail
Configuration
Les fichiers de configurations de retrouvent dans l'arborescence du répertoire "/etc/fail2ban".
Toute configuration de base se doit d'être adaptée à nos besoins. Mais il est fortement conseillé de ne pas modifier les fichiers d'origine. Par contre, on crée un fichier du même nom mais dont l’extension est ".local" dans le même répertoire; celui-ci ne contiendra que les options qui changent reprises sous leur section correspondance. Une section est repérable par un nom repris entre crochets. (exemple "[sshd]") Ces options seront appliquées en fin de lecture des configurations et écraseront les définitions des options correspondantes appliquées plus tôt.
Une autre solution est de placer un fichier contenant ces options modifiées sous un nom quelconque mais toujours avec l'extension ".local" de préférence ou ".conf" dans le sous-répertoire correspondant au fichier de base:
- pour le fichier "fail2ban.conf", ce fichier sera situé dans le sous répertoire "/etc/fail2ban/fail2ban.d".
- pour le fichier "jail.conf", ce fichier sera situé dans le sous répertoire "/etc/fail2ban/jail.d".
Celui qui nécessite principalement notre attention est le fichier "jail.conf". C'est dans celui-ci que sont listés tous les modules; par défaut, ils sont tous désactivés; il faut dont activer ceux qui concernent notre serveur.
Nous constituons donc un fichier du nom "/etc/fail2ban/jail.local" ou "/etc/fail2ban/jail.d/custom.local" par exemple.
Voici un exemple de contenu:
[DEFAULT] bantime = 1h destemail = root@home.dom sender = fail2ban@home.dom action = %(action_mwl)s # jails [recidive] enabled = true [sshd] # notre serveur écoute sous le port 6444 et non sur le port par défaut 22 port = 6444 enabled = true [apache-auth] enabled = true [apache-badbots] enabled = true [apache-noscript] enabled = true [apache-overflows] enabled = true [apache-nohome] enabled = true [apache-botsearch] enabled = true [apache-fakegooglebot] enabled = true [apache-shellshock] enabled = true [php-url-fopen] enabled = true
En début, on change quelques options par défaut. Dans cet exemple:
- on passe de 10 minutes de bannissement à une heure,
- on définit les adresses email de l'expéditeur et du destinataire,
- l'action reprend un bannissement via IPTABLES, un envoi de mail et dans ce mail une description de l'adresse IP bannie (whois).
Dans cet exemple, nous avons activé le module concernant le serveur SSHD avec un changement de port et divers modules liés aux services HTTPD et PHP. Bien d'autres modules doivent attirer notre attention, par exemple, ceux concernant la messagerie électronique tel POSTFIX et DOVECOT et les gestionnaires de base de données tel MYSQLD. On les active par l'option "enabled = true". Le premier module "recidive" analyse le journal de FAIL2BAN; il permet de prolonger et d'allonger le temps de bannissement en cas de récidive.
Il y a deux autres sous-répertoires dont on n'a pas parlé:
- "filter.d": pour chaque module listé dans le fichier "jail.conf", un fichier du même nom que le module y est présent; ils définissent le mode de filtrage des journaux pour repérer les requêtes à problème,
- "action.d": comprend de nombreux fichiers déterminant les actions à appliquer.
On applique le même principe que ci-dessus; pour le fichier à modifier, on crée un fichier du même nom mais ayant l'extension ".local".
Par exemple, dans le filtre du module "apache-botsearch", on remarque qu'il est défini la racine des sites du serveur HTTPD. A l'installation, ce répertoire racine est "/var/www" mais nous avons opté pour un autre endroit, un autre file system nommé "/web"; nous créons donc le fichier "/etc/fail2ban/filter.d/apache-botsearch.local" dont le contenu est le suivant:
[Definition] webroot = /web/
Service
On doit activer et lancer le service correspondant:
systemctl enable fail2ban systemctl start fail2ban
et pour relancer le service:
systemctl restart fail2ban
Pour vérifier que le service est bien lancé, utilisez la commande:
systemctl status fail2ban
Remarque: Suite au premier démarrage du service ou après une modification dans les fichiers de configuration et un redémarrage, analysez le journal (fichier "/var/log/fail2ban.log"). Souvent il y a des erreurs de configuration liées en majeure partie à l'activation d'un module sans activité (service non existant) ou par exemple, suite à la non présence du journal défini dans ce module car il porte un autre nom dans votre configuration de ce service.
Statuts
On passer en revue l'état des différents modules et ainsi repérer quelles sont les adresses IP bannies.
Le script suivant y pourvoie; le résultat est placé dans le fichier "f2b.lis":
#!/bin/bash # statut des modules actifs de Fail2ban # lister les modules actifs /usr/bin/fail2ban-client status > f2b.lis /usr/bin/grep "Jail list:" f2b.lis | /usr/bin/awk -F ":" '{printf("%s\n",$2)}' > temp1.log /usr/bin/sed -i 's/,/ /g' temp1.log LISTE=`/usr/bin/cat temp1.log` /usr/bin/rm -f temp1.log # passer le statut de chaque module actif for I in $LISTE do echo "======================================" >> f2b.lis echo $I >> f2b.lis /usr/bin/fail2ban-client status $I >> f2b.lis done
Voici un extrait pour les modules "apache-auth" et "sshd":
====================================== apache-auth Status for the jail: apache-auth |- Filter | |- Currently failed: 1 | |- Total failed: 9 | `- File list: /var/log/httpd/error_log /var/log/httpd/ssl_error_log /var/log/httpd/ssl_access_log /var/log/httpd/access_log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 192.168.1.20 ====================================== sshd Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 4 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 192.168.1.20
On y voit qu'une adresse IP a été bannie par deux modules.
Pour repérer directement dans le firewall les adresses IP bannies, voici la commande:
/usr/sbin/iptables -L -n
Voici un extrait pour les deux mêmes modules:
Chain INPUT (policy ACCEPT) target prot opt source destination f2b-sshd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 6444 f2b-apache-auth tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
Chain f2b-apache-auth (1 references) target prot opt source destination REJECT all -- 192.168.1.20 0.0.0.0/0 reject-with icmp-port-unreachable RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain f2b-sshd (1 references) target prot opt source destination REJECT all -- 192.168.1.20 0.0.0.0/0 reject-with icmp-port-unreachable RETURN all -- 0.0.0.0/0 0.0.0.0/0
On pourra remarquer que les règles sont liées aux modules qui ont eu un bannissement reprises sous forme de chaînes du même nom précédé de "f2b-".
Pour enlever une adresse IP bannie, utilisez la commande suivante:
fail2ban-client set <module> unbanip <adresse IP>
Par exemple pour les modules "apache-auth" et "sshd" qui bloquent l'adresse IP "192.168.1.20", ces commandes sont:
fail2ban-client set apache-auth unbanip 192.168.1.20 fail2ban-client set sshd unbanip 192.168.1.20
→ retour au menu pour contrer les attaques