Aller au contenu

Fail2Ban

De Marmits Wiki

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

  1. É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]
    
  2. Ajouter vos IP de confiance :

    ignoreip = 127.0.0.1/8 ::1 65.65.65.65 2a50::1
    
  3. Exemple de jail pour MediaWiki :

    [mediawiki-auth]
    enabled = true
    filter = z_mediawiki-bruteforce
    logpath = /var/log/mediawiki/authentication.log
    maxretry = 3
    bantime = 24h
    
  4. 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 ipset est 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 maxretry et findtime dans jail.local.
  • Ajoutez vos IP à ignoreip.

6. Bonnes pratiques

  • Ne pas modifier jail.conf : Toujours utiliser jail.local pour 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 > iptables pour 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
  1. Fail2Ban est correctement intégré à iptables/ip6tables.
  1. Les règles sont symétriques entre IPv4 et IPv6 :
    • Mêmes ports (80,443), même action (REJECT).
  1. Mécanisme de blocage :
    • Les IP listées dans les ensembles ipset (f2b-apache-noscript*) sont rejetées immédiatement.
    • Le rejet est visible (contrairement à DROP), 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).
  • Gestion dynamique :
    • 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