Les bans Fail2ban (iptables) sont nettoyés à chaque redémarrage du service/serveur.
Nous pouvons rendre les bannissements persistants par la création d'une liste noire qui sera rechargée lorsque fail2ban est redémarré.
Avantage
- Possibilité de redémarrer le serveur/Fail2ban sans se soucier des attaques en cours
Inconvénient
- Dangereux si votre bantime est élevé/infini (risque de rester coincé dehors ...)
Rappel : Si votre IP est fixe, ajoutez la dès que possible à la liste blanche de Fail2ban (pour éviter les soucis)
nano /etc/fail2ban/jail.local
Et complétez la ligne
ignoreip = 127.0.0.1/8 XXX.XXX.XXX.XXX #<= Votre IP "maison" habituelle si fixe
On passe maintenant à la persistance.
Création d'une liste noire
touch /etc/fail2ban/ip.blacklist
On duplique le fichier iptables-multiport.conf dans une copie de sauvegarde
cp /etc/fail2ban/action.d/iptables-multiport.conf /etc/fail2ban/action.d/iptables-multiport.conf.bak
Configuration du fichier iptables-multiport.conf
nano /etc/fail2ban/action.d/iptables-multiport.conf
Modifier la valeur suivante (on ajoute donc la 2nde ligne), le bannissement ajoutera l'adresse IP dans le fichier ip.blacklist
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
echo <ip> >> /etc/fail2ban/ip.blacklist
Modifier également la valeur suivante (on ajoute donc la dernière ligne), cela recharge les bannissements dans iptables au démarrage de Fail2ban
actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
cat /etc/fail2ban/ip.blacklist | while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j DROP; done
Modifier enfin la valeur suivante (on ajoute donc la 2nde ligne), cela supprime l'adresse IP du fichier ip.blacklist lors du dé-bannissement
actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP
sed -i /<ip>/d /etc/fail2ban/ip.blacklist
Bonus
On adapte le script
unban.sh de ex_rat
#!/bin/bash
#
echo -n "Entrer l'adresse IP à débloquer : "
read IP
dig -x $IP +short
echo -n -e "Autoriser l'adresse IP\033[1;33m $IP \033[00m? y/n: "
read ouinon
if [ "$ouinon" = "y" ] || [ "$ouinon" = "Y" ]; then
iptables -D fail2ban-ssh -s $IP -j DROP &
sed -i /$IP/d /etc/fail2ban/ip.blacklist
fi
if [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
exit 0;
fi
echo "L'adresse IP $IP a été débloquée"
exit 0;
En cas de souci avec la persistance, vous pouvez radicalement purger la liste
rm /etc/fail2ban/ip.blacklist
Source :
How to make fail2ban bans persistent