Installieren Sie Fail2ban und verknüpfen Sie es mit SSH und Nginx

Wenn wir einen Server mit Linux gemountet haben und diesen aus dem Internet per SSH-Fernsteuerung verwalten möchten, kann es vorkommen, dass wir Angriffe mit dem Ziel erhalten, in das System einzudringen und es für seine Zwecke steuern zu können. Diese Angriffe werden in der Regel von Computerprogrammen (Bots) ausgeführt, die lange Zeit versuchen, mit Brute Force auf das System zuzugreifen.

In früheren Beiträgen habe ich darüber gesprochen, wie der SSH-Dienst konfiguriert wird, aber einige fortgeschrittene Bots betreten den Dienst nicht, aber sie können den SSH-Dienst auf dem Server beenden, indem sie den Fernzugriff deaktivieren.

Vollständiges Handbuch von SSH (Secure Shell)

Wir können es vermeiden, indem wir die fail2ban-Tool, ist sehr praktisch und bietet eine große Sicherheitsmarge. Um ein wenig zu erklären, wie es funktioniert. Es ist in der Lage, iptables vor jedem fehlgeschlagenen Anmeldeversuch für mehr als 5 Mal hintereinander zu erstellen und jede Art von Verbindung abzulehnen, sobald sie gesperrt ist.

Fail2ban installieren


Die Installation kann direkt von apt aus erfolgen. Zuerst aktualisieren wir das System und installieren dann Fail2ban.
 apt-get update && apt-get -y upgrade
 apt-get install fail2ban
Dadurch wird das Programm nicht nur installiert, sondern auch ausgeführt und mit dem System gestartet.

Fail2ban konfigurieren


Der Fail2ban-Dienst hat seine Einstellungen im Verzeichnis /etc/fail2ban. Sie haben einige vorkonfigurierte Optionen in der jail.conf, das Beste in diesem Fall ist, die Datei zu kopieren und die Änderungen nicht direkt darin vorzunehmen, beim Aktualisieren von fail2ban werden diese Dateien überschrieben und Sie können alle zuvor vorgenommenen Änderungen verlieren.

In diesem Fall kopieren wir die Datei und nennen sie jail.local, damit sie sie finden kann.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Nach dem Kopieren können wir es öffnen und sehen, wie es funktioniert.
 vim /etc/fail2ban/jail.local
In der Datei haben wir mehrere Parameter, die wir anpassen können. Jeder Parameter, der sich unter dem [DEFAULT]-Tag befindet, wird auf alle von Fail2ban aktivierten Dienste wie SSH, NGINX, APACHE angewendet. Wir nennen dies global, dann haben wir für jeden Dienst spezifische Abschnitte.

Wir beginnen mit dem Hinzufügen von Parametern zum globalen Abschnitt.

 ignorieren = 127.0.0.1
Wir fügen unseren localhost auf diese Weise hinzu, der den gesamten lokalen Datenverkehr ignoriert. Wir können zusätzliche Adressen hinzufügen, die sie durch ein Leerzeichen trennen.
 Bantime = 600
Die Sperrzeit ist der Zeitraum, für den der Kunde nach der Sperrung gesperrt wird. Die Einheit ist in Sekunden 600 Sekunden wären 10 Minuten ist der Standardwert.
 findtime = 600 maxretry = 3
Dann haben wir findtime und maxretry. Sie sind dafür verantwortlich, die Bedingungen für die standardmäßige Sperrung eines Clients festzulegen. Es ist zu lesen, dass jeder Benutzer mit mehr als 3 fehlgeschlagenen Versuchen in weniger als 10 Minuten gesperrt wird.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Wenn wir Warnungen für gesperrte Benutzer erstellen möchten, sind diese 3 Parameter erforderlich. Wir definieren das Ziel, an wen die Warnungs-E-Mail gesendet werden soll, wer für den Versand verantwortlich ist und schließlich den MTA, um zu definieren, welchen E-Mail-Dienst wir verwenden werden .
 Aktion = $ (Aktion_) s
Hier legen wir fest, welche Maßnahmen zu ergreifen sind, wenn ein Verbot erforderlich ist. Der Wert action_ ist die Standardaktion, die darauf basiert, jeglichen Client-Datenverkehr abzulehnen, bis die Sperrzeit abgelaufen ist.

Wenn wir eine Warnung per E-Mail senden möchten, müssen wir den Wert auf action_mw ändern, aber wenn wir auch Zeilen des Protokolls an den Text der E-Mail anhängen möchten, verwenden wir action_mwl. Wir müssen sicherstellen, dass die E-Mail-Einstellungen korrekt sind, bevor Sie diesen Wert ändern.

Einstellungen nach Dienst


Sobald die globalen Konfigurationen abgeschlossen sind, fügen wir die Parameter hinzu, die ausschließlich auf die

SSH-Dienst, stellen wir sicher, dass die Optionen unter dem [SSH]-Tag hinzugefügt werden.

 aktiviert = wahr
Standardmäßig ist der SSH-Dienst aktiviert, aber wir können ihn bei Bedarf in dieser Option ändern.

