Unter Schirmherrschaft von
Factory Seven Media & Consulting
running-cool.de
   X   

[Krankheiten von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Medikamente von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Diagnostik & Laborwerte von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Therapieverfahren von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Gesundheitsthemen von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Symptome von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   
Suche

Fail2Ban: SSH-Login gegen Brute-Force-Angriffe absichern

Fail2Ban ist ein in Python unter der GNU General Public License Version 2 geschriebenes Analyse- und Absicherungsprogramm. Verschiedene Serverdienste können durch dieses Analyse- und Reaktionstool vor unbefugten Zugriff zusätzlich abgesichert werden.

Fail2ban läuft auf Linux-Servern als Dämon im Hintergrund und analysiert die Einträge in verschiedenen Logfiles (SSH, SFTP, FTP, Mail etc.) nach vordefinierten Mustern. Wird eine Brute-Force-Attacke erkannt, wird mit einer zeitlich befristeten IP-Sperrung dagegen vorgegangen. Ein Brute-Force-Angriff auf ein SSH-Login verliert dadurch massiv an Geschwindigkeit und läuft ins Leere. 

Fail2Ban ist in der Lage, die Rate der fehlerhaften (bösartigen) Authentifizierungsversuche zu reduzieren, kann aber das Risiko, das eine schwache Authentifizierung (z. B. schwaches Passwort) darstellt, nicht minimieren. 

Generell kann gesagt werden, dass die Sicherheit des SSH-Logins durch ständige Brute-Force-Angriffe einer harten Prüfung unterzogen wird. Machen wir es den bösen Jungs doch etwas schwerer und installieren jetzt erst mal Fail2Ban. 

Installation von Fail2Ban 

Die Installation von Fail2Ban ist wie nicht anders zu erwarten denkbar einfach. 

Listing 1 


apt install fail2ban


 

Die Konfigurationsdateien von Fail2Ban

Die globale Konfigurationsdatei "jail.conf" befindet sich im Verzeichnis /etc/fail2ban. Ein direktes Bearbeiten von jail.conf ist jedoch nicht zu empfehlen, da diese Datei bei jeder Aktualisierung überschrieben wird. Fail2Ban liest Konfigurationsdateien mit der Endung .conf und .local ein. Allerdings werden bei einer Aktualisierung nur die .conf-Dateien überschrieben. Deshalb ist es ratsam, alle Änderungen in den .local-Dateien vorzunehmen. Die angepassten Werte in den local-Dateien überschreiben automatisch die Standardwerte in den .conf-Dateien, da die Fail2Ban-Applikation immer zuerst schaut ob .local-Dateien vorhanden sind.

Nach dem Wechsel in das fail2ban-Verzeichnis, wird mittels des cp-Befehls die Datei "jail.local" aus der "jail.conf" für die individuelle Konfiguration erzeugt.

Listing 2 


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


 

Die individuelle Konfiguration von Fail2Ban: Das SSH-Login absichern

Die kopierte Konfigurationsdatei jail.local besitzt ausführliche Kommentierungen für die einzelnen Parameter.

In der Regel reichen die Voreinstellungen aus, aber jeder Administrator kann hier natürlich seinen eigenen Secure-Richtlinien folgen und die entsprechenden Anpassungen vornehmen.

An Anfang von jail.local unter "MISCELLANEOUS OPTIONS "können die globalen Einstellungen für die verschiedenen Server-Dienste eingetragen werden. Da es hier aber um das SSH-Login gehen soll, starten wir mit den angepassten Änderungen etwas tiefer bei dem Kommentar  "SSH  servers" und der Anweisung [sshd]. 

Standardmäßig ist der Schutz des SSH-Logins aktiviert, aber es schadet nichts es unter [sshd] auf aktiv zu setzen (enabled=true). 

Individuelle Einstellung für das SSH-Login können, wenn man von der globalen Einstellung abweichen will, unter [sshd]  für die Parameter findtime, maxrety und bantime vorgenommen werden. 

findtime: Über den Parameter "findtime" wird die Sperrzeit-Einstellung festgelegt, innerhalb welcher die definierte Anzahl (maxretry;-Parameter) an fehlgeschlagenen SSH-Logins stattfinden muss, damit eine IP-Sperre ausgelöst wird. 

maxretry: Anzahl der fehlgeschlagenen SSH-Logins innerhalb eines festgelegten Zeitraums (definiert im findtime-Parameter)

bantime: Zeitraum in dem die IP-Sperre gilt. Je nach Fail2Ban-Version kann man diese in Sekunden (ohne Einheit), Minuten (m) oder Stunden (h) angeben. In den Kommentaren der jail.local-Datei sind die jeweilig gültigen Formate definiert. 

Listing 3 Ausschnitt aus einer jail.local-Konfigurationsdatei nach dem Aufruf in vi


vi /etc/fail2ban/jail.local

# MISCELLANEOUS OPTIONS
#

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8

# External command that will take an tagged arguments to ignore, e.g. <ip>,
# and return true if the IP is to be ignored. False otherwise.
#
# ignorecommand = /path/to/command <ip>
ignorecommand =

# "bantime" is the number of seconds that a host is banned.
bantime = 3600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 3

:
:
:

#
# SSH servers
#

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s


[sshd-ddos]
# This jail corresponds to the standard configuration in Fail2ban.
# The mail-whois action send a notification e-mail with a whois request
# in the body.
port = ssh
logpath = %(sshd_log)s


 

Empfohlene Einstellungen

Schon ganz gut
Ich empfehle den bantime-Parameter auf 3600 (also 1 Stunde), den maxretry-Parameter auf 3 und findtime-Parameter auf 600 (also 10 Minuten) einzustellen. Rein mathematische kann bei einem sicheren Passwort jetzt ein Brute-Force-Attacke nicht mehr erfolgreich sein. 

Wenn man den Nerv ein Ende setzen will
Am besten den bantime-Parameter auf 36000 (also 10 Stunden), den maxretry-Parameter auf 3 und findtime-Parameter auf 600 (also 10 Minuten) einstellen. Über diesen Weg werden Brute-Force-Attacken definitiv ins Leere laufen. Typischerweise greift ein professioneller Hacker mittels Brute-Force-Attacken koordiniert über mehrere (hunderte) IP-Adressen ein SSH-Login an, allerdings krachen diese Angriffe bei einer solchen Fail2Ban-Konfiguration klar gegen die temporäre  Ban-Mauer. Dieser Ansatz einen Server zu hacken ist so nicht mehr möglich. 

Start, Restart, Status und aktive Jails von Fail2Ban

Listing 4: Fail2Ban starten


systemctl start fail2ban


 

Listing 5: Einlesen von Änderungen via restart-Befehl


systemctl restart fail2ban


 

Listing 6: Fail2Ban bei Systemstart automatisch starten


systemctl enable fail2ban


 

Listing 7: Mit dem Befehl fail2ban-client kann der Staus der aktivierten Jails angezeigt werden


fail2ban-client status


 

Listing 8: Überprüfen ob Fail2Ban auf dem Server läuft


systemctl status fail2ban

oder, wenn man es ausführlicher mag

fail2ban-client -h


 

Manuelles sperren und entsperren von IP-Adressen über Fail2Ban

Das sperren und entsperren  von einzelnen IP-Adressen kann natürlich auch über manuelle Eingabe erfolgen. In der Praxis macht allerdings eine manuelle Sperrung über Firewall-Regeln mehr Sinn, da Fail2Ban "schlechte" IP-Adressen immer nur temporär blockt. 

Listing 9


Sperren:
fail2ban-client set sshd banip <IP-Adresse>

Entsperren:
fail2ban-client set sshd unbanip <IP-Adresse>


 

Analyse der Hackangriffe auf das SSH-Login

Die meisten Einträge im Fail2ban-Logfile zeigen eine Reihe von Brute-Force-Attacken auf das SSH-Login pro Minute an. Die gesperrten IP-Adressen werden ebenfalls von der Fail2Ban-Applikation in das Logfile eingetragen.

Listing 10: Logfile-Analyse


more /var/log/fail2ban.log


 

Listing 11: Auflistung der aktuell gesperrte IP-Adressen


fail2ban-client status sshd

fail2ban-client status apache-auth

Allgemeiner Ausdruck

fail2ban-client status <AKTIVES-JAIL>


 

Haben Sie eigene Erfahrungen oder eine andere Meinung? Dann schreiben Sie doch einen Kommentar (bitte Regeln beachten).

Kommentar schreiben

Inhaltsverzeichnis Top