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 fail2banBevor 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-releaseWenn 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 fail2banFail2ban-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):
| Option | Rolle | Standardwert |
|---|---|---|
| Filter | Vom Gefängnis verwendeter Filter | Der Filter, der dem Jail-Namen unter /etc/fail2ban/filter.d entspricht |
| log-Pfad | Gibt den/die Pfad(e) der zu überwachenden Logdateien an | serviceabhängig |
| Aktion | Aktionen, 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 |
| ignorieren | Liste der zu ignorierenden IP-Adressen | None |
| bantime | Die Sperrdauer, ausgedrückt in Sekunden oder mit expliziten Zeitsuffixen | 10m |
| Zeit finden | Das Intervall, in dem die angegebene Anzahl fehlgeschlagener Authentifizierungsversuche auftreten muss, damit eine IP gesperrt wird | 10m |
| maximale Anzahl an Versuchen | Die Anzahl der Fehler, die innerhalb der angegebenen Suchzeit auftreten müssen, um eine Sperre auszulösen | 5 |
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_)sIn 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.logDie 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.1Das Dienstprogramm fail2ban-client kann auch verwendet werden, um den Server zu steuern (starten, stoppen, neu zu laden) und einige Laufzeitkonfigurationen durchzuführen.
