Website-Suche

So installieren und konfigurieren Sie Fail2ban unter Linux


Fail2ban ist eine kostenlose Open-Source-Software, mit der wir Brute-Force- und DoS/DDoS-Angriffe abwehren können: Sie durchsucht Protokolldateien nach mehreren fehlgeschlagenen Authentifizierungsversuchen und verbietet zugehörige IP-Adressen, indem sie Ad-hoc-Firewall-Regeln erstellt.

In diesem Tutorial sehen wir, wie man fail2ban unter Linux installiert und konfiguriert, und wir lernen die grundlegenden Konzepte hinter seiner Verwendung kennen.

In diesem Tutorial lernen Sie:

  • So installieren Sie Fail2ban auf einigen der am häufigsten verwendeten Linux-Distributionen
  • So konfigurieren Sie Fail2ban
  • So verwenden Sie das Dienstprogramm fail2ban-client

Installation

Fail2ban ist in den offiziellen Repositories aller am häufigsten verwendeten Linux-Distributionen verfügbar. Um es auf Debian und Debian-basierten Distributionen zu installieren, können wir den folgenden Befehl verwenden:

sudo apt install fail2ban

Auf Fedora führen wir die Installation mit dem dnf-Paketmanager durch:

sudo dnf install fail2ban

Bevor wir die Installation auf RHEL oder einem seiner Klone wie Rocky Linux durchführen können, müssen wir das EPEL-Repository (Extra Package for Enterprise Linux) als Softwarequelle hinzufügen. Im Fall von Rocky ist dies ein sehr einfacher Vorgang, da das Repository automatisch konfiguriert wird, wenn wir das Paket epel-release installieren:

sudo dnf install epel-release

Wenn RHEL selbst verwendet wird, kann das Paket von der EPEL-Website heruntergeladen und installiert werden.

Um sicherzustellen, dass der fail2ban-Dienst aktiv ist und beim Booten gestartet wird, starten wir den folgenden Befehl:

sudo systemctl enable --now fail2ban

Fail2ban-Konfiguration

Sobald das Fail2ban-Paket installiert ist, können alle seine Konfigurationsdateien im Verzeichnis /etc/fail2ban gefunden werden. Wir sollten es vermeiden, Dateien zu ändern, die Teil der Installation sind (solche mit der Erweiterung ".conf"), und stattdessen benutzerdefinierte Konfigurationen in entsprechenden Dateien mit der Erweiterung ".local" platzieren. Die Hauptkonfigurationsdatei von fail2ban ist /etc/fail2ban/fail2ban.conf. Diese Datei enthält generische Einstellungen, wie z.B. den fail2ban loglevel. Wir platzieren Override-Werte in der Datei /etc/fail2ban/fail2ban.local, die erstellt werden sollte, wenn sie nicht existiert. Um den Loglevel von "INFO " (der Standard) auf "DEBUG" zu ändern, würden wir zum Beispiel schreiben:

[DEFAULT]
loglevel = DEBUG

Es gibt drei Haupt-"Entitäten", mit denen wir uns bei der Arbeit mit Fail2ban auseinandersetzen müssen: Filter, Aktionen und Jails. Werfen wir einen Blick auf sie.

Filter

Fail2ban scannt Protokolldateien und sucht nach fehlgeschlagenen Authentifizierungsversuchen. Mit Filtern sagen wir ihm im Grunde, wie Authentifizierungsversuche in den Log-Dateien bestimmter Dienste erkannt werden sollen. Fertige Filter finden Sie unter dem Verzeichnis /etc/fail2ban/filter.d:

ls /etc/fail2ban/filter.d

