So schützen Sie SSH mit Fail2Ban unter CentOS 7

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 Paketfail2baninstallieren können:

sudo yum install fail2ban

Drücken Sie erneuty undEnter, wenn Sie aufgefordert werden, fortzufahren.

Verwenden Sie nach Abschluss der Installationsystemctl, um den Dienstfail2banzu 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:

  1. /etc/fail2ban/jail.conf

  2. /etc/fail2ban/jail.d/*.conf, alphabetisch

  3. /etc/fail2ban/jail.local

  4. /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 Dienstfail2banmitsystemctl 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 Parameterignoreipeinen 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 vonfilterist tatsächlich ein Verweis auf eine Datei im Verzeichnis/etc/fail2ban/filter.d, deren Erweiterung.confentfernt 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 vonfail2banneu:

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.