Ubuntu Server 24.04 LTS härten - Grundlegende Sicherheitsmaßnahmen
Veröffentlicht am 4. November 2025 (Zuletzt verändert am 5. November 2025) • 10 Min. Lesezeit • 2.115 WörterSchritt-für-Schritt-Anleitung zum Absichern eines frisch installierten Ubuntu Server 24.04 LTS mit Firewall, Fail2Ban und automatischen Updates
Kürzlich habe ich einen Cloud Virtual Private Server (VPS) gemietet mit vorinstalliertem Ubuntu Server 24.04 LTS. Bevor ich jedoch die ersten Services darauf installiere, steht immer der wichtigste Schritt an: die Absicherung des Systems. Ein ungesicherter Server im Internet ist wie eine offene Tür – es dauert oft nur Minuten, bis die ersten automatisierten Angriffsversuche starten.
Die hier beschriebenen Schritte gelten natürlich genauso, wenn du einen Server in deinem Homelab betreibst, der aus dem Internet erreichbar ist. Egal ob Cloud-VPS oder eigene Hardware – die Grundlagen der Absicherung bleiben dieselben.
In diesem Artikel zeige ich dir, wie du einen Ubuntu Server 24.04 LTS mit grundlegenden, aber effektiven Sicherheitsmaßnahmen absicherst. Wir werden gemeinsam die wichtigsten Schritte durchgehen, die jeder Server durchlaufen sollte, bevor er produktiv eingesetzt wird.
Selbst in einem privaten Homelab sollte Sicherheit nicht vernachlässigt werden. Die Gründe sind vielfältig:
Für diesen Artikel benötigst du:
Bevor wir mit dem Härten beginnen, sollten wir uns einen Überblick verschaffen, welche Dienste aktuell laufen und welche Ports nach außen exponiert sind. Das ist wichtig, um zu verstehen, was wir absichern müssen.
Der Befehl ss (socket statistics) zeigt uns alle lauschenden Ports:
sudo ss -tulpn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))Parameter erklärt:
-t = TCP-Verbindungen-u = UDP-Verbindungen-l = Nur lauschende Sockets-p = Zeigt Prozessinformationen-n = Numerische Anzeige (keine Namensauflösung)In diesem Beispiel sehen wir, dass nur SSH (Port 22) lauscht – ein guter Ausgangspunkt für einen frischen Server.
Schauen wir uns an, welche Dienste auf dem System aktiv sind:
systemctl list-units --type=service --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
ssh.service loaded active running OpenBSD Secure Shell server
systemd-journald.service loaded active running Journal Service
systemd-udevd.service loaded active running Rule-based Manager for Device EventsFalls du einen zweiten Rechner im Netzwerk hast, kannst du mit nmap von extern scannen:
nmap -sV 192.168.1.100
Starting Nmap 7.94
Nmap scan report for homelab-srv (192.168.1.100)
Host is up (0.0012s latency).
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13 (Ubuntu Linux; protocol 2.0)Der erste und wichtigste Schritt ist, das System auf den neuesten Stand zu bringen. Sicherheitsupdates schließen bekannte Schwachstellen.
sudo apt update
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertigsudo apt upgrade -y
Die folgenden Pakete werden aktualisiert:
base-files curl libcurl4 openssh-client openssh-server
5 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.Falls Kernel-Updates installiert wurden, ist ein Neustart erforderlich:
sudo rebootUFW (Uncomplicated Firewall) ist eine benutzerfreundliche Frontend-Lösung für iptables. Sie ermöglicht es uns, schnell und einfach Firewall-Regeln zu definieren.
sudo apt install ufw -ysudo ufw allow 22/tcp comment 'SSH'
Regeln aktualisiert
Regeln aktualisiert (v6)Setze die Standard-Policy (eingehende Verbindungen blockieren, ausgehende erlauben):
sudo ufw default deny incoming
sudo ufw default allow outgoing
Standard-Eingangsrichtlinie auf 'deny' geändert
Standard-Ausgangsrichtlinie auf 'allow' geändertAktiviere die Firewall:
sudo ufw enable
Firewall ist aktiv und wird beim Systemstart aktiviertÜberprüfe den Status:
sudo ufw status verbose
Status: Aktiv
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
Neue Profile: skip
Zu Aktion Von
-- ------ ---
22/tcp ALLOW IN Anywhere # SSH
22/tcp (v6) ALLOW IN Anywhere (v6) # SSHJe nach deinen Anforderungen kannst du weitere Ports freigeben. Hier einige häufige Beispiele:
Webserver
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
Docker Swarm (Beispiel)
sudo ufw allow 2377/tcp comment 'Docker Swarm'
Proxmox Web-Interface (falls benötigt)
sudo ufw allow 8006/tcp comment 'Proxmox Web UI'Es ist eine Best Practice, nicht als root zu arbeiten und sudo-Zugriffe einzuschränken. Wichtig: Wir richten dies ein, BEVOR wir SSH härten und den root-Login deaktivieren, um uns nicht auszusperren!
sudo adduser frank
Neues Passwort eingeben:
Passwort wiederholen:
Vollständigen Namen eingeben []: Franksudo usermod -aG sudo franksudo whoami
[sudo] Passwort für frank:
rootFalls du sicher bist, dass du root nicht mehr benötigst:
sudo passwd -l root
passwd: Passwortablaufdaten geändertSSH ist meist der einzige von außen erreichbare Dienst auf einem Server. Deshalb ist es besonders wichtig, diesen gut abzusichern.
Falls du noch keine SSH-Keys verwendest, erstelle zunächst auf deinem lokalen Rechner ein Schlüsselpaar:
ssh-keygen -t ed25519 -C "homelab-server"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/frank/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase): #### Passwort eingeben!
Your identification has been saved in /home/frank/.ssh/id_ed25519
Your public key has been saved in /home/frank/.ssh/id_ed25519.pubKopiere den öffentlichen Schlüssel auf den Server:
ssh-copy-id ubuntu@192.168.1.100
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ubuntu@192.168.1.100'"Teste die Anmeldung mit dem Schlüssel:
ssh ubuntu@192.168.1.100
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-45-generic x86_64)Jetzt passen wir die SSH-Konfiguration an. Erstelle zunächst ein Backup:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backupBearbeite die Konfiguration:
sudo nano /etc/ssh/sshd_config# Port ändern (optional, aber empfohlen)
Port 2222
# Nur SSH Protocol 2 verwenden
Protocol 2
# Root-Login verbieten
PermitRootLogin no
# Passwort-Authentifizierung deaktivieren (erst nach SSH-Key-Test!)
PasswordAuthentication no
PubkeyAuthentication yes
# Leere Passwörter verbieten
PermitEmptyPasswords no
# X11-Forwarding deaktivieren (falls nicht benötigt)
X11Forwarding no
# MaxAuthTries begrenzen
MaxAuthTries 3
# LoginGraceTime reduzieren
LoginGraceTime 20
# Nur bestimmte Benutzer erlauben (optional)
AllowUsers ubuntu
# Nur IPv4 verwenden (optional)
AddressFamily inetWichtig: Wenn du den SSH-Port änderst (z.B. auf 2222), vergiss nicht, diesen Port in der Firewall freizugeben und den alten zu schließen:
sudo ufw allow 2222/tcp comment 'SSH custom port'
sudo ufw delete allow 22/tcpÜberprüfe die Konfiguration auf Syntaxfehler:
sudo sshd -t
# Keine Ausgabe bedeutet: Alles OK!Aktiviere und starte den SSH-Dienst neu:
sudo systemctl enable ssh
sudo systemctl restart ssh.socketWichtig: Öffne eine zweite SSH-Verbindung zum Server, BEVOR du die erste schließt, um sicherzustellen, dass du dich noch einloggen kannst!
Fail2Ban überwacht Log-Dateien und sperrt IP-Adressen nach wiederholten fehlgeschlagenen Login-Versuchen automatisch. Das schützt vor Brute-Force-Angriffen.
sudo apt install fail2ban -yFail2Ban verwendet eine jail.conf, die wir nicht direkt bearbeiten sollten. Stattdessen erstellen wir eine jail.local:
sudo nano /etc/fail2ban/jail.local[DEFAULT]
# Banzeit: 1 Stunde
bantime = 3600
# Zeitfenster, in dem die Versuche gezählt werden: 10 Minuten
findtime = 600
# Maximale Anzahl fehlgeschlagener Versuche
maxretry = 5
# Ignoriere lokale IPs (passe dies an dein Netzwerk an)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
[sshd]
enabled = true
port = 2222
# Falls du den Standard-Port 22 verwendest, ändere dies entsprechend
logpath = %(sshd_log)s
backend = %(sshd_backend)signoreip an dein lokales Netzwerk an, damit du dich nicht selbst aussperrst. Wenn du den SSH-Port geändert hast, passe den port-Wert entsprechend an.
Starte Fail2Ban und aktiviere den Autostart:
sudo systemctl enable fail2ban
sudo systemctl start fail2banÜberprüfe den Status:
sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdDetails zu einem spezifischen Jail:
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:Um zu testen, ob Fail2Ban funktioniert, kannst du von einem anderen Rechner aus mehrfach mit einem falschen Passwort versuchen, dich einzuloggen:
ssh ubuntu@192.168.1.100 -p 2222
ubuntu@192.168.1.100's password: #### Falsches Passwort eingeben
Permission denied, please try again.
# Nach 5 Versuchen: Connection refusedDie IP wird nun für 1 Stunde gesperrt. Du kannst dies überprüfen:
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Currently banned: 1
`- Banned IP list: 192.168.1.50Falls du eine IP manuell entsperren möchtest:
sudo fail2ban-client set sshd unbanip 192.168.1.50Sicherheitsupdates sollten zeitnah eingespielt werden. Mit unattended-upgrades können wir dies automatisieren.
sudo apt install unattended-upgrades -yBearbeite die Konfigurationsdatei:
sudo nano /etc/apt/apt.conf.d/50unattended-upgradesUnattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Auch wichtige Updates installieren (optional)
// "${distro_id}:${distro_codename}-updates";
};
// Pakete, die NICHT automatisch aktualisiert werden sollen
Unattended-Upgrade::Package-Blacklist {
// Beispiel: "docker-ce";
};
// Automatisch neustart, falls erforderlich (Vorsicht im Homelab!)
Unattended-Upgrade::Automatic-Reboot "false";
// Falls Neustart aktiviert: Uhrzeit festlegen
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
// E-Mail-Benachrichtigung (optional)
// Unattended-Upgrade::Mail "deine@email.de";
// Unattended-Upgrade::MailReport "on-change";
// Alte Kernel automatisch entfernen
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";Aktiviere automatische Updates:
sudo dpkg-reconfigure -plow unattended-upgrades
# Wähle "Ja" ausÜberprüfe die Konfiguration:
sudo unattended-upgrades --dry-run --debugAutomatic-Reboot "true") können in einem Homelab problematisch sein, wenn Services laufen. Überlege dir gut, ob du diese Option aktivieren möchtest.
Nachdem wir alle Maßnahmen umgesetzt haben, führen wir eine finale Überprüfung durch.
sudo ss -tulpn | grep LISTEN
tcp LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=1234,fd=3))Perfekt! Nur noch unser angepasster SSH-Port ist offen.
sudo ufw status numbered
Status: Aktiv
Zu Aktion Von
-- ------ ---
[ 1] 2222/tcp ALLOW IN Anywhere # SSH custom port
[ 2] 2222/tcp (v6) ALLOW IN Anywhere (v6) # SSH custom portsudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-11-04 10:15:32 UTC; 2h agonmap -sV 192.168.1.100 -p 1-65535
Starting Nmap 7.94
Nmap scan report for homelab-srv (192.168.1.100)
Host is up (0.0012s latency).
Not shown: 65534 filtered ports
PORT STATE SERVICE VERSION
2222/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13Ausgezeichnet! Von außen ist nur noch der angepasste SSH-Port sichtbar.
sudo tail -n 20 /var/log/auth.log
Nov 4 10:30:15 homelab-srv sshd[2456]: Accepted publickey for ubuntu from 192.168.1.50
Nov 4 10:30:15 homelab-srv sshd[2456]: pam_unix(sshd:session): session opened for user ubuntuJe nach deinen Anforderungen kannst du weitere Sicherheitsmaßnahmen ergreifen:
AppArmor (Application Armor) ist ein Mandatory Access Control (MAC) System, das in Ubuntu vorinstalliert ist. Es schränkt die Berechtigungen einzelner Programme ein, indem es sie in Sicherheitsprofile “einsperrt”. So kann beispielsweise ein kompromittierter Webserver nur auf die Dateien zugreifen, die er wirklich benötigt.
Ubuntu 24.04 kommt mit AppArmor vorinstalliert. Überprüfe, ob es aktiv ist:
sudo aa-status
apparmor module is loaded.
49 profiles are loaded.
49 profiles are in enforce mode.Lynis ist ein Open-Source-Sicherheits-Audit-Tool, das dein System auf Schwachstellen und Konfigurationsprobleme überprüft. Es scannt hunderte von Sicherheitsaspekten (SSH-Konfiguration, Firewall-Einstellungen, Kernel-Parameter, installierte Pakete, etc.) und gibt dir einen detaillierten Bericht mit Verbesserungsvorschlägen.
sudo apt install lynis -y
sudo lynis audit system
# Lynis führt einen umfassenden Sicherheits-Scan durchFür maximale Sicherheit kannst du 2FA mit Google Authenticator einrichten:
sudo apt install libpam-google-authenticator -y
google-authenticator
# Folge den Anweisungen und scanne den QR-Code mit deiner Authenticator-AppGlückwunsch! Du hast deinen Ubuntu Server 24.04 LTS erfolgreich gehärtet. Die wichtigsten Sicherheitsmaßnahmen sind nun implementiert:
✅ System ist auf dem neuesten Stand ✅ UFW-Firewall blockiert unerwünschte Verbindungen ✅ SSH ist durch Schlüsselauthentifizierung, custom Port und weitere Härtungen abgesichert ✅ Fail2Ban schützt vor Brute-Force-Angriffen ✅ Automatische Sicherheitsupdates sind aktiviert ✅ Nur notwendige Ports sind exponiert
Dein Server ist nun deutlich besser gegen Angriffe geschützt und bereit für den produktiven Einsatz!
Natürlich ist IT-Sicherheit ein fortlaufender Prozess. Überprüfe regelmäßig die Logs, halte das System aktuell und passe die Sicherheitsmaßnahmen an deine sich ändernden Anforderungen an.
Jetzt, wo dein Server abgesichert ist, kannst du mit dem Installieren deiner Services beginnen. Hier einige Ideen:
Viel Erfolg beim Härten deines Servers und viel Spaß in deinem Homelab!