Linux-Server absichern: Diese 10 Schritte musst du sofort nach der Installation machen

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 – Einstellungen
  • F3 – Suchen
  • F5 – Baumansicht
  • F9 – Prozess beenden
  • q – 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 top und htop vollkommen 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!


Teile deine Liebe

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert