Sicherheit beim Selbsthosten: 10 kritische Punkte

SSH-Härtung, Firewall, Updates, Fail2ban & Co. – so schützen Sie Ihren Server.

Am Ende dieser Anleitung läuft Ihr selbst gehosteter Server deutlich sicherer als vorher. Sie melden sich per Schlüssel statt Passwort an, eine Firewall blockiert unerwünschte Zugriffe, und automatische Schutzmechanismen halten Angreifer fern. Sie verstehen dabei nicht nur, WELCHE Befehle Sie eingeben, sondern auch WARUM.

Das brauchen Sie vorab

  • Ein Linux-Server (z. B. Ubuntu oder Debian), auf den Sie zugreifen können. Ohne einen laufenden Server gibt es nichts zu absichern.
  • Zugang mit einem Benutzer, der sudo verwenden darf. sudo bedeutet, dass Sie kurzzeitig Administrator-Rechte bekommen, um Systemänderungen vorzunehmen.
  • Ein Terminal auf Ihrem eigenen Computer (unter Windows z. B. die 'Eingabeaufforderung', PowerShell oder das moderne 'Windows Terminal'). Damit tippen Sie Befehle ein.
  • Eine funktionierende Internetverbindung und die IP-Adresse Ihres Servers. Die IP-Adresse ist wie eine Postanschrift, unter der Ihr Server erreichbar ist.
  • Etwas Ruhe und ein zweites offenes Terminalfenster als Sicherheitsnetz. So sperren Sie sich nicht versehentlich aus, während Sie an den Zugangseinstellungen arbeiten.

