Wenn ein neuer Linux-Server ans Netz geht, vergehen oft nur wenige Minuten, bis die ersten automatisierten Botnets anklopfen. Wer hier schlampig konfiguriert, liefert seinen Server auf dem Silbertablett aus. Die Absicherung (Härtung) eines frisch aufgesetzten Ubuntu-Servers ist kein Hexenwerk, erfordert aber eine strukturierte Vorgehensweise.
In diesem praxisnahen Guide gehen wir Schritt für Schritt durch die wichtigsten Säulen einer soliden Baseline-Security: von der sicheren SSH-Schlüssel-Authentifizierung über eine strikte Firewall bis hin zur modernen Intrusion Prevention mit CrowdSec und vollautomatischen Sicherheitspatches.
Teil 1: Benutzerverwaltung & SSH-Härtung
Die goldene Regel lautet: Niemals direkt als root arbeiten und niemals Passwörter für den SSH-Login verwenden.
Einen neuen Systembenutzer anlegen
Zuerst erstellen wir einen personalisierten Benutzer, der später administrative Aufgaben übernehmen kann. Ersetze neuer_user durch deinen Wunschnamen:
sudo adduser neuer_userDas System fragt dich nun interaktiv nach einem sicheren Passwort und einigen optionalen Informationen (vollständiger Name, Zimmernummer etc.). Letztere kannst du einfach mit Enter überspringen.
Sudo-Rechte vergeben
Damit der neue Benutzer administrative Befehle ausführen kann, fügen wir ihn der Systemgruppe sudo hinzu:
sudo usermod -aG sudo neuer_userSSH-Schlüsselpaar generieren
Passwort-Logins sind anfällig für Brute-Force-Angriffe. Wir wechseln daher vollständig auf die kryptografische Schlüssel-Authentifizierung (SSH-Keys). Wir nutzen den modernen, extrem sicheren und performanten ED25519-Standard.
Option A: Erstellung unter Windows (PowerShell)
Öffne die PowerShell auf deinem Windows-PC und führe folgenden Befehl aus (passe deine E-Mail-Adresse als Kommentar an):
ssh-keygen -t ed25519 -C "name@domain.de"Bestätige den Standard-Speicherort mit Enter und schütze deinen privaten Schlüssel unbedingt mit einer starken Passphrase (Passwort).
Option B: Erstellung unter Linux / macOS
Öffne dein lokales Terminal:
ssh-keygen -t ed25519 -C "name@domain.de"Auch hier den Standardpfad (~/.ssh/id_ed25519) bestätigen und eine Passphrase vergeben.
SSH-Schlüssel auf dem Server hinterlegen
Dein Schlüsselpaar besteht aus zwei Dateien:
id_ed25519(Dein privater Schlüssel — dieser verlässt niemals deinen PC!).id_ed25519.pub(Dein öffentlicher Schlüssel — dieser kommt auf den Server).
Lies den Inhalt deines öffentlichen Schlüssels lokal aus:
- Windows (PowerShell):
cat ~\.ssh\id_ed25519.pub - Linux/macOS:
cat ~/.ssh/id_ed25519.pub
Kopiere die ausgegebene Textzeile (beginnend mit ssh-ed25519).
Wechsle nun in das Terminal deines Servers und lege die Verzeichnisstruktur für deinen neuen Benutzer an:
sudo mkdir -p /home/neuer_user/.ssh
sudo nano /home/neuer_user/.ssh/authorized_keysFüge den kopierten Schlüssel ein, speichere mit Strg + O, Enter und schließe mit Strg + X.
Überlebenswichtig: Dateirechte setzen
SSH verweigert den Dienst, wenn die Rechte der Schlüsseldateien zu locker eingestellt sind. Setze die Rechte strikt auf den neuen Benutzer:
# Besitzer auf den neuen User ändern
sudo chown -R neuer_user:neuer_user /home/neuer_user/.ssh
# Rechte für das Verzeichnis (nur Besitzer darf lesen/schreiben/ausführen)
sudo chmod 700 /home/neuer_user/.ssh
# Rechte für die Schlüsseldatei (nur Besitzer darf lesen/schreiben)
sudo chmod 600 /home/neuer_user/.ssh/authorized_keysSSH-Konfiguration härten
Jetzt machen wir die Schotten dicht. Öffne die globale SSH-Konfigurationsdatei:
sudo nano /etc/ssh/sshd_configSuche nach folgenden Zeilen (bzw. füge sie am Ende hinzu oder entferne das auskommentierende #):
PermitRootLogin no
PasswordAuthentication noPermitRootLogin no blockiert den direkten Login als Root-Benutzer.
PasswordAuthentication no schaltet die klassische Passwort-Anmeldung komplett ab. Es ist ab jetzt zwingend ein gültiger SSH-Key erforderlich.
Der Rettungsanker: Syntax-Test vor dem Neustart!
Bevor du den SSH-Dienst neu startest und dich möglicherweise aussperrst, teste die Konfiguration auf Fehler:
sudo sshd -tGibt dieser Befehl keine Rückmeldung, ist alles fehlerfrei.
Starte den SSH-Dienst neu:
sudo systemctl restart sshWichtig: Schließe deine aktuelle Server-Sitzung nicht! Öffne ein neues Terminal auf deinem PC und teste den Login:
ssh neuer_user@deine-server-ipErst wenn dieser Login per SSH-Key klappt, ist deine Verbindung sicher und du kannst das alte Fenster schließen.
Teil 2: Die Firewall (UFW) einrichten
Eine Firewall blockiert alle unerwünschten Netzwerkverbindungen von außen. Ubuntu bringt dafür die unkomplizierte Firewall UFW (Uncomplicated Firewall) mit.
Standard-Regeln festlegen
Wir blockieren standardmäßig alle eingehenden Verbindungen und erlauben alle ausgehenden Verbindungen:
sudo ufw default deny incoming
sudo ufw default allow outgoingDienste explizit freigeben
Nun öffnen wir selektiv die Ports, die wir wirklich benötigen (SSH ist Pflicht!):
sudo ufw allow ssh # Port 22 (SSH)
sudo ufw allow http # Port 80 (optional für Webserver)
sudo ufw allow https # Port 443 (optional für SSL-Websites)Firewall aktivieren
sudo ufw enableBestätige die Warnung, dass bestehende SSH-Verbindungen unterbrochen werden könnten, mit y. Da wir die SSH-Regel zuvor hinzugefügt haben, besteht keine Gefahr.
Den Status kannst du jederzeit überprüfen mit:
sudo ufw status verboseTeil 3: CrowdSec statt Fail2Ban komplett einrichten
Wer heute noch auf Fail2Ban setzt, verpasst die Vorteile moderner IT-Sicherheit. Während Fail2Ban isoliert auf deinem Server arbeitet und mühsam per Regex Logdateien scannt, setzt CrowdSec auf kollaborative Schwarmintelligenz und eine ressourcenschonende Go-Architektur.
Wird eine bösartige IP auf einem Server in Neuseeland blockiert, landet sie innerhalb von Minuten auf der globalen Blockliste deines CrowdSec-Bouncers.
Offizielles Repository einbinden
Füge die offiziellen Paketquellen von CrowdSec hinzu, um die aktuellsten Versionen zu erhalten:
curl -s https://install.crowdsec.net | sudo shCrowdSec Security Engine installieren
Installiere das Kernsystem (die Engine). Diese analysiert im Hintergrund die Logs und erkennt Angriffsmuster (Szenarien):
sudo apt install crowdsec -yBei der Installation scannt CrowdSec dein System automatisch nach installierten Diensten (wie OpenSSH) und aktiviert die passenden Parser.
Den passenden Firewall-Bouncer installieren
Die Engine erkennt Angriffe nur. Um sie aktiv abzuwehren, installieren wir einen „Bouncer“ (Türsteher), der die IPs direkt blockiert.
Prüfe kurz, welches Firewall-Backend dein Ubuntu nutzt (nftables ist der moderne Standard):
sudo nft list tables >/dev/null 2>&1 && echo "NFTABLES" || echo "IPTABLES"Installiere entsprechend den passenden Bouncer:
Für NFTABLES
sudo apt install crowdsec-firewall-bouncer-nftables -yFür IPTABLES
sudo apt install crowdsec-firewall-bouncer-iptables -yEigene IP-Adressen auf die Whitelist setzen
Damit du dich bei Tests oder Tippfehlern nicht selbst aussperrst, legen wir einen lokalen Parser an, der dein lokales Netz oder deine feste öffentliche IP ignoriert.
Erstelle die Datei:
sudo nano /etc/crowdsec/parsers/s02-enrich/local-whitelist.yamlFüge folgenden Inhalt ein (passe deine IP-Adressen oder Subnetze an):
name: crowdsecurity/local-whitelist
description: "Whitelist fuer mein Heimnetz"
whitelist:
reason: "Eigene IP-Adressen ausschliessen"
ip:
- "1.2.3.4" # Deine öffentliche statische IP zu Hause
cidr:
- "192.168.1.0/24" # Dein lokales LAN (falls zutreffend)Speichere die Datei und starte CrowdSec neu:
sudo systemctl restart crowdsecPraktische Administrationsbefehle (cscli)
Die Verwaltung von CrowdSec erfolgt intuitiv über das CLI-Tool cscli:
Aktive Sperren anzeigen
sudo cscli decisions listAuslastung & erkannte Dienste prüfen
sudo cscli metricsIP manuell sperren (z. B. für 24 Stunden)
sudo cscli decisions add --ip 8.8.8.8 --duration 24h --reason "Manuelle Sperrung"IP manuell entsperren
sudo cscli decisions delete --ip 8.8.8.8Teil 4: Automatische Sicherheitsupdates (Unattended Upgrades)
Sicherheitslücken in installierten Paketen gehören zu den häufigsten Einfallstoren. Niemand hat die Zeit, sich täglich manuell auf allen Servern einzuloggen und Updates einzuspielen. Ubuntu bietet dafür die automatische Paketaktualisierung.
Unattended-Upgrades installieren
Installiere das Tool zur automatischen Aktualisierung:
sudo apt install unattended-upgrades apt-listchanges -yDienst aktivieren
Konfiguriere den Dienst so, dass er im Hintergrund selbstständig nach Updates sucht und diese einspielt:
sudo dpkg-reconfigure --priority=low unattended-upgradesWähle im interaktiven Dialog Ja / Yes aus.
Feineinstellungen vornehmen (Optional: Automatischer Reboot)
Manche Updates (z. B. Kernel-Updates) erfordern einen Systemneustart, um aktiv zu werden. Du kannst konfigurieren, dass der Server bei Bedarf nachts um 03:00 Uhr selbstständig neu startet.
Öffne die Konfigurationsdatei:
sudo nano /etc/apt/apt.conf.d/50unattended-upgradesSuche nach den folgenden Zeilen, entferne das auskommentierende // und passe die Werte an:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";Speichere die Datei. Damit ist dein Server extrem wartungsarm und schließt kritische Sicherheitslücken vollautomatisch in den frühen Morgenstunden.
Fazit
Mit diesen vier Schritten hast du ein extrem robustes Fundament gelegt:
- Ein personalisierter Benutzer mit gehärtetem, passwortlosem SSH-Key-Login hält Brute-Force-Bots fern.
- Die UFW-Firewall schließt alle ungenutzten Einfallstore.
- CrowdSec vertreibt dank globaler Blocklisten proaktiv bekannte Angreifer.
- Unattended Upgrades halten das System im Hintergrund flickenfrei.
Viel Spaß mit deinem frisch gehärteten, sicheren Ubuntu-Server!