🛡️ Server-Härtung · 6 Schritte

Ubuntu Server härten:
UFW, SSH, fail2ban, Updates.

Sechs Schritte für ein systematisch gehärtetes Ubuntu-Server-Setup. Mit konkreten Befehlen, die wir auf unseren Plesk-Servern produktiv einsetzen – nicht generische Pseudo-Anleitung, sondern was tatsächlich auf unserem Stack läuft. Funktioniert für 24.04 LTS und 26.04 LTS gleichermaßen.

Vor dem Härten: Standortbestimmung

Ein neu installiertes Ubuntu Server ist erstaunlich offen ausgeliefert. Was nach einer Minimal-Installation aktiv ist:

  • SSH auf Port 22 mit Passwort-Login möglich
  • Keine aktive Firewall (UFW installiert, aber inaktiv)
  • Unattended-Upgrades nicht eingerichtet (nur Security-Quelle aktiviert)
  • AppArmor aktiv, aber mit Standard-Profilen
  • fail2ban nicht installiert

Mit den folgenden sechs Schritten wird das Setup deutlich abgesicherter. Erfahrungs-Schätzung: 1–2 Stunden für ein sauberes Initial-Hardening, wenn man weiß was man tut. Im Service-Auftrag plus Funktionstest und Dokumentation.

Schritt 1: UFW-Firewall einrichten

UFW (Uncomplicated Firewall) ist die Standard-Firewall-Konfiguration unter Ubuntu. Wir aktivieren sie als Standard-Default-Block und öffnen nur, was gebraucht wird.

# Standard: alles eingehend blockieren, alles ausgehend erlauben
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH erlauben (zunächst noch auf Port 22, wird in Schritt 2 geändert)
sudo ufw allow OpenSSH

# Bei Webserver: HTTP und HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Firewall aktivieren
sudo ufw enable

# Status prüfen
sudo ufw status verbose

Wichtig: vor dem ufw enable die SSH-Regel setzen, sonst sperrt man sich aus. Bei Plesk-Hosts kommen weitere Ports dazu: 8443 (Plesk-Backend), 8447 (Plesk-Updater), 21 (FTP), 25 / 465 / 587 (SMTP), 110 / 143 / 993 / 995 (POP3 / IMAP). Die genauen Ports hängen vom konkreten Setup ab.

Schritt 2: SSH absichern

SSH ist der wichtigste Angriffsvektor. Drei Maßnahmen, die zusammen den Großteil der automatisierten Bot-Angriffe ins Leere laufen lassen.

2a) SSH-Key generieren und hochladen

Auf dem lokalen Rechner (nicht auf dem Server!):

# Schlüssel generieren (Ed25519, modern und kurz)
ssh-keygen -t ed25519 -C "alex@workstation" -f ~/.ssh/server-key

# Schlüssel auf den Server hochladen
ssh-copy-id -i ~/.ssh/server-key.pub user@server-ip

# Test: Login ohne Passwort möglich?
ssh -i ~/.ssh/server-key user@server-ip

2b) SSH-Konfiguration anpassen

Auf dem Server /etc/ssh/sshd_config bearbeiten:

# Port wechseln (gegen Drive-By-Bots)
Port 22022

# Root-Login verbieten
PermitRootLogin no

# Passwort-Authentifizierung deaktivieren (NUR wenn SSH-Key funktioniert!)
PasswordAuthentication no
PubkeyAuthentication yes

# Maximale Login-Versuche
MaxAuthTries 3

# Idle-Timeout
ClientAliveInterval 300
ClientAliveCountMax 2

# Login-Banner (optional)
Banner /etc/issue.net
# Konfiguration prüfen, dann SSH-Daemon neu starten
sudo sshd -t  # Syntax-Check, gibt nichts aus wenn ok
sudo systemctl restart ssh

# UFW-Regel anpassen
sudo ufw allow 22022/tcp
sudo ufw delete allow OpenSSH

Faustregel: erst neue SSH-Verbindung in einem zweiten Terminal testen, bevor man die alte schließt. Wer sich aussperrt, braucht Konsolen-Zugang beim Hoster. Genau hier passieren die meisten Lockouts.

2c) fail2ban installieren

sudo apt install fail2ban

# eigene Konfiguration in /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
port = 22022
logpath = /var/log/auth.log
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Bei Plesk-Servern bringt Plesk eine eigene fail2ban-Integration mit (Tools & Einstellungen → Fail2Ban). Die ist oft komfortabler und überschneidet sich nicht mit einer manuellen Konfiguration – im Plesk-Setup nutzen wir die Plesk-Variante und ergänzen sie nur, wenn spezifische Jails fehlen.

