Ist Ihr Server sicher? Schnelle Sicherheits-Checkliste
Server-Sicherheits-Checkliste: SSH-Härtung, Firewall, offene Ports, automatische Updates, fail2ban.
Kurzfassung (TL;DR)
Server-Sicherheit ist kein einmaliges Projekt — sie ist ein fortlaufender Prozess. Diese Checkliste deckt die wichtigsten Bereiche ab: SSH absichern, Firewall konfigurieren, offene Ports und laufende Dienste prüfen, automatische Updates aktivieren, Intrusion Detection mit fail2ban einrichten und nach versehentlich veröffentlichten Zugangsdaten suchen. Arbeiten Sie die Abschnitte von oben nach unten durch. Die meisten Schritte dauern weniger als fünf Minuten und reduzieren Ihre Angriffsfläche erheblich.
Voraussetzungen
- Ein Linux-Server (Debian/Ubuntu-basiert — Befehle sind entsprechend angepasst; CentOS/RHEL-Äquivalente werden bei Bedarf erwähnt)
- Root- oder Sudo-Zugriff
- Eine funktionierende SSH-Verbindung (sperren Sie sich nicht selbst aus, während Sie SSH härten — halten Sie immer eine zweite Sitzung offen)
- Grundlegende Erfahrung mit dem Terminal
1. SSH absichern
SSH ist die Eingangstür zu Ihrem Server. Ein falsch konfigurierter SSH-Daemon ist die häufigste Ursache für unbefugten Zugriff.
1.1 Root-Login deaktivieren
Bearbeiten Sie die SSH-Daemon-Konfiguration:
sudo nano /etc/ssh/sshd_config
Suchen und setzen Sie folgende Direktive:
PermitRootLogin no
1.2 Ausschließlich Schlüssel-Authentifizierung erzwingen
Passwort-basierte Anmeldungen sind anfällig für Brute-Force-Angriffe. Stellen Sie auf Schlüssel-Authentifizierung um:
# Auf Ihrem LOKALEN Rechner ein Schlüsselpaar erzeugen (falls noch nicht vorhanden)
ssh-keygen -t ed25519 -C "ihre_email@example.com"
# Den öffentlichen Schlüssel auf den Server kopieren
ssh-copy-id -i ~/.ssh/id_ed25519.pub benutzer@ihre-server-ip
Dann die Passwort-Authentifizierung auf dem Server deaktivieren:
# In /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
1.3 Standard-SSH-Port ändern
Die Portänderung bietet keine echte Sicherheit, eliminiert aber den Großteil der automatisierten Bot-Scans:
# In /etc/ssh/sshd_config
Port 2222
Alle Änderungen übernehmen:
sudo sshd -t # Konfiguration auf Syntaxfehler prüfen
sudo systemctl restart sshd
Achtung: Stellen Sie vor dem Neustart sicher, dass Ihre Firewall den neuen Port erlaubt und dass Sie eine aktive Sitzung als Fallback haben.
2. Firewall-Konfiguration
2.1 UFW (Uncomplicated Firewall)
UFW ist das empfohlene Firewall-Frontend unter Ubuntu/Debian:
# SSH erlauben (eigenen Port verwenden, falls geändert)
sudo ufw allow 2222/tcp comment 'SSH'
# HTTP und HTTPS erlauben
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Standardmäßig alles eingehende blockieren
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Firewall aktivieren
sudo ufw enable
# Status überprüfen
sudo ufw status verbose
2.2 iptables-Grundlagen
Falls Sie direkt mit iptables arbeiten möchten:
# Bestehende Verbindungen erlauben
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH auf benutzerdefiniertem Port erlauben
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# HTTP/HTTPS erlauben
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Loopback erlauben
sudo iptables -A INPUT -i lo -j ACCEPT
# Alles andere verwerfen
sudo iptables -A INPUT -j DROP
# Regeln über Neustarts hinweg speichern
sudo apt install iptables-persistent
sudo netfilter-persistent save
3. Offene Ports prüfen
Sie sollten genau wissen, welche Ports auf Ihrem Server geöffnet sind und welche Prozesse lauschen.
# Alle lauschenden TCP-Ports mit Prozessnamen anzeigen
sudo ss -tlnp
# Dasselbe für UDP
sudo ss -ulnp
# Den eigenen Server von localhost scannen
sudo nmap -sT -O localhost
# Von einem externen Rechner scannen, um zu sehen, was das Internet sieht
nmap -sV ihre-server-ip
Prüfen Sie die Ausgabe sorgfältig. Jeder offene Port, der nicht explizit benötigt wird, sollte über die Firewall geschlossen oder der zugehörige Dienst beendet werden.
4. Automatische Sicherheitsupdates
Nicht gepatchte Software ist der einfachste Einstiegspunkt für Angreifer. Automatische Sicherheitsupdates sind unverzichtbar.
# unattended-upgrades installieren
sudo apt update
sudo apt install unattended-upgrades apt-listchanges
# Aktivieren
sudo dpkg-reconfigure -plow unattended-upgrades
Die Konfiguration überprüfen:
# Konfigurationsdatei prüfen
cat /etc/apt/apt.conf.d/50unattended-upgrades
Stellen Sie sicher, dass folgende Zeilen nicht auskommentiert sind:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Einen Testlauf durchführen:
sudo unattended-upgrades --dry-run --debug
5. Geleakte Zugangsdaten aufspüren
Fehlerhafte Deployments veröffentlichen häufig Datenbankpasswörter, API-Schlüssel und Umgebungsdateien.
# Alle .env-Dateien auf dem System finden
sudo find / -name ".env" -type f 2>/dev/null
# Prüfen, ob .env-Dateien im Web-Root zugänglich sind
sudo find /var/www -name ".env" -type f
sudo find /var/www -name "*.bak" -o -name "*.sql" -o -name "*.log" 2>/dev/null
# Konfigurationsdateien in öffentlich zugänglichen Verzeichnissen suchen
sudo find /var/www -name "wp-config.php" -exec ls -la {} \;
sudo find /var/www -name "config.php" -exec ls -la {} \;
# Nach hartkodierten Passwörtern in gängigen Konfigurationsdateien suchen
sudo grep -r "password" /var/www --include="*.php" --include="*.env" -l
sudo grep -r "DB_PASSWORD\|API_KEY\|SECRET" /var/www -l
Stellen Sie sicher, dass Ihr Webserver den Zugriff auf sensible Dateien blockiert. Für Nginx:
location ~ /\.env {
deny all;
return 404;
}
6. fail2ban einrichten
fail2ban überwacht Logdateien und sperrt IP-Adressen, die bösartiges Verhalten zeigen, etwa wiederholte fehlgeschlagene Anmeldeversuche.
# Installieren
sudo apt update
sudo apt install fail2ban
# Lokale Konfiguration erstellen (jail.conf nie direkt bearbeiten)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
6.1 SSH-Jail konfigurieren
Bearbeiten Sie /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
6.2 Nginx-Jail konfigurieren
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 86400
fail2ban starten und aktivieren:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Status prüfen
sudo fail2ban-client status
sudo fail2ban-client status sshd
7. Benutzerkonten & Sudo-Audit
Überprüfen Sie regelmäßig, wer Zugang zu Ihrem Server hat.
# Aktuell angemeldete Benutzer anzeigen
who
# Letzte Anmeldungen anzeigen
last -20
# Fehlgeschlagene Anmeldeversuche anzeigen
sudo lastb -20
# Alle Benutzer mit Login-Shell auflisten
grep -v '/nologin\|/false' /etc/passwd
# Prüfen, wer Sudo-Rechte hat
sudo grep -v '^#' /etc/sudoers | grep -v '^$'
ls -la /etc/sudoers.d/
# Mitglieder der sudo-Gruppe auflisten
getent group sudo
Entfernen Sie nicht mehr benötigte Konten:
sudo userdel -r alter_benutzername
8. Dateiberechtigungen
Weltweit beschreibbare Dateien sind ein häufiger Angriffsvektor für Rechteausweitung.
# Weltweit beschreibbare Dateien finden (ohne /proc und /sys)
sudo find / -path /proc -prune -o -path /sys -prune -o -perm -002 -type f -print 2>/dev/null
# Weltweit beschreibbare Verzeichnisse ohne Sticky-Bit finden
sudo find / -path /proc -prune -o -path /sys -prune -o -perm -002 -type d ! -perm -1000 -print 2>/dev/null
# Dateien mit SUID/SGID-Bits finden
sudo find / -path /proc -prune -o -path /sys -prune -o \( -perm -4000 -o -perm -2000 \) -type f -print 2>/dev/null
# Berechtigungen im Web-Verzeichnis korrigieren
sudo chown -R www-data:www-data /var/www
sudo find /var/www -type d -exec chmod 750 {} \;
sudo find /var/www -type f -exec chmod 640 {} \;
9. Laufende Dienste prüfen
# Alle aktiven Dienste auflisten
sudo systemctl list-units --type=service --state=running
# Beim Boot aktivierte Dienste auflisten
sudo systemctl list-unit-files --type=service --state=enabled
# Dienste prüfen, die auf Netzwerk-Interfaces lauschen
sudo ss -tlnp | awk 'NR>1 {print $4, $6}'
Stellen Sie sich bei jedem Dienst die Frage: Muss er laufen? Muss er aus dem Netzwerk erreichbar sein, oder reicht localhost?
10. Schnelle Verbesserungen
10.1 Alle Pakete aktualisieren
sudo apt update && sudo apt upgrade -y
10.2 Nicht benötigte Dienste deaktivieren
# Beispiel: Dienste deaktivieren und stoppen, die nicht benötigt werden
sudo systemctl disable --now cups
sudo systemctl disable --now avahi-daemon
sudo systemctl disable --now rpcbind
10.3 Shared Memory absichern
Folgende Zeile in /etc/fstab einfügen:
tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0
10.4 Login-Banner setzen
echo "Zugriff nur für autorisierte Personen. Alle Aktivitäten werden protokolliert." | sudo tee /etc/issue.net
# In /etc/ssh/sshd_config:
# Banner /etc/issue.net
10.5 Prozess-Protokollierung aktivieren
sudo apt install acct
sudo systemctl enable --now acct
Fehlerbehebung
Nach der Portänderung von SSH ausgesperrt?
Nutzen Sie den Konsolen-/VNC-Zugang Ihres Hosting-Anbieters. Korrigieren Sie den Port in /etc/ssh/sshd_config und stellen Sie sicher, dass die Firewall ihn erlaubt:
sudo ufw allow 2222/tcp
sudo systemctl restart sshd
fail2ban hat Ihre eigene IP gesperrt?
# Eine IP-Adresse entsperren
sudo fail2ban-client set sshd unbanip IHRE_IP_ADRESSE
# Ihre IP dauerhaft in jail.local whitelisten
# ignoreip = 127.0.0.1/8 IHRE_IP_ADRESSE
UFW blockiert legitimen Datenverkehr?
# Prüfen, welche Regel blockiert
sudo ufw status numbered
# Eine bestimmte Regel nach Nummer löschen
sudo ufw delete REGELNUMMER
# Oder vorübergehend deaktivieren zur Diagnose
sudo ufw disable
Unattended-upgrades läuft nicht?
# Log prüfen
sudo cat /var/log/unattended-upgrades/unattended-upgrades.log
# Service-Timer überprüfen
sudo systemctl status apt-daily-upgrade.timer
Prävention & laufende Wartung
- Monatliche Audits planen: Überprüfen Sie regelmäßig offene Ports, aktive Benutzer, installierte Pakete und fail2ban-Logs.
- Sicherheitshinweise abonnieren: Folgen Sie den Mailinglisten Ihrer Distribution und aller wichtigen eingesetzten Software.
- Regelmäßig sichern: Sicherheitshärtung ist nutzlos ohne zuverlässige Backups. Testen Sie Ihren Wiederherstellungsprozess.
- Zentrales Log-Management nutzen: Versenden Sie Logs an ein externes System, damit sie bei einer Kompromittierung des Servers erhalten bleiben.
- Prinzip der minimalen Rechte umsetzen: Jeder Benutzer, Dienst und Prozess sollte nur die minimal erforderlichen Berechtigungen besitzen.
- Rootkit-Scanner in Betracht ziehen: Tools wie
rkhunteroderchkrootkitkönnen bekannte Rootkits erkennen. - Zwei-Faktor-Authentifizierung aktivieren: Erwägen Sie für SSH-Zugriff die Einrichtung von TOTP über
libpam-google-authenticator. - Alles dokumentieren: Halten Sie jede Änderung schriftlich fest. Ihr zukünftiges Ich wird es Ihnen danken.
Experten-Hilfe gebraucht?
Professioneller Sicherheitscheck mit klarem Bericht? €39.
Jetzt buchen — €39100% Geld-zurück-Garantie