Beim Einrichten eines neuen Debian-Servers ist es entscheidend, das System abzusichern, bevor du Dienste darauf installierst.
Diese Anleitung führt dich durch die grundlegenden Schritte zur Härtung deines Systems — von Systemaktualisierungen und Benutzerverwaltung bis hin zu SSH-Härtung, Firewall-Konfiguration und optionalen Schutzwerkzeugen.
Hinweis: Einige Befehle müssen als
rootoder mitsudoausgeführt werden.
Passe Pfade oder Befehle je nach Debian-Version leicht an.
1. System vorbereiten#
Beginne damit, das System zu aktualisieren, um sicherzustellen, dass alle Pakete auf dem neuesten Stand sind:
sudo apt-get update && sudo apt-get upgrade -y
Wenn du Vim als Editor bevorzugst:
sudo apt-get install vim -y
(Optional) Backup-Tools installieren: Restic & Rclone#
Diese Tools ermöglichen automatisierte, verschlüsselte Backups auf lokalen oder Cloud-Speichern.
sudo apt-get install restic -y
sudo restic self-update
curl -fsSL https://rclone.org/install.sh | sudo bash
2. Richtige Zeitzone setzen#
Die richtige Zeitzone ist wichtig für Logs, Cronjobs und Zertifikatsprüfungen.
sudo timedatectl set-timezone Europe/Berlin
sudo timedatectl
Ersetze Europe/Berlin durch deine Zeitzone.
Alle verfügbaren Zeitzonen kannst du mit folgendem Befehl anzeigen:
timedatectl list-timezones
3. Sicheren Admin-Benutzer erstellen#
Anstatt direkt mit dem Root-Account zu arbeiten, lege einen dedizierten Benutzer mit sudo-Rechten an:
sudo useradd -m -U -s /bin/bash -G sudo sysadmin
sudo passwd sysadmin
Jetzt kannst du dich als sysadmin statt als root anmelden.
4. SSH-Zugang absichern#
SSH ist dein Hauptzugang zu entfernten Servern — daher besonders wichtig, ihn abzusichern.
Öffne die SSH-Konfigurationsdatei:
sudo vim /etc/ssh/sshd_config
Ersetze den Inhalt durch:
Include /etc/ssh/sshd_config.d/*.conf
Port 29
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 4
AllowUsers sysadmin
PubkeyAuthentication no
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
PrintMotd no
PrintLastLog no
ClientAliveInterval 300
ClientAliveCountMax 1
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
Dann testen und SSH neu starten:
sudo sshd -t
sudo systemctl restart sshd
sudo systemctl status sshd
Tipp: Ein nicht-standardmäßiger Port wie
29reduziert automatisierte Angriffe auf Port22.
5. SSH-Schlüssel-Authentifizierung einrichten (empfohlen)#
Passwort-Login funktioniert, aber schlüsselbasierte Authentifizierung ist deutlich sicherer.
Auf deinem lokalen Rechner#
Erstelle einen Ed25519 SSH-Schlüssel:
ssh-keygen -t ed25519 -f ~/.ssh/server
Optional kannst du den Kommentar anpassen:
ssh-keygen -c -C "server.example.com" -f ~/.ssh/server
Bearbeite deine lokale SSH-Konfiguration:
vim ~/.ssh/config
Füge hinzu:
Host server
    HostName 0.0.0.0
    User sysadmin
    IdentityFile ~/.ssh/server
    Port 29
Ersetze 0.0.0.0 durch die IP-Adresse oder Domain deines Servers.
Kopiere den Schlüssel auf den Server:
ssh-copy-id -i ~/.ssh/server.pub server
Zurück auf dem Server#
Öffne erneut die SSH-Konfiguration:
sudo vim /etc/ssh/sshd_config
Ersetze den Inhalt mit dieser (Unterschiede beachten):
Include /etc/ssh/sshd_config.d/*.conf
Port 29
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 4
AllowUsers sysadmin
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
PrintMotd no
PrintLastLog no
ClientAliveInterval 300
ClientAliveCountMax 1
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
Dann:
sudo sshd -t
sudo systemctl restart sshd
sudo systemctl status sshd
Passwort-Login ist jetzt deaktiviert — nur SSH-Schlüssel werden akzeptiert.
6. (Optional) Schutz mit Fail2Ban#
Fail2Ban blockiert IPs nach wiederholten fehlgeschlagenen Login-Versuchen.
Installieren und aktivieren:
sudo apt-get install fail2ban -y
sudo systemctl enable fail2ban
Backup und Konfiguration bearbeiten:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
Füge Folgendes hinzu bzw. passe es an:
bantime.increment = true
bantime.multipliers = 1 2 4 8 16 32 64
bantime  = 300m
findtime  = 10m
maxretry = 3
[sshd]
enabled = true
port    = 29
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Dann neu starten und prüfen:
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
sudo fail2ban-client status sshd
7. (Optional) Firewall mit UFW einrichten#
UFW (Uncomplicated Firewall) ist eine einfache und effektive Firewall für Debian.
Installieren und aktivieren:
sudo apt-get install ufw -y
SSH (bzw. deinen benutzerdefinierten Port) erlauben:
sudo ufw allow 29/tcp
Prüfen und aktivieren:
sudo ufw status verbose
sudo ufw enable
sudo ufw status verbose
Jetzt sind nur noch freigegebene Ports von außen erreichbar.
8. Automatische Sicherheitsupdates aktivieren#
Regelmäßige Sicherheitsupdates sind entscheidend für langfristige Stabilität und Sicherheit.
sudo apt-get install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
Damit werden tägliche automatische Sicherheitsupdates aktiviert.
9. (Optional) Systemintegrität prüfen#
Installiere ein einfaches Tool zur Integritätsprüfung:
sudo apt-get install debsums -y
sudo debsums -s
Damit prüfst du, ob Systemdateien verändert oder beschädigt wurden.
Zusammenfassung#
Dein Debian-System ist jetzt deutlich besser abgesichert:
- Aktualisierte Systempakete
- Nicht-root Benutzer mit sudo
- Gehärtete SSH-Konfiguration
- SSH-Schlüssel-Authentifizierung
- Fail2Ban-Schutz
- UFW-Firewall
- Automatische Sicherheitsupdates
Diese grundlegenden Maßnahmen bilden eine solide Basis für jeden Debian-basierten Server. Für noch mehr Sicherheit kannst du Tools wie Lynis, rkhunter oder System-Auditing mit auditd hinzufügen.


