Installation und Konfiguration von Fail2ban zum Schutz vor SSH-Brute-Force-Angriffen

Linux 5 Min. Lesezeit

Auf dem SSH-Port eines mit dem Internet verbundenen Servers können pro Minute automatisierte Anmeldeversuche eingehen, bei denen häufig verwendete Benutzernamen und Passwörter ausprobiert werden. Fail2ban überwacht die Protokolldateien und sperrt eine IP-Adresse vorübergehend über die Firewall, wenn innerhalb kurzer Zeit zu viele fehlgeschlagene Anmeldeversuche von dieser Adresse eingehen.

Fail2ban ist kein Ersatz für ein starkes Passwort und die authentifizierung mittels Schlüssel (siehe: Sicherheitseinstellungen für den SSH-Server), reduziert jedoch die Anzahl der Anmeldeversuche und den Log-Aufwand erheblich.

Dieser Artikel richtet sich an Betreiber eigener VPS- oder dedizierter Server. Bitte installieren Sie ihn nicht auf einem cPanel-Server: Dort übernehmen cPHulk und CSF/LFD dieselbe Aufgabe, und die beiden Systeme würden miteinander in Konflikt geraten.

Installation

AlmaLinux, Rocky Linux (aus dem EPEL-Repository):

sudo dnf install epel-release
sudo dnf install fail2ban fail2ban-firewalld

Das Paket „fail2ban-firewalld“ konfiguriert Fail2ban so, dass es Sperren über firewalld vornimmt (banaction = firewallcmd-rich-rules), und installiert firewalld als Abhängigkeit. Es wird jedoch nicht gestartet. Bei einem Test auf dem AlmaLinux 10-Cloud-Image lief firewalld nicht: Fail2ban protokollierte die Sperrung in diesem Fall dennoch („Ban 10.0.2.15“), doch die gesperrte Adresse konnte weiterhin auf SSH zugreifen. Aktivieren Sie daher nach der Installation die Firewall und lassen Sie zuvor die verwendeten Ports zu (der ssh-Dienst, d. h. Port 22, ist standardmäßig freigegeben):

sudo firewall-offline-cmd --add-port=2255/tcp                      # ha az SSH más porton fut
sudo firewall-offline-cmd --add-service=http --add-service=https   # ha webszerver is fut
sudo systemctl enable --now firewalld
sudo firewall-cmd --list-all

Solange firewalld nicht läuft, kann firewall-cmd nicht verwendet werden (im Test: „FirewallD is not running“); daher müssen die Regeln vor dem Start mit dem Befehl firewall-offline-cmd hinzugefügt werden; nach dem Start funktionieren bereits die gewohnten Befehle firewall-cmd --permanent … und firewall-cmd --reload. Ausführliche Informationen zur Konfiguration der Firewall finden Sie im Artikel „Wie richte ich eine Firewall auf meinem VPS ein?“.

Ubuntu, Debian:

sudo apt update
sudo apt install fail2ban

Einrichtung

Die werkseitigen Einstellungen von Fail2ban befinden sich in der Datei „/etc/fail2ban/jail.conf“, diese sollten Sie jedoch nicht ändern, da sie bei einem Update überschrieben werden könnten. Tragen Sie Ihre eigenen Einstellungen in eine neue Datei ein:

sudo nano /etc/fail2ban/jail.local

Ein guter Ausgangspunkt:

[DEFAULT]
# Ennyi ideig marad kitiltva az IP-cím
bantime = 1h
# Ennyi időn belül...
findtime = 10m
# ...ennyi sikertelen próbálkozás után
maxretry = 5
# Ezeket a címeket soha nem tiltja ki (szóközzel elválasztva)
ignoreip = 127.0.0.1/8 ::1 203.0.113.10

[sshd]
enabled = true

Tragen Sie Ihre eigene, feste IP-Adresse (im Beispiel 203.0.113.10) in die Zeile „ignoreip“ ein, damit Sie sich nicht aufgrund eines falsch eingegebenen Passworts aussperren. Fail2ban sperrt die eigenen Adressen des Servers grundsätzlich nie aus (ignoreself = true), daher werden vom Server selbst initiierte Zugangsversuche nicht gezählt; im Test stand in diesem Fall im Protokoll „Ignore 10.0.2.15 by ignoreself rule“.