Schritt für Schritt

  1. Verbinden Sie sich per SSH mit dem Server

    SSH steht für 'Secure Shell'. Das ist eine verschlüsselte Verbindung, über die Sie Ihren Server aus der Ferne bedienen, so als säßen Sie direkt davor. Alles, was Sie tippen, wird auf dem Weg zum Server unlesbar verschlüsselt.

    Öffnen Sie das Terminal auf Ihrem eigenen Rechner. Der folgende Befehl baut die Verbindung auf. Ersetzen Sie benutzer durch Ihren Benutzernamen und 192.168.1.10 durch die echte IP-Adresse Ihres Servers.

    Beim ersten Verbinden fragt SSH, ob Sie dem Server vertrauen. Tippen Sie yes und bestätigen Sie mit Enter. Danach geben Sie Ihr Passwort ein (das sehen Sie beim Tippen nicht — das ist normal).

    ssh benutzer@192.168.1.10
  2. Erzeugen Sie ein SSH-Schlüsselpaar auf Ihrem eigenen Computer

    Ein Passwort kann erraten werden. Ein SSH-Schlüssel dagegen besteht aus zwei zusammengehörigen Dateien: einem privaten Schlüssel, der geheim auf Ihrem Rechner bleibt, und einem öffentlichen Schlüssel, den Sie dem Server geben dürfen. Nur wer den passenden privaten Schlüssel besitzt, kommt hinein — das ist praktisch unmöglich zu erraten.

    Öffnen Sie ein Terminal auf Ihrem EIGENEN Computer (nicht auf dem Server). Der folgende Befehl erstellt das Schlüsselpaar. Wenn nach einem Speicherort und einer Passphrase gefragt wird, können Sie mit Enter die Standardwerte übernehmen. Eine Passphrase ist ein zusätzliches Passwort, das den Schlüssel schützt — empfehlenswert, aber optional.

    Nach dem Befehl liegen zwei Dateien im Ordner .ssh in Ihrem Benutzerverzeichnis: id_ed25519 (privat, niemals weitergeben!) und id_ed25519.pub (öffentlich).

    ssh-keygen -t ed25519
  3. Übertragen Sie den öffentlichen Schlüssel auf den Server

    Jetzt bringen Sie den öffentlichen Schlüssel auf den Server, damit dieser Sie künftig ohne Passwort erkennt. Der Befehl ssh-copy-id erledigt das automatisch: Er kopiert Ihren öffentlichen Schlüssel an die richtige Stelle auf dem Server.

    Führen Sie den folgenden Befehl auf Ihrem EIGENEN Computer aus. Sie werden dabei noch einmal nach Ihrem Server-Passwort gefragt — das ist das letzte Mal, dass Sie es hierfür brauchen.

    Nach erfolgreicher Übertragung sollten Sie sich testweise neu verbinden können, ohne das Server-Passwort einzugeben. Probieren Sie ssh benutzer@192.168.1.10 — wenn Sie direkt (oder nur mit Ihrer Passphrase) hineinkommen, funktioniert der Schlüssel.

    ssh-copy-id benutzer@192.168.1.10
  4. Deaktivieren Sie den Passwort-Login und den Root-Zugang

    Da der Schlüssel funktioniert, schalten Sie jetzt den Passwort-Login komplett ab. Damit können Angreifer nicht mehr einfach Passwörter durchprobieren. Zusätzlich sperren Sie den direkten Login als root (der allmächtige Administrator-Benutzer), denn root ist ein beliebtes Angriffsziel.

    Die Einstellungen stehen in der Datei /etc/ssh/sshd_config. Öffnen Sie diese auf dem Server mit einem Texteditor. nano ist ein einfacher Editor, der sich mit Strg+O (speichern) und Strg+X (beenden) bedienen lässt.

    Suchen Sie in der Datei die Zeilen mit PasswordAuthentication und PermitRootLogin. Falls ein # davorsteht, entfernen Sie es (das # macht eine Zeile zu einem Kommentar, der ignoriert wird). Setzen Sie beide auf no, sodass dort steht: PasswordAuthentication no und PermitRootLogin no.

    WICHTIG: Bevor Sie die Verbindung schließen, öffnen Sie ein ZWEITES Terminalfenster und testen Sie, ob Sie sich noch einloggen können. So merken Sie sofort, falls etwas schiefging, und sperren sich nicht aus.

    sudo nano /etc/ssh/sshd_config
    
    # Danach den SSH-Dienst neu starten, damit die Änderungen greifen:
    sudo systemctl restart ssh
  5. Installieren und aktivieren Sie die Firewall (ufw)

    Eine Firewall ist wie ein Türsteher: Sie entscheidet, welche Verbindungen zum Server hinein dürfen und welche nicht. ufw steht für 'Uncomplicated Firewall' — eine besonders anfängerfreundliche Variante.

    Zuerst installieren Sie das Programm. Der Befehl sudo apt install ufw lädt es herunter und richtet es ein. Falls Sie gefragt werden, ob Sie fortfahren möchten, bestätigen Sie mit j oder y.

    ACHTUNG, jetzt kommt der kritischste Moment: Bevor Sie die Firewall einschalten, MÜSSEN Sie den SSH-Zugang freigeben. Wenn Sie das vergessen und die Firewall aktivieren, sperrt sie Ihre eigene Verbindung aus und Sie kommen nicht mehr auf den Server. Der Befehl sudo ufw allow 22/tcp öffnet Port 22, den Standard-Port für SSH. Ein Port ist wie eine nummerierte Tür — verschiedene Dienste nutzen verschiedene Türnummern.

    Wenn Sie Webseiten hosten, geben Sie zusätzlich Port 80 (unverschlüsseltes Web) und Port 443 (verschlüsseltes Web, HTTPS) frei. Erst danach aktivieren Sie die Firewall mit sudo ufw enable. Der Befehl sudo ufw status zeigt Ihnen anschließend, welche Regeln aktiv sind.

    sudo apt install ufw
    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    sudo ufw status
  6. Richten Sie Fail2ban gegen automatische Angriffe ein

    Angreifer nutzen oft Programme, die tausende Login-Versuche pro Minute abfeuern. Fail2ban beobachtet die Logdateien (das sind Protokolle, in denen der Server festhält, wer sich anzumelden versucht) und sperrt automatisch jede IP-Adresse, die zu oft danebenliegt.

    Die Installation ist unkompliziert. sudo apt install fail2ban lädt das Programm herunter und startet es. Das Schöne: Bereits die Standardeinstellungen schützen Ihren SSH-Zugang sofort, ohne dass Sie etwas konfigurieren müssen.

    Mit dem folgenden Statusbefehl prüfen Sie, dass Fail2ban läuft und den SSH-Schutz überwacht. Sie sehen dort unter anderem, wie viele Angriffsversuche bereits geblockt wurden.

    sudo apt install fail2ban
    sudo systemctl status fail2ban
    sudo fail2ban-client status sshd
  7. Halten Sie das System mit Updates aktuell

    Software hat Fehler, und manche davon sind Sicherheitslücken. Updates schließen diese Lücken. Ein Server, der nie aktualisiert wird, ist wie eine Tür mit einem bekannten kaputten Schloss.

    Der Befehl sudo apt update holt die Liste der verfügbaren Aktualisierungen. sudo apt upgrade installiert sie dann. Mit dem && dazwischen führen Sie beide nacheinander aus. Wenn Sie gefragt werden, ob Sie fortfahren möchten, bestätigen Sie.

    Damit Sie das nicht ständig manuell tun müssen, installieren Sie unattended-upgrades. Dieses Programm spielt wichtige Sicherheits-Updates ganz von allein ein, auch wenn Sie gerade nicht am Server sitzen. Nach der Installation richten Sie es mit dem dpkg-reconfigure-Befehl ein und wählen 'Ja'.

    sudo apt update && sudo apt upgrade
    sudo apt install unattended-upgrades
    sudo dpkg-reconfigure unattended-upgrades
  8. Nutzen Sie einen Reverse Proxy mit TLS statt offener Ports

    Wenn Sie mehrere Webdienste betreiben, sollten Sie nicht für jeden einen eigenen Port ins Internet öffnen. Ein Reverse Proxy ist eine Art Empfangstheke: Alle Anfragen aus dem Internet kommen an EINER Stelle an, und der Proxy leitet sie intern an den richtigen Dienst weiter. Das reduziert die Angriffsfläche erheblich.

    Gleichzeitig übernimmt der Reverse Proxy die Verschlüsselung per TLS. TLS ('Transport Layer Security') sorgt für das Schloss-Symbol im Browser und dafür, dass niemand mitlesen kann. Ein Zertifikat beweist dabei, dass Ihr Server wirklich der ist, für den er sich ausgibt.

    Für Anfänger ist 'Caddy' eine sehr angenehme Wahl, weil es TLS-Zertifikate von Let's Encrypt (eine kostenlose Zertifizierungsstelle) vollautomatisch besorgt und erneuert. Nach der Installation tragen Sie in die Datei /etc/caddy/Caddyfile einfach Ihre Domain und das Ziel ein, wie im Beispiel unten.

    Nach dem Speichern starten Sie Caddy neu, und es holt automatisch ein gültiges Zertifikat für Ihre Domain. Ab jetzt ist Ihre Seite unter https:// erreichbar, ohne dass Sie sich um Verlängerungen kümmern müssen.

    sudo apt install caddy
    sudo nano /etc/caddy/Caddyfile
    
    # Beispielinhalt im Caddyfile (meine-domain.de ersetzen):
    # meine-domain.de {
    #     reverse_proxy localhost:8080
    # }
    
    sudo systemctl restart caddy
  9. Verstecken Sie Dienste hinter einem VPN statt sie offen ins Netz zu stellen

    Manche Dienste — etwa ein Admin-Panel oder ein privater Datenspeicher — müssen gar nicht für die ganze Welt erreichbar sein. Ein VPN ('Virtual Private Network') baut einen privaten, verschlüsselten Tunnel zwischen Ihren Geräten und dem Server auf. Nur wer im Tunnel ist, sieht die dahinterliegenden Dienste.

    Ein sehr einfaches, modernes VPN ist 'WireGuard'. Sie installieren es mit dem Paketmanager. Danach erzeugen Sie Schlüssel und eine Konfiguration — dieser Teil ist etwas umfangreicher, weshalb Sie am besten dem offiziellen WireGuard-Schnellstart folgen.

    Die Grundidee für Sie als Einsteiger: Statt Port 8080 für Ihr Admin-Panel in der Firewall zu öffnen, lassen Sie ihn geschlossen und erreichen den Dienst nur über den VPN-Tunnel. Für Angreifer aus dem Internet existiert die Tür dann schlicht nicht sichtbar.

    sudo apt install wireguard
    # Anschließend Schlüssel und Konfiguration nach der offiziellen
    # WireGuard-Anleitung erstellen und mit 'wg-quick up wg0' starten.
  10. Richten Sie Backups als letztes Sicherheitsnetz ein

    Kein Schutz ist perfekt. Wenn doch einmal etwas schiefgeht — sei es ein Angriff, ein Festplattendefekt oder ein eigener Fehler — ist ein Backup Ihre Rettung. Ein Backup ist eine Kopie Ihrer Daten an einem anderen Ort.

    Wichtig ist die 3-2-1-Regel: drei Kopien Ihrer Daten, auf zwei verschiedenen Medien, davon eine an einem anderen physischen Ort. So überstehen Ihre Daten selbst dann, wenn der ganze Server verloren geht.

    Ein anfängerfreundliches Werkzeug ist rsync, das Dateien effizient auf ein anderes Laufwerk oder einen anderen Server kopiert. Das Beispiel unten sichert das Verzeichnis /var/www auf eine externe Festplatte. Testen Sie regelmäßig, ob sich die Sicherung auch wirklich wiederherstellen lässt — ein ungetestetes Backup ist nur eine Hoffnung.

    sudo apt install rsync
    rsync -av /var/www /mnt/backup/www

