Server mit Fail2ban sichern

Fail2Ban ist ein in Python geschriebenes Framework, dass nach definierten Filterregeln ( Jails ) den Zugriff auf Serverdienste oder ganze IP Adressen für festgelegte Zeiträume sperrt. In Fail2Ban sind bereits einige vorgefertigte Jails und Filter enthalten. Nach der Aktivierung überwachen sie die gewünschten Bereiche wie mehrfache IMAP-Logins, Brute-Force-Attacken per SSH, wiederholte Skript-Ausführungen, gezielte Suchanfragen nach Dateien mit bekannten Sicherheitslücken uvm. erkannt und blockiert. Fail2Ban ist so effektiv wie die Effizienz seiner Erkennungsfilter. Technisch versierte Nutzer können eigene Muster in Error- bzw. Access-Logs erkennen und weitere Firewall-Regeln zur Abweisung von Schädlingen anzulegen.

GrundlagenJails / FilterSonstiges
InstallationSSH (mit Erklärung / BSP )Fail2Ban Email Support
KonfigurationWordPress Manuelle IP-Sperre via Blacklist
Die einzelnen JailsNextcloud RegExp-Muster Definitionen
Owncloud Fail2ban Steuern

Installation

Fail2Ban ist in den Standardrepositories gängiger Distributionen bereits enthalten und kann auf Debian basierten Systemen wie gewohnt einfach installiert werden :

Zurück zur Übersicht


Konfiguration

Nach erfolgreicher Installation befinden sich die Konfigurationsdateien im Verzeichnis /etc/fail2ban. In der fail2ban.conf  werden die grundlegenden Parameter für Fail2Ban festgelegt; in der jail.conf  sind die spezifischen Parameter zu den einzelnen Serverdiensten definiert. Die eigene Konfiguration wird über die Datei  jail.local realisiert, da die jail.conf bei Updates überschrieben wird.

Die jail.conf sollte daher zu jail.local kopiert oder einfach auf jail.conf verlinkt werden

In der [DEFAULT] Sektion am Anfang der jail.local werden die globalen Parameter aller Jails gesetzt. Die Parameter können dabei für jeden Jail weiterhin separat konfiguriert werden sofern diese in der betreffenden Jail Sektion angeben werden. Konfigurieren Sie die lokale IP Adresse Ihres Servers, die Zeit wie lange eine IP geblockt werden soll und die Anzahl der Versuche, nach denen geblockt werden soll in der jail.local. Damit haben Sie die globalen Parameter des Frameworks gesetzt.

Zurück zur Übersicht


Die einzelnen Jails

Die Konfigurationsdatei /etc/fail2ban/jail.local besteht aus einzelnen Regeln, sogenannten Jails. Diese Parametern sind für jeden Jail wie folgt gruppiert :

  • enabled – Aktive / Inaktive Regel (true/false)
  • filter – Filter-Name aus gleichnamiger Datei unter /etc/fail2ban/filter.d
  • port – Möglicher Port (ssh, http, https, etc.)
  • logpath – Pfad zur Logdatei(en), die überwacht wird
  • maxretry – Anzahl der Treffer im findtime-Zeitraum ( kann über Default Sektion gesetzt werden )
  • findtime – Zeitraum in Sekunden, der berücksichtigt wird ( kann über Default Sektion gesetzt werden )
  • bantime – Zeitraum in Sekunden, für den geblockt wird (-1 = für immer) ( kann über Default Sektion gesetzt werden )

