Fail2Ban
Commandes
Démarrer :
sudo systemctl start fail2ban
Arrêter :
sudo systemctl stop fail2ban
Redémarrer :
sudo systemctl restart fail2ban
Activer au démarrage :
sudo systemctl enable fail2ban
Désactiver au démarrage :
sudo systemctl disable fail2ban
Vérifier le statut de fail2ban :
sudo systemctl status fail2ban
Lister les jails actifs :
Les jails sont des configurations qui définissent les règles de bannissement pour différents services.
sudo fail2ban-client status
Remplacez <nom_du_jail> par le nom du jail, par exemple sshd.
Vérifier le statut d'un jail spécifique :
sudo fail2ban-client status <nom_du_jail>
Bannir manuellement une adresse IP :
sudo fail2ban-client set <nom_du_jail> banip <adresse_ip>
Débannir manuellement une adresse IP :
sudo fail2ban-client set <nom_du_jail> unbanip <adresse_ip>
Configurer fail2ban :
Les fichiers de configuration principaux sont /etc/fail2ban/jail.conf et /etc/fail2ban/jail.d/defaults-debian.conf.
Vous pouvez les modifier pour ajouter ou modifier des règles de jail.
Tester la syntaxe des fichiers de configuration :
sudo fail2ban-client -t
Trouver des détails :
- Extraire uniquement les lignes contenant [apache-noscript]
sudo grep "\[apache-noscript\] Ban" /var/log/fail2ban.log
- Les dates et IP bannies
sudo grep -E "\[apache-noscript\] Ban|Unban" /var/log/fail2ban.log
1. Fail2Ban : Principes de base
Objectif
- Bloquer automatiquement les IP malveillantes après plusieurs tentatives infructueuses (bruteforce, scans, etc.).
- Utilise des jails (filtres par service : SSH, Apache, MediaWiki, etc.).
Concepts clés
| Paramètre | Description | Exemple |
|---|---|---|
bantime
|
Durée du bannissement (ex: 24h, 7d).
|
bantime = 1d
|
findtime
|
Fenêtre temporelle pour compter les tentatives (ex: 10m, 1h).
|
findtime = 1h
|
maxretry
|
Nombre d’échecs avant bannissement. | maxretry = 3
|
ignoreip
|
IP à ne jamais bannir (ex: votre IP, LAN). | ignoreip = 192.168.1.0/24
|
banaction
|
Méthode de bannissement (iptables, iptables-ipset-proto6).
|
banaction = iptables-ipset-proto6
|
2. iptables-ipset-proto6 : Pourquoi l’utiliser ?
Avantages
✅ Performances : Gère des milliers d’IP bannies sans ralentir iptables.
✅ Support IPv4/IPv6 : Contrairement à iptables classique.
✅ Centralisation : Stocke les IP dans des ensembles (ipset) pour une gestion simplifiée.
Prérequis
Installer
ipset:sudo apt install ipset # Debian/Ubuntu sudo yum install ipset # CentOS/RHEL
Vérifier que le module kernel est chargé :
lsmod | grep ip_set # Doit retourner "ip_set"
3. Configuration de Fail2Ban avec ipset
Étapes clés
Éditer
/etc/fail2ban/jail.local:[DEFAULT] #Ces actions sont plus générales et peuvent s'appliquer à la fois à IPv4 et IPv6, selon la configuration. banaction = iptables-ipset[type=multiport] banaction_allports = iptables-ipset[type=allports]
Ajouter vos IP de confiance :
ignoreip = 127.0.0.1/8 ::1 65.65.65.65 2a50::1
Exemple de jail pour MediaWiki :
[mediawiki-auth] enabled = true filter = z_mediawiki-bruteforce logpath = /var/log/mediawiki/authentication.log maxretry = 3 bantime = 24h
Redémarrer Fail2Ban :
sudo systemctl restart fail2ban
4. Commandes utiles
Gestion des bannissements
Comment vérifier si une adresse est bloquée ?
sudo ipset list
| Commande | Description |
|---|---|
sudo fail2ban-client status <jail>
|
Voir les IP bannies pour une jail. |
sudo fail2ban-client set <jail> unbanip <IP>
|
Débannir une IP. |
sudo ipset list
|
Lister tous les ensembles ipset. |
Diagnostic
# Vérifier les logs Fail2Ban
sudo tail -f /var/log/fail2ban.log
# Vérifier les règles iptables
sudo iptables -L -n --line-numbers
sudo ip6tables -L -n # Pour IPv6
5. Dépannage courant
Problème : Les IP ne sont pas bannies
Vérifiez que
ipsetest installé et que le kernel le supporte :sudo modprobe ip_set
Vérifiez que la jail est active :
sudo fail2ban-client status
Problème : Bannissements trop agressifs
- Ajustez
maxretryetfindtimedansjail.local.
- Ajoutez vos IP à
ignoreip.
6. Bonnes pratiques
Ne pas modifier
jail.conf: Toujours utiliserjail.localpour les personnalisations.
Surveiller les logs :
sudo tail -f /var/log/fail2ban.log | grep -i "ban\|unban"
Mettre à jour régulièrement :
sudo apt update && sudo apt upgrade fail2ban # Debian/Ubuntu
À retenir
iptables-ipset-proto6>iptablespour les performances et le support IPv6.
Tester après configuration avec une IP de test :
sudo fail2ban-client set mediawiki-auth banip 123.123.123.123 sudo ipset list | grep f2b-mediawiki-auth
Cas pratique
/etc/fail2ban/jail.local [DEFAULT] #Ces actions sont plus générales et peuvent s'appliquer à la fois à IPv4 et IPv6, selon la configuration. banaction = iptables-ipset[type=multiport] banaction_allports = iptables-ipset[type=allports] ... [apache-noscript] backend = auto bantime = 86400 maxretry = 5 findtime = 5m port = http,https logpath = %(apache_error_log)s enabled=true action = %(action_mwl)s
Forcer la création d'un ensemble IPv6
sudo fail2ban-client set apache-noscript banip 2001:db8::1234
Permet d'afficher des informations spécifiques sur les ensembles ipset liés à Fail2Ban, en se concentrant sur l'ensemble apache-noscript et les 10 lignes qui le suivent
sudo ipset list | grep -A 10 "apache-noscript"
Vérifier le contenu de l'ensemble IPv4
sudo ipset list f2b-apache-noscript
Vérifier le contenu de l'ensemble IPv6
sudo ipset list f2b-apache-noscript6
Pour confirmer que Fail2Ban bloque effectivement le trafic IPv6 :
sudo iptables -L -n | grep f2b-apache-noscript REJECT 6 -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 match-set f2b-apache-noscript src reject-with icmp-port-unreachable sudo ip6tables -L -n | grep f2b-apache-noscript6 REJECT 6 -- ::/0 ::/0 multiport dports 80,443 match-set f2b-apache-noscript6 src reject-with icmp6-port-unreachable
- Fail2Ban est correctement intégré à
iptables/ip6tables.
- Les règles sont symétriques entre IPv4 et IPv6 :
- Mêmes ports (80,443), même action (
REJECT).
- Mêmes ports (80,443), même action (
- Mécanisme de blocage :
- Les IP listées dans les ensembles ipset (
f2b-apache-noscript*) sont rejetées immédiatement.
- Les IP listées dans les ensembles ipset (
- Le rejet est visible (contrairement à
DROP), ce qui peut décourager les scanners.
- Le rejet est visible (contrairement à
Pourquoi ces règles sont-elles critiques ?
- Protection d’Apache :
- Bloque les attaques sur les ports HTTP/HTTPS (ex: injections, bruteforce).
- Bloque les attaques sur les ports HTTP/HTTPS (ex: injections, bruteforce).
- Gestion dynamique :
- Fail2Ban met à jour automatiquement les ensembles ipset, sans modifier les règles iptables.
- Fail2Ban met à jour automatiquement les ensembles ipset, sans modifier les règles iptables.
- Compatibilité IPv6 :
- Votre configuration est résiliente contre les attaques via IPv6.
débloquer une IPv4 :
sudo ipset del f2b-apache-noscript 158.101.11.142
débloquer une IPv6 :
sudo ipset del f2b-apache-noscript6 2001:db8::1234
Commandes complémentaires utiles :
| Objectif | Commande |
|---|---|
| Voir toutes les règles Fail2Ban | sudo iptables -L -n | grep f2b
|
| Lister les IP bannies (IPv4) | sudo ipset list f2b-apache-noscript
|
| Supprimer une IP bannie | sudo ipset del f2b-apache-noscript 192.0.2.1
|