Linux-Server absichern: SSH härten, UFW-Firewall und Fail2ban einrichten
Kein Root-Login, keine Passwörter, nur die nötigen Ports offen und Angreifer automatisch aussperren: So machst du einen Debian- oder Ubuntu-Server in einer halben Stunde deutlich sicherer.

Ein Server, der per SSH aus dem Internet erreichbar ist, wird nach wenigen Minuten von automatisierten Anmeldeversuchen getroffen. Das ist normal und meist harmlos, solange der Server richtig eingestellt ist. In dieser Anleitung sorgst du in vier Schritten dafür: Updates einspielen, SSH härten, eine Firewall einrichten und Fail2ban gegen wiederholte Anmeldeversuche aktivieren.
Du brauchst: einen Server mit Debian 12/13 oder Ubuntu 22.04/24.04, einen Benutzer mit sudo-Rechten und eine funktionierende Anmeldung per SSH-Schlüssel. Wie du die einrichtest, zeigt unsere Anleitung: https://spawnpunkt.de/magazin/ssh-schluessel-einrichten
Schritt 1: System aktualisieren
Bevor du etwas anderes tust, spielst du alle Updates ein:
sudo apt update && sudo apt full-upgrade -yArbeitest du bisher nur als root, legst du zuerst einen eigenen Benutzer an und gibst ihm sudo-Rechte. Danach meldest du dich mit diesem Benutzer an und kopierst deinen SSH-Schlüssel auch für ihn auf den Server:
adduser benutzer
usermod -aG sudo benutzerSchritt 2: SSH härten
Statt die Hauptdatei /etc/ssh/sshd_config zu bearbeiten, legst du eine eigene Datei im Ordner sshd_config.d an. Sie übersteht Updates, und du siehst auf einen Blick, was du geändert hast:
sudo nano /etc/ssh/sshd_config.d/10-haertung.confFüge diesen Inhalt ein und ersetze benutzer durch deinen Benutzernamen:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers benutzerSpeichern mit Strg+O und Enter, beenden mit Strg+X.
Die Zeilen bedeuten:
| Einstellung | Wirkung |
|---|---|
| PermitRootLogin no | root kann sich nicht direkt anmelden |
| PasswordAuthentication no | keine Anmeldung mit Passwort, nur mit Schlüssel |
| KbdInteractiveAuthentication no | schließt einen zweiten Weg für Passwortabfragen |
| MaxAuthTries 3 | höchstens drei Versuche pro Verbindung |
| AllowUsers benutzer | nur die genannten Benutzer dürfen per SSH herein |
Die Datei beginnt mit 10-, weil SSH bei doppelten Einstellungen den ersten gefundenen Wert nimmt. Manche Cloud-Server bringen eine Datei 50-cloud-init.conf mit PasswordAuthentication yes mit. Deine Datei wird vorher gelesen und gewinnt.
Prüfe die Konfiguration auf Tippfehler. Kommt keine Ausgabe, ist alles in Ordnung:
sudo sshd -tDann startest du SSH neu. Bestehende Sitzungen bleiben dabei erhalten:
sudo systemctl restart sshÖffne jetzt ein zweites Terminal und melde dich neu an. Klappt das, prüfst du, ob die Einstellungen wirklich aktiv sind:
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|allowusers'
Schritt 3: Firewall mit UFW
UFW („Uncomplicated Firewall“) ist eine einfache Oberfläche für die Linux-Firewall. Grundregel: alles Eingehende blockieren und nur freigeben, was du brauchst.
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcpLäuft auf dem Server eine Webseite, gibst du zusätzlich HTTP und HTTPS frei:
sudo ufw allow 80,443/tcpErst wenn die SSH-Regel steht, schaltest du die Firewall ein und prüfst die Regeln:
sudo ufw enable
sudo ufw status verboseSchritt 4: Fail2ban gegen Anmeldeversuche
Fail2ban liest die Anmeldeprotokolle und sperrt IP-Adressen, die zu oft falsche Anmeldungen versuchen. Bei reiner Schlüssel-Anmeldung ist das nicht zwingend nötig, hält aber die Protokolle sauber und bremst Angreifer bei allen weiteren Diensten.
sudo apt install fail2ban python3-systemd -yDie eigenen Einstellungen kommen in die Datei jail.local. Die mitgelieferte jail.conf wird bei Updates überschrieben.
sudo nano /etc/fail2ban/jail.localInhalt: Wer innerhalb von 10 Minuten 5-mal scheitert, wird für eine Stunde gesperrt. Unter ignoreip trägst du dein Heimnetz ein, damit du dich nicht selbst aussperrst.
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
[sshd]
enabled = true
backend = systemdbackend = systemd sorgt dafür, dass Fail2ban die Anmeldungen aus dem Systemjournal liest. Das ist unter Debian 12 nötig, weil es dort standardmäßig keine Datei /var/log/auth.log mehr gibt. Jetzt Fail2ban starten und den Status ansehen:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdHast du dich doch einmal selbst gesperrt, hebst du die Sperre von einem anderen Anschluss oder über die Konsole des Anbieters auf:
sudo fail2ban-client set sshd unbanip 203.0.113.25Checkliste zum Schluss
sudo sshd -Tzeigtpermitrootlogin noundpasswordauthentication no- Anmeldung im zweiten Terminal klappt mit Schlüssel
sudo ufw statuszeigt nur die Ports, die du wirklich brauchstsudo fail2ban-client status sshdmeldet einen aktiven Jail- Automatische Sicherheitsupdates sind eingerichtet. Wie das geht, steht hier: https://spawnpunkt.de/magazin/automatische-sicherheitsupdates-unatt…
Wie greifst du auf deine Server zu?
- Erst Updates einspielen, dann härten
- SSH: kein Root-Login, keine Passwörter, nur bestimmte Benutzer
- Firewall: alles zu, nur SSH und benötigte Dienste auf
- Bei Docker veröffentlichte Ports gesondert absichern
- Fail2ban sperrt wiederholte Fehlversuche automatisch
- Immer eine Sitzung offen lassen, solange du testest
Hast du Fragen zu deinem Setup? In der Kategorie Sicherheit hilft dir die Community weiter.
- OpenSSH Handbuch: sshd_config – man.openbsd.org/sshd_config
- Ubuntu: Uncomplicated Firewall – help.ubuntu.com/community/UFW
- Fail2ban – github.com/fail2ban/fail2ban
Kommentare
Noch keine Kommentare. Was meinst du dazu?
Mitreden? Melde dich an, um zu kommentieren.