Schritt 3: Automatische Sicherheits-Updates

Sicherheits-Patches sollten automatisch eingespielt werden – auch wenn man die Maschine selbst täglich anschaut. Ubuntu bringt dafür unattended-upgrades mit.

sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure unattended-upgrades

Die Konfigurations-Dateien:

# /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Mail "alerts@example.com";

Wichtig: Automatic-Reboot nur aktivieren, wenn der Server eine geplante Wartungs-Zeit hat. Bei Plesk-Hosts ist das in der Regel nachts unproblematisch, bei spezialisierten Anwendungs-Servern muss das mit dem Anwendungs-Plan abgeglichen werden.

# Test: was würde ein Run aktuell installieren?
sudo unattended-upgrade --dry-run --debug

Schritt 4: AppArmor-Profile prüfen

AppArmor ist Ubuntus Mandatory-Access-Control-System. Es ist standardmäßig aktiv, aber mit eher schwachen Profilen für viele Dienste.

# Status prüfen
sudo aa-status

# Welche Profile sind im Enforce-Mode?
sudo aa-status | grep -A1 "enforce mode"

Für viele Setup-Standardfälle ist AppArmor mit den Default-Profilen brauchbar. Wer es ernster meint:

sudo apt install apparmor-utils apparmor-profiles apparmor-profiles-extra

# Beispiel: nginx-Profil aktivieren
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo systemctl restart apparmor

Wichtig: AppArmor-Profile können bestehende Anwendungen brechen, wenn sie zu strikt sind. Erst im Complain-Mode laufen lassen, Logs (journalctl -k) ansehen, dann auf Enforce stellen.

Schritt 5: Logging und Monitoring

Ohne Beobachtung ist Härtung blind. Die Mindest-Ausstattung:

5a) journalctl-Basis-Befehle

# Letzte Boot-Logs
sudo journalctl -b

# Auth-Versuche der letzten 24 Stunden
sudo journalctl _SYSTEMD_UNIT=ssh.service --since "24 hours ago"

# Live-Tail
sudo journalctl -f

5b) Log-Rotation und -Retention

Standardmäßig werden Logs durch logrotate verwaltet. Für sicherheits-relevante Logs (auth.log, fail2ban.log) sollten längere Retention-Zeiten gesetzt werden:

# /etc/logrotate.d/rsyslog anpassen
/var/log/auth.log
{
    rotate 12
    monthly
    missingok
    notifempty
    delaycompress
    compress
}

5c) Optional: aktives Monitoring

Für Server in produktivem Einsatz: Netdata (Realtime-Metriken), Munin (langfristige Trends), oder zentrales Logging mit Loki/Grafana. Bei Plesk-Setups gibt es teilweise eingebaute Monitoring-Tools, die für viele Use-Cases ausreichen.

Schritt 6: Regelmäßige Audits

Härtung ist kein einmaliger Vorgang. Drei Werkzeuge für regelmäßige Prüfungen:

Lynis: Sicherheits-Audit

sudo apt install lynis
sudo lynis audit system

# Ausgabe enthält Score und konkrete Verbesserungs-Vorschläge

Debsums: Dateiintegrität gegen Paket-Manifest

sudo apt install debsums
sudo debsums -c  # Prüft, ob Pakete unverändert sind

chkrootkit / rkhunter: Rootkit-Scanner

sudo apt install chkrootkit
sudo chkrootkit

Diese Tools sollten Teil eines monatlichen oder quartalsweisen Audit-Rhythmus sein. Ein Cron-Job, der Lynis monatlich läuft und das Ergebnis per E-Mail schickt, ist wenig Aufwand und liefert kontinuierliche Sichtbarkeit.

Häufige Fehler beim Härten

Fehler 1: SSH-Lockout durch Fehlkonfiguration

Kommt bei fast jedem Hardening-Anfänger einmal vor: PasswordAuthentication deaktiviert, aber der SSH-Key noch nicht eingerichtet. Oder die UFW-Regel für den neuen SSH-Port falsch geschrieben.

Faustregel: immer eine zweite SSH-Sitzung offen lassen, während du Änderungen testest. Erst wenn die neue Verbindung in einem frischen Terminal funktioniert, alte Sitzung schließen.

Fehler 2: UFW-Regel-Reihenfolge falsch

UFW arbeitet stateful, aber wenn man Regeln in falscher Reihenfolge zufügt, können vorherige Regeln greifen, bevor neue zum Zuge kommen. sudo ufw status numbered gibt eine Übersicht, sudo ufw delete N löscht Regel Nr. N.

