Good to Know Database

Sicherheitgilt für Debian 12/13, Ubuntu 24.04, Pi OS

Wie schütze ich SSH mit fail2ban vor Brute-Force-Angriffen?

Ein Server oder Raspberry Pi ist per SSH aus dem Internet erreichbar. In den Logs stehen tausende fehlgeschlagene Anmeldeversuche mit Benutzernamen wie root, admin oder pi. Wie sperre ich Adressen, die es immer wieder probieren, automatisch aus?

Von 3 Min. Lesezeit

Lösung

Kurz: Mit fail2ban. Es liest die Anmeldeversuche mit und sperrt eine IP-Adresse per Firewall, wenn sie in kurzer Zeit zu oft scheitert. Installieren, eine eigene jail.local anlegen, den Dienst starten. Die mitgelieferte jail.conf bleibt unangetastet, damit Paketvorgaben und eigene Einstellungen getrennt bleiben.

Installieren

sudo apt update
sudo apt install fail2ban python3-systemd

python3-systemd braucht fail2ban, um das Systemjournal zu lesen. Unter Ubuntu 24.04 kommt es ohnehin mit, unter Debian 13 hängt fail2ban selbst davon ab, unter Debian 12 wird es nur empfohlen, deshalb steht es hier ausdrücklich dabei. Die mitgelieferte jail.conf nicht bearbeiten, eigene Einstellungen gehören in eine eigene Datei.

Eigene Regeln in jail.local

Die Datei /etc/fail2ban/jail.local anlegen, zum Beispiel mit sudo nano:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 192.168.178.0/24

[sshd]
enabled = true
backend = systemd

Das heißt: Wer innerhalb von 10 Minuten fünfmal scheitert, ist eine Stunde gesperrt. Unter ignoreip steht das eigene Heimnetz, damit man sich nicht selbst aussperrt. Das bedeutet aber auch: Kein Gerät aus diesem Netz wird je gesperrt, also nur eintragen, wenn man allen Geräten darin traut. Ob die Datei gültig ist, prüft sudo fail2ban-client -t. Die Zeile backend = systemd lässt fail2ban die Anmeldeversuche aus dem Systemjournal lesen. Das ist auf Systemen ohne klassische Logdatei nötig, dazu mehr im ersten Nachtrag.

Starten und prüfen

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Meist läuft der Dienst nach der Installation schon, die erste Zeile schadet trotzdem nicht.

Der Status zeigt, wie viele Versuche gezählt wurden und welche Adressen gerade gesperrt sind. Nach einer Änderung an der jail.local lädt sudo systemctl restart fail2ban die Regeln neu.

Eine Adresse wieder freigeben

sudo fail2ban-client set sshd unbanip 203.0.113.5

Nachträge

fail2ban startet unter Debian 12 nicht, was nun?

Neuinstallationen von Debian 12 haben kein rsyslog mehr, deshalb fehlt die Datei /var/log/auth.log, in der fail2ban die SSH-Anmeldungen sonst sucht. Das Paket in Debian 12 und Raspberry Pi OS Bookworm stellt das nicht selbst um (das Paket in Debian 13 schon), der Dienst bricht dann mit „Have not found any log file for sshd jail“ ab. Die Zeile backend = systemd im Abschnitt [sshd] löst das, fail2ban liest dann aus dem Journal. Ubuntu 24.04 setzt diese Einstellung bereits selbst.

Wie sperre ich Wiederholungstäter länger?

Mit bantime.increment = true im Abschnitt [DEFAULT] verlängert fail2ban die Sperre bei jeder weiteren Sperre derselben Adresse, in der Grundeinstellung jeweils auf das Doppelte. Die Funktion gibt es seit fail2ban 0.11.1, die Pakete von Debian 12 und Ubuntu 24.04 haben sie.

Reicht fail2ban als Schutz?

fail2ban bremst Angreifer, ersetzt aber keine sichere Anmeldung. Am wirksamsten ist die Anmeldung per SSH-Schlüssel mit abgeschalteter Passwortanmeldung. Sicher geht das mit einer eigenen Datei /etc/ssh/sshd_config.d/00-lokal.conf:

PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no

Die 00 im Namen ist wichtig: SSH nimmt bei den meisten Einstellungen den zuerst gelesenen Wert, und unter Ubuntu kann eine vom Installer angelegte Datei wie 50-cloud-init.conf sonst dagegenhalten. Vorher unbedingt die Schlüsselanmeldung testen und eine zweite Sitzung offen lassen, dann sudo sshd -t und sudo systemctl reload ssh. Wer bei Passwörtern bleibt, braucht lange und zufällige, wie sie auf mein-login.info unter sichere Passwörter beschrieben sind.

Quellen