Die einzelnen Jails werden in der Datei /etc/fail2ban/jail.local aktiviert und konfiguriert. Aktionen wie das Sperren der IP, Emialversand oder sonstige Aktionen werden hier definiert. Der Filter, der auf die unter dem Parameter logpath zugewiesenen Logdatei angewandt wird, ist in dem Verzeichnis /etc/fail2ban/filter.d/*.conf unter der entsprechen conf Datei definiert. Nachfolgend sind einige Filter und  deren Konfiguration aufgelistet :

Zurück zur Übersicht


SSH

/etc/fail2ban/jail.local :

Der Filter ist aktiv ( enabled = true ). RegExp-Muster Definitionen sind in /etc/fail2ban/filter.d/sshd.conf ( filter = sshd ) definiert wonach die Logdatei  /var/log/auth.log ( logpath = /var/log/auth.log ) durchsucht wird. Die Sperrung der IP ( banaction = iptables-multiport ) wird für einen Monat (bantime = 2592000)  ausgelöst wenn im Zeitraum von einem Tag (findtime = 86400) mindestens ein Treffer (maxretry = 1) gefunden wurde.

/etc/fail2ban/filter.d/sshd.conf :

Zurück zur Übersicht


WordPress

/etc/fail2ban/jail.local :

/etc/fail2ban/filter.d/wordpress.conf

Zurück zur Übersicht


Nextcloud

/etc/fail2ban/jail.local :

/etc/fail2ban/filter.d/nextcloud.conf :

Zurück zur Übersicht


Owncloud

/etc/fail2ban/jail.local

/etc/fail2ban/filter.d/owncloud.conf


Fail2Ban setzt allerdings nicht irgendwelche IP-Adressen auf die interne Blacklist, sondern ausschließlich die, die dem regulären Ausdruck aus dem Jail-Filter entsprechen. Daher sollte man sehr vorsichtig mit Filter-Definitionen hantieren und diese mit fail2ban-regex umgehend testen. Die Funktion der Filter kann mit dem folgenden Befehl überprüft werden ( in diesem Fall SSH ):

Zurück zur Übersicht


Manuelle IP-Sperre via Blacklist

Je nach Anwendungsfall kann es notwendig sein, bestimmte IP-Adressen in Fail2Ban manuell zu sperren. Um die Übersicht zu erhalten und die Pflege der Einträge so einfach wie möglich zu halten, empfiehlt sich eine Blacklist als Datei.

Eine eigens für diesen Zweck erstellte Lösung kommt an der Stelle zum Einsatz: IP-Datensätze werden aus der angelegten Datei ip.blacklist extrahiert und in der Firewall eingetragen. Einrichten einer Firewall-Blacklist mit Fail2Ban.

Der Vorteil dieser Lösung im Vergleich zu Set a permanent ban per IP ist die Update-Resistenz, da nutzerspezifische Jails nie überschrieben werden.

Zurück zur Übersicht


Fail2Ban Email Support

Voraussetzung für das automatische Versenden von Emails ist ein installierter und konfigurierter Mailtransportagent (MTA) wie z.B. Postfix.

Fail2Ban Email Funktion
Fail2ban kann mit einigen Parametern eigenständig Emails versenden ( IP Adresse gesperrt, Fail2ban start/stop etc. ). Dazu wird die Datei /etc/fail2ban/jail.local angepasst. Der Parametereintrag “destemail = <youremail.address>” sollte auf eine gültige/n Emailadresse oder Systembenutzer verweisen :

Der Parametereintrag “action = %(action_XXX)s” legt fest in welchem Umfang fail2ban Mails versendet.

ggf. muss der Systemmailadresse “fail2ban@<hostname>” noch eine gültige Absenderadresse zugewiesen werden. Entweder direkt in der /etc/postfix/sender_canonical (Fail2ban@<hostname> <address>@<provider>.<tld>Smilie: ;) oder in der /etc/postfix/generic (Fail2ban@<hostname> <address>@<provider>.<tld>Smilie: ;). Hierbei das Neuerstellen der Postfixdatenbanken nicht vergessen.


Fail2Ban Email Filter Script

Die o.g. Lösung veranlasst Fail2Ban nach jeder Aktion eine Email Benachrichtigung zu versenden. Dies kann u.U. einen sehr hohen Emailverkehr verursachen und / oder das Email Postfach überfluten. Eleganter ist es die Fail2Ban Logs nach Einträgen zu durchsuchen, zu filtern und täglich eine Zusammenfassung per Email zu versenden. Folgendes Script durchsucht die Fail2Ban Logs der letzten 24 Stunden nach SSH und FTP Bans, sortiert diese und versendet das Ergebnis per Email. Über einen Cronjob kann festgelegt werden, wann und wie oft das Script gestartet wird.

Zurück zur Übersicht


RegExp-Muster Definitionen

Es können u. U. Fehler in den RegEx Definitionen der Jails auftreten, da sich die Logdateisyntax einiger Dienste mit der Zeit ändert oder das genutzte System spezifische Änderung erfordert.

ProFTP Server => Default Parameter in /etc/fail2ban/filter.d/proftpd.conf greifen nicht. Folgende Konfiguration funktioniert :

Zurück zur Übersicht


Fail2ban steuern

IP Adresse manuell entsperren :

 

Aufgrund welchen Jails die Adresse gesperrt wurde kann über die  Fail2ban Logfiles auslesen werden :

Mit der Jail Information wird dann die IP Adresse mit dem Fail2ban Client entsperrt :

 

 

Alternativ kann die IP auch direkt über iptables wieder freigeben werden. Dazu wird die Iptables Chain und die Nummer der IP in der Chain benötigt :

Hat man die betreffenden Informationen zu der IP gefunden wir die IP direkt über Iptables freigeben :

Zurück zur Übersicht


Quellen :
Monitoring the fail2ban log @ www.the-art-of-web.com
Fail2ban and sendmail @ www.the-art-of-web.com
Fail2Ban and iptables  @ www.the-art-of-web.com
Blocking FTP Hacking Attempts @ www.the-art-of-web.com
Nextcloud RegExp : https://www.w2k.ch/
 

 

Kategorie(n): Anleitungen, Linux, Netzwerke, Server, Sicherheit

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.