Schlagwort: Server

  • Ubuntu Server Absichern: Der Guide für die Grundabsicherung (Baseline Security)

    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_user

    Das 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_user

    SSH-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_keys

    Fü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_keys

    SSH-Konfiguration härten

    Jetzt machen wir die Schotten dicht. Öffne die globale SSH-Konfigurationsdatei:

    sudo nano /etc/ssh/sshd_config

    Suche nach folgenden Zeilen (bzw. füge sie am Ende hinzu oder entferne das auskommentierende #):

    PermitRootLogin no
    PasswordAuthentication no

    PermitRootLogin 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 -t

    Gibt dieser Befehl keine Rückmeldung, ist alles fehlerfrei.

    Starte den SSH-Dienst neu:

    sudo systemctl restart ssh

    Wichtig: Schließe deine aktuelle Server-Sitzung nicht! Öffne ein neues Terminal auf deinem PC und teste den Login:

    ssh neuer_user@deine-server-ip

    Erst 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 outgoing

    Dienste 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 enable

    Bestä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 verbose

    Teil 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 sh

    CrowdSec Security Engine installieren

    Installiere das Kernsystem (die Engine). Diese analysiert im Hintergrund die Logs und erkennt Angriffsmuster (Szenarien):

    sudo apt install crowdsec -y

    Bei 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 -y

    Für IPTABLES

    sudo apt install crowdsec-firewall-bouncer-iptables -y

    Eigene 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.yaml

    Fü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 crowdsec

    Praktische Administrationsbefehle (cscli)

    Die Verwaltung von CrowdSec erfolgt intuitiv über das CLI-Tool cscli:

    Aktive Sperren anzeigen

    sudo cscli decisions list

    Auslastung & erkannte Dienste prüfen

    sudo cscli metrics

    IP 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.8

    Teil 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 -y

    Dienst aktivieren

    Konfiguriere den Dienst so, dass er im Hintergrund selbstständig nach Updates sucht und diese einspielt:

    sudo dpkg-reconfigure --priority=low unattended-upgrades

    Wä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-upgrades

    Suche 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:

    1. Ein personalisierter Benutzer mit gehärtetem, passwortlosem SSH-Key-Login hält Brute-Force-Bots fern.
    2. Die UFW-Firewall schließt alle ungenutzten Einfallstore.
    3. CrowdSec vertreibt dank globaler Blocklisten proaktiv bekannte Angreifer.
    4. Unattended Upgrades halten das System im Hintergrund flickenfrei.

    Viel Spaß mit deinem frisch gehärteten, sicheren Ubuntu-Server!