Einleitung — Warum Server-Sicherheit kein optionales Extra ist
Du hast dir gerade einen frischen Debian 13 (Trixie) Server aufgesetzt — Glückwunsch! Aber bevor du irgendetwas darauf installierst, gibt es eine Sache, die du zuerst erledigen solltest: deinen Server absichern.
Ein ungesicherter Server im Internet ist wie eine offene Haustür in einer belebten Straße. Innerhalb von Minuten nach dem ersten Boot scannen automatisierte Bots deine IP-Adresse und versuchen, sich per SSH einzuloggen — mit Standard-Benutzernamen wie root, admin oder test. Das ist kein Horrorszenario, das ist Alltag.
In diesem Guide lernst du Schritt für Schritt, wie du:
- Dein System aktuell hältst und automatische Updates einrichtest
- Einen sicheren Benutzer anlegst und den Root-Login deaktivierst
- SSH richtig absicherst (Schlüssel statt Passwörter, Port ändern)
- Eine Firewall mit UFW konfigurierst
- Fail2ban gegen Brute-Force-Angriffe einsetzt
- Optional: Zwei-Faktor-Authentifizierung für SSH einrichtest
Jeder Befehl wird erklärt — nicht nur was du tippst, sondern warum. So verstehst du, was auf deinem Server passiert, und kannst bei Problemen selbst reagieren.
⏱️ Zeitaufwand: ca. 30–45 Minuten
Voraussetzungen
Bevor wir loslegen, stelle sicher, dass du Folgendes hast:
- Einen frisch installierten Debian 13 (Trixie) Server — bei einem Hoster wie Hetzner, Netcup, DigitalOcean oder als lokale VM
- Root-Zugang per SSH — du kannst dich als
rootper Terminal verbinden - Einen SSH-Client — unter Linux/macOS ist das Terminal eingebaut, unter Windows nutze PuTTY oder das Windows Terminal mit OpenSSH
- Grundlegende Terminal-Kenntnisse — du weißt, wie man Befehle eingibt und mit
nanoodervimDateien bearbeitet
Verbinde dich jetzt mit deinem Server:
ssh root@DEINE_SERVER_IPBereit? Dann los!
Schritt 1: System aktualisieren
Das Allererste auf jedem neuen Server: alle Pakete auf den neuesten Stand bringen. Dein Hoster liefert das System-Image möglicherweise nicht tagesaktuell aus, und veraltete Pakete können bekannte Sicherheitslücken enthalten.
apt update && apt upgrade -yWas passiert hier?
apt update— Aktualisiert die Paketlisten. Dein Server erfährt, welche neuen Versionen verfügbar sind.apt upgrade -y— Installiert alle verfügbaren Updates. Das-ybestätigt automatisch.&&— Führt den zweiten Befehl nur aus, wenn der erste erfolgreich war.
Falls der Kernel aktualisiert wurde, starte den Server neu:
rebootWarte etwa 30 Sekunden und verbinde dich erneut per SSH.
Unattended-Upgrades installieren
Damit dein Server auch in Zukunft automatisch Sicherheitsupdates erhält, richten wir unattended-upgrades gleich mit ein. Die Details konfigurieren wir in Schritt 6.
apt install -y unattended-upgrades apt-listchangesapt-listchanges informiert dich optional per Mail über Änderungen in aktualisierten Paketen — nützlich, um den Überblick zu behalten.
Schritt 2: Neuen Benutzer anlegen & Root-Login deaktivieren
Direkt als root zu arbeiten ist gefährlich. Ein Tippfehler, und du löschst versehentlich das halbe System. Außerdem ist root der erste Benutzername, den Angreifer ausprobieren. Wir legen deshalb einen normalen Benutzer mit sudo-Rechten an.
Benutzer erstellen
adduser deinnameErsetze deinname durch deinen gewünschten Benutzernamen. Du wirst nach einem Passwort und optionalen Infos (Name, Telefon etc.) gefragt — die optionalen Felder kannst du mit Enter überspringen.
⚠️ Wichtig: Wähle ein starkes Passwort! Mindestens 12 Zeichen, Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen.
Sudo-Rechte vergeben
usermod -aG sudo deinnameWas passiert hier?
usermod— Ändert einen bestehenden Benutzer-aG sudo— Fügt den Benutzer zur Gruppesudohinzu (-a= append, ohne bestehende Gruppen zu entfernen)
Ab jetzt kann deinname mit sudo vor einem Befehl Admin-Aktionen ausführen — aber nur bewusst und mit Passwortabfrage.
Testen — bevor du dich aussperrst!
⚠️ Schließe deine aktuelle SSH-Sitzung NICHT! Öffne ein neues Terminal-Fenster und teste den Login:
ssh deinname@DEINE_SERVER_IPDann teste sudo:
sudo whoamiDie Ausgabe sollte root sein. Funktioniert? Perfekt. Erst dann machen wir weiter.
Schritt 3: SSH absichern
SSH ist das Tor zu deinem Server. Standardmäßig lauscht es auf Port 22, akzeptiert Passwort-Logins und erlaubt Root-Zugang — alles Dinge, die wir jetzt ändern.
SSH-Schlüssel erstellen (auf deinem lokalen PC)
Falls du noch kein SSH-Schlüsselpaar hast, erstelle eines auf deinem lokalen Computer (nicht auf dem Server!):
ssh-keygen -t ed25519 -C "dein@email.de"Warum ed25519? Es ist der modernste und sicherste Algorithmus für SSH-Schlüssel — schneller und mit kürzeren Schlüsseln als RSA, bei gleicher oder besserer Sicherheit.
Bestätige den Standard-Speicherort mit Enter und vergib optional eine Passphrase (empfohlen!).
Öffentlichen Schlüssel auf den Server kopieren
ssh-copy-id deinname@DEINE_SERVER_IPDieser Befehl kopiert deinen öffentlichen Schlüssel in die Datei ~/.ssh/authorized_keys auf dem Server. Ab jetzt kannst du dich ohne Passwort einloggen — der Server erkennt deinen Schlüssel.
Teste es: Öffne eine neue SSH-Sitzung. Du solltest ohne Passwortabfrage (bzw. nur mit Schlüssel-Passphrase) reinkommen.
SSH-Konfiguration anpassen
Jetzt bearbeiten wir die SSH-Server-Konfiguration. Mach vorher ein Backup:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bakDann öffne die Konfiguration:
sudo nano /etc/ssh/sshd_configSuche und ändere folgende Zeilen (oder füge sie hinzu, falls sie nicht existieren):
# SSH-Port ändern (Standard: 22)
Port 2222
# Root-Login komplett verbieten
PermitRootLogin no
# Nur Schlüssel-Authentifizierung erlauben
PasswordAuthentication no
PubkeyAuthentication yes
# Leere Passwörter verbieten (Sicherheitsnetz)
PermitEmptyPasswords no
# Maximale Anmeldeversuche begrenzen
MaxAuthTries 3
# Nur bestimmte Benutzer erlauben (optional, aber empfohlen)
AllowUsers deinnameWarum den Port ändern? Port 22 ist der Standard. Automatisierte Scanner probieren fast ausschließlich Port 22. Ein anderer Port eliminiert >90% des automatisierten Rauschens in deinen Logs. Das ist kein echter Sicherheitsgewinn gegen gezielte Angriffe, aber es reduziert den Lärm massiv.
⚠️ Merke dir den neuen Port! Wenn du ihn vergisst und die Firewall den alten Port sperrt, bist du ausgesperrt.
Speichere die Datei (Ctrl+O, Enter, Ctrl+X in nano) und prüfe die Konfiguration auf Syntaxfehler:
sudo sshd -tKeine Ausgabe = kein Fehler. Dann den SSH-Dienst neu starten:
sudo systemctl restart sshd⚠️ GANZ WICHTIG: Schließe deine aktuelle Sitzung NICHT! Teste den neuen Login in einem separaten Terminal:
ssh -p 2222 deinname@DEINE_SERVER_IPFunktioniert alles? Erst dann die alte Sitzung schließen.
Schritt 4: Firewall mit UFW einrichten
Eine Firewall kontrolliert, welcher Netzwerkverkehr deinen Server erreichen darf. UFW (Uncomplicated Firewall) ist ein benutzerfreundliches Frontend für iptables — perfekt für den Einstieg.
UFW installieren und konfigurieren
sudo apt install -y ufwZuerst setzen wir die Standardregeln:
# Alles eingehende blockieren
sudo ufw default deny incoming
# Alles ausgehende erlauben
sudo ufw default allow outgoingWarum? Ein Server sollte nur auf explizit erlaubten Ports erreichbar sein. Ausgehender Traffic wird erlaubt, damit dein Server Updates herunterladen und DNS-Anfragen stellen kann.
Benötigte Ports freigeben
# SSH auf dem neuen Port erlauben
sudo ufw allow 2222/tcp comment 'SSH'
# Webserver (falls du einen betreibst oder planst)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'⚠️ Hast du den SSH-Port in Schritt 3 geändert? Dann hier den gleichen Port eintragen! Wenn du hier 22 erlaubst, aber SSH auf 2222 läuft, sperrst du dich aus.
Firewall aktivieren
sudo ufw enableDu wirst gefragt, ob du fortfahren möchtest — bestätige mit y. Überprüfe den Status:
sudo ufw status verboseDie Ausgabe sollte in etwa so aussehen:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
2222/tcp ALLOW IN Anywhere # SSH
80/tcp ALLOW IN Anywhere # HTTP
443/tcp ALLOW IN Anywhere # HTTPSIPv6 aktivieren (optional, aber empfohlen)
Stelle sicher, dass UFW auch IPv6-Traffic filtert:
sudo nano /etc/default/ufwSetze:
IPV6=yesDann UFW neu laden:
sudo ufw reloadSchritt 5: Fail2ban installieren & konfigurieren
Fail2ban überwacht Log-Dateien und sperrt IP-Adressen automatisch, die zu viele fehlgeschlagene Login-Versuche haben. Es ist dein automatischer Türsteher gegen Brute-Force-Angriffe.
Installation
sudo apt install -y fail2banKonfiguration erstellen
⚠️ Bearbeite niemals /etc/fail2ban/jail.conf direkt — diese Datei wird bei Updates überschrieben. Erstelle stattdessen eine lokale Kopie:
sudo nano /etc/fail2ban/jail.localFüge folgenden Inhalt ein:
[DEFAULT]
# Sperrzeit: 1 Stunde
bantime = 3600
# Zeitfenster für fehlgeschlagene Versuche: 10 Minuten
findtime = 600
# Nach 3 Fehlversuchen sperren
maxretry = 3
# E-Mail-Benachrichtigung (optional)
# destemail = dein@email.de
# sender = fail2ban@deinserver.de
# action = %(action_mwl)senabled = true port = 2222 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600
Was bedeuten die Einstellungen?
bantime = 3600— Gesperrte IPs werden für 3600 Sekunden (1 Stunde) blockiertfindtime = 600— Fail2ban schaut sich die letzten 10 Minuten anmaxretry = 3— Nach 3 fehlgeschlagenen Versuchen innerhalb vonfindtimewird die IP gesperrtport = 2222— Muss mit deinem SSH-Port übereinstimmen!
E-Mail-Benachrichtigungen einrichten (optional)
Wenn du per E-Mail informiert werden willst, wenn eine IP gesperrt wird, kommentiere die drei Zeilen unter [DEFAULT] ein und installiere einen Mail-Dienst:
sudo apt install -y mailutilsÄndere dann die action-Zeile:
%(action_)s— Nur sperren (Standard)%(action_mw)s— Sperren + E-Mail mit Whois-Info%(action_mwl)s— Sperren + E-Mail mit Whois-Info und relevanten Log-Zeilen
Fail2ban starten
sudo systemctl enable fail2ban
sudo systemctl start fail2banStatus prüfen:
sudo fail2ban-client status sshdHier siehst du, wie viele IPs aktuell gesperrt sind und wie viele fehlgeschlagene Versuche erkannt wurden.
Schritt 6: Automatische Sicherheitsupdates konfigurieren
Wir haben unattended-upgrades bereits in Schritt 1 installiert. Jetzt konfigurieren wir es richtig.
sudo nano /etc/apt/apt.conf.d/50unattended-upgradesStelle sicher, dass folgende Zeilen aktiv (nicht auskommentiert) sind:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};
// Automatisch alte Kernel und nicht mehr benötigte Pakete entfernen
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Bei Kernel-Updates automatisch neustarten (optional)
// Unattended-Upgrade::Automatic-Reboot "true";
// Unattended-Upgrade::Automatic-Reboot-Time "03:00";Automatischen Reboot aktivieren? Wenn dein Server keine kritischen Dienste hat, die nicht unterbrochen werden dürfen, ist ein automatischer Reboot um 3 Uhr nachts bei Kernel-Updates sinnvoll. Für Produktionsserver mit strengen Uptime-Anforderungen lieber manuell neustarten.
Jetzt den Timer aktivieren:
sudo nano /etc/apt/apt.conf.d/20auto-upgradesInhalt:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";Was bedeutet das?
- Täglich Paketlisten aktualisieren
- Täglich verfügbare Upgrades herunterladen und installieren
- Wöchentlich den Paket-Cache aufräumen
Teste die Konfiguration:
sudo unattended-upgrades --dry-run --debugDamit siehst du, was aktualisiert würde, ohne tatsächlich etwas zu ändern.
Schritt 7 (Optional): Zwei-Faktor-Authentifizierung für SSH
Für maximale Sicherheit kannst du SSH mit einem zweiten Faktor absichern — zusätzlich zum SSH-Schlüssel wird ein zeitbasierter Code (TOTP) aus einer Authenticator-App abgefragt.
⚠️ Achtung: Dieser Schritt ist fortgeschritten. Ein Fehler kann dich aussperren. Halte immer eine Backup-Zugangsweg offen (z.B. Konsole beim Hoster).
Google Authenticator PAM-Modul installieren
sudo apt install -y libpam-google-authenticatorFür deinen Benutzer einrichten
Führe als dein normaler Benutzer (nicht root!) aus:
google-authenticatorBeantworte die Fragen wie folgt:
- Time-based tokens? →
y - Du siehst einen QR-Code — scanne ihn mit deiner Authenticator-App (Google Authenticator, Authy, Aegis, etc.)
- Update your .google_authenticator file? →
y - Disallow multiple uses? →
y - Increase time window? →
n - Enable rate-limiting? →
y
⚠️ Notiere dir die Emergency Scratch Codes! Diese sind dein Notfall-Zugang, falls du dein Handy verlierst.
PAM konfigurieren
sudo nano /etc/pam.d/sshdFüge am Ende hinzu:
auth required pam_google_authenticator.soSSH für 2FA anpassen
sudo nano /etc/ssh/sshd_configÄndere oder ergänze:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactiveDas bedeutet: Zuerst wird der SSH-Schlüssel geprüft, dann der TOTP-Code abgefragt. Zwei Faktoren.
sudo systemctl restart sshdTeste in einem neuen Terminal! Du solltest zuerst nach deinem Schlüssel und dann nach dem Verification Code gefragt werden.
Zusammenfassung & Checkliste
Hier ist deine Checkliste — jeder Punkt sollte abgehakt sein, bevor du deinen Server als „abgesichert“ betrachtest:
✅ System vollständig aktualisiert (apt update && apt upgrade)
✅ Neuer Benutzer mit sudo-Rechten angelegt
✅ SSH-Schlüssel generiert und auf Server kopiert
✅ SSH-Port geändert (z.B. auf 2222)
✅ PermitRootLogin no gesetzt
✅ PasswordAuthentication no gesetzt
✅ Firewall (UFW) aktiv mit nur nötigen Ports
✅ Fail2ban läuft und überwacht SSH
✅ Automatische Sicherheitsupdates eingerichtet
✅ Optional: 2FA für SSH aktiviert
Troubleshooting — Wenn etwas schiefgeht
„Ich bin ausgesperrt!“
Keine Panik. Die meisten Hoster bieten eine Web-Konsole (VNC/KVM) an, über die du dich direkt am Server anmelden kannst — unabhängig von SSH und Firewall.
- Logge dich in das Kundenpanel deines Hosters ein
- Öffne die VNC-/KVM-Konsole für deinen Server
- Melde dich mit deinem Benutzer an
- Repariere die SSH-Konfiguration oder Firewall-Regeln
SSH-Verbindung wird abgelehnt
Prüfe der Reihe nach:
# Läuft SSH überhaupt?
sudo systemctl status sshd
# Auf welchem Port lauscht SSH?
sudo ss -tlnp | grep ssh
# Ist der Port in der Firewall freigegeben?
sudo ufw status
# Gibt es Syntaxfehler in der SSH-Konfig?
sudo sshd -tFail2ban hat meine eigene IP gesperrt
# Prüfe, ob deine IP gesperrt ist
sudo fail2ban-client status sshd
# IP entsperren
sudo fail2ban-client set sshd unbanip DEINE_IPUFW blockiert zu viel
Im Notfall kannst du UFW temporär deaktivieren:
sudo ufw disableDann in Ruhe die Regeln korrigieren und wieder aktivieren.
Nächste Schritte
Dein Server ist jetzt solide abgesichert — aber Sicherheit ist ein fortlaufender Prozess. Hier sind sinnvolle nächste Schritte:
- Webserver einrichten: Nginx oder Apache installieren und mit Let’s Encrypt SSL-Zertifikate einrichten
- Log-Monitoring: Mit Tools wie
logwatchoderGoAccessdeine Server-Logs im Blick behalten - Backups einrichten: Automatische Backups mit
borgbackupoder dem Backup-Service deines Hosters - Intrusion Detection:
rkhunteroderAIDEfür Rootkit-Erkennung und Integritätsprüfung - Docker & Container: Dienste in Containern isolieren für zusätzliche Sicherheit
Bleib dran — dein Server dankt es dir. 🛡️
Schreibe einen Kommentar