Wie man Fail2Ban auf CentOS 8 und Fedora 33 installiert und konfiguriert

Fail2Ban ist ein Dienstprogramm zum Parsen von Protokollen, das Protokolldateien verschiedener Prozesse durchsucht und IP-Adressen verbietet, die zu viele Kennwortfehler verursachen. Wenn ein Anmeldeversuch gefunden wird, fügt Fail2Ban eine neue Regel zu iptables hinzu, um die IP-Adresse des Angreifers entweder vorübergehend oder dauerhaft zu blockieren. Dafür kann es Sie auch per E-Mail benachrichtigen.

Es konzentriert sich in erster Linie auf die Erkennung von Eindringlingen über SSH, aber es kann so konfiguriert werden, dass es mit jedem Dienst zusammenarbeitet, der Protokolldateien verwendet.

Voraussetzungen

  1. Ein Fedora 33- oder CentOS 8-basierter Server mit einem Nicht-Root-Benutzer mit Sudo-Berechtigungen.
  2. Installieren Sie den Nano-Editor, denn den werden wir verwenden.
    $ sudo dnf install nano -y
    

Installieren Sie Fail2Ban

Um Fail2Ban auf CentOS 8 zu installieren, müssen Sie zuerst das EPEL Yum-Repository installieren.

$ sudo dnf install epel-release

Fedora 33 wird mit Fail2Ban ausgeliefert.

Führen Sie den folgenden Befehl aus, um Fail2Ban sowohl auf Fedora 33 als auch auf CentOS 8 zu installieren.

$ sudo dnf install fail2ban

Nach der Installation müssen wir den Dienst aktivieren.

$ sudo systemctl enable fail2ban

Starten Sie dann den Fail2Ban-Dienst.

$ sudo systemctl start fail2ban

Sie können nun den Status des Dienstes überprüfen, um festzustellen, ob er korrekt funktioniert.

$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
       Docs: man:fail2ban(1)
    Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 19032 (f2b/server)
      Tasks: 3 (limit: 1125)
     Memory: 11.0M
        CPU: 96ms
     CGroup: /system.slice/fail2ban.service
             ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start

Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready

Konfigurieren von Fail2Ban

Der Fail2Ban-Dienst bewahrt seine Konfigurationsdateien im Verzeichnis /etc/fail2ban auf. Sie werden darin auf eine Datei jail.conf stoßen. Diese Datei wird normalerweise bei Paketaktualisierungen überschrieben, so dass sie nicht bearbeitet werden sollte.

Stattdessen sollten alle Konfigurationen in einer neuen Datei vorgenommen werden, die wir jail.local nennen werden. Einstellungen in diesen beiden Dateien können durch Dateien aus dem Verzeichnis /etc/fail2ban/jail.d/ weiter überschrieben werden.

