Absicherung von Netzwerkdiensten mit Fail2ban (CentOS, Debian, Ubuntu)

Installieren von Fail2ban

Um das Programm Fail2ban zu installieren, führen Sie die folgenden Befehle aus:

  • Zur Installation unter Ubuntu, Debian:
    sudo apt-get update
    sudo apt-get install fail2ban
  • Für die Installation unter CentOS:
    yum update
    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum install fail2ban

Definitionen

Es ist wichtig, einige der im Folgenden verwendeten Begriffe zu klären, bevor Sie beginnen:

  • Filter - "Filter" definiert einen regulären Ausdruck, der mit einem Muster übereinstimmt, das einem Anmeldefehler oder einem anderen Ausdruck entspricht
  • Aktion - "Aktion" bezeichnet mehrere Befehle, die zu verschiedenen Zeitpunkten ausgeführt werden
  • jail - "jail" (wörtlich übersetzt "Gefängnis") ist eine Kombination aus einem Filter und einer oder mehreren Aktionen. Fail2ban kann mit mehreren Filtern gleichzeitig umgehen
  • client - bezieht sich auf das Skript fail2ban-client
  • server - bezieht sich auf das fail2ban-server Skript

Server

Fail2ban besteht aus zwei Teilen: einem Client und einem Server. Der Server ist multi-threaded und empfängt über einen Unix-Socket Befehle. Der Server selbst weiß nichts über Konfigurationsdateien. Daher befindet sich der Server beim Start in einem "Standard"-Zustand, in dem keine jails definiert sind. Folgende Optionen sind für den fail2ban-Server verfügbar:

**-b** Start im Hintergrund
**-f** Start im Vordergrund
**-s ** Socket-Pfad
**-x** Erzwingt die Ausführung des Servers
**-h, —help** Diese Hilfemeldung anzeigen
**-V, —version** Version ausgeben

Fail2ban-server sollte außer zu Debugging-Zwecken nicht direkt verwendet werden. Die Option -s ist wahrscheinlich die wichtigste und wird verwendet, um den Socket-Pfad festzulegen. So ist es möglich, mehrere Instanzen von Fail2ban auf verschiedenen Sockets laufen zu lassen. Dies ist jedoch nicht notwendig, da Fail2ban mehrere jails gleichzeitig laufen lassen kann.

Fail2ban-client ist ein Interface zu Fail2ban. Er verbindet sich mit der Socket-Datei des Servers und sendet Befehle zur Konfiguration und Steuerung des Servers. Der Client kann Konfigurationsdateien lesen oder einfach nur einen einzelnen Befehl über die Kommandozeile oder den interaktiven Modus (der mit der Option -i aktiviert wird) an den Server senden. fail2ban-client kann auch den Server starten. Folgende Optionen sind für den fail2ban-Client verfügbar:

**-c** Konfigurationsverzeichnis
**-s** Socket-Pfad
**-d** Dump-Konfiguration. Für die Fehlersuche
**-i** Interaktiver Modus
**-v** Anzahl der Details erhöhen
**—q** Anzahl der Details vermindern
**-x** Erzwingt die Ausführung des Servers
**-h, —help** Diese Hilfemeldung anzeigen
**-V**, —version Version ausgeben

Alle Einstellungen in den Konfigurationsdateien können manuell konfiguriert werden. Die Konfiguration ist ein einfacher und effektiver Weg, einen Server einzurichten. fail2ban-client übersetzt die Konfiguration in einen Satz von Befehlen. Der fail2ban-client hat jedoch noch zwei weitere Befehle für den internen Gebrauch. Der erste ist der Start. Wenn Sie den Befehl $ fail2ban-client start eingeben, wird der Client zunächst versuchen, eine Serverinstanz einzurichten. Der Client wartet dann auf den Start des Servers, indem er ihm Ping-Anfragen sendet. Sobald der Server auf diese Anfragen antwortet, analysiert der fail2ban-Client die Konfiguration und sendet die entsprechenden Befehle an den Server.