Falls SSH nicht auf dem Standardport 22 läuft, geben Sie den Port bitte ebenfalls im Abschnitt [sshd] an (mehrere Ports können durch Kommas getrennt werden):

[sshd]
enabled = true
port = 22,2255

Im Test galt diese Sperre für beide Ports: In firewalld wurden zwei rich rules angezeigt (source address="…" port port="22" und port="2255", reject).

Debian 12 und neuer: Da auf diesen Systemen standardmäßig keine Datei „/var/log/auth.log“ vorhanden ist, wird Fail2ban mit den Werkseinstellungen gar nicht erst gestartet. Im Test blieb der Dienst nach der Installation im Status „failed“, im Protokoll erschien folgende Meldung: ERROR Failed during configuration: Have not found any log file for sshd jail. Die Lösung besteht darin, dass Fail2ban die systemd-Protokolle ausliest (das erforderliche Paket „python3-systemd“ wird zusammen mit Fail2ban installiert). Ergänzen Sie den Abschnitt [sshd] wie folgt:

[sshd]
enabled = true
backend = systemd

Im Test lief das Programm somit auch unter Debian 12 und erkannte die fehlerhaften Anmeldeversuche. Unter AlmaLinux 10 ist kein solcher Schritt erforderlich: Dort liest Fail2ban standardmäßig das systemd-Protokoll (in der Ausgabe von „status sshd“: „Journal matches: _SYSTEMD_UNIT=sshd.service …“).

Wiederkehrende Adressen

Durch Aktivierung der Option [recidive] werden IP-Adressen, die innerhalb eines Tages mehrmals gesperrt werden mussten, für einen längeren Zeitraum (standardmäßig eine Woche) gesperrt:

[recidive]
enabled = true

Start

sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban

Laden Sie den Dienst nach dem Ändern der Einstellungen erneut:

sudo fail2ban-client reload

Überprüfung und Verwaltung

# A működő szabálycsoportok (jail-ek)
sudo fail2ban-client status

# Az SSH jail részletei: hibás próbálkozások és kitiltott címek
sudo fail2ban-client status sshd

# Egy IP-cím kitiltásának feloldása
sudo fail2ban-client set sshd unbanip 198.51.100.25

# Egy IP-cím kézi kitiltása
sudo fail2ban-client set sshd banip 198.51.100.25

Nach einer Sperrung lautet die Ausgabe des Befehls „status sshd“ im Test wie folgt:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     6
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd + _COMM=sshd-session
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   10.0.2.15

Das eigene Protokoll von Fail2ban befindet sich in der Datei „/var/log/fail2ban.log“; dort können Sie sehen, wann und welche IP-Adresse gesperrt wurde (NOTICE [sshd] Ban …, und nach Ablauf der bantime „Unban …“). Unter AlmaLinux werden die tatsächlichen Firewall-Regeln mit dem Befehl „sudo firewall-cmd --list-rich-rules“ angezeigt; wenn hier kein Eintrag für die gesperrte IP-Adresse vorhanden ist, funktioniert die Sperre nicht.

Haben Sie sich ausgesperrt?

Falls Ihre eigene IP-Adresse auf die Sperrliste gesetzt wurde und Sie sich nicht über SSH anmelden können:

  • Warten Sie, bis die „bantime“ abgelaufen ist, oder
  • Melden Sie sich bitte von einer anderen IP-Adresse aus an (z. B. über mobiles Internet) und heben Sie die Sperre mit dem oben genannten Befehl „unbanip“ auf, oder
  • Melden Sie sich auf dem Server auf eine von SSH unabhängige Weise an, beispielsweise über eine VNC-Konsole.

Schutz anderer Dienste

Fail2ban enthält auch vorgefertigte Filter für zahlreiche andere Dienste, beispielsweise die Jails [nginx-http-auth], [apache-auth], [postfix] oder [dovecot]. Diese können Sie in der Datei „jail.local“ ähnlich wie im Abschnitt [sshd] mit der Zeile „enabled = true“ aktivieren. Die verfügbaren Filter befinden sich im Verzeichnis /etc/fail2ban/filter.d/.

Zurück: Linux-Artikel (62)