Die Konfigurationen werden in der folgenden Reihenfolge angewendet:

  1. /etc/fail2ban/jail.conf
  2. etc/fail2ban/jail.d/*.conf, Alphabetisch
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, Alphabetisch

jail.conf enthält einen Abschnitt [DEFAULT], gefolgt von Abschnitten für einzelne Dienste. Jeder dieser Abschnitte kann überschrieben werden, indem man sie in .local Dateien definiert.

Konfigurieren von jail.local

Wir werden eine neue jail.local Datei erstellen.

$ sudo nano /etc/fail2ban/jail.local

Fügen Sie den folgenden Code darin ein.

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd

[sshd]
enabled = true

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie zum Speichern der Datei aufgefordert werden. Dies setzt eine neue Voreinstellung bantime für alle Dienste, ändert das Backend in systemd und aktiviert das Gefängnis `sshd.

Starten Sie Fail2ban erneut, um die neuen Änderungen zu implementieren.

$ sudo systemctl restart fail2ban

Wir können die neu angewandten Einstellungen mit dem Dienstprogramm fail2ban-client bestätigen.

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Wir können auch den detaillierten Status jedes einzelnen Gefängnisses speziell auf folgende Weise abrufen.

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Weitere Einstellungen

jail.conf bietet eine Menge weiterer Einstellungen, die mit Hilfe der Datei /jail.local angepasst werden können. Wir werden einige Einstellungen als nächstes durchgehen.

Whitelisting-IP

Sie können IPs mit dem folgenden Code auf der Whitelist/Ignorieren, damit sie nicht durch Fail2ban blockiert werden.

[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89

Wenn Sie IPs nur für bestimmte Gefängnisse auf die Whitelist setzen möchten, können Sie dies über fail2ban-client tun.

$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89

Ersetzen Sie JAIL im obigen Befehl durch den Namen der Jail, für die Sie die Einstellung bearbeiten möchten.

Sperrzeit und Wiederholungsbetrag

Es gibt 3 Einstellungen, die den Zeitpunkt und die Anzahl der Wiederholungsversuche für ein Verbot festlegen können.

bantime – ist die Zeitspanne in Sekunden, für die eine IP gebannt wird. Um ein dauerhaftes Verbot festzulegen, setzen Sie diesen Wert auf eine negative Zahl. Der Standardwert ist 10 Minuten oder 600 Sekunden.

findtime – ist die Länge der Zeit zwischen den Login-Versuchen, bevor ein Bann gesetzt wird. Dieser Wert ist immer eine Anzahl von Sekunden. Wenn z.B. Fail2ban so eingestellt ist, dass eine IP nach 5 fehlgeschlagenen Anmeldeversuchen gebannt wird, müssen diese 5 Versuche innerhalb der festgelegten 10-Minuten-Grenze bantime erfolgen.

maxretry – ist die Anzahl der Wiederholungsversuche von einer einzigen IP-Adresse aus, bevor ein Verbot verhängt wird. Der Standardwert ist 3.

Um diese Einstellungen anzupassen, fügen Sie die folgenden Zeilen in die Datei \etc\fail2ban\jail.local unter dem Abschnitt [DEFAULT] ein.

bantime = 3600
findtime = 300
maxretry = 4

E-Mail-Benachrichtigungen

Um E-Mail-Benachrichtigungen zu versenden, müssen Sie zunächst einen Mail Transfer Agent (MTA) installieren. Für unseren Zweck werden wir sendmail installieren.

$ sudo dnf install sendmail

Um die E-Mail zu erhalten, fügen Sie den folgenden Code in der Datei \etc\fail2ban\jail.local im Abschnitt [DEFAULT] hinzu.

destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s

destemail bezieht sich auf die Ziel-E-Mail-Id, die die Id ist, unter der Sie die Mails empfangen möchten, sendername bezieht sich auf den Namen des Absenders, so dass wir dafür Fail2Ban verwenden. mta bezieht sich auf den verwendeten Mail Transfer Agent, der hier sendmail ist. Wenn Sie Postfix verwenden, dann verwenden Sie den Wert mail für die Variable mta.

action bezieht sich auf die Standardaktion, die ausgeführt wird, sobald ein Eindringen entdeckt wird. Der Standardwert ist %(action_)s, der nur den Benutzer verbietet. %(action_mw)s verbietet und sendet eine E-Mail mit einem Whois-Bericht; während %(action_mwl)s verbietet und sendet eine E-Mail mit dem Whois-Bericht zusammen mit Informationen aus den entsprechenden Protokolldateien. Dies kann auch auf einer gefängnisspezifischen Basis geändert werden.

Einstellungen für einzelne Gefängnisse

Wie wir bereits wissen, gilt der Abschnitt [DEFAULT] für alle Gefängnisse. Es ist an der Zeit, sich mit einigen spezifischen Gefängnissen und ihren Einstellungen zu befassen.

SSHD-Gefängnis

Wir haben [sshd] bereits früher in unserer Datei jail.local definiert. Wir können es mit dem folgenden Code etwas mehr anpassen.

[sshd]

enabled = true
port = ssh
logpath = %(ssh_log)s

In diesem Fall verwenden wir eine vordefinierte Variable ssh für den Port, der der Standard-SSH-Port ist. Wenn Sie einen anderen SSH-Port verwenden, sollten Sie diesen ändern. logpath bezieht sich auf den Ort der zu überwachenden Protokolldatei. %(ssh_log)s verwendet einen Wert, der in der Standardkonfigurationsdatei von Fail2ban (/etc/fail2ban/paths-common.conf) definiert ist.

Nginx-Gefängnis

Nginx verfügt über mehrere Jails, die in Fail2Ban verwendet werden können. Wenn beispielsweise ein kennwortgeschützter Teil Ihrer Website wiederholt angegriffen wird, können Sie dafür einen Abschnitt [nginx-http-auth] in der Datei jail.local verwenden.

[nginx-http-auth]
enabled = true

Wir können auch einen Abschnitt namens [nginx-botsearch] hinzufügen, um Anfragen an Ordner oder Orte zu stoppen, die nicht existieren.

[nginx-badbots]
enabled  = true

Es gibt auch andere Nginx-Gefängnisse, aber sie sind nicht mit Fail2Ban vorkonfiguriert. Sie müssen manuell erstellt werden und die meisten von ihnen können auf den Apache-Gefängnissen basieren, mit denen Fail2Ban ausgeliefert wird.

Fail2Ban-Filter und Failregexs

Es gibt eine weitere Einstellung in der Fail2Ban-Konfiguration namens Filter. Filter entscheiden, ob eine Zeile in der Protokolldatei auf eine fehlgeschlagene Authentifizierung hinweist.

Der Filterwert in der Konfigurationsdatei ist ein Verweis auf eine Datei, die sich im Verzeichnis /etc/fail2ban/filter.d befindet und deren Erweiterung .conf entfernt wurde.

Sie können sehen, welche Art von Filtern verfügbar sind, indem Sie das Verzeichnis überprüfen.

$ ls /etc/fail2ban/filter.d

Sie werden darin 2 Protokolldateien für Nginx sehen; nginx-badbots.conf und nginx-http-auth.conf.

Diese Konfigurationsdateien verwenden Reguläre Ausdrücke (regex) zum Parsen von Protokolldateien. Diese werden Failregexs genannt. Sie können die Filter anpassen oder neue Filter erstellen, indem Sie Ihre eigenen regulären Ausdrücke schreiben. Wir werden diese regulären Ausdrücke nicht im Detail behandeln, da sie nicht in den Rahmen dieses Tutorials fallen.

Fail2Ban-Protokolle und Firewall überwachen

Sie können den Status von Fail2Ban überprüfen, indem Sie, wie bereits erwähnt, systemctl verwenden.

$ sudo systemctl status fail2ban

Um ein wenig mehr Details zu erhalten, können Sie den Befehl journalctl verwenden.

$ sudo journalctl -b -u fail2ban

Sie können auch fail2ban-client verwenden, um den Status von fail2ban-server oder und einzelner Gefängnisse abzufragen.

$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name

Sie können auch die Protokolldatei von Fail2Ban abfragen.

$ sudo tail -F /var/log/fail2ban.log

Sie können die aktuellen, für iptables konfigurierten Regeln auflisten.

$ sudo iptables -L

Sie können auch die iptables-Regeln in einem Format auflisten, das die Befehle widerspiegelt, die zum Aktivieren dieser Regeln erforderlich sind.

$ sudo iptables -S

Schlussfolgerung

Damit ist unser Tutorial zur Installation und Konfiguration von Fail2Ban auf einem Fedora 33- oder CentOS 8-basierten Server abgeschlossen. Wenn Sie Fragen haben, stellen Sie diese bitte in den Kommentaren unten.

Das könnte dich auch interessieren …