Der zweite Befehl ist der Neustart. Er wird durch Eingabe des folgenden Befehls ausgeführt: $ fail2ban-client reload"

Allgemeine Einstellungen

Die Datei fail2ban.conf enthält allgemeine Einstellungen für den fail2ban-Server-Daemon, wie z. B. Logging-Level und Ziel. Hier können Sie auch den Socket-Pfad angeben, der für die Kommunikation zwischen Client und Server verwendet wird.

Jails

Die wichtigste Datei ist jail.conf, die die Deklaration Ihrer Jails enthält. Standardmäßig sind einige Abschnitte als Vorlagen eingefügt. Sie sollten die Sektionen, an denen Sie interessiert sind, einfügen und an Ihre lokale Konfiguration anpassen. Im Folgenden finden Sie ein Beispiel für eine Sektion von ssh-iptables:
[ssh-iptables]
#enabled = false
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# mail-whois[name=SSH, dest=yourmail@mail.com]
#logpath = /var/log/sshd.log
logpath = /var/log/auth.log
maxretry = 5

Mit diesen Einstellungen wird folgendes passieren:

* Der Abschnitt ssh-iptables ist aktiviert;
* der Filter **sshd.conf** aus dem Unterverzeichnis **filter.d** wird verwendet
* die in iptables.conf (Unterverzeichnis action.d) beschriebene(n) Aktion(en) werden ausgeführt, wenn das Filterergebnis wahr ist. In diesem Beispiel ist die optionale Aktion mail-whois.conf auskommentiert.
* **auth.log** - diese Protokolldatei wird vom Filter durchsucht.

Der Filter und die Aktionen werden kombiniert, um jails zu erstellen. Es ist nur ein Filter pro jail erlaubt, aber mehrere Aktionen können in separaten Zeilen angegeben werden. So können Sie beispielsweise auf einen SSH-Hackversuch reagieren, indem Sie zunächst eine neue Firewall-Regel hinzufügen, dann mithilfe von whois einige Informationen über den angreifenden Host extrahieren und schließlich eine E-Mail-Benachrichtigung versenden. Oder vielleicht möchten Sie nur über Ihr Jabber-Konto benachrichtigt werden, wenn jemand auf die Seite /donotaccess.html auf Ihrem Webserver zugreift.

Fail2ban ist nicht auf den SSH-Filter beschränkt. Es enthält Filter und Standardaktionen für viele Daemons und Dienste. Sie können diese leicht ändern oder neue erstellen. Wenn Sie sich die Datei filter.d ansehen, werden Sie einige Standardfilter bemerken, die nicht in der standardmäßig in jail.conf enthalten sind. In diesem Beispiel nehmen wir "sshd-ddos.conf". Um den Filter in fail2ban zu integrieren, bearbeiten Sie Ihre jail.conf:
[ssh-ddos]
enabled = true
port = ssh,sftp
filter = sshd-ddos
logpath = /var/log/messages
maxretry = 2
Vergessen Sie nicht, $logpath wie oben beschrieben an Ihre Logdatei anzupassen.

Jail-Optionen

Jedes jail kann durch Konfigurieren der folgenden Optionen angepasst werden:

  <tr>
<td>maxretry</td>
<td>3</td>
<td>Anzahl der Übereinstimmungen (d.h. Zählerwert), die die Sperraktion für eine IP-Adresse auslöst

    <tr>
<td>bantime</td>
<td>600 sec </td>
<td>Dauer (in Sekunden) für die Sperrung einer IP-Adresse. Eine negative Zahl steht für eine "permanente" Sperre.

Name Standardeinstellung Beschreibung
filter Der Name des Filters, den ein jail verwendet, um Übereinstimmungen zu finden. Jede neue Filterübereinstimmung erhöht den Zähler im jail
logpath /var/log/messages Pfad zur Logdatei, die für den Filter bereitgestellt wird
findtime 600 sec Zähler wird auf Null gesetzt, wenn in den Suchsekunden keine Übereinstimmung gefunden wird