Häufige Probleme und Lösungen

Nach dem Aktivieren der Firewall komme ich nicht mehr auf den Server.

Sehr wahrscheinlich haben Sie vergessen, Port 22 für SSH freizugeben, BEVOR Sie ufw enable ausgeführt haben. Verbinden Sie sich über die Notfall-Konsole Ihres Anbieters (bei den meisten Hostern im Kundenbereich als 'Konsole', 'VNC' oder 'Rescue' zu finden) und geben Sie dort sudo ufw allow 22/tcp ein. Danach sind Sie wieder erreichbar.

Der SSH-Login verlangt trotz Schlüssel weiterhin ein Passwort.

Prüfen Sie mit ls ~/.ssh auf Ihrem eigenen Rechner, ob der Schlüssel existiert, und ob ssh-copy-id erfolgreich war. Auf dem Server müssen die Rechte stimmen: chmod 700 ~/.ssh und chmod 600 ~/.ssh/authorized_keys. Sind die Rechte zu offen, ignoriert SSH den Schlüssel aus Sicherheitsgründen.

Fail2ban hat mich selbst ausgesperrt, weil ich mich vertippt habe.

Verbinden Sie sich über die Notfall-Konsole Ihres Anbieters und heben Sie die Sperre für Ihre IP auf mit sudo fail2ban-client set sshd unbanip IHRE-IP-ADRESSE. Um das künftig zu vermeiden, können Sie Ihre eigene feste IP in der Fail2ban-Konfiguration unter ignoreip eintragen.

