Debian 13 (Trixie): Härtung & Wartung (Teil 2)
Teil 1 hat die Basis gelegt: Debian 13 sauber installiert, erster Benutzer, SSH-Zugang. Teil 2 macht aus dem frischen System einen gehärteten Server: SSH weiter absichern, Firewall aktivieren, Sicherheitsupdates automatisieren und eine Wartungsroutine etablieren, die ohne tägliche Handarbeit auskommt. Teil 3 folgt in den nächsten Tagen mit Monitoring und tieferer Absicherung.
Warum Härtung & Wartung?
Ein frisch installierter Server ist wie eine leere Wohnung mit offener Tür: Er funktioniert, aber jede offene Tür ist eine Einladung. Härtung bedeutet, nur die Türen zu öffnen, die wirklich gebraucht werden – und Wartung sorgt dafür, dass die Schlösser aktuell bleiben, ohne dass du täglich dran denken musst.
- Minimalprinzip: Jeder installierte Dienst und jede offene Verbindung ist potenzielle Angriffsfläche.
- Automatisierung: Sicherheitsupdates gehören zu den wenigen Dingen, die ein Server zuverlässig allein erledigen sollte.
- Wiederholbarkeit: Eine dokumentierte Routine macht aus „hoffentlich gepflegt“ ein nachvollziehbares Setup.
Konzept: Weniger Angriffsfläche, weniger Arbeit
Teil 2 folgt einem einfachen Dreiklang, der auch für Teil 3 die Grundlage bildet:
- Angriffsfläche verkleinern – SSH-Richtlinien verschärfen, nur benötigte Dienste und Ports zulassen (Firewall).
- Sicherheitsupdates automatisieren –
unattended-upgradesinstalliert Sicherheitsupdates selbstständig und protokolliert alles. - Wartung routinieren – feste, kurze Checks: Updates, Logs, Dienste, Plattenplatz. Das kostet einmal pro Woche fünf Minuten.
SSH weiter härten
Teil 1 hat PermitRootLogin no und Schlüssel-Login eingerichtet. Jetzt kommen Beschränkungen dazu, die den Alltag kaum stören, aber Brute-Force-Versuche deutlich unattraktiver machen.
99-hardening.conf vervollständigen
Lege die Datei /etc/ssh/sshd_config.d/99-hardening.conf an (ersetzt Einträge aus Teil 1):
# /etc/ssh/sshd_config.d/99-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
AllowUsers lena # nur diese Benutzer dürfen sich einloggen
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
Anschließend die Syntax prüfen und neu laden:
# Syntax prüfen (wenn alles okay ist, erfolgt keine Ausgabe)
sudo sshd -t
# Konfiguration sanft neu laden
sudo systemctl reload ssh
ssh lena@server-ip). Wenn du dich bei AllowUsers vertippt hast, kommst du im neuen Fenster nicht rein – kannst den Fehler aber im noch offenen, alten Fenster sofort korrigieren. Hättest du restart genutzt, wärst du sofort ausgesperrt.Wer mag, kann zusätzlich den Standard-Port ändern (in derselben Datei: Port 2222). Das ist keine echte Sicherheit, reduziert aber das Log-Rauschen enorm – und muss dann in der Firewall berücksichtigt werden.
Firewall mit UFW (nftables)
Debian 13 nutzt standardmäßig nftables; UFW ist nur ein bequemer Regelschreiber darüber und auf Servern der einfachste Einstieg.
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw enable
sudo ufw status verbose
Reihenfolge ist entscheidend: Erst SSH erlauben, dann erst ufw enable – sonst schneidest du dir die eigene Verbindung ab. Nach dem Aktivieren kurz prüfen:
sudo nft list ruleset | head -n 30 # UFW-Regeln landen als nftables-Kette
sudo ufw allow 80,443/tcp comment 'Web'.-p 80:80), hebelt Docker die UFW-Firewall standardmäßig komplett aus! Der Port ist dann trotz ufw default deny incoming weltweit offen. Wie man dieses Sicherheitsrisiko elegant löst, schauen wir uns im kommenden Teil 5 (Container-Härtung) an.Automatische Updates (unattended-upgrades)
Der wichtigste Teil der Wartung läuft ohne dich: Sicherheitsupdates automatisch installieren. Debian bringt dafür unattended-upgrades mit – im Installer von Teil 1 konnte es bereits aktiviert werden; hier richten wir es gezielt ein.
Installation & Aktivierung
sudo apt update
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure unattended-upgrades # „Automatische Installation von Sicherheitsupdates?“ → Ja
Die Datei /etc/apt/apt.conf.d/20auto-upgrades sollte danach so aussehen:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
Reboot-Politik
Nach Kernel- oder Library-Updates ist meist ein Neustart nötig. In /etc/apt/apt.conf.d/50unattended-upgrades kann Debian automatisch neu starten – sinnvoll bei Servern mit Wartungsfenster:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
Automatic-Reboot auf "false" und startet nach Kontrolle selbst neu (siehe Wartungsroutine).Testen & Logs
sudo unattended-upgrades --dry-run --debug # Probelauf
tail -n 30 /var/log/unattended-upgrades/unattended-upgrades.log
systemctl list-timers apt-daily*
Standardmäßig werden nur Pakete aus stable-security automatisch installiert – das ist die richtige Voreinstellung für Server. Zusätzliche Quellen (z. B. Backports) erst nach bewusster Freigabe in der 50er-Datei eintragen.
Wartungsroutine
Einmal pro Woche fünf Minuten – mehr braucht ein Debian-Server mit automatischen Sicherheitsupdates nicht:
sudo apt update && sudo apt full-upgrade # restliche Updates
sudo apt autoremove --purge
sudo systemctl --failed # fehlgeschlagene Dienste?
df -h # Plattenplatz
journalctl -p err -b # Fehler seit Boot
Nach Kernel-Updates wird ein Neustart nötig – Debian legt dafür eine Markierung an:
ls /var/run/reboot-required && echo 'Neustart nötig'
journalctl --vacuum-size=100M räumt das Systemlog auf – oder dauerhaft über SystemMaxUse=100M in /etc/systemd/journald.conf.Wartung heißt auch: wissen, was läuft. Ein kurzer Blick auf offene Ports und aktive Dienste gehört dazu:
ss -tulpn
systemctl list-units --type=service --state=running
AppArmor & System-Dienste
Debian aktiviert AppArmor bereits standardmäßig für viele Pakete. Ein kurzer Check zeigt, ob die Profile laden:
sudo aa-status | head -n 20
- Enforce vs. Complain: Enforce blockiert, Complain protokolliert nur – für eigene Profile erst im Complain-Modus testen.
- Nur Dienste installieren, die gebraucht werden:
apt autoremovenimmt nicht genutzte Pakete mit raus. - Dienste an den Bedarf binden: z. B. SSH nur lokal, Web-Dienste später hinter dem Reverse Proxy.
Quick-Check-Liste
Damit nichts vergessen wird – die komplette Teil-2-Routine auf einen Blick:
- SSH:
AllowUsersgesetzt,PermitRootLogin no, Passwort-Login aus,sudo sshd -tgrün? - Firewall: UFW aktiv, Default deny incoming, nur 22 (und später nötige Dienste) offen?
- Updates:
unattended-upgradesinstalliert, Sicherheitsquellen aktiv, Reboot-Politik entschieden? - Routine: Wöchentlicher
full-upgrade+journalctl -p err-Check eingeplant? - Backup: Grund-Backup des Systems einplanen – Teil 3 nimmt das Konzept auf.
Häufige Probleme
| Problem | Lösung |
|---|---|
Nach ufw enable keine SSH-Verbindung mehr | Vorher ufw allow 22/tcp ausgeführt? Falls nicht: per Konsole (VNC/IPMI) verbinden und ufw allow 22/tcp nachholen. |
AllowUsers sperrt mich aus | Zweite SSH-Verbindung offen halten; sshd -t prüft nur die Syntax, nicht deine Benutzerliste. |
| unattended-upgrades läuft nicht | systemctl list-timers apt-daily* prüfen, Log unter /var/log/unattended-upgrades/, Probelauf mit --dry-run --debug. |
| „dpkg was interrupted“ bei apt | Laufenden unattended-upgrade-Prozess abwarten oder sudo dpkg --configure -a ausführen. |
| Journal frisst Platte | journalctl --vacuum-size=100M bzw. SystemMaxUse in journald.conf setzen. |
| Kernel-Update ohne Neustart | ls /var/run/reboot-required zeigt, ob ein Neustart ansteht – im Wartungsfenster durchführen. |
Fazit & Ausblick Teil 3
Mit SSH-Härtung, aktiver Firewall und automatischen Sicherheitsupdates ist der Server aus Teil 1 jetzt ein System, das im Alltag wenig Aufmerksamkeit braucht – aber im Ernstfall aktuell und dicht ist. Die wöchentliche Fünf-Minuten-Routine fängt den Rest ab.
② Firewall erst öffnen, dann aktivieren – sonst bist du draußen.
③ Sicherheitsupdates automatisch, Rest-Updates wöchentlich.
④ Jede Härtung gehört dokumentiert, sonst hilft sie niemandem.
Teil 3 (in den nächsten Tagen) vertieft: Fail2ban/sshguard, Kernel-Parameter, AppArmor-Profile für eigene Dienste, Monitoring mit Alarmierung und die Backup-Strategie. Bis dahin gilt: regelmäßig full-upgrade, Logs im Blick – und weiter viel Spaß mit Debian.