Filter

Das Verzeichnis filter.d enthält hauptsächlich reguläre Ausdrücke (Regular Expressions, kurz "Regex"), die zur Erkennung von Hackversuchen, Passwortfehlern usw. verwendet werden. Nachfolgend ein Beispiel für die Datei filter.d / sshd.conf mit drei möglichen regulären Ausdrücken, die den Zeilen der Logdatei entsprechen:
failregex = Authentication failure for . from
Failed [-/\w]+ for .
from
ROOT LOGIN REFUSED . FROM
iI user .
from
Eine Failregex kann aus mehreren Zeilen bestehen, von denen jede mit einer Zeile in der Logdatei übereinstimmen kann.

In jeder Failregex-Zeile muss der Teil, der dem Hostnamen oder der IP-Adresse entspricht, in ein Sandwich (?P ...) eingeschlossen werden. Dies ist eine spezielle, mit Python verbundene Erweiterung für reguläre Ausdrücke, die den Inhalt der Übereinstimmung dem -Namen zuordnet. Mit dem -Tag teilen Sie fail2ban mit, mit welchem Host eine Verbindung besteht, daher muss er in jeder failregex-Zeile vorhanden sein. Ist dies nicht der Fall, gibt fail2ban die Fehlermeldung "No 'host' group" aus.

Der Einfachheit halber können Sie das vordefinierte -Objekt in Ihren regulären Ausdrücken verwenden. ist ein Alias für (?:::f{4,6}:)? (?P\S+), das entweder auf einen Hostnamen oder eine IPv4-Adresse (eventuell eingebettet in eine IPv6-Adresse) passt.

In Aktionsskripten wird der -Tag durch die IP-Adresse des Hosts ersetzt, der im -Tag übereinstimmt.

Damit eine Log-Zeile mit Ihrer Failregex zusammenpasst, muss sie in zwei Teilen übereinstimmen: Der Anfang der Zeile muss mit dem Zeitmuster oder dem regulären Ausdruck übereinstimmen, und der Rest der Zeile muss mit Ihrer Failregex übereinstimmen. Wenn die Failregex mit einem führenden ^ verankert ist, dann bezieht sich der Anker auf den Anfang der restlichen Zeile nach dem Zeitstempel und dem dazwischen liegenden Leerraum.