3proxy.conf                domino-smtp.conf        mysqld-auth.conf        selinux-ssh.conf
apache-auth.conf           dovecot.conf            nagios.conf             sendmail-auth.conf
apache-badbots.conf        dropbear.conf           named-refused.conf      sendmail-reject.conf
apache-botsearch.conf      drupal-auth.conf        nginx-botsearch.conf    sieve.conf
apache-common.conf         ejabberd-auth.conf      nginx-http-auth.conf    slapd.conf
apache-fakegooglebot.conf  exim-common.conf        nginx-limit-req.conf    softethervpn.conf
apache-modsecurity.conf    exim.conf               nsd.conf                sogo-auth.conf
apache-nohome.conf         exim-spam.conf          openhab.conf            solid-pop3d.conf
apache-noscript.conf       freeswitch.conf         openwebmail.conf        squid.conf
apache-overflows.conf      froxlor-auth.conf       oracleims.conf          squirrelmail.conf
apache-pass.conf           gitlab.conf             pam-generic.conf        sshd.conf
apache-shellshock.conf     grafana.conf            perdition.conf          stunnel.conf
assp.conf                  groupoffice.conf        phpmyadmin-syslog.conf  suhosin.conf
asterisk.conf              gssftpd.conf            php-url-fopen.conf      tine20.conf
bitwarden.conf             guacamole.conf          portsentry.conf         traefik-auth.conf
botsearch-common.conf      haproxy-http-auth.conf  postfix.conf            uwimap-auth.conf
centreon.conf              horde.conf              proftpd.conf            vsftpd.conf
common.conf                ignorecommands          pure-ftpd.conf          webmin-auth.conf
counter-strike.conf        kerio.conf              qmail.conf              wuftpd.conf
courier-auth.conf          lighttpd-auth.conf      recidive.conf           xinetd-fail.conf
courier-smtp.conf          mongodb-auth.conf       roundcube-auth.conf     znc-adminlog.conf
cyrus-imap.conf            monit.conf              screensharingd.conf     zoneminder.conf
directadmin.conf           murmur.conf             selinux-common.conf

Aktionen

Fail2ban-Aktionen werden im Verzeichnis /etc/fail2ban/action.d definiert. Die Aktionen werden nach der Software benannt, die zur Durchsetzung der Sperre verwendet wurde. Sehen wir uns ein Beispiel an. UFW (Uncomplicated Firewall) ist ein Firewall-Manager, der so konzipiert ist, dass er einfach zu bedienen ist. Dies ist der Inhalt der Datei /etc/fail2ban/action.d/ufw.conf:

Fail2Ban action configuration file for ufw
#
You are required to run "ufw enable" before this will have any effect.
#
The insert position should be appropriate to block the required traffic.
A number after an allow rule to the application won't be of much use.

[Definition]

actionstart = 

actionstop = 

actioncheck = 

actionban = [ -n "<application>" ] && app="app <application>"
            ufw insert   from  to  $app

actionunban = [ -n "<application>" ] && app="app <application>"
              ufw delete  from  to  $app

[Init]
Option: insertpos
Notes.:  The position number in the firewall list to insert the block rule
insertpos = 1

Option: blocktype
Notes.: reject or deny
blocktype = reject

Option: destination
Notes.: The destination address to block in the ufw rule
destination = any

Option: application
Notes.: application from sudo ufw app list
application = 

Eine Aktion besteht aus zwei Hauptabschnitten: "Definition " und "Init". Die in der ersten Version angegebenen Befehle werden in verschiedenen Situationen ausgeführt: als vorbereitender Schritt (actioncheck), beim Start eines Jails (actionstart), beim Stopp (actionstop), zum Sperren (actionban) und zum Aufheben der Sperre (actionunban) einer IP-Adresse.

Der Abschnitt "Init" enthält aktionsspezifische Konfigurationen. In der ufw-Aktion, über die wir oben berichtet haben, können Sie beispielsweise sehen, dass sie Anweisungen über die Position der Firewall-Regel in der Regelliste (insertpos=1) und den zu verwendenden Blocktyp (ablehnen vs. verweigern) enthält.

Gefängnisse

Und schließlich haben wir die Gefängnisse. Ein Jail ordnet im Grunde einen Filter und eine oder mehrere Aktionen zu. Die Hauptkonfigurationsdatei von fail2ban für Jails ist /etc/fail2ban/jail.conf; Drop-in-Konfigurationsdateien können im Verzeichnis /etc/fail2ban/jail.d abgelegt werden.

Jails werden nach dem Filter benannt, den sie verwenden: Wenn ein Jail beispielsweise den Namen "sshd" hat, ist es mit dem Filter /etc/fail2ban/filter.d/sshd.conf verknüpft, es sei denn, einer wird explizit über die Option "filter" angegeben. Der Name der Jail wird in eckigen Klammern angegeben. Debian bietet standardmäßig eine Überschreibung für das sshd-Jail. Sie ist in der Datei /etc/fail2ban/jail.d/defaults-debian.conf definiert:

[sshd]
enabled = true

Die Standardparameter für das Jail "sshd" befinden sich in der Konfigurationsdatei des Haupt-Jails. Debian stellt diese Überschreibung bereit, indem der Parameter "enabled" auf "true" gesetzt wird, nur um sicherzustellen, dass das Jail aktiv ist. Hier sind einige Parameter, die bei der Definition eines Jails oder im Abschnitt "default" verwendet werden können (gültig für alle bestehenden Jails):