Fehler 3: fail2ban-Bantime zu kurz

3600 Sekunden (1 Stunde) ist Standard, aber für ernste Bots zu wenig. 86400 (1 Tag) oder noch mehr für IPs mit drei oder mehr Lockouts ist üblich. Permanent-Ban via recidive-Jail ist die Eskalations-Stufe.

Fehler 4: AppArmor-Profile zu strikt

Ein Enforce-Profil, das Datei-Zugriffe blockiert, kann ganze Dienste lahmlegen. Erst Complain-Mode, dann Audit-Logs ansehen, dann Profil anpassen, dann Enforce. Nicht andersherum.

Fehler 5: Automatic-Reboot ohne Anwendungs-Plan

Wenn unattended-upgrades nachts neustartet, aber zu der Zeit ein Backup-Job läuft oder eine Datenbank-Migration aktiv ist, gibt es Inkonsistenzen. Reboot-Zeit muss zur Anwendungs-Wartungsfenster passen.

Plesk-Spezifika

Bei Plesk-Hosts gibt es einige Sondertruppen, die das normale Härten ergänzen:

  • Plesk-eigene Fail2Ban-Integrationstatt manueller fail2ban-Konfiguration nutzen.
  • Plesk-Firewall-GUIparallel zur UFW – nicht beide gleichzeitig konfigurieren.
  • ModSecurity in Pleskals zusätzliche Web-Application-Firewall aktivierbar.
  • Auto-Update für Plesk selbsteinrichten (Tools & Einstellungen → Updates).
FAQ

Häufige Fragen

Wie lange dauert ein vollständiges Server-Hardening?
Bei einer Standard-Maschine etwa 2–4 Stunden für die initiale Härtung mit Funktionstests und Dokumentation. Mit Plesk-Spezifika und individuellen Anpassungen je nach Setup auch 4–6 Stunden. In unserem Service-Auftrag rechnen wir den tatsächlichen Aufwand transparent ab.
Reicht UFW + fail2ban + SSH-Keys aus?
Für die meisten Standard-Server: ja, das deckt 90 % der automatisierten Angriffe ab. Bei höheren Compliance-Anforderungen kommen weitere Maßnahmen dazu: Network Segmentation, Intrusion Detection (Snort, Suricata), zentrales Logging, Hardening Benchmarks (CIS, ISO 27001-Vorbereitung). Das fällt eher in den Bereich „Compliance-Beratung" als ins Standard-Hardening.
Was ist mit Container-/Docker-Setups?
Container brauchen eigene Härtungs-Schritte: Image-Scans (z. B. trivy), Rootless-Containers, Network Policies, Secrets Management. Die hier beschriebenen Schritte gelten für den Host-OS – Container-Hardening ist eine eigene Disziplin und nicht in dieser Anleitung abgebildet.
Soll ich Ubuntu Pro / ESM kaufen für Sicherheits-Updates?
Bei produktiven Servern, die länger laufen sollen als der Standard-Support einer LTS: ja. Pro gibt es kostenlos für bis zu 5 Maschinen privat. Für Unternehmen mit mehr Maschinen wird es kostenpflichtig, ist aber gegenüber Major-Upgrades alle 5 Jahre oft günstiger als der Aufwand für die Migration.
Was, wenn ich mich ausgesperrt habe?
Drei Optionen: (1) Konsolen-Zugang über das Hosting-Panel (KVM/IPMI bei Hetzner, Plesk-Notfall-Console, etc.). (2) Recovery-Boot mit Live-USB falls physikalischer Zugriff. (3) Bei akuten Notfällen: notdienst.seo-manager.info – wir haben 24/7-Hotline und können oft remote beim Hoster über das Panel rauskommen.
Macht ihr Server-Härtung auf Stundenbasis?
Ja, das ist einer der drei Service-Bereiche im Linux-Server-Service. Aufwand 2–4 Stunden für eine Standard-Maschine, 4–8 Stunden für komplexere Setups mit Plesk und individueller Anpassung. 200 € netto/Std., Aufwands-Schätzung vorab.
💰 29 € / Monat brutto · Sofort verfügbar

Server-Härtung delegieren?

Wir härten Ubuntu-Server systematisch durch alle 6 Schritte. 2–4 Stunden für eine Standard-Maschine, 200 € netto/Std. Mit schriftlichem Hardening-Protokoll am Ende.

→ Linux-Service anfragen

Server in Deutschland · Versandkostenfrei · Keine Einrichtungsgebühr