Fail2Ban ist ein Dienstprogramm zum Analysieren von Protokollen, das Protokolldateien verschiedener Prozesse scannt und IP-Adressen sperrt, 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 vorübergehend oder dauerhaft zu blockieren. Es kann Sie auch per E-Mail benachrichtigen.
Es konzentriert sich hauptsächlich auf die Erkennung von Eindringlingen über SSH, kann aber so konfiguriert werden, dass es mit jedem Dienst funktioniert, der Protokolldateien verwendet.
Voraussetzungen
-
Ein Fedora 33- oder CentOS 8-basierter Server mit einem Nicht-Root-Benutzer mit sudo-Berechtigungen.
-
Installieren Sie den Nano-Editor, da wir diesen verwenden werden.
$ sudo dnf install nano -y
Fail2Ban installieren
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
Als nächstes starten Sie den Dienst fail2ban.
$ sudo systemctl start fail2ban
Sie können jetzt den Status des Dienstes überprüfen, um zu sehen, ob er richtig 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
Fail2Ban konfigurieren
Der Fail2Ban-Dienst speichert seine Konfigurationsdateien in /etc/fail2ban
Verzeichnis. Sie werden auf eine Datei jail.conf
stoßen drin. Diese Datei wird normalerweise während Paketaktualisierungen überschrieben, daher sollte sie nicht bearbeitet werden.
Stattdessen sollten alle Konfigurationen in einer neuen Datei vorgenommen werden, die wir jail.local
nennen werden . Einstellungen in diesen 2 Dateien können weiter über Dateien aus /etc/fail2ban/jail.d/
überschrieben werden Verzeichnis.
Konfigurationen werden in der folgenden Reihenfolge angewendet:
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, Alphabetisch/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, Alphabetisch
jail.conf
enthält einen [DEFAULT]
Abschnitt, gefolgt von Abschnitten für einzelne Dienste. Jeder dieser Abschnitte kann überschrieben werden, indem er in .local
definiert wird Dateien.
Jail.local konfigurieren
Wir werden eine neue jail.local
erstellen Datei.
$ sudo nano /etc/fail2ban/jail.local
Fügen Sie den folgenden Code 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 aufgefordert werden, die Datei zu speichern. Dies setzt eine neue Standard-bantime
ändert für alle Dienste das Backend in systemd
und aktiviert den `sshd
Gefängnis.
Starten Sie Fail2ban neu, um die neuen Änderungen zu implementieren.
$ sudo systemctl restart fail2ban
Wir können die neu angewendeten Einstellungen mit fail2ban-client
bestätigen Dienstprogramm.
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Wir können auch den detaillierten Status jedes 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 viel mehr Einstellungen, die mit /jail.local
angepasst werden können Datei. Als Nächstes gehen wir einige Einstellungen durch.
IP auf die weiße Liste setzen
Mit dem folgenden Code können Sie IPs auf die Whitelist setzen/ignorieren, damit sie nicht von Fail2ban blockiert werden.
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89
Wenn Sie IPs nur für bestimmte Jails 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 mit dem Namen des Gefängnisses, für das Sie die Einstellung bearbeiten möchten.
Sperrzeit und Wiederholungsbetrag
Es gibt 3 Einstellungen, die die Zeit und die Anzahl der Wiederholungsversuche für eine Sperrung festlegen können.
bantime
- ist die Zeitspanne in Sekunden, für die eine IP gesperrt ist. Um eine dauerhafte Sperre festzulegen, setzen Sie diesen Wert auf eine negative Zahl. Der Standardwert ist 10 Minuten oder 600 Sekunden.
findtime
- ist die Zeitspanne zwischen Anmeldeversuchen, bevor ein Bann gesetzt wird. Dieser Wert ist immer eine Anzahl von Sekunden. Wenn Fail2ban beispielsweise so eingestellt ist, dass eine IP nach 5 fehlgeschlagenen Anmeldeversuchen gesperrt wird, müssen diese 5 Versuche innerhalb der festgelegten 10 Minuten bantime
erfolgen begrenzen.
maxretry
- ist die Anzahl der Wiederholungen von einer einzelnen IP-Adresse, bevor ein Bann verhängt wird. Der Standardwert ist 3.
Um diese Einstellungen anzupassen, fügen Sie die folgenden Zeilen in \etc\fail2ban\jail.local
ein Datei unter [DEFAULT]
Abschnitt.
bantime = 3600
findtime = 300
maxretry = 4
E-Mail-Benachrichtigungen
Um E-Mail-Benachrichtigungen zu senden, müssen Sie zuerst 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 \etc\fail2ban\jail.local
ein Datei unter [DEFAULT]
Abschnitt.
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 E-Mails erhalten möchten, sendername
bezieht sich auf den Namen des Absenders, also verwenden wir dafür Fail2Ban. mta
bezieht sich auf den verwendeten Mail Transfer Agent, also sendmail
hier. Wenn Sie Postfix
verwenden , verwenden Sie dann den Wert mail
für den mta
Variable.
action
bezieht sich auf die Standardaktion, die ausgeführt wird, sobald ein Eindringen erkannt wird. Der Standardwert ist %(action_)s
was den Benutzer nur bannt. %(action_mw)s
wird sperren und eine E-Mail mit einem Whois-Bericht senden; während %(action_mwl)s
wird gesperrt und eine E-Mail mit dem Whois-Bericht zusammen mit Informationen aus den entsprechenden Protokolldateien gesendet. Dies kann auch gefängnisspezifisch geändert werden.
Einstellungen für individuelle Jails
Wie wir bereits wissen, [DEFAULT]
Abschnitt für alle Jails gilt, ist es an der Zeit, sich einige spezifische Jails und ihre Einstellungen anzusehen.
SSHD-Gefängnis
[sshd]
haben wir bereits definiert früher in unserem jail.local
Datei. Wir können es mit dem folgenden Code ein wenig 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 ihn ändern. logpath
bezieht sich auf den Speicherort der zu überwachenden Protokolldatei. %(ssh_log)s
verwendet einen Wert, der in der Standardkonfigurationsdatei von Fail2ban definiert ist (/etc/fail2ban/paths-common.conf
).
Nginx-Gefängnis
Nginx hat mehrere Jails, die in Fail2Ban verwendet werden können. Wenn beispielsweise ein passwortgeschützter Teil Ihrer Website wiederholt angegriffen wird, können Sie einen Abschnitt [nginx-http-auth]
verwenden in jail.local
Datei dafür.
[nginx-http-auth]
enabled = true
Wir können auch einen Abschnitt namens [nginx-botsearch]
hinzufügen um Anfragen an nicht existierende Ordner oder Speicherorte zu stoppen.
[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 Apachen 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 in /etc/fail2ban/filter.d
Verzeichnis mit seiner .conf
Erweiterung entfernt.
Sie können sehen, welche Art von Filtern verfügbar sind, indem Sie das Verzeichnis überprüfen.
$ ls /etc/fail2ban/filter.d
Darin sehen Sie 2 Protokolldateien für Nginx; nginx-badbots.conf
und nginx-http-auth.conf
.
Diese Konfigurationsdateien verwenden reguläre Ausdrücke (regex), um Protokolldateien zu analysieren. Diese werden Failregexs genannt. Sie können Filter anpassen oder neue erstellen, indem Sie Ihre eigenen regulären Ausdrücke schreiben. Wir werden diese regulären Ausdrücke nicht ausführlich behandeln, da sie den Rahmen dieses Tutorials sprengen würden.
Fail2Ban-Protokolle und Firewall überwachen
Sie können den Status von Fail2Ban mit systemctl
überprüfen wie bereits erwähnt.
$ sudo systemctl status fail2ban
Um etwas mehr Details zu erhalten, können Sie journalctl
verwenden Befehl.
$ sudo journalctl -b -u fail2ban
Sie können auch fail2ban-client
verwenden um den Status von fail2ban-server
abzufragen oder und Einzelgefängnis.
$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name
Sie können auch die Logdatei von Fail2ban abfragen.
$ sudo tail -F /var/log/fail2ban.log
Sie können die aktuell für iptables konfigurierten Regeln auflisten.
$ sudo iptables -L
Sie können die iptables-Regeln auch 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, posten Sie diese in den Kommentaren unten.