Benutzer-Werkzeuge

Webseiten-Werkzeuge


fail2ban

Inhaltsverzeichnis

Der Hauptzweck von fail2ban ist das Bestimmen und Blockieren bestimmter IP-Adressen, die wahrscheinlich zu Angreifern gehören, die sich Zugang zum System verschaffen wollen. fail2ban ermittelt aus Log-Dateien IP-Adressen, die in einem vom Administrator angesetzten Zeitrahmen z. B. öfter versuchen, sich mit falschen Passwörtern anzumelden oder andere gefährliche oder sinnlose Aktionen ausführen. Normalerweise ist fail2ban so konfiguriert, dass es blockierte Adressen nach einer bestimmten Zeit wieder freigibt, um keine seriösen Verbindungsversuche zu blockieren (beispielsweise, wenn die Angreifer-IP dynamisch einem anderen Host zugeteilt wird).

Die Hauptkonfiguration befindet sich unter /etc/fail2ban/fail2ban.conf, Filterregeln in /etc/fail2ban/jail.conf.

fail2ban-client start <rulename>
fail2ban-client stop <rulename>
fail2ban-client status <rulename>
fail2ban-client reload --unban <jail|--all>
fail2ban-client unban <jail|ip>

fail2ban-client get sshd bantime
fail2ban-client set sshd bantime 1

fail2ban-client get dbfile
systemctl stop fail2ban
rm -f /var/lib/fail2ban/fail2ban.sqlite3
systemctl start fail2ban

Filter

Um Filter in Fail2Ban zu erstellen, muss man bestimmte Muster definieren, die auf bestimmte Logdateieinträge abzielen. Diese Filter sind notwendig, um potenziell schädliche Aktivitäten wie unerlaubte Login-Versuche zu erkennen. Filterdateien befinden sich normalerweise im Verzeichnis /etc/fail2ban/filter.d/. Jede Filterdatei sollte die Endung .conf haben.

sudo nano /etc/fail2ban/filter.d/meinfilter.conf

Ein Filter besteht aus einem [Definition]-Block, der die wichtigsten Informationen enthält.

[Definition]
failregex = REGEL_1
            REGEL_2
ignoreregex =
  • failregex: Hier definierst du reguläre Ausdrücke (Regex), die auf verdächtige Einträge in den Logdateien passen.
  • ignoreregex: (Optional) Definiert Muster, die ignoriert werden sollen.

Nachdem du den Filter erstellt hast, musst du ihn in einer Jail-Datei einbinden. Jails befinden sich normalerweise in /etc/fail2ban/jail.local.

[meinfilter]
enabled = true
port = ssh
logpath = /var/log/auth.log
bantime = 3600
findtime = 600
maxretry = 3
  • enabled: Aktiviert den Filter.
  • logpath: Gibt den Pfad zur Logdatei an, die überwacht werden soll.
  • bantime: Dauer (in Sekunden), wie lange eine IP gesperrt wird.
  • findtime: Zeitfenster (in Sekunden), innerhalb dessen maxretry-Versuche erkannt werden.
  • maxretry: Maximale Anzahl erlaubter Fehlversuche.

Man kann das Jail auch in einer eigenen Datei definieren. Bearbeite oder erstelle eine Datei, z. B. /etc/fail2ban/jail.d/meinfilter.local.

[meinfilter]
enabled = true
port = ssh
filter = ssh
logpath = /var/log/auth.log
maxretry = 5
bantime = 10m
findtime = 10m

Man kann den Filter mit dem Tool fail2ban-regex testen, um sicherzustellen, dass die Regex mit den Logdateieinträgen übereinstimmt.

sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/meinfilter.conf

fail2ban neu starten

sudo systemctl restart fail2ban

Status testen

sudo fail2ban-client status [meinfilter]

Apache Filter Example

Eine neue Datei unter /etc/fail2ban/jail.d

# filename apache-test.conf
[apache-test] 
enabled  = true
port     = http,https
logpath  = /var/log/apache2/access.log
action   = %(action_)s # Variable von Haus aus definiert (in der Datei weiter am Anfang)
maxretry = 3
findtime = 600
bantime  = 600

und unter /etc/fail2ban/filter.d konfiguriert man es.

# filename: apache-test.local
[Definition]

failregex = ^<HOST>(.*)parameter=hacky(.*)$

ignoreregex = 

findtime definiert, wie weit zurückliegende Logeinträge überprüft werden. Der Filter wird anhand von Eingaben geprüft, deren Datum zwischen now - findtime und now liegt. Wenn der Filter innerhalb dieses Zeitraums maxretry oder mehr übereinstimmende Zeilen gefunden hat (ohne die, die auch mit der Ignorieren-Regex übereinstimmen), gibt er die Ban-Aktion aus.

                |    findtime    |     bantime       |   
----------------+--*--*-*--*---*-+-------------------+------------->
                |                |                   |
                |                |                   +--> now + bantime
                |                +--> now
                +--> now - findtime
fail2ban.txt · Zuletzt geändert: 2024/11/15 12:00 von jango