web-dev-qa-db-fra.com

Bloc IP permanent après n nouvelles tentatives à l'aide de fail2ban

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

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

Cela fonctionne parfaitement et je veux que cela reste tel qu'un utilisateur valide ait la possibilité de réessayer la connexion après le délai d'expiration. Maintenant, je veux implémenter une règle où si la même IP est détectée comme attaque et bloquée, débloquée 5 fois, bloque définitivement l'IP et ne débloque plus jamais. Cela peut-il être réalisé avec fail2ban seul ou dois-je écrire mon propre script pour ce faire?

Je fais ça en centimes.

39
BTR Naidu

Avant 0.11, il y avait pas de fonctionnalité par défaut ou de paramètre dans fail2ban pour y parvenir. Mais à partir de la prochaine version 0.11, le temps d'interdiction est calculé automatiquement et augmente de façon exponentielle à chaque nouvelle infraction, ce qui, à long terme, signifiera un blocage plus ou moins permanent.

Jusque-là, votre meilleure approche consiste probablement à configurer fail2ban pour surveiller 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 [~ # ~] interdiction [~ # ~] est dans le fichier journal (fichier journal de fail2ban)

Étape 2

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

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

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

Quoi qu'il en soit, pour votre question (cela peut-il être réalisé avec fail2ban seul ou je dois écrire mon propre script pour le faire?) ... l'écriture de son propre script pourrait bien fonctionner. Configuration du script pour extraire les adresses IP interdites fréquemment puis les mettre dans /etc/hosts.deny est ce que je recommanderais.

33
Pothi Kalimuthu

Je crois que si vous mettez bantime = -1 dans cette section de configuration, c'est un bloc permanent.

31
J. Chin

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

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

Cela comprenait:

  • liste d'interdiction distincte par prison (ip.blocklist.ssh, ip.blocklist.xxx)
  • les listes d'interdiction sont chargées automatiquement en cas de redémarrage du service (principal avantage de cette méthode à mon humble avis)
  • notification par e-mail si le répéteur est engagé.
14
xaa

Pour développer la réponse de Chin, c'est assez simple. Modifiez simplement les 2 paramètres dans /etc/fail2ban/jail.local pour correspondre à 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
6
Casey Watson

fail2ban a déjà une prison pour interdire la récidive. 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 votre niveau de connexion, vous pouvez faire: fail2ban-client get loglevel.

  • set loglevel MYLEVEL : définit le niveau de journalisation sur MYLEVEL. Niveaux: CRITIQUE, ERREUR, AVERTISSEMENT, AVIS, INFO, DÉBOGAGE
  • Plus commande sur le wiki .

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

5
A-312

Allez dans vim, ouvrez /etc/fail2ban/jail.conf

et juste modifier après fail2ban service restart:

# "bantime" is the number of seconds that a Host is banned.
bantime  = ***1296000***

# A Host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a Host get banned.
maxretry = ***3***
0
Tanveer Ahmad