So sichern Sie Ihren Linux-Server mit fail2ban

Veröffentlicht: 2022-01-29
Ein stilisiertes Terminalfenster, das auf einem Linux-Laptop im Ubuntu-Stil ausgeführt wird.
Fatmawati Achmad Zaenuri/Shutterstock

Mit fail2ban sperrt Ihr Linux-Rechner automatisch IP-Adressen mit zu vielen Verbindungsausfällen. Es ist selbstregulierende Sicherheit! Wir zeigen Ihnen, wie Sie es verwenden.

Sicherheit Sicherheit Sicherheit

Die Herzogin von Windsor, Wallis Simpson, sagte einmal: „Man kann nie zu reich oder zu dünn sein.“ Wir haben dies für unsere moderne, vernetzte Welt aktualisiert: Man kann nie zu vorsichtig oder zu sicher sein.

Wenn Ihr Computer eingehende Verbindungsanfragen wie Secure Shell (SSH)-Verbindungen akzeptiert oder als Web- oder E-Mail-Server fungiert, müssen Sie ihn vor Brute-Force-Angriffen und Passwort-Erraten schützen.

Dazu müssen Sie Verbindungsanfragen überwachen, die bei einem Konto fehlschlagen. Gelingt es ihnen innerhalb kurzer Zeit wiederholt nicht, sich zu authentifizieren, sollten ihnen weitere Versuche untersagt werden.

Dies lässt sich praktisch nur durch die Automatisierung des gesamten Prozesses erreichen. Mit ein wenig einfacher Konfiguration verwaltet fail2ban das Überwachen, Sperren und Entsperren für Sie.

Anzeige

fail2ban sich in die Linux-Firewall iptables integrieren. Es erzwingt die Sperren der verdächtigen IP-Adressen, indem es der Firewall Regeln hinzufügt. Um diese Erklärung übersichtlich zu halten, verwenden wir iptables mit einem leeren Regelsatz.

Wenn Sie sich Sorgen um die Sicherheit machen, haben Sie wahrscheinlich eine Firewall, die mit einem gut gefüllten Regelsatz konfiguriert ist. fail2ban fügt nur seine eigenen Regeln hinzu und entfernt sie – Ihre regulären Firewall-Funktionen bleiben unberührt.

Wir können unseren leeren Regelsatz mit diesem Befehl sehen:

 sudo iptables-L 

RELATED: The Beginner's Guide to iptables, the Linux Firewall

Fail2ban installieren

Die Installation von fail2ban ist auf allen Distributionen, mit denen wir diesen Artikel recherchiert haben, einfach. Unter Ubuntu 20.04 lautet der Befehl wie folgt:

 sudo apt-get install fail2ban 

Geben Sie auf Fedora 32 Folgendes ein:

 sudo dnf install fail2ban 

Auf Manjaro 20.0.1 haben wir pacman verwendet:

 sudo pacman -Sy fail2ban 

fail2ban konfigurieren

Die fail2ban -Installation enthält eine Standardkonfigurationsdatei namens jail.conf. Diese Datei wird überschrieben, wenn fail2ban aktualisiert wird, sodass wir unsere Änderungen verlieren, wenn wir Anpassungen an dieser Datei vornehmen.

Stattdessen kopieren wir die jail.conf-Datei in eine namens jail.local. Indem Sie unsere Konfigurationsänderungen in jail.local einfügen, bleiben sie über Upgrades hinweg bestehen. Beide Dateien werden automatisch von fail2ban gelesen.

So kopieren Sie die Datei:

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 

Öffnen Sie nun die Datei in Ihrem bevorzugten Editor. Wir werden gedit verwenden:

 sudo gedit /etc/fail2ban/jail.local
Anzeige

Wir suchen nach zwei Abschnitten in der Datei: [DEFAULT] und [sshd]. Achten Sie jedoch darauf, die tatsächlichen Abschnitte zu finden. Diese Labels erscheinen auch weiter oben in einem Abschnitt, der sie beschreibt, aber das ist nicht das, was wir wollen.

/etc/fail2ban/jail.local in einem Gedit-Fenster geöffnet.

Sie finden den Abschnitt [DEFAULT] irgendwo in Zeile 40. Es ist ein langer Abschnitt mit vielen Kommentaren und Erklärungen.

