Linux-Sicherheitshärtung: Eine praktische Checkliste
Standard-Linux ist nicht produktionsreif. Gehen Sie SSH-Härtung, Firewall, automatische Updates und Benutzerrechtekontrollen Schritt für Schritt durch.
Inhaltsverzeichnis
- Warum Standard-Installationen unsicher sind
- Benutzerkonto- und Authentifizierungshärtung
- Root-Login deaktivieren und Sudo verwenden
- Starke Passwortrichtlinien durchsetzen
- Ungenutzte Konten sperren
- SSH-Härtung
- Firewall-Konfiguration
- Systemaktualisierungen und Paketverwaltung
- Unnötige Dienste deaktivieren
- Dateisystemsicherheit
- Einbruchserkennung und Überwachung
- Kernel-Härtung mit sysctl
Warum Standard-Installationen unsicher sind
Ein frisch installierter Linux-Server wird mit einer Reihe von Standardeinstellungen geliefert, die für breite Kompatibilität und einfache Einrichtung optimiert sind — nicht für Sicherheit. Dienste, die du nicht benötigst, könnten laufen, SSH akzeptiert Passwortauthentifizierung (anfällig für Brute Force), die Firewall könnte permissiv oder deaktiviert sein, und Benutzerkonten könnten übermäßige Privilegien haben. Härtung ist der Prozess der systematischen Reduzierung der Angriffsfläche entsprechend deinen tatsächlichen Anforderungen.
Diese Checkliste richtet sich an Debian/Ubuntu- und RHEL/CentOS-Familien, aber die Prinzipien gelten universell.
Benutzerkonto- und Authentifizierungshärtung
Root-Login deaktivieren und Sudo verwenden
Melde dich nie direkt als Root an. Erstelle einen dedizierten Admin-Benutzer und gewähre ihm Sudo-Privilegien:
adduser adminbenutzer
usermod -aG sudo adminbenutzer # Debian/Ubuntu
usermod -aG wheel adminbenutzer # RHEL/CentOS
Deaktiviere Root-SSH-Login in /etc/ssh/sshd_config: setze PermitRootLogin no.
Starke Passwortrichtlinien durchsetzen
Installiere libpam-pwquality (Debian) oder pam_pwquality (RHEL) und konfiguriere Mindestlänge, Komplexitätsanforderungen und Verlauf in /etc/security/pwquality.conf. Setze Passwortablauf in /etc/login.defs: PASS_MAX_DAYS 90, PASS_MIN_DAYS 1, PASS_WARN_AGE 14.
Ungenutzte Konten sperren
passwd -l benutzername # Konto sperren
chage -E 0 benutzername # Sofort ablaufen lassen
Prüfe Konten ohne Passwort oder mit Shell-Zugriff, den sie nicht haben sollten (grep -v 'nologin\|false' /etc/passwd).
SSH-Härtung
SSH ist der häufigste Vektor für Fernzugriff. Härtung in /etc/ssh/sshd_config:
Port 2222 # Nicht-Standard-Port reduziert automatisierte Scans
PermitRootLogin no
PasswordAuthentication no # Nur schlüsselbasierte Authentifizierung
PubkeyAuthentication yes
AllowUsers adminbenutzer # Bestimmte Benutzer auf die Whitelist setzen
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no # Sofern nicht benötigt
Protocol 2
Nach dem Ändern des Ports aktualisiere deine Firewall-Regeln, bevor du sshd neu startest. Verwende sshd -t, um die Konfiguration auf Syntaxfehler zu testen.
Für die Schlüsselgenerierung bevorzuge Ed25519 gegenüber RSA 2048:
ssh-keygen -t ed25519 -C "admin@server"
Firewall-Konfiguration
UFW (Ubuntu/Debian)
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # Dein SSH-Port
ufw allow 443/tcp # HTTPS falls Webserver
ufw enable
ufw status verbose
firewalld (RHEL/CentOS)
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
Verwende nftables direkt für maximale Kontrolle und Leistung auf modernen Kernels. Wende das Prinzip Standard-Ablehnung an — erlaube nur, was explizit benötigt wird.
Systemaktualisierungen und Paketverwaltung
Halte das System gepatcht. Ungepatchte Schwachstellen sind der häufigste anfängliche Zugriffsvektor nach Credential-Angriffen:
# Debian/Ubuntu — automatische Sicherheitsupdates aktivieren
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades
# RHEL/CentOS — automatische Updates aktivieren
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
Entferne Pakete, die du nicht benötigst: apt purge telnet rsh-server ypserv xinetd. Jedes installierte Paket ist eine potenzielle Schwachstelle.
Unnötige Dienste deaktivieren
Liste alle laufenden Dienste auf und deaktiviere, was du nicht nutzt:
systemctl list-units --type=service --state=running
systemctl disable --now dienstname
Häufige Kandidaten zum Entfernen auf einem Webserver: avahi-daemon, cups, bluetooth, rpcbind. Jeder offene Port ist ein potenzieller Einstiegspunkt.
Dateisystemsicherheit
- Sticky-Bit setzen auf weltschreibbaren Verzeichnissen:
chmod +t /tmp noexec,nosuid,nodevMount-Optionen verwenden für/tmp,/var/tmpund Wechselmedien in/etc/fstab- SUID/SGID-Binärdateien prüfen:
find / -perm /6000 -type f 2>/dev/null— entferne das Bit von allem, das es nicht benötigt - Berechtigungen für
/etc/cron*einschränken:chmod 700 /etc/cron.d /etc/cron.daily
Einbruchserkennung und Überwachung
- Fail2ban: Sperrt automatisch IPs mit wiederholten Authentifizierungsfehlern — unverzichtbar für jeden internetfähigen SSH
- auditd: Kernel-Level-Protokollierung von Systemaufrufen, Dateizugriff und Benutzerbefehlen — liefert SIEMs reiche Ereignisdaten
- AIDE (Advanced Intrusion Detection Environment): erstellt eine kryptografische Datenbank von Datei-Hashes in einem bekannt guten Zustand und meldet Änderungen
- Logwatch oder GoAccess: Regelmäßige Protokollzusammenfassungen per E-Mail
Zentralisiere Protokolle sofort auf einem Remote-Syslog-Server oder SIEM — wenn ein Angreifer Root erreicht, löscht er die lokalen Protokolle.
Kernel-Härtung mit sysctl
Hinzufügen zu /etc/sysctl.d/99-hardening.conf:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
Anwenden mit sysctl --system. Diese Einstellungen deaktivieren IP-Forwarding, verhindern ICMP-Redirect-Angriffe, aktivieren SYN-Cookie-Schutz und erzwingen ASLR.