« Fail2Ban » : différence entre les versions
Aucun résumé des modifications |
|||
| Ligne 213 : | Ligne 213 : | ||
<syntaxhighlight lang="bash">sudo fail2ban-client set mediawiki-auth banip 123.123.123.123 | <syntaxhighlight lang="bash">sudo fail2ban-client set mediawiki-auth banip 123.123.123.123 | ||
sudo ipset list | grep f2b-mediawiki-auth</syntaxhighlight></li></ul> | sudo ipset list | grep f2b-mediawiki-auth</syntaxhighlight></li></ul> | ||
== '''Cas pratique''' == | |||
<pre> | |||
/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 | |||
</pre> | |||
=== Forcer la création d'un ensemble IPv6 === | |||
<syntaxhighlight lang="bash" copy>sudo fail2ban-client set apache-noscript banip 2001:db8::1234</syntaxhighlight> | |||
Permet d'afficher des informations spécifiques sur les ensembles ipset liés à Fail2Ban, en se concentrant sur l'ensemble <code>apache-noscript</code> et les 10 lignes qui le suivent | |||
<syntaxhighlight lang="bash" copy>sudo ipset list | grep -A 10 "apache-noscript"</syntaxhighlight> | |||
=== Vérifier le contenu de l'ensemble IPv4 === | |||
<syntaxhighlight lang="bash" copy>sudo ipset list f2b-apache-noscript</syntaxhighlight> | |||
=== Vérifier le contenu de l'ensemble IPv6 === | |||
<syntaxhighlight lang="bash" copy>sudo ipset list f2b-apache-noscript6</syntaxhighlight> | |||
=== Pour confirmer que Fail2Ban bloque effectivement le trafic IPv6 : === | |||
<pre> | |||
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 | |||
</pre> | |||
# '''Fail2Ban est correctement intégré''' à <code>iptables</code>/<code>ip6tables</code>.<br /> | |||
# '''Les règles sont symétriques''' entre IPv4 et IPv6 : | |||
#* Mêmes ports (80,443), même action (<code>REJECT</code>).<br /> | |||
# '''Mécanisme de blocage''' : | |||
#* Les IP listées dans les ensembles ipset (<code>f2b-apache-noscript*</code>) sont rejetées '''immédiatement'''.<br /> | |||
#* Le rejet est '''visible''' (contrairement à <code>DROP</code>), ce qui peut décourager les scanners. | |||
==== '''Pourquoi ces règles sont-elles critiques ?''' ==== | |||
* '''Protection d’Apache''' : | |||
** Bloque les attaques sur les ports HTTP/HTTPS (ex: injections, bruteforce).<br /> | |||
* '''Gestion dynamique''' : | |||
** Fail2Ban met à jour automatiquement les ensembles ipset, sans modifier les règles iptables.<br /> | |||
* '''Compatibilité IPv6''' : | |||
** Votre configuration est résiliente contre les attaques via IPv6. | |||
=== débloquer une IPv4 : === | |||
<syntaxhighlight lang="bash" copy>sudo ipset del f2b-apache-noscript 158.101.11.142</syntaxhighlight> | |||
=== débloquer une IPv6 : === | |||
<syntaxhighlight lang="bash" copy>sudo ipset del f2b-apache-noscript6 2001:db8::1234</syntaxhighlight> | |||
=== '''Commandes complémentaires utiles :''' === | |||
{| class="wikitable" | |||
|- | |||
! Objectif | |||
! Commande | |||
|- | |||
| Voir toutes les règles Fail2Ban | |||
| <code>sudo iptables -L -n \| grep f2b</code> | |||
|- | |||
| Lister les IP bannies (IPv4) | |||
| <code>sudo ipset list f2b-apache-noscript</code> | |||
|- | |||
| Supprimer une IP bannie | |||
| <code>sudo ipset del f2b-apache-noscript 192.0.2.1</code> | |||
|} | |||
[[Catégorie:Linux]] [[Catégorie:Debian]] [[Catégorie:Systemd]] | [[Catégorie:Linux]] [[Catégorie:Debian]] [[Catégorie:Systemd]] | ||
Version du 25 juin 2025 à 21:57
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] banaction = iptables-ipset-proto6 banaction_allports = iptables-ipset-proto6-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 | 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
|