Dies ist eine alte Version des Dokuments!
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
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 =
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
Man kann das Jail auch in einer eigenen Datei definieren. Bearbeite oder erstelle eine Datei, z. B. /etc/fail2ban/jail.d/meinfilter.local
.
[sshd] 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]
Eine neue Datei unter /etc/fail2ban/jail.d
# filename apache.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.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