Permanenter IP-Block nach n erneuten Versuchen mit fail2ban


38

Ich habe ein Fail2Ban wie folgt konfiguriert:

  • Blockiere die IP nach 3 fehlgeschlagenen Versuchen
  • Geben Sie die IP-Adresse nach 300 Sekunden frei

Dies funktioniert einwandfrei und ich möchte es so halten, dass ein gültiger Benutzer die Möglichkeit hat, die Anmeldung nach dem Timeout erneut zu versuchen. Jetzt möchte ich eine Regel implementieren, in der, wenn dieselbe IP als Angriff erkannt und blockiert wurde, die Blockierung fünfmal aufgehoben wird, die IP dauerhaft blockiert und die Blockierung nie wieder aufgehoben wird. Kann dies mit fail2ban alleine erreicht werden oder muss ich mein eigenes Skript schreiben, um das zu tun?

Ich mache das in Centos.


2
Es ist eine ziemlich dumme Idee - je mehr Regeln Sie zu iptables hinzufügen, desto langsamer wird es.
Symcbean

14
Schätzen Sie Ihren Kommentar, aber ich brauche eine Antwort und keinen Vorschlag. Danke trotzdem.
BTR Naidu

5
Manchmal lautet die richtige Antwort auf "wie mache ich X" "mache X nicht".
Ceejayoz

Antworten:


32

Vor 0.11 gab es keine Standardfunktion oder Einstellung in fail2ban , um dies zu erreichen. Ab der bevorstehenden Version 0.11 wird die Sperrzeit jedoch automatisch berechnet und steigt exponentiell mit jeder neuen Straftat an, was auf lange Sicht eine mehr oder weniger dauerhafte Sperrung bedeutet.

Bis dahin ist es wahrscheinlich am besten, fail2ban so einzurichten , dass es seine eigene Protokolldatei überwacht . Es ist ein zweistufiger Prozess ...

Schritt 1

Wir könnten brauchen , um einen Filter zu erstellen zu überprüfen BAN ‚s in der Protokolldatei (fail2ban Protokolldatei)

Schritt 2

Wir müssen das Gefängnis wie folgt definieren ...

[fail2ban]
enabled = true
filter = fail2ban
action = iptables-allports [name = fail2ban]
logpath = /path/to/fail2ban.log
# Findtime: 1 Tag
findtime = 86400
# Bantime: 1 Jahr
Bantime = 31536000

Technisch gesehen handelt es sich nicht um einen dauerhaften Block , sondern nur um einen Block für ein Jahr (den wir ebenfalls erhöhen können).

Wie auch immer, für Ihre Frage (Kann dies mit fail2ban alleine erreicht werden oder muss ich mein eigenes Skript schreiben, um das zu tun?) ... das Schreiben eines eigenen Skripts könnte gut funktionieren. Das Einrichten des Skripts zum Extrahieren der häufig gesperrten IP-Adressen und zum anschließenden Speichern dieser IP-Adressen /etc/hosts.denywürde ich empfehlen.


1
Hinzufügen zu dieser hervorragenden Antwort ... Abhängig davon, wie die Protokollierung und MaxAuthTries konfiguriert sind sshd_config, kann dies möglicherweise nur 3 fehlgeschlagene Anmeldungen für eine SSHD- "Sitzung" blockieren - nicht 3 fehlgeschlagene Anmeldungen. Beispielsweise könnte ein Angreifer standardmäßig ['pass1', 'pass2', 'pass3'] in einer einzelnen Sitzung versuchen, bevor sshd die Verbindung trennt. Abhängig davon, wie sshd für die Protokollierung eingestellt ist, kann dies als 1, 2 oder 3 Versuche zu Fail2Ban angezeigt werden.
Jonathan Vanasco

5
Dafür gibt es jetzt den Filter "fail2ban recidive".
Guillermo Prandi

Was meinst du mit der kommenden Version 0.11 ? Die neueste Version scheint 10.3.1 zu sein: github.com/fail2ban/fail2ban/releases
user5950

Ich hoffe du meintest 0.10.3.1 . Sie können den Fortschritt von "0.11" unter github.com/fail2ban/fail2ban/tree/0.11 verfolgen . Grundsätzlich ist es noch nicht freigegeben!
Pothi Kalimuthu

29

Ich glaube, wenn Sie bantime = -1in diesem Konfigurationsabschnitt setzen, ist es ein dauerhafter Block.


2
In der Tat ist das Setzen bantimeeines negativen Werts ein dauerhaftes Verbot (ab Fail2Ban Version 0.6.1 (16.03.2006))
voretaq7

3
Hinzufügen von -1 zu Einstellungen, bei denen fail2ban nicht mehr reagiert
Erdem Ece

13

Phil Hagen hat einen ausgezeichneten Artikel zu diesem Thema geschrieben. " Wiederholungstäter dauerhaft mit fail2ban sperren ".

Sein Vorschlag ist der gleiche wie der von Pothi, bietet jedoch eine schrittweise Anleitung.

Dies beinhaltete:

  • separate Verbotsliste nach Gefängnis (ip.blocklist.ssh, ip.blocklist.xxx)
  • Bannlisten werden beim Neustart des Dienstes automatisch geladen (Hauptvorteil dieser Methode imho)
  • E-Mail-Benachrichtigung bei aktiviertem Repeater.

6

Die Antwort von Chin zu erweitern ist ziemlich einfach. Bearbeiten Sie einfach die 2 Einstellungen in /etc/fail2ban/jail.local, um sie Ihren Vorlieben anzupassen.

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

4

fail2ban hat bereits ein Gefängnis, in dem ein Rückfall verboten werden kann. Wenn Sie zuschauen /etc/fail2ban/jail.conf, werden Sie feststellen:

# 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

Wie füge ich in jail.local hinzu?

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

Für die Prüfung loglevel Sie Sie tun können: fail2ban-client get loglevel.

  • set loglevel MYLEVEL : Setzt die Protokollierungsstufe auf MYLEVEL. Ebenen: KRITISCH, FEHLER, WARNUNG, HINWEIS, INFO, FEHLER
  • Mehr Befehl im Wiki .

Mit der alten Version von fail2ban können Sie diesen Fehler bekommen .


0

Gehe zu vim und öffne /etc/fail2ban/jail.conf

und ändern Sie einfach nach 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***
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.