Fail2Ban
fail2ban permet d'analyser les logs en temps réel, d'y trouver des motifs selon des règles REGEX (perl) et d'effectuer des actions comme des appels iptables pour bannir des IPs.
Sommaire
Installation
apt-get install fail2ban
Par défaut, le port 22 (ssh) est surveillé, vous pouvez vérifier que les règles ipatbles ont bien prises en compte fail2ban:
iptables -S | grep fail2ban
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A fail2ban-ssh -j RETURN
(Nouveau 2017) si cela ne retourne rien , faire :
sudo iptables -S | grep f2b
qui retourne bien :
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd -A f2b-sshd -j RETURN
Emplacement des fichiers
- les fichiers de configurations se trouvent généralement dans
/etc/fail2ban
- le fichier de configuration de l'utilitaire est
fail2ban.conf
- le fichier de configuration générale des jails est
jail.conf
- les fichiers de configurations pour chaque filtres se trouvent dans le dossier
/etc/fail2ban/filter.d/
- les fichiers de configurations pour chaque actions se trouvent dans le dossier
/etc/fail2ban/action.d/
Créer des filtres
- Créer un fichier filtre dans
/etc/fail2ban/filter.d/
- Exemple de filtre :
[Definition] failregex = <HOST> - - \[.*?\] .*"POST (\/en\/cart|\/fr\/panier)
Ce filtre permettra à une règle de s'activer lorsqu'un motif de ce type se trouve dans le fichier de log cible :
79.182.76.109 - - [01/Sep/2017:17:05:42 +0200] "POST /en/cart HTTP/1.1" 403 189 "http://store.calexium.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21"
L'utilisation de <HOST> dans la REGEX d'exemple permet de récupérer l'IP/host, c'est cette "variable" qui permettra à l'action lié à la règle d'effectuer un traitement pour cette adresse.
Appliquer des règles fail2ban
- éditer le fichier
/etc/fail2ban/jail.conf
- ajouter une règle dans le fichier :
[nginx-ps16-bots] # nom de la règle
enabled = true # active ou non
filter = nginx-prestashop-bots # nom du filtre (nom donnée au fichier lors de l'étape précédente)
port = http,https # les ports concernés
logpath = /var/log/nginx/store_calexium_ssl_proxy.access_log # le fichier de log à analyser, accepte le wildcard (*)
findtime = 60 # le temps imparti, en relation avec le maxretry (en secondes)
bantime = 86400 # le temps de bannissement (en secondes)
maxretry = 30 # le nombre d'essais dans la limite "findtime" avant que la règle ne s'applique (en secondes)
action = route # l'action à effectuer, route permet de router l'hôte vers rien du tout, très rapide et compatible partout comme méthode, une liste d'action par défaut peut être trouvés dans le dossier /etc/fail2ban/action.d/
service fail2ban restart
Les REGEX Perl
Le site https://regex101.com/ peut être utile pour la création des filtres et pour débugger les regex, ce site permet entre autre de prévisualiser en temps réel l'action d'une REGEX sur des données.