⌕
AnmeldenDabei sein ↗

Tippe mindestens zwei Buchstaben. Pfeiltasten wählen, Enter öffnet.

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.

Server hinter einer Mauer aus Ziegeln mit grünem Schutzschild, von rechts kommende rote Pfeile werden abgefangen
Illustration: Spawnpunkt

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:

bash
sudo apt update && sudo apt full-upgrade -y

Arbeitest 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:

bash
adduser benutzer
usermod -aG sudo benutzer

Schritt 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:

bash
sudo nano /etc/ssh/sshd_config.d/10-haertung.conf

Füge diesen Inhalt ein und ersetze benutzer durch deinen Benutzernamen:

text
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers benutzer

Speichern mit Strg+O und Enter, beenden mit Strg+X.

Die Zeilen bedeuten:

EinstellungWirkung
PermitRootLogin noroot kann sich nicht direkt anmelden
PasswordAuthentication nokeine Anmeldung mit Passwort, nur mit Schlüssel
KbdInteractiveAuthentication noschließt einen zweiten Weg für Passwortabfragen
MaxAuthTries 3höchstens drei Versuche pro Verbindung
AllowUsers benutzernur 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:

bash
sudo sshd -t

Dann startest du SSH neu. Bestehende Sitzungen bleiben dabei erhalten:

bash
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:

bash
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|allowusers'
Ein Roboter schickt Anfragen: Die Mauer blockiert drei rote, nur eine grüne SSH-Verbindung erreicht den Server mit Schloss
Drei Schutzschichten: Die Firewall lässt nur SSH durch, SSH akzeptiert nur Schlüssel, und Fail2ban sperrt Angreifer nach wenigen Fehlversuchen aus.

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.

bash
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp

Läuft auf dem Server eine Webseite, gibst du zusätzlich HTTP und HTTPS frei:

bash
sudo ufw allow 80,443/tcp

Erst wenn die SSH-Regel steht, schaltest du die Firewall ein und prüfst die Regeln:

bash
sudo ufw enable
sudo ufw status verbose

Schritt 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.

bash
sudo apt install fail2ban python3-systemd -y

Die eigenen Einstellungen kommen in die Datei jail.local. Die mitgelieferte jail.conf wird bei Updates überschrieben.

bash
sudo nano /etc/fail2ban/jail.local

Inhalt: 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.

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

[sshd]
enabled = true
backend = systemd

backend = 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:

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

Hast du dich doch einmal selbst gesperrt, hebst du die Sperre von einem anderen Anschluss oder über die Konsole des Anbieters auf:

bash
sudo fail2ban-client set sshd unbanip 203.0.113.25

Checkliste zum Schluss

  • sudo sshd -T zeigt permitrootlogin no und passwordauthentication no
  • Anmeldung im zweiten Terminal klappt mit Schlüssel
  • sudo ufw status zeigt nur die Ports, die du wirklich brauchst
  • sudo fail2ban-client status sshd meldet einen aktiven Jail
  • Automatische Sicherheitsupdates sind eingerichtet. Wie das geht, steht hier: https://spawnpunkt.de/magazin/automatische-sicherheitsupdates-unatt…
UmfrageEine Antwort

Wie greifst du auf deine Server zu?

Wird geladen …
✓ Fazit
  • 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.

Quellen

Kommentare

Noch keine Kommentare. Was meinst du dazu?

Mitreden? Melde dich an, um zu kommentieren.

Frage stellen

Spawnpunkt bindet keine Dienste von Drittanbietern ein. Alles, was du hier erlaubst, bleibt auf meinem eigenen Server.