/etc/fail2ban/jail.local wurde in einem Gedit-Fenster geöffnet und zu Zeile 89 gescrollt.

Scrollen Sie nach unten bis etwa zu Zeile 90, und Sie werden die folgenden vier Einstellungen finden, die Sie kennen müssen:

  • Ignoreip: Eine Whitelist mit IP-Adressen, die niemals gesperrt werden. Sie haben eine permanente Get Out of Jail Free-Karte. Die localhost-IP-Adresse ( 127.0.0.1 ) befindet sich standardmäßig zusammen mit ihrem IPv6-Äquivalent ( ::1 ) in der Liste. Wenn es andere IP-Adressen gibt, von denen Sie wissen, dass sie niemals gesperrt werden sollten, fügen Sie sie dieser Liste hinzu und lassen Sie zwischen jeder ein Leerzeichen.
  • bantime: Die Dauer, für die eine IP-Adresse gesperrt ist (das „m“ steht für Minuten). Wenn Sie einen Wert ohne „m“ oder „h“ (für Stunden) eingeben, wird er als Sekunden behandelt. Ein Wert von -1 wird eine IP-Adresse dauerhaft sperren. Achten Sie darauf, sich nicht dauerhaft auszusperren.
  • findtime: Die Zeitspanne, innerhalb der zu viele fehlgeschlagene Verbindungsversuche dazu führen, dass eine IP-Adresse gesperrt wird.
  • maxretry: Der Wert für „zu viele Fehlversuche“.

Wenn eine Verbindung von derselben IP-Adresse innerhalb der findtime Periode maxretry fehlgeschlagene Verbindungsversuche unternimmt, werden sie für die Dauer der bantime . Die einzigen Ausnahmen sind die IP-Adressen in der ignoreip Liste.

fail2ban steckt die IP-Adressen für einen festgelegten Zeitraum ins Gefängnis. fail2ban unterstützt viele verschiedene Jails, und jedes repräsentiert die Einstellungen, die für einen einzelnen Verbindungstyp gelten. Dadurch können Sie unterschiedliche Einstellungen für verschiedene Verbindungstypen vornehmen. Oder Sie können fail2ban nur einen ausgewählten Satz von Verbindungstypen überwachen lassen.

Sie haben es vielleicht aus dem Namen des Abschnitts [DEFAULT] erraten, aber die Einstellungen, die wir uns angesehen haben, sind die Standardeinstellungen. Schauen wir uns nun die Einstellungen für das SSH-Gefängnis an.

VERWANDT: So bearbeiten Sie Textdateien grafisch unter Linux mit gedit

Jail konfigurieren

Mit Jails können Sie Verbindungstypen in die und aus der Überwachung von fail2ban's verschieben. Wenn die Standardeinstellungen nicht mit denen übereinstimmen, die Sie auf das Jail anwenden möchten, können Sie bestimmte Werte für bantime , findtime und maxretry .

Anzeige

Scrollen Sie nach unten bis etwa zu Zeile 280, und Sie sehen den Abschnitt [sshd].

/etc/fail2ban/jail.local wurde in einem Gedit-Fenster geöffnet und zu Zeile 280 gescrollt.

Hier können Sie Werte für das Jail der SSH-Verbindung festlegen. Um dieses Gefängnis in die Überwachung und Sperrung aufzunehmen, müssen wir die folgende Zeile eingeben:

 aktiviert = wahr

Wir geben auch diese Zeile ein:

 maxretry = 3

Die Standardeinstellung war fünf, aber wir wollen bei SSH-Verbindungen vorsichtiger sein. Wir haben es auf drei reduziert und dann die Datei gespeichert und geschlossen.

Wir haben dieses fail2ban's hinzugefügt und eine der Standardeinstellungen überschrieben. Ein Jail kann eine Kombination aus Standard- und Jail-spezifischen Einstellungen verwenden.

Fail2ban aktivieren

Bisher haben wir fail2ban installiert und konfiguriert. Jetzt müssen wir es aktivieren, damit es als Autostart-Dienst ausgeführt werden kann. Dann müssen wir es testen, um sicherzustellen, dass es wie erwartet funktioniert.

Anzeige