OptionRolleStandardwert
FilterVom Gefängnis verwendeter FilterDer Filter, der dem Jail-Namen unter /etc/fail2ban/filter.d entspricht
log-PfadGibt den/die Pfad(e) der zu überwachenden Logdateien anserviceabhängig
AktionAktionen, die vom Gefängnis verwendet werden sollen. Aktionen werden nach der Datei benannt, in der sie definiert sind, ohne die Erweiterung%(action)s – siehe unten
ignorierenListe der zu ignorierenden IP-AdressenNone
bantimeDie Sperrdauer, ausgedrückt in Sekunden oder mit expliziten Zeitsuffixen10m
Zeit findenDas Intervall, in dem die angegebene Anzahl fehlgeschlagener Authentifizierungsversuche auftreten muss, damit eine IP gesperrt wird10m
maximale Anzahl an VersuchenDie Anzahl der Fehler, die innerhalb der angegebenen Suchzeit auftreten müssen, um eine Sperre auszulösen5

Wie die Standardaktion definiert wird

Wenn Sie einen Blick auf die Hauptkonfigurationsdatei des Gefängnisses (/etc/fail2ban/jail.conf) werfen, können Sie im Abschnitt "default" sehen, dass die Aktion auf folgende Weise definiert ist (Zeile 268):

action = %(action_)s

In der obigen Definition ist die Variable _action "expand" und ihr Wert wird dem Parameter "action" zugewiesen. Die Variable _action selbst ist einige Zeilen weiter oben definiert (Zeile 212 unter Debian):

action_ = __ %(banaction)s[port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

In diesem Ausdruck werden einige andere Variablen verwendet:

  • banaction: Dies ist die "Core"-Ban-Aktion, die standardmäßig auf iptables-multiport gesetzt ist
  • port: die zu sperrenden Ports – standardmäßig auf 0:65535 gesetzt, um in bestimmten Jails überschrieben zu werden
  • Protokoll: Das Protokoll, das in der Firewall-Regel verwendet wird, um das Verbot durchzusetzen – standardmäßig TCP
  • chain: die Kette, in der die Sprünge in Ban-Aktionen hinzugefügt werden sollen, die diesen Parameter erwarten

Die Variablen port, protocol und chain werden in eckigen Klammern verwendet, die durch Kommas getrennt sind. Bei dieser Syntax werden sie als "Argumente" übergeben und ersetzen die jeweiligen Platzhalter, die in der Aktionsdefinition enthalten sind. Hier ist "action_" eines der verfügbaren Makros, das nur ein Verbot erzwingt. Andere sind darunter definiert. Einige Beispiele sind:

  • action_mw – Erzwingt die Sperre und sendet eine E-Mail mit einem Whois-Bericht an die angegebene E-Mail
  • action_mwl – Wie oben, enthält jedoch relevante Protokollzeilen

Lasst uns gebannt werden!

Lassen Sie uns überprüfen, ob fail2ban korrekt funktioniert, und lassen Sie es einen Bann auslösen. Wie wir bereits gesehen haben, beträgt die Standard-Suchzeit 10 Minuten und der Standardwert maxretry 5: Das bedeutet, dass unsere IP (192.168.122.1 für dieses Beispiel) gesperrt wird, wenn wir 5 Authentifizierungsversuche in 10 Minuten fehlschlagen.

Ich versuche, mich über SSH mit dem Host mit der IP 192.168.122.93 zu verbinden, indem ich absichtlich ein falsches Passwort eingebe. Dies löst die Sperre auf dem Remote-Host aus. Wir können dies überprüfen, indem wir einen Blick auf das fail2ban-Protokoll werfen:

sudo tail /var/log/fail2ban.log

Die relevanten Zeilen sind:

2023-09-27 15:54:47,028 fail2ban.actions
[2829]: NOTICE [sshd] Ban 192.168.122.1

Wie Sie sehen können, wurde die IP 192.168.122.1 gesperrt. Eine bequemere Möglichkeit, alle aktiven Bans zu überprüfen, ist die Verwendung des Dienstprogramms fail2ban-client. Um eine Liste der gesperrten IPs zu erhalten, verwenden wir sie mit dem Unterbefehl "banned":

fail2ban-client banned
[{'sshd': ['192.168.122.1']}]

Um eine IP (aus allen Jails) zu entsperren, übergeben wir sie stattdessen als Argument an den Unterbefehl unban:

sudo fail2ban-client unban 192.168.122.1

Das Dienstprogramm fail2ban-client kann auch verwendet werden, um den Server zu steuern (starten, stoppen, neu zu laden) und einige Laufzeitkonfigurationen durchzuführen.

Schlüsse

Verwandte Artikel: