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?
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
- fail2ban: Projektseite und Dokumentation (GitHub)
- jail.conf(5): Manpage fail2ban 1.0.2 (Debian)
- fail2ban-client(1): Manpage (Debian)
- Debian 12: Versionshinweise, Änderungen an der Systemprotokollierung
- sshd_config(5): Manpage (Debian)
- Debian-Wiki: fail2ban
- Ubuntu Server Documentation: OpenSSH-Server