Fazit

Sie haben Ihren Server jetzt auf mehreren Ebenen abgesichert: sichere Anmeldung per Schlüssel, eine Firewall, automatische Sperren gegen Angreifer, aktuelle Software und ein Backup als Rettungsanker. Keine dieser Maßnahmen allein macht Sie unangreifbar, aber gemeinsam erhöhen sie die Hürde für Angreifer enorm. Sicherheit ist kein einmaliges Projekt, sondern eine Gewohnheit — schauen Sie regelmäßig nach Updates und prüfen Sie Ihre Backups.

💡 Hetzner Cloud Affiliate-Link

Für Self-Hosting-Setups empfehlen wir einen VPS mit mindestens 2 GB RAM. Hetzner Cloud ist unser Standard-Partner für zuverlässige, günstige Server aus deutschen Rechenzentren.

Hetzner Cloud ab 3,29 € → Mit einem Kauf über diesen Link unterstützen Sie unsere Arbeit – ohne Mehrkosten für Sie.

Häufige Fragen

Muss ich wirklich den SSH-Port von 22 auf einen anderen ändern?

Es ist optional und bringt nur einen kleinen Vorteil: Automatische Massen-Scans zielen meist auf Port 22, deshalb wird ein anderer Port seltener angeklopft. Das ist aber nur 'Sicherheit durch Verstecken' und ersetzt keine echte Härtung. Deutlich wichtiger sind Schlüssel-Login, das Deaktivieren von Passwörtern und Fail2ban. Wenn