Veröffentlicht auf system-ecke.de
Einleitung
Ein frisch installierter Linux-Server ist wie eine offene Haustür: Wer nichts unternimmt, lädt Angreifer geradezu ein. Innerhalb von Minuten nach der Inbetriebnahme scannen automatisierte Bots das Internet nach verwundbaren Systemen – und finden sie auch. Dabei sind die grundlegenden Schutzmaßnahmen weder kompliziert noch zeitaufwendig. In diesem Artikel zeige ich dir die 10 wichtigsten Schritte, die du unmittelbar nach der Installation eines Linux-Servers durchführen solltest. Egal ob VPS, Rootserver oder Heimserver – diese Maßnahmen bilden das Fundament jeder soliden Sicherheitsstrategie. Die hier gezeigten Befehle funktionieren im Debian/Ubuntu Umfeld. Für andere Distributionen gelten ggf. abweichende Befehle.
Quick-Checklist:
- [ ] Root-SSH deaktiviert
- [ ] Admin-User angelegt, sudo konfiguriert
- [ ] SSH-Key-Authentifizierung aktiv
- [ ] UFW-Firewall eingerichtet
- [ ] Fail2Ban installiert
- [ ] Automatische Updates aktiviert
- [ ] SSH gehärtet
- [ ] NTP synchronisiert
- [ ] Log-Monitoring eingerichtet
- [ ] Backup-Strategie definiert
1. User & Rechte – Das Fundament der Sicherheit
Root-Login über SSH deaktivieren
Der root-Account ist auf jedem Linux-System vorhanden – und genau das wissen auch Angreifer. Brute-Force-Angriffe zielen standardmäßig auf diesen Benutzer ab. Der erste und wichtigste Schritt ist daher, den direkten Root-Login über SSH zu unterbinden.
Öffne die SSH-Konfigurationsdatei:
sudo nano /etc/ssh/sshd_config
Suche nach der Zeile PermitRootLogin und setze sie auf:
PermitRootLogin no
Starte anschließend den SSH-Dienst neu:
sudo systemctl restart sshd
⚠️ Wichtig: Stelle sicher, dass du vorher einen funktionierenden Admin-Benutzer mit sudo-Rechten angelegt hast – sonst sperrst du dich selbst aus!
Neuen Admin-Benutzer anlegen
Arbeite niemals direkt als root. Lege stattdessen einen dedizierten Benutzer an, dem du anschließend sudo-Rechte gibst. Auf Ubuntu/Debian funktioniert das so:
# Neuen Benutzer anlegen
adduser deinadminname
# Benutzer zur sudo-Gruppe hinzufügen
usermod -aG sudo deinadminname
Überprüfe die Gruppenzugehörigkeit:
id deinadminname
Die Ausgabe sollte groups=...,27(sudo),... enthalten.
sudo-Rechte richtig verteilen
Nicht jeder Benutzer braucht volle sudo-Rechte. Für spezifische Anwendungsfälle kannst du die sudoers-Datei feingranular konfigurieren:
sudo visudo
Beispiel: Einem Benutzer nur das Neustarten eines bestimmten Dienstes erlauben:
webuser ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
Das Prinzip des geringsten Privilegs (Principle of Least Privilege) sollte immer gelten: Jeder Benutzer erhält nur die Rechte, die er tatsächlich benötigt.
SSH-Key-Authentifizierung statt Passwort
Passwörter können erraten, geleakt oder durch Brute-Force geknackt werden. SSH-Keys sind deutlich sicherer. So richtest du die Key-Authentifizierung ein:
Auf deinem lokalen Rechner (nicht auf dem Server):
# SSH-Schlüsselpaar generieren (Ed25519 ist modern und sicher)
ssh-keygen -t ed25519 -C "mein-server-key"
# Public Key auf den Server übertragen
ssh-copy-id -i ~/.ssh/id_ed25519.pub deinadminname@server-ip
Sobald du dich erfolgreich mit dem Key einloggen kannst, deaktiviere die Passwort-Authentifizierung in /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
Vergiss nicht, den SSH-Dienst neu zu starten:
sudo systemctl restart sshd
2. Firewall einrichten – Nur was rein muss, kommt rein
UFW installieren und aktivieren
UFW (Uncomplicated Firewall) ist das Standard-Firewall-Tool für Ubuntu und bietet eine benutzerfreundliche Oberfläche für das komplexere iptables-System. Es ermöglicht auch Einsteigern, essenzielle Netzwerksicherheit zu implementieren, ohne die komplizierte iptables-Syntax erlernen zu müssen.
# UFW installieren (falls nicht vorhanden)
sudo apt-get install ufw
# Status prüfen
sudo ufw status
⚠️ Kritisch: Bevor du UFW aktivierst, musst du SSH erlauben – sonst sperrst du dich aus! (How to Set Up a Firewall with UFW on Ubuntu | DigitalOcean, n.d.)
# SSH-Zugang erlauben (ZUERST!)
sudo ufw allow ssh
# Firewall aktivieren
sudo ufw enable
Standard-Ports konfigurieren
Für einen typischen Webserver öffnest du folgende Ports:
# HTTP
sudo ufw allow 80/tcp
# HTTPS
sudo ufw allow 443/tcp
# SSH (falls du den Standard-Port 22 verwendest)
sudo ufw allow 22/tcp
Überprüfe die aktiven Regeln:
sudo ufw status verbose
Nur benötigte Ports öffnen
Das Prinzip ist einfach: Was nicht gebraucht wird, bleibt geschlossen. Setze die Standard-Policy auf „deny“:
# Alle eingehenden Verbindungen standardmäßig ablehnen
sudo ufw default deny incoming
# Alle ausgehenden Verbindungen erlauben
sudo ufw default allow outgoing
Öffne dann gezielt nur die Ports, die deine Dienste tatsächlich benötigen. Jeder unnötig offene Port ist eine potenzielle Angriffsfläche.
Fail2Ban gegen Brute-Force-Angriffe
UFW allein reagiert nicht dynamisch auf aktive Bedrohungen. Hier kommt Fail2Ban ins Spiel: Es überwacht Log-Dateien auf Muster bösartigen Verhaltens – etwa wiederholte fehlgeschlagene Login-Versuche – und sperrt die angreifenden IP-Adressen automatisch. In Kombination mit UFW entsteht ein leistungsstarkes, automatisiertes Abwehrsystem.
# Fail2Ban installieren
sudo apt-get install fail2ban
# Dienst starten und aktivieren
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Erstelle eine lokale Konfigurationsdatei (überschreibe nie die Originaldatei):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Wichtige Einstellungen im [sshd]-Abschnitt:
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600
findtime = 600
Diese Konfiguration sperrt eine IP-Adresse für 1 Stunde, wenn sie innerhalb von 10 Minuten 5 fehlgeschlagene Login-Versuche produziert. ((Plesk for Linux) Protection Against Brute Force Attacks (Fail2Ban) | Plesk Obsidian Documentation, n.d.)
3. Software aktuell halten – Patches sind dein Freund
Ungepatchte Software ist eine der häufigsten Einfallstore für Angreifer. Mit unattended-upgrades kannst du sicherheitsrelevante Updates auf Ubuntu/Debian automatisch einspielen lassen:
# Paket installieren
sudo apt-get install unattended-upgrades
# Konfiguration aktivieren
sudo dpkg-reconfigure --priority=low unattended-upgrades
Für eine detailliertere Konfiguration bearbeite:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Stelle sicher, dass zumindest die Sicherheitsupdates automatisch installiert werden:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Aktiviere außerdem die automatische Aktualisierung der Paketlisten:
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
💡 Tipp: Für Produktionssysteme solltest du kritische Updates lieber manuell einspielen und vorher in einer Testumgebung prüfen. Automatische Updates sind ein guter Kompromiss für kleinere Server.
4. SSH härten – Die Eingangstür verstärken
Port ändern (optional, aber sinnvoll)
Das Ändern des Standard-SSH-Ports von 22 auf einen anderen Wert reduziert automatisierte Scan-Angriffe erheblich. Es ist kein Ersatz für echte Sicherheitsmaßnahmen, aber es reduziert den „Lärm“ in den Logs deutlich. (Security – How to Harden an SSH Server? – Ask Ubuntu, n.d.)
sudo nano /etc/ssh/sshd_config
Port 2222
⚠️ Vergiss nicht, den neuen Port in UFW freizugeben:
sudo ufw allow 2222/tcp
Protocol 2 erzwingen
SSH Protocol 1 ist veraltet und weist bekannte Sicherheitslücken auf. Stelle sicher, dass nur Protocol 2 verwendet wird:
# In /etc/ssh/sshd_config
Protocol 2
Auf modernen Systemen ist dies meist bereits der Standard, aber eine explizite Konfiguration schadet nie.
MaxAuthTries begrenzen
Begrenze die Anzahl der Authentifizierungsversuche pro Verbindung:
# In /etc/ssh/sshd_config
MaxAuthTries 3
LoginGraceTime 20
MaxSessions 3
Eine vollständige Härtungs-Konfiguration für /etc/ssh/sshd_config könnte so aussehen:
Protocol 2
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
Starte SSH nach jeder Änderung neu:
sudo systemctl restart sshd
Vergiss nicht die UFW Regel dann anzupassen:
# SSH (jetzt für Port 2222)
sudo ufw allow 2222/tcp
5. NTP/Systemzeit – Kleine Einstellung, große Wirkung
Die korrekte Systemzeit ist für die Sicherheit oft unterschätzt. Wenn dein Server nicht zeitsynchronisiert ist, können Log-Einträge falsche Zeitstempel haben – was forensische Analysen nach einem Sicherheitsvorfall erheblich erschwert oder sogar unmöglich macht.
Wenn mehrere Geräte ohne Zeitsynchronisation betrieben werden, denkt jedes System, die korrekte Zeit sei eine andere. Beim Vergleich von Logs zwischen Ressourcen stimmen die Zeitstempel nicht überein. Wenn die Daten auf einem Log-Server aggregiert werden, erscheinen die Ereignisse durcheinander, und Analyse-Engines können die Daten nicht auf ungewöhnliches Verhalten oder Anzeichen einer Kompromittierung prüfen.
# timedatectl prüfen
timedatectl status
# NTP aktivieren
sudo timedatectl set-ntp true
# Zeitzone setzen (Beispiel: Europa/Berlin)
sudo timedatectl set-timezone Europe/Berlin
Für eine robustere Lösung installiere chrony:
sudo apt-get install chrony
sudo systemctl enable chrony
sudo systemctl start chrony
Überprüfe die Synchronisation:
chronyc tracking
Alle Ressourcen in deiner Umgebung müssen dieselbe Zeit haben, und sie müssen ihre Uhren regelmäßig zurücksetzen, damit alle Logs, Betriebsdaten und Alerts die korrekte Zeit aufweisen.
6. Log-Monitoring – Wissen, was auf deinem Server passiert
journalctl – Der systemd-Weg
Moderne Linux-Systeme verwenden systemd-journald für die Protokollierung. Das zentrale Werkzeug zur Auswertung ist journalctl:
# Alle Logs anzeigen
journalctl
# Logs eines bestimmten Dienstes
journalctl -u sshd
# Logs der letzten Stunde
journalctl --since "1 hour ago"
# Fehlgeschlagene Login-Versuche
journalctl -u sshd | grep "Failed password"
# Live-Monitoring
journalctl -f
Logwatch – Tägliche Zusammenfassungen per E-Mail
Logwatch ist ein anpassbares, plugin-basiertes Log-Monitoring-System. Es durchsucht deine Logs für einen bestimmten Zeitraum und erstellt einen Bericht in den Bereichen, die du dir wünschst, mit dem gewünschten Detailgrad.
sudo apt-get install logwatch
# Manuell ausführen (Ausgabe auf Konsole)
sudo logwatch --output stdout --detail high
Auf Systemen mit systemd-journald ohne klassische Log-Dateien musst du Logwatch für den SSH-Dienst konfigurieren. Erstelle dazu die Datei /etc/logwatch/conf/services/sshd.conf: (Logwatch and Systemd/Journal – Usebox.Net, n.d.)
LogFile =
LogFile = none
*JournalCtl = "--output=cat --unit=ssh.service"
Anschließend kannst du Logwatch über den täglichen Cron-Job ausführen: (Logwatch and Systemd/Journal – Usebox.Net, n.d.)
/etc/cron.daily/00logwatch
💡 Tipp: Konfiguriere Logwatch so, dass es dir täglich eine E-Mail-Zusammenfassung schickt. So behältst du den Überblick, ohne ständig manuell in die Logs schauen zu müssen.
7. Absicherung von Netzwerkdiensten – Angriffsfläche minimieren
Nicht benötigte Dienste deaktivieren
Jeder laufende Dienst ist eine potenzielle Angriffsfläche. Prüfe, welche Dienste auf deinem Server aktiv sind:
# Alle laufenden Dienste anzeigen
systemctl list-units --type=service --state=running
# Alle aktivierten Dienste anzeigen
systemctl list-unit-files --type=service --state=enabled
Deaktiviere Dienste, die du nicht benötigst:
# Dienst stoppen und deaktivieren
sudo systemctl stop dienstname
sudo systemctl disable dienstname
Typische Kandidaten für die Deaktivierung auf einem reinen Webserver sind beispielsweise bluetooth, cups (Druckdienst) oder avahi-daemon.
nginx/Apache absichern
Wenn du einen Webserver betreibst, sind einige grundlegende Härtungsmaßnahmen unerlässlich.
Apache2 installieren und konfigurieren:
sudo apt-get update
sudo apt-get install apache2
sudo systemctl start apache2
Nginx installieren:
sudo apt-get update
sudo apt-get install nginx
Grundlegende Härtungsmaßnahmen für beide Webserver:
# Server-Version in HTTP-Headern verstecken (Apache)
# In /etc/apache2/conf-available/security.conf:
ServerTokens Prod
ServerSignature Off
# Für Nginx in /etc/nginx/nginx.conf:
server_tokens off;
Nginx kann auch als Reverse Proxy vor Apache oder anderen Anwendungsservern eingesetzt werden. Reverse Proxies bieten zusätzliche Sicherheitsvorteile: Sie können Caching und Content-Komprimierung durchführen, was die Anwendungsleistung verbessert und die Last auf internen Servern reduziert.
8. Backup-Strategie – Weil Sicherheit auch Wiederherstellung bedeutet
Eine Sicherheitsstrategie ohne Backup ist unvollständig. Backups schützen nicht nur vor Datenverlust durch Hardware-Ausfälle, sondern auch vor Ransomware und anderen Angriffen.
Die 3-2-1-Regel als Grundprinzip:
- 3 Kopien deiner Daten
- 2 verschiedene Speichermedien
- 1 Kopie an einem externen Standort (Offsite)
Einfaches Backup mit rsync:
# Lokales Backup
rsync -avz --delete /var/www/ /backup/www/
# Remote-Backup auf einen anderen Server
rsync -avz -e ssh /var/www/ user@backup-server:/backup/www/
Automatisierung mit Cron:
sudo crontab -e
# Täglich um 2 Uhr nachts
0 2 * * * rsync -avz --delete /var/www/ /backup/www/
💡 Wichtig: Teste deine Backups regelmäßig! Ein Backup, das sich nicht wiederherstellen lässt, ist wertlos. Führe mindestens einmal im Monat einen Restore-Test durch.
9. Monitoring einrichten – Den Überblick behalten
Basis-Monitoring mit top und htop
Für das grundlegende System-Monitoring sind top und htop unverzichtbare Werkzeuge. Sie zeigen dir in Echtzeit, welche Prozesse wie viele Ressourcen verbrauchen. (
How to Handle System Monitoring with Top and Htop , n.d.)
# top starten (vorinstalliert)
top
# htop installieren und starten (benutzerfreundlicher)
sudo apt-get install htop
htop
Wichtige Tastenkürzel in htop:
F2– EinstellungenF3– SuchenF5– BaumansichtF9– Prozess beendenq– Beenden
Nützliche Monitoring-Befehle:
# Festplattennutzung
df -h
# Speichernutzung
free -h
# Netzwerkverbindungen
ss -tulpn
# Offene Ports prüfen
sudo netstat -tulpn
💡 Für fortgeschrittenes Monitoring empfehlen sich Tools wie Prometheus + Grafana oder Netdata – aber für den Anfang reichen
topundhtopvollkommen aus.
10. Dokumentation – Was du nicht aufschreibst, vergisst du
Dokumentation ist der am häufigsten vernachlässigte Aspekt der Serveradministration – und gleichzeitig einer der wichtigsten. Gut dokumentierte Prozesse ermöglichen es, Herausforderungen strukturiert und effizient zu lösen, anstatt sich durch mehrere Quellen kämpfen zu müssen.
IT-Dokumentation bereitet Organisationen auf unvorhersehbare Notfälle wie Serverausfälle oder Cybersicherheitsbedrohungen vor. Ein Plan, der schnell umgesetzt werden kann, stellt die Geschäftskontinuität sicher.
Was du dokumentieren solltest:
- Installierte Software und Versionen
- Konfigurationsänderungen (mit Datum und Begründung)
- Firewall-Regeln und deren Zweck
- Backup-Strategie und Restore-Prozedur
- Zugangsdaten (sicher in einem Passwort-Manager)
- Netzwerktopologie und offene Ports
💡 Tipp: Nutze ein einfaches Markdown-Dokument oder ein Tool wie Obsidian, Notion oder Gitea für deine Server-Dokumentation. Das Wichtigste ist, dass du überhaupt anfängst zu dokumentieren.
Fazit
Die Absicherung eines Linux-Servers ist kein einmaliges Ereignis, sondern ein kontinuierlicher Prozess. Mit den 10 Schritten in diesem Artikel hast du jedoch eine solide Grundlage geschaffen, die deinen Server gegen die häufigsten Angriffsvektoren schützt.
✅ Checkliste zum Ausdrucken
LINUX-SERVER HARDENING CHECKLIST
system-ecke.de
BENUTZER & RECHTE
[ ] Root-SSH-Login deaktiviert (PermitRootLogin no)
[ ] Neuer Admin-Benutzer angelegt
[ ] sudo-Rechte korrekt vergeben
[ ] SSH-Key-Authentifizierung aktiv
[ ] Passwort-Authentifizierung deaktiviert
FIREWALL
[ ] UFW installiert und aktiviert
[ ] Standard-Policy: deny incoming
[ ] SSH-Port freigegeben
[ ] Nur benötigte Ports geöffnet
[ ] Fail2Ban installiert und konfiguriert
SOFTWARE & UPDATES
[ ] unattended-upgrades aktiviert
[ ] System initial vollständig aktualisiert
SSH-HÄRTUNG
[ ] Port geändert (optional)
[ ] Protocol 2 erzwungen
[ ] MaxAuthTries auf 3 gesetzt
[ ] X11Forwarding deaktiviert
SYSTEMZEIT
[ ] NTP aktiviert (timedatectl set-ntp true)
[ ] Zeitzone korrekt gesetzt
[ ] chrony installiert und aktiv
LOG-MONITORING
[ ] journalctl-Grundlagen bekannt
[ ] logwatch installiert und konfiguriert
[ ] Tägliche E-Mail-Reports eingerichtet
NETZWERKDIENSTE
[ ] Unnötige Dienste deaktiviert
[ ] Webserver-Version versteckt
[ ] Offene Ports geprüft (ss -tulpn)
BACKUP
[ ] Backup-Strategie definiert (3-2-1-Regel)
[ ] Automatisches Backup eingerichtet
[ ] Restore-Test durchgeführt
MONITORING
[ ] htop installiert
[ ] Basis-Monitoring eingerichtet
DOKUMENTATION
[ ] Konfigurationsänderungen dokumentiert
[ ] Firewall-Regeln dokumentiert
[ ] Backup-Prozedur dokumentiert
Dieser Artikel wurde auf system-ecke.de veröffentlicht. Hast du Fragen oder Ergänzungen? Hinterlasse einen Kommentar!
