Geschätzte Lesezeit: Eine Kaffeepause - ca. 15 Minuten
2025-02-15
Ubuntu Server härten
Ein frisch aufgesetzter Ubuntu Server ist wie eine Wohnung mit offener Tür – funktional, aber nicht sicher. In dieser Anleitung zeigen wir Ihnen Schritt für Schritt, wie Sie Ihren Server professionell absichern: von der SSH-Key-Authentifizierung über Firewall-Konfiguration bis hin zum Schutz vor Brute-Force-Angriffen mit Fail2ban.
Variablen-Erklärung
In dieser Anleitung verwenden wir Platzhalter in eckigen Klammern, die Sie durch Ihre eigenen Werte ersetzen müssen. So bleibt die Anleitung flexibel und Sie können sie für jeden Server anwenden.
Diese Variablen müssen Sie anpassen:
[server-name] = FQDN oder IP-Adresse Ihres Servers
[server-user-name] = Ihr Benutzername auf dem Server
[service-name] = Bezeichnung für das System/den Service
Diese Variablen bleiben wie sie sind:
[client-name] = Ihr lokaler Linux-Client
[client-user-name] = Ihr lokaler Benutzername
1 Benutzer auf dem Server anlegen
Dies ist Ihre Sicherheitsleine, falls bei der Konfiguration etwas schief geht. Alternativ können Sie eine Konsolen-Session Ihres Cloud-Providers nutzen.
Am Server anmelden
[client-user-name]@[client-name]:~$ ssh root@[server-name]
Benutzer erstellen
root@[server-name]:~# adduser [server-user-name]
info: Adding user `[server-user-name]' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `[server-user-name]' (1001) ...
info: Adding new user `[server-user-name]' (1001) with group `[server-user-name] (1001)' ...
info: Creating home directory `/home/[server-user-name]' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
Benutzer zu Sudoers hinzufügen
Damit der neue Benutzer administrative Aufgaben ausführen kann, fügen wir ihn zur sudo-Gruppe hinzu:
root@[server-name]:~# usermod -aG sudo [server-user-name]
2 SSH-Schlüsselpaar auf dem Client erstellen
SSH-Keys sind deutlich sicherer als Passwörter. Ein Angreifer müsste Zugriff auf Ihren privaten Schlüssel haben, nicht nur ein Passwort erraten. Wir verwenden ed25519 – einen modernen, sicheren Algorithmus.
Verzeichnis für SSH-Keys anlegen
[client-user-name]@[client-name]:~$ mkdir -p /[encryptedfs]/[service-name]/config/.ssh
SSH-Schlüssel generieren
[client-user-name]@[client-name]:~$ ssh-keygen -t ed25519 -C "[service-name]"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/[client-user-name]/.ssh/id_ed25519): /[encryptedfs]/[service-name]/config/.ssh/id_[service-name]
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /[encryptedfs]/[service-name]/config/.ssh/id_[service-name]
Your public key has been saved in /[encryptedfs]/[service-name]/config/.ssh/id_[service-name].pub
Eine Passphrase schützt Ihren privaten Schlüssel zusätzlich. Selbst wenn jemand Zugriff auf die Datei erhält, kann er ohne die Passphrase nichts damit anfangen.
Public Key auf den Server kopieren
[client-user-name]@[client-name]:~$ ssh-copy-id -i /[encryptedfs]/[service-name]/config/.ssh/id_[service-name].pub [server-user-name]@[server-name]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/[encryptedfs]/[service-name]/config/.ssh/id_[service-name].pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[server-user-name]@[server-name]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[server-user-name]@[server-name]'"
and check to make sure that only the key(s) you wanted were added.
Verbindung mit SSH-Key testen
Testen Sie die Verbindung mit dem neu erstellten Schlüssel:
[client-user-name]@[client-name]:~$ ssh -i /[encryptedfs]/[service-name]/config/.ssh/id_[service-name] [server-user-name]@[server-name]
Wenn Sie sich erfolgreich anmelden können, funktioniert die Key-Authentifizierung!
3 SSH-Konfiguration härten
Jetzt kommt der wichtigste Schritt: Wir deaktivieren Passwort-Logins und erlauben nur noch SSH-Key-Authentifizierung. Außerdem blockieren wir den Root-Login komplett.
Haupt-Konfigurationsdatei bearbeiten
[server-user-name]@[server-name]:~$ sudo vim /etc/ssh/sshd_config
Fügen Sie folgende Zeilen hinzu oder ändern Sie diese ab:
# Enable key authentication
PubkeyAuthentication yes
# Disable password authentication
PasswordAuthentication no
# Block empty passwords
PermitEmptyPasswords no
# Block root login
PermitRootLogin no
# Allow only the user listed
AllowUsers [server-user-name]
# Disable X11 forwarding (enable only if you need to display GUI applications from the server on your local machine)
X11Forwarding no
# Max authentication tries before disconnect
MaxAuthTries 3
# SSH keepalive interval in seconds
ClientAliveInterval 300
# Max keepalive messages without response
ClientAliveCountMax 2
Zusätzliche Konfigurationsdateien prüfen
Einige Cloud-Provider legen eigene Konfigurationsdateien an, die Ihre Einstellungen überschreiben können.
Prüfen Sie daher das /etc/ssh/sshd_config.d/ Verzeichnis:
[server-user-name]@[server-name]:~$ ls -al /etc/ssh/sshd_config.d/
total 12
drwxr-xr-x 2 root root 4096 Feb 15 06:19 .
drwxr-xr-x 4 root root 4096 Feb 15 06:23 ..
-rw-r--r-- 1 root root 26 Feb 15 06:19 dd-foo-bar.conf
Falls eine Datei PasswordAuthentication yes enthält, ändern Sie diese:
[server-user-name]@[server-name]:~$ sudo vim /etc/ssh/sshd_config.d/dd-foo-bar.conf
# Disable password authentication
PasswordAuthentication no
SSH-Service neu starten
Damit die Änderungen wirksam werden, starten Sie den SSH-Service neu:
[server-user-name]@[server-name]:~$ sudo systemctl restart ssh
Verifizierung - Sehr wichtig!
Testen Sie in einer neuen SSH-Session, ob:
- Sie sich mit dem SSH-Key anmelden können
- Sie sich nicht mit einem Passwort anmelden können
- Sie sich nicht als root anmelden können
Schließen Sie Ihre ursprüngliche Session erst, wenn alle Tests erfolgreich waren!
4 UFW Firewall aktivieren
Eine Firewall ist essenziell für die Server-Sicherheit. UFW (Uncomplicated Firewall) macht die Konfiguration einfach und verständlich. Wir öffnen nur die Ports, die wirklich benötigt werden.
Firewall-Status prüfen
[server-user-name]@[server-name]:~$ sudo ufw status verbose
Status: inactive
Firewall-Regeln hinzufügen
Führen Sie die Befehle genau in dieser Reihenfolge aus. Wenn Sie zuerst alles blockieren und dann SSH erlauben, sperren Sie sich selbst aus!
[server-user-name]@[server-name]:~$ sudo ufw allow 22/tcp comment 'SSH'
[server-user-name]@[server-name]:~$ sudo ufw allow 80/tcp comment 'HTTP'
[server-user-name]@[server-name]:~$ sudo ufw allow 443/tcp comment 'HTTPS'
[server-user-name]@[server-name]:~$ sudo ufw default deny incoming
[server-user-name]@[server-name]:~$ sudo ufw default allow outgoing
Firewall aktivieren
[server-user-name]@[server-name]:~$ sudo ufw enable
Regeln überprüfen
[server-user-name]@[server-name]:~$ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere # SSH
[ 2] 80/tcp ALLOW IN Anywhere # HTTP
[ 3] 443/tcp ALLOW IN Anywhere # HTTPS
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6) # SSH
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6) # HTTP
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6) # HTTPS
Falls Sie weitere Dienste betreiben (z.B. MySQL auf Port 3306 oder PostgreSQL auf 5432),
fügen Sie diese mit sudo ufw allow 3306/tcp comment 'MySQL' hinzu.
5 Fail2ban für SSH einrichten
Fail2ban schützt vor Brute-Force-Angriffen, indem es IP-Adressen nach mehreren fehlgeschlagenen Login-Versuchen automatisch für eine bestimmte Zeit sperrt. Ein unverzichtbares Tool für jeden öffentlich erreichbaren Server.
Fail2ban installieren
[server-user-name]@[server-name]:~$ sudo apt update
[server-user-name]@[server-name]:~$ sudo apt install fail2ban
Lokale Konfiguration erstellen
Wir erstellen eine lokale Konfigurationsdatei, die Updates übersteht:
[server-user-name]@[server-name]:~$ sudo vim /etc/fail2ban/jail.local
[DEFAULT]
# Ban duration in seconds (3600 = 1 hour)
bantime = 3600
# Time window to count failed attempts (600 = 10 minutes)
findtime = 600
# Maximum failed attempts before ban
maxretry = 3
# Ignore localhost
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime: Wie lange eine IP gesperrt bleibt (3600 Sekunden = 1 Stunde)
findtime: Zeitfenster für fehlgeschlagene Versuche (600 Sekunden = 10 Minuten)
maxretry: Maximale Anzahl fehlgeschlagener Versuche (3 = nach dem dritten Versuch wird gebannt)
Fail2ban neu starten
[server-user-name]@[server-name]:~$ sudo systemctl restart fail2ban
Logs überprüfen
Überprüfen Sie, ob Fail2ban korrekt gestartet wurde:
[server-user-name]@[server-name]:~$ sudo tail /var/log/fail2ban.log
2026-02-15 18:44:45,543 fail2ban.filter [92546]: INFO maxRetry: 3
2026-02-15 18:44:45,543 fail2ban.filter [92546]: INFO findtime: 600
2026-02-15 18:44:45,543 fail2ban.actions [92546]: INFO banTime: 3600
2026-02-15 18:44:45,543 fail2ban.filter [92546]: INFO encoding: UTF-8
2026-02-15 18:44:45,544 fail2ban.jail [92546]: INFO Jail 'sshd' started
Mit sudo fail2ban-client status sshd können Sie sehen, wie viele IPs aktuell gebannt sind
und wie viele fehlgeschlagene Login-Versuche registriert wurden.
Geschafft - Ihr Server ist jetzt deutlich sicherer!
Sie haben erfolgreich:
- Einen dedizierten Benutzer mit sudo-Rechten angelegt
- SSH-Key-Authentifizierung eingerichtet und Passwort-Login deaktiviert
- Root-Login komplett blockiert
- Eine Firewall konfiguriert, die nur notwendige Ports öffnet
- Fail2ban installiert, um Brute-Force-Angriffe automatisch abzuwehren
Troubleshooting
Ich habe mich ausgesperrt - was nun?
Genau dafür sollten Sie die ursprüngliche SSH-Session offen gelassen haben! Falls Sie sich trotzdem ausgesperrt haben:
- Nutzen Sie die Konsolen-Zugang Ihres Cloud-Providers
- Setzen Sie
PasswordAuthentication yesvorübergehend zurück - Starten Sie den SSH-Service neu:
sudo systemctl restart ssh - Melden Sie sich an und prüfen Sie die Konfiguration erneut
Fail2ban hat meine eigene IP gebannt!
# IP entsperren:
sudo fail2ban-client set sshd unbanip IHRE-IP-ADRESSE
# Oder eigene IP zur Whitelist hinzufügen in /etc/fail2ban/jail.local:
ignoreip = 127.0.0.1/8 ::1 IHRE-IP-ADRESSE
Hinweis: Diese Anleitung bietet eine solide Basis-Absicherung für Ubuntu Server. Für produktive Umgebungen mit hohen Sicherheitsanforderungen empfehlen wir eine professionelle Security-Bewertung und individuelle Härtungsmaßnahmen.