Das Muster oder der reguläre Ausdruck, der mit dem Zeitstempel übereinstimmt, ist derzeit nicht dokumentiert und kann von den Benutzern nicht gelesen oder gesetzt werden (siehe Debian-Fehler #491253). Dies ist ein Problem, wenn Ihr Protokoll ein Label-Format hat, das fail2ban nicht erwartet, da es mit keiner Zeichenfolge übereinstimmen wird. Aus diesem Grund sollten Sie jede neue Failregex in der Beispiel-Log-Zeile wie in den folgenden Beispielen testen. So stellen Sie sicher, dass sie auch wirklich passt. Wenn fail2ban Ihren Zeitstempel nicht erkennt, haben Sie zwei Möglichkeiten: Entweder Sie konfigurieren Ihren Daemon so, dass er mit einem Zeitstempel in einem gebräuchlicheren Format protokolliert, wie z. B. in der obigen Logzeile, oder Sie reichen einen Fehlerbericht ein und fragen nach Ihrem Zeitstempelformat.

Als Beispiel für die oben genannten Punkte führen Sie die folgenden Befehle in der Konsole aus und vergleichen die Ergebnisse:
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' 'authentication failed'
fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'
fail2ban-regex '18-07-2008 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'
fail2ban-regex '18-7-2008 12:13:01 [1.2.3.4] authentication failed' '[] authentication failed'

Der erste Befehl ist fehlgeschlagen mit der Fehlermeldung "No" Host Group. Der zweite Befehl ist erfolgreich und findet die Host-Adresse 1.2.3.4. Der dritte Befehl ist erfolgreich und findet die Hostadresse 1.2.3.4. Der vierte Befehl ist fehlerhaft. Man sieht: "... no valid date/time found for..." - .

Aktionen

Das Verzeichnis action.d enthält verschiedene Skripte, die Aktionen definieren. Aktionen werden zu genau definierten Zeitpunkten während der Ausführung von Fail2ban ausgeführt: beim Starten/Stoppen eines jails, wenn ein Host gesperrt/deaktiviert wird, usw.

Testen/Verifizierung

Mit den folgenden Befehlen können Sie Ihre Einstellungen überprüfen: # fail2ban-client -d Prüfen Sie die aktuelle Konfiguration. # fail2ban-regex "line" "failregex" Die wichtigsten Punkte zur Installation und Konfiguration des Programms werden berücksichtigt. Wenn eine IP-Adresse versehentlich von Fail2ban blockiert wird, können Sie sie mit dem folgenden Befehl aus der "schwarzen Liste" entfernen:sudo fail2ban-client se t JAIL unbanip IP Dabei ist JAIL der Name des Abschnitts der jail.local-Konfigurationsdatei, nach dessen Regeln die Sperrung aktiviert wurde; IP ist die Adresse, die entsperrt werden soll. Beispiel für den Befehl unblock: sudo fail2ban-client se t ssh-iptables unbanip 78.47.10.113 Testet eine einzelne Failregex (wie die in sshd.conf definierte) mit einer Zeile der Logdatei. Vergessen Sie nicht die doppelten Anführungszeichen um Ihre Zeile und die Failregex-Definition. Fail2ban-regex akzeptiert auch Dateien zur Überprüfung. Auf diese Weise ist es einfacher, Ihre eigenen regulären Ausdrücke zu testen und zu debuggen. # fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf Sie können eine Kombination verwenden: # fail2ban-regex /var/log/auth.log "Failed [-/\w]+ for .* from "

Beschränkungen

Reaktionszeit
Bedenken Sie zunächst, dass Fail2ban ein Log-Analyser ist. Es kann nichts tun, bis etwas in die Logdateien geschrieben wird. Viele Syslog-Daemons puffern ihren Output. Dies kann die Leistung von Fail2ban beeinträchtigen. Daher wäre es eine gute Idee, die Pufferung Ihres Syslog-Daemons zu deaktivieren.

Die Reaktionszeit abzuschätzen ist recht schwierig. Fail2ban wartet 1 Sekunde, bevor es neue Logs zur Überprüfung startet. In den meisten Fällen sollte dies ausreichen. Es ist jedoch möglich, mehr Anmeldefehler zu erhalten, als die angegebene Maximalzahl an Wiederholungen.

War dieser Artikel hilfreich?

Stichworten:

#server

Hat dir der Artikel gefallen?

Cookie-Zustimmung

Indem Sie auf «Ich stimme zu» klicken, stimmen Sie der Verwendung von Cookies auf unserer Website zu. Die Verwendung dieser Cookies dient der Optimierung Ihrer Nutzererfahrung, indem u. a. Präferenzen für kommende Besuche auf unserer Website gespeichert werden. Sie können unter «Cookies verwalten» detaillierte Einstellungen vornehmen und Ihre Cookie-Auswahl anpassen. Mehr dazu

Cookie-Einstellungen

funktional

Funktionale bzw. notwendige Cookies sind für die Grundfunktionen der Website von entscheidender Bedeutung und die Website funktioniert ohne sie nicht wie vorgesehen.

analyse

Analytische Cookies werden verwendet, um zu verstehen, wie Besucher mit der Website interagieren.

werbung

Werbe-Cookies werden verwendet, um Besuchern relevante Anzeigen und Angebote bereitzustellen.