All dieser Abschnitt könnte mit den Werten arbeiten, die ich später näher erläutern werde, aber Sie können ihn ändern, um ihn an Ihre Bedürfnisse anzupassen oder alle standardmäßig zu belassen.

Eine weitere der Konfigurationen sind die Filter, die anzeigen, ob die Anmeldung korrekt war oder nicht und für andere Dienste hinzugefügt werden können, zum Beispiel haben wir einen Server mit nginx und ein Teil der Seite ist passwortgeschützt, aber ein Client greift mit Brute Force an , können wir dies stoppen, indem wir Folgendes unter dem Tag [nginx-http-auth] hinzufügen.

 [nginx-http-auth] aktiviert = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Wenn ein Benutzer jetzt mehr als 3 fehlgeschlagene Anmeldeversuche hat, wird dies in den Protokollen angezeigt und fail2ban wird handeln und den gesamten Benutzerverkehr blockieren.

Test Umgebung


Nachdem wir die Grundlagen verstanden haben, werden wir eine kleine Testumgebung durchführen, in der wir SSH und Nginx durch Fail2ban schützen, indem wir eine Sperrrichtlinie erstellen, die uns über die gesperrte IP informiert.

Wir werden Nginx zuerst installieren, wenn es nicht installiert ist

 apt-get install nginx
Wir werden einen Mail-Dienst für Benachrichtigungen installieren, es kann sendmail sein
 apt-get install sendmail
Schließlich möchten wir, dass unsere iptables nach einem Bootvorgang persistent sind. Wir können entweder ein rc.0-Skript erstellen oder das iptables-persistent-Paket installieren.
 apt-get install iptables-persistent
Es wird installiert.

Aufbau unserer Firewall


Nach der Installation des oben genannten müssen wir eine Firewall implementieren, damit sie den Datenverkehr blockieren kann. Ich werde in späteren Beiträgen eine grundlegende Firewall erstellen. Ich werde mehr über iptables sprechen.

Wir werden hergestellte Verbindungen, Serververkehr wie Updates und Datenverkehr für die SSH- und Nginx-Ports zulassen. Der gesamte verbleibende Verkehr wird verweigert.

 sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -j DROP
Wir können die Änderungen sehen mit:
 iptables -S
Es sollte ein ähnliches Ergebnis liefern.
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban -ssh -j RETURN

Anpassen der Fail2ban-Einstellungen


Jetzt müssen wir die Datei jail.local nach Belieben konfigurieren.
 vi /etc/fail2ban/jail.local
Wir können die Sperrzeit eines Benutzers um mindestens 30 Minuten verlängern. Denken Sie daran, den Wert in Sekunden festzulegen.
 Bantime = 1800
Wir müssen eine E-Mail konfigurieren, die alle Fail2ban-Verbotswarnungen empfängt, suchen wir nach dem Wert der E-Mail in der Datei und legen die E-Mail ab.
 destemail = [email protected]
Wir können den Absender ändern, der die Warnung sendet, die ich normalerweise mit dem Namen fail2ban schreibe, damit wir besser zwischen allen Protokollen filtern können.

Nachdem wir den Aktionswert ändern müssen, haben wir 2 Optionen:

  • action_mw: sendet eine Warnung mit einem Bericht ähnlich dem Whois-Befehl des gesperrten Clients.
  • action_mwl: Senden Sie eine viel detailliertere Warnung, indem Sie ein Protokoll in den Nachrichtentext einfügen.

Dabei verwenden wir die zweite Option:

 Aktion =% (action_mwl) s 
Dann gehen wir zum Abschnitt [SSH] und können die maximale Anzahl von Versuchen vor dem Verbot bearbeiten, wir belassen es bei 5:
 maxretry = 5
Wenn wir den SSH-Dienst auf einem anderen Port als 22 haben, was dringend empfohlen wird, müssen wir seinen Port erwähnen.
 Port = 45024
Dann suchen wir nach dem Tag [nginx-http-auth] und lassen es so wie es ist.
 [nginx-http-auth] aktiviert = wahr
Wir sind fertig und können die Datei speichern und schließen.

Neustart des Fail2ban-Dienstes


Für alle anzuwendenden Änderungen empfehle ich, den Dienst zu stoppen.
 Dienst fail2ban stoppen 
Dann können wir sie wieder starten
 Dienst fail2ban starten
Das wird noch eine Weile dauern, nach ca. 5 Minuten können wir unsere Regeln wieder mit sehen
 iptables -S
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80.443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp - -dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN
Wir sehen, wie fail2ban neue Richtlinien hinzugefügt hat. Dies kann je nach Konfiguration variieren, die Sie in /etc/fail2ban/jail.local definiert haben.

SchlussfolgerungenWir haben fail2ban installiert und so konfiguriert, dass es mit SSH und NGINX funktioniert. Im Falle von APACHE müssen wir die Labels und das Verzeichnis der Protokolle ändern, aber es ist nginx sehr ähnlich. Wir haben nur die Grundlagen konfiguriert, Sie können Filter und viel erweiterte Regeln erstellen, ich empfehle, die Manpage ein wenig zu lesen, die Konfigurationsdateien sind gut kommentiert, ich empfehle, nach und nach alle Funktionen zu entdecken.

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben
wave wave wave wave wave