Um fail2ban als Dienst zu aktivieren, verwenden wir den Befehl systemctl :

 sudo systemctl enable fail2ban

Wir verwenden es auch, um den Dienst zu starten:

 sudo systemctl start fail2ban 

Wir können den Status des Dienstes auch mit systemctl überprüfen:

 sudo systemctl status fail2ban.service 

Alles sieht gut aus – wir haben grünes Licht, also ist alles in Ordnung.

Mal sehen, ob fail2ban zustimmt:

 sudo fail2ban-clientstatus 

Dies spiegelt wider, was wir eingerichtet haben. Wir haben ein einzelnes Jail namens [sshd] aktiviert. Wenn wir den Namen des Gefängnisses in unseren vorherigen Befehl aufnehmen, können wir uns das genauer ansehen:

 sudo fail2ban-client status sshd 

Dies listet die Anzahl der Fehler und gesperrten IP-Adressen auf. Natürlich sind alle Statistiken im Moment null.

Testen unseres Gefängnisses

Auf einem anderen Computer stellen wir eine SSH-Verbindungsanfrage an unseren Testcomputer und geben das Passwort absichtlich falsch ein. Sie erhalten bei jedem Verbindungsversuch drei Versuche, um das richtige Passwort zu erhalten.

Anzeige

Der maxretry Wert wird nach drei fehlgeschlagenen Verbindungsversuchen ausgelöst, nicht nach drei fehlgeschlagenen Kennwortversuchen. Wir müssen also dreimal ein falsches Passwort eingeben, damit der erste Verbindungsversuch fehlschlägt.

Wir werden dann einen weiteren Verbindungsversuch unternehmen und das Passwort weitere drei Mal falsch eingeben. Der erste falsche Passwortversuch der dritten Verbindungsanfrage sollte fail2ban.

Nach dem ersten falschen Passwort bei der dritten Verbindungsanfrage erhalten wir keine Antwort von der Remote-Maschine. Wir bekommen keine Erklärung; Wir bekommen nur die kalte Schulter.

Sie müssen Strg+C drücken, um zur Eingabeaufforderung zurückzukehren. Wenn wir es noch einmal versuchen, erhalten wir eine andere Antwort:

 ssh [email protected] 

Zuvor lautete die Fehlermeldung „Berechtigung verweigert“. Diesmal wird die Verbindung schlichtweg abgelehnt. Wir sind persona non grata. Wir wurden gesperrt.

Schauen wir uns noch einmal die Details des [sshd]-Gefängnisses an:

 sudo fail2ban-client status sshd 

Anzeige

Es gab drei Fehler und eine IP-Adresse (192.168.4.25) wurde gesperrt.

Wie bereits erwähnt, erzwingt fail2ban Sperren, indem es Regeln zum Firewall-Regelsatz hinzufügt. Schauen wir uns noch einmal den Regelsatz an (vorher war er leer):

 sudo iptables-L 

Der INPUT-Richtlinie wurde eine Regel hinzugefügt, die SSH-Datenverkehr an die f2b-sshd Kette sendet. Die Regel in der f2b-sshd Kette lehnt SSH-Verbindungen von 192.168.4.25 ab. Wir haben die Standardeinstellung für bantime nicht geändert, sodass diese IP-Adresse in 10 Minuten entbannt wird und neue Verbindungsanfragen stellen kann.

Wenn Sie eine längere Sperrdauer (z. B. mehrere Stunden) festlegen, einer IP-Adresse jedoch erlauben möchten, früher eine weitere Verbindungsanfrage zu stellen, können Sie sie vorzeitig kündigen.

Dazu geben wir Folgendes ein:

 sudo fail2ban-client set sshd unbanip 192.168.5.25 

Wenn wir auf unserem Remote-Computer eine weitere SSH-Verbindungsanfrage stellen und das richtige Passwort eingeben, dürfen wir eine Verbindung herstellen:

 ssh [email protected] 

Einfach und effektiv

Einfacher ist normalerweise besser, und fail2ban ist eine elegante Lösung für ein kniffliges Problem. Es erfordert nur sehr wenig Konfiguration und verursacht kaum betrieblichen Mehraufwand – weder für Sie noch für Ihren Computer.

RELATED: Beste Linux-Laptops für Entwickler und Enthusiasten