Bloc permanent d'IP après n tentatives au moyen de fail2ban

38

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

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

Cela fonctionne parfaitement et je souhaite le conserver de manière à ce qu'un utilisateur valide ait la possibilité de réessayer la connexion après le délai imparti. Maintenant, je veux implémenter une règle dans laquelle si la même adresse IP est détectée comme attaque et bloquée, débloquée 5 fois, bloque définitivement l’adresse IP et ne la débloque plus jamais. Cela peut-il être réalisé avec fail2ban seul ou j'ai besoin d'écrire mon propre script pour le faire?

Je le fais en centos.

BTR Naidu
la source
2
C'est une idée plutôt idiote - plus vous ajoutez de règles à iptables, plus cela ralentit.
symcbean
14
J'apprécie votre commentaire, mais ce dont j'ai besoin, c'est d'une réponse et non d'une suggestion. Merci quand même.
BTR Naidu
5
Parfois, la bonne réponse à "comment puis-je faire X" est "ne fais pas X".
ceejayoz

Réponses:

32

Avant la version 0.11, il n’existait aucune fonctionnalité ou paramètre par défaut dans fail2ban pour ce faire. Mais à partir de la version 0.11 à venir, le temps d'interdiction est automatiquement calculé et augmente de façon exponentielle à chaque nouvelle infraction, ce qui, à long terme, entraînera un blocage plus ou moins permanent.

Jusque-là, votre meilleure approche consiste probablement à configurer fail2ban pour surveiller son propre fichier journal . C'est un processus en deux étapes ...

Étape 1

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

Étape 2

Nous devons définir la prison , semblable à la suivante ...

[fail2ban]
enabled = true
filtre = fail2ban
action = iptables-allports [nom = 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 nous pouvons aussi augmenter).

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?) ... écrire son propre script pourrait bien fonctionner. Je recommande de créer le script pour extraire les adresses IP fréquemment interdites, puis de les /etc/hosts.denyintégrer.

Pothi Kalimuthu
la source
1
Ajout à cette excellente réponse ... En fonction de la configuration de la journalisation et de MaxAuthTries sshd_config, il est possible que seul le blocage de 3 connexions ayant échoué pour une "session" sshd ait été bloqué. Par exemple, un attaquant pourrait par défaut essayer ['pass1', 'pass2', 'pass3'] au cours d'une seule session avant que sshd ne se déconnecte. Selon la façon dont sshd est configuré pour se connecter, cela peut apparaître comme 1, 2 ou 3 tentatives d’échec2ban.
Jonathan Vanasco
5
Il y a le filtre de récidive fail2ban pour cela, maintenant.
Guillermo Prandi
Que voulez-vous dire par la prochaine version 0.11 ? Le plus récent semble être 10.3.1: github.com/fail2ban/fail2ban/releases
user5950
J'espère que vous vouliez dire 0.10.3.1 . Vous pouvez suivre la progression de "0.11" à l' adresse github.com/fail2ban/fail2ban/tree/0.11 . En gros, il n'est pas encore sorti!
Pothi Kalimuthu
30

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

J. Chin
la source
2
En effet, définir bantimeune valeur négative est une interdiction permanente (à partir de Fail2Ban version 0.6.1 (2006/03/16))
voretaq7
3
ajout de -1 à des paramètres qui ne répondent pas à fail2ban
Erdem Ece
13

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 séparée par jail (ip.blocklist.ssh, ip.blocklist.xxx)
  • listes d'interdiction auto-chargées si redémarrage du service (avantage principal de cette méthode à mon humble avis)
  • notification par courrier électronique si le répéteur est engagé.
xaa
la source
6

Pour développer la réponse de Chin, ceci est assez simple. Il suffit de modifier les 2 paramètres /etc/fail2ban/jail.localpour 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
Casey Watson
la source
4

fail2ban a déjà une prison pour interdire 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 que vous logLevel vous pouvez faire: fail2ban-client get loglevel.

  • set loglevel MYLEVEL : définit le niveau de journalisation sur MYLEVEL. Niveaux: CRITICAL, ERROR, AVERTISSEMENT, AVIS, INFO, DEBUG
  • Plus de commande sur le wiki .

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

A-312
la source
0

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***
Tanveer Ahmad
la source