← Alle Artikel
Zuletzt aktualisiert: 2026-03-30

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

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

Experten-Hilfe gebraucht?

Professioneller Sicherheitscheck mit klarem Bericht? €39.

Jetzt buchen — €39

100% Geld-zurück-Garantie

HR

Harald Roessler

Infrastructure Engineer mit 20+ Jahren Erfahrung. Gründer der DSNCON GmbH.