48 votes

Blocage permanent de l'IP après n tentatives en utilisant fail2ban

J'ai un fail2ban configuré comme ci-dessous :

  • bloquer l'adresse IP après 3 tentatives infructueuses
  • libérer l'IP après un délai de 300 secondes

Cela fonctionne parfaitement et je souhaite que cela reste ainsi afin qu'un utilisateur valide ait la possibilité de réessayer de se connecter après le délai d'attente. Maintenant, je veux mettre en place une règle où si la même IP est détectée comme une attaque et bloquée, débloquée 5 fois, bloquer définitivement l'IP et ne jamais la débloquer à nouveau. Est-ce que cela peut être réalisé avec fail2ban seul ou dois-je écrire mon propre script pour le faire ?

Je fais cela avec centos.

42voto

Pothi Kalimuthu Points 5514

Avant la version 0.11, il y avait pas de fonction par défaut ou de paramètre dans fail2ban pour y parvenir. Mais à partir de la prochaine version 0.11, la période de bannissement est calculé automatiquement et augmente de manière exponentielle à chaque nouvelle infraction qui, à long terme, entraînera un blocage plus ou moins permanent.

D'ici là, la meilleure approche consiste probablement à mettre en place des fail2ban surveille son propre fichier journal . Il s'agit d'un processus en deux étapes...

Étape 1

Nous pourrions avoir besoin de créer un filtre pour vérifier la présence de BAN dans le fichier journal (fichier journal de fail2ban)

Étape 2

Nous devons définir la prison , similaire à ce qui suit...

\[fail2ban\]
enabled = true
filter = fail2ban
action = iptables-allports\[name=fail2ban\]
logpath = /path/to/fail2ban.log
# findtime: 1 day
findtime = 86400
# bantime: 1 year
bantime = 31536000

Techniquement, c'est pas un blocage permanent mais seulement des blocs pour un an (que l'on peut aussi augmenter).

Quoi qu'il en soit, pour ce qui est de votre question (Peut-on y parvenir avec fail2ban seul ou dois-je écrire mon propre script pour le faire ?)... écrire son propre script pourrait bien fonctionner. La mise en place du script pour extraire le fichier fréquemment IP interdites et les placer ensuite dans des /etc/hosts.deny est ce que je recommande.

39voto

J. Chin Points 575

Je pense que si vous mettez bantime = -1 dans cette section de configuration, il s'agit d'un blocage permanent.

15voto

Phil Hagen a écrit un excellent article sur ce sujet. " Bannir définitivement les récidivistes avec fail2ban ".

Sa suggestion est la même que celle de Pothi, mais elle fournit un guide étape par étape.

Il s'agit notamment de

  • séparer les listes de bannissement par prison (ip.blocklist.ssh, ip.blocklist.xxx)
  • listes d'interdictions chargées automatiquement en cas de redémarrage du service (principal avantage de cette méthode)
  • notification par courrier électronique si le répéteur est engagé.

9voto

Sky Voyager Points 253

Fail2ban dispose déjà d'une prison pour bannir les récidives. Si vous regardez /etc/fail2ban/jail.conf , vous trouverez :

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Comment ajouter dans jail.local ?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

Pour vérifier le niveau des logs, vous pouvez faire : fail2ban-client get loglevel .

  • set loglevel MYLEVEL : définit le niveau de journalisation à MYLEVEL. Niveaux : CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG
  • Plus d'informations sur le wiki .

Avec l'ancienne version de fail2ban, vous pouvez obtenir ce bogue .

6voto

Dan Points 21

Pour compléter la réponse de Chin, c'est assez simple. Il suffit de modifier les 2 paramètres dans /etc/fail2ban/jail.local en fonction de vos préférences.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X