Einführung
Während die Verbindung zu Ihrem Server über SSH sehr sicher sein kann, ist der SSH-Dämon selbst ein Dienst, der für das Internet verfügbar sein muss, um ordnungsgemäß zu funktionieren. Dies birgt ein gewisses Risiko und bietet potenziellen Angreifern einen Angriffsvektor.
Jeder Dienst, der dem Netzwerk ausgesetzt ist, ist auf diese Weise ein potenzielles Ziel. Wenn Sie Anwendungsprotokolle für diese Dienste beachten, werden Sie häufig wiederholte, systematische Anmeldeversuche sehen, die Brute-Force-Angriffe von Benutzern und Bots gleichermaßen darstellen.
Ein Dienst namensFail2ban kann dieses Problem beheben, indem er Regeln erstellt, die Ihre iptables-Firewall-Konfiguration basierend auf einer vordefinierten Anzahl erfolgloser Anmeldeversuche automatisch ändern. Auf diese Weise kann Ihr Server auf unzulässige Zugriffsversuche reagieren, ohne dass Sie eingreifen müssen.
In diesem Handbuch erfahren Sie, wie Sie Fail2ban auf einem CentOS 7-Server installieren und verwenden.
Installieren Sie Fail2ban unter CentOS 7
Während Fail2ban nicht im offiziellen CentOS-Paket-Repository verfügbar ist, wird es fürEPEL project gepackt. EPEL, das für Extra Packages for Enterprise Linux steht, kann mit einem Release-Paket installiert werden, dasisvon CentOS erhältlich ist:
sudo yum install epel-release
Sie werden aufgefordert, fortzufahren. Drücken Siey, gefolgt vonEnter:
yum promptTransaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
Jetzt sollten wir das Paketfail2ban
installieren können:
sudo yum install fail2ban
Drücken Sie erneuty undEnter, wenn Sie aufgefordert werden, fortzufahren.
Verwenden Sie nach Abschluss der Installationsystemctl
, um den Dienstfail2ban
zu aktivieren:
sudo systemctl enable fail2ban
Lokale Einstellungen konfigurieren
Der Fail2ban-Dienst speichert seine Konfigurationsdateien im Verzeichnis/etc/fail2ban
. Dort finden Sie eine Datei mit Standardwerten namensjail.conf
. Da diese Datei möglicherweise durch Paketaktualisierungen überschrieben wird, sollten wir sie nicht direkt bearbeiten. Stattdessen schreiben wir eine neue Datei mit dem Namenjail.local
. Alle injail.local
definierten Werte überschreiben die injail.conf
.
jail.conf
enthält einen Abschnitt[DEFAULT]
, gefolgt von Abschnitten für einzelne Dienste. jail.local
kann jeden dieser Werte überschreiben. Darüber hinaus können Dateien in/etc/fail2ban/jail.d/
verwendet werden, um die Einstellungen in diesen beiden Dateien zu überschreiben. Dateien 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
Jede Datei kann einen Abschnitt[DEFAULT]
enthalten, der zuerst ausgeführt wird, und kann auch Abschnitte für einzelne Gefängnisse enthalten. Der zuletzt eingestellte Wert für einen bestimmten Parameter hat Vorrang.
Beginnen wir mit dem Schreiben einer sehr einfachen Version vonjail.local
. Öffnen Sie eine neue Datei mitnano
(oder einem Editor Ihrer Wahl):
sudo nano /etc/fail2ban/jail.local
Fügen Sie Folgendes ein:
/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
Dies überschreibt drei Einstellungen: Es legt einen neuen Standardwert fürbantime
für alle Dienste fest, stellt sicher, dassiptables
für die Firewall-Konfiguration verwendet wird, und aktiviert das Gefängnissshd
.
Beenden und speichern Sie die neue Datei (innano
, drücken SieCtrl-X zum Beenden,y zum Speichern undEnter zum Bestätigen des Dateinamens). Jetzt können wir den Dienstfail2ban
mitsystemctl
neu starten:
sudo systemctl restart fail2ban
Der Befehlsystemctl
sollte ohne Ausgabe beendet werden. Um zu überprüfen, ob der Dienst ausgeführt wird, können wirfail2ban-client
verwenden:
sudo fail2ban-client status
OutputStatus
|- Number of jail: 1
`- Jail list: sshd
Sie können auch detailliertere Informationen zu einem bestimmten Gefängnis erhalten:
sudo fail2ban-client status sshd
Erkunden Sie die verfügbaren Einstellungen
Die oben definierte Version vonjail.local
ist ein guter Anfang, aber Sie können eine Reihe anderer Einstellungen anpassen. Öffnen Siejail.conf
, und wir werden einige der Standardeinstellungen untersuchen. Wenn Sie einen dieser Werte ändern möchten, denken Sie daran, dass sie in den entsprechenden Abschnitt vonjail.local
kopiert und dort angepasst werden sollten, anstatt direkt geändert zu werden.
sudo nano /etc/fail2ban/jail.conf
Standardeinstellungen für alle Jails
Scrollen Sie zunächst durch den Abschnitt[DEFAULT]
.
ignoreip = 127.0.0.1/8
Sie können die von Fail2ban ignorierten Quelladressen anpassen, indem Sie dem Parameterignoreip
einen Wert hinzufügen. Derzeit ist es so konfiguriert, dass kein Datenverkehr vom lokalen Computer gesperrt wird. Sie können zusätzliche zu ignorierende Adressen einfügen, indem Sie sie durch ein Leerzeichen getrennt an das Ende des Parameters anhängen.
bantime = 600
Der Parameterbantime
legt fest, wie lange ein Client gesperrt wird, wenn er sich nicht korrekt authentifiziert hat. Dies wird in Sekunden gemessen. Standardmäßig ist dies auf 600 Sekunden oder 10 Minuten festgelegt.
findtime = 600
maxretry = 3
Die nächsten beiden Parameter, auf die Sie achten möchten, sindfindtime
undmaxretry
. Diese arbeiten zusammen, um die Bedingungen festzulegen, unter denen ein Kunde gebannt werden sollte.
Die Variablemaxretry
legt die Anzahl der Versuche fest, die ein Client innerhalb eines durchfindtime
definierten Zeitfensters authentifizieren muss, bevor er gesperrt wird. Mit den Standardeinstellungen sperrt Fail2ban einen Client, der innerhalb eines Fensters von 10 Minuten dreimal erfolglos versucht, sich anzumelden.
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
Wenn Sie E-Mail-Benachrichtigungen konfigurieren möchten, müssen Sie möglicherweise die Einstellungen fürdestemail
,sendername
undmta
überschreiben. Der Parameterdestemail
legt die E-Mail-Adresse fest, die Sperrnachrichten empfangen soll. Mitsendername
wird der Wert des Felds "Von" in der E-Mail festgelegt. Der Parametermta
konfiguriert, welcher Mail-Dienst zum Senden von Mail verwendet wird.
action = $(action_)s
Dieser Parameter konfiguriert die Aktion, die Fail2ban ausführt, wenn ein Ban eingeleitet werden soll. Der Wertaction_
wird in der Datei kurz vor diesem Parameter definiert. Die Standardaktion besteht darin, die Firewall so zu konfigurieren, dass der Datenverkehr vom betreffenden Host abgelehnt wird, bis die Sperrzeit abgelaufen ist.
Wenn Sie E-Mail-Benachrichtigungen konfigurieren möchten, können Sie diesen Wert vonaction_
bisaction_mw
überschreiben. Wenn die E-Mail die relevanten Protokollzeilen enthalten soll, können Sie sie inaction_mwl
ändern. Sie möchten sicherstellen, dass die entsprechenden E-Mail-Einstellungen konfiguriert sind, wenn Sie E-Mail-Benachrichtigungen verwenden.
Einstellungen für einzelne Gefängnisse
Nach[DEFAULT]
werden Abschnitte angezeigt, in denen einzelne Gefängnisse für verschiedene Dienste konfiguriert werden. Dazu gehören normalerweise einport
, das gesperrt werden soll, und einlogpath
, das auf böswillige Zugriffsversuche überwacht werden soll. Das SSH-Gefängnis, das wir bereits injail.local
aktiviert haben, hat beispielsweise die folgenden Einstellungen:
/etc/fail2ban/jail.local
[sshd]
port = ssh
logpath = %(sshd_log)s
In diesem Fall istssh
eine vordefinierte Variable für den Standard-SSH-Port, und%(sshd_log)s
verwendet einen Wert, der an anderer Stelle in der Standardkonfiguration von Fail2ban definiert ist (dies hilft,jail.conf
zwischen verschiedenen Betriebssystemen portierbar zu halten ).
Eine andere Einstellung, auf die Sie möglicherweise stoßen, istfilter
, mit der entschieden wird, ob eine Zeile in einem Protokoll eine fehlgeschlagene Authentifizierung anzeigt.
Der Wert vonfilter
ist tatsächlich ein Verweis auf eine Datei im Verzeichnis/etc/fail2ban/filter.d
, deren Erweiterung.conf
entfernt wurde. Diese Datei enthält die regulären Ausdrücke, die bestimmen, ob eine Zeile im Protokoll fehlerhaft ist. Wir werden diese Datei in diesem Handbuch nicht ausführlich behandeln, da sie recht komplex ist und die vordefinierten Einstellungen gut mit den entsprechenden Zeilen übereinstimmen.
Sie können jedoch sehen, welche Art von Filtern verfügbar sind, indem Sie in dieses Verzeichnis schauen:
ls /etc/fail2ban/filter.d
Wenn Sie eine Datei sehen, die mit einem von Ihnen verwendeten Dienst in Beziehung zu stehen scheint, sollten Sie sie mit einem Texteditor öffnen. Die meisten Dateien sind ziemlich gut kommentiert, und Sie sollten in der Lage sein, die Art der Bedingung zu bestimmen, gegen die das Skript schützen soll. Die meisten dieser Filter haben entsprechende (deaktivierte) Abschnitte injail.conf
, die wir auf Wunsch injail.local
aktivieren können.
Stellen Sie sich beispielsweise vor, dass wir eine Website mit Nginx bereitstellen, und stellen Sie fest, dass ein passwortgeschützter Teil unserer Website mit Anmeldeversuchen überschwemmt wird. Wir können Fail2ban anweisen, die Dateinginx-http-auth.conf
zu verwenden, um diese Bedingung in der Datei/var/log/nginx/error.log
zu überprüfen.
Dies ist tatsächlich bereits in einem Abschnitt namens[nginx-http-auth]
in unserer/etc/fail2ban/jail.conf
-Datei eingerichtet. Wir müssten nur einenenabled
-Parameter für dasnginx-http-auth
-Gefängnis zujail.local
hinzufügen:
/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
Starten Sie den Dienst vonfail2ban
neu:
sudo systemctl restart fail2ban
Überwachen Sie die Fail2Ban-Protokolle und die Firewall-Konfiguration
Es ist wichtig zu wissen, dass ein Dienst wie Fail2ban wie vorgesehen funktioniert. Beginnen Sie mitsystemctl
, um den Status des Dienstes zu überprüfen:
sudo systemctl status fail2ban
Wenn hier etwas nicht stimmt, können Sie Fehler beheben, indem Sie die Protokolle für diefail2ban
-Einheit seit dem letzten Start überprüfen:
sudo journalctl -b -u fail2ban
Verwenden Sie als Nächstesfail2ban-client
, um den Gesamtstatus vonfail2ban-server
oder eines einzelnen Gefängnisses abzufragen:
sudo fail2ban-client status
sudo fail2ban-client status jail_name
Folgen Sie dem Protokoll von Fail2ban, um eine Aufzeichnung der letzten Aktionen zu erhalten (drücken SieCtrl-C, um das Programm zu beenden):
sudo tail -F /var/log/fail2ban.log
Listen Sie die aktuellen Regeln auf, die für iptables konfiguriert wurden:
sudo iptables -L
Zeigen Sie iptables-Regeln in einem Format an, das die Befehle widerspiegelt, die zum Aktivieren der einzelnen Regeln erforderlich sind:
sudo iptables -S
Fazit
Sie sollten nun in der Lage sein, einige grundlegende Sperrrichtlinien für Ihre Dienste zu konfigurieren. Fail2ban ist sehr einfach einzurichten und bietet eine hervorragende Möglichkeit, jeden Dienst zu schützen, der Authentifizierung verwendet.
Wenn Sie mehr über die Funktionsweise von Fail2ban erfahren möchten, lesen Sie unser Tutorial zuhow fail2ban rules and files work.