Zum Inhalt

🔐 Ubuntu Server Absicherung

Absicherung eines frisch installierten Ubuntu Servers Einrichtung der Updates und Logs

🧰 1. SSH-Verbindung herstellen

🔌 Verbindung zum Server per Terminal

ssh benutzername@ipadresse
  • benutzername: Der Benutzername des Accounts, den du bei der Serverinstallation angelegt hast.
  • ipadresse: Die öffentliche oder interne IP-Adresse deines Servers.

💻 Plattformabhängige Hinweise:

  • Linux: Terminal öffnen → direkt Befehl ausführen
  • macOS: Terminal öffnen → wie unter Linux
  • Windows: mit cmd, PowerShell oder Windows-Terminal öffnen, alternativ: PuTTY verwenden

Bei der ersten Verbindung wirst du gefragt, ob du dem Server vertraust → yes eingeben


🔄 System aktualisieren

sudo apt update && sudo apt upgrade -y
  • apt update: Frischt die Paketlisten auf
  • apt upgrade: Installiert verfügbare Updates
  • -y: Bestätigt automatisch die Rückfragen

⚙️ 2. SSH absichern (/etc/ssh/sshd_config)

Datei sshd_config bearbeiten:

sudo nano /etc/ssh/sshd_config
diese Änderungen einfügen oder entsprechend auskommentieren:

PermitRootLogin no
Port xxxxx

💬 Erklärung:
- PermitRootLogin no: Verhindert direkten Login als root – Angriffsfläche reduziert - Port xxxxx: beliebigen 5 stelligen neuen SSH Port vergeben, statt den Standard Port 22 zu nutzen, versteckt den SSH-Dienst vor einfachen Portscans

🔁 SSH neu starten:

sudo systemctl restart ssh

🔥 3. Uncomplicated Firewall UFW einrichten

🧪 Status prüfen:

sudo ufw status

🛠️ falfs die Firewall UFW noch nicht installiert ist, nachinstallieren mit:

sudo apt install ufw -y

🔐 neu gesezten SSH-Port für die Firewall freigeben:

sudo ufw allow xxxxx/tcp

🟢 und die Firewall aktivieren:

sudo ufw enable

❗ Achtung:

Wenn du ufw enable ohne vorherige Portfreigabe auf einem SSH-Server durchführst, kannst du dich aussperren.


🛡️ 4. fail2ban: Brute-Force-Schutz für SSH

Was macht fail2ban?

fail2ban überwacht Login-Versuche (z. B. via SSH) und sperrt IP-Adressen, die sich mehrfach mit falschen Zugangsdaten anmelden.

Damit schützt es den Server automatisch vor Brute-Force-Angriffen und entlastet sowohl den Betreiber als auch die öffentliche Infrastruktur (z. B. indem Angreifer geblockt statt weitergescannt werden).

📦 Installation:

sudo apt install fail2ban -y

🛠️ Konfiguration kopieren und anpassen: Die jail.conf ist die Standarddatei und wird bei Updates überschrieben – darum kopieren wir sie nach jail.local, um unsere Einstellungen dauerhaft zu speichern. jail.local hat bei der Ausführung Vorrang.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

🔧 Bearbeite den Abschnitt [sshd]:

[sshd]
# port = ssh
# logpath = %(sshd_log)s
# backend = %(sshd_backend)s
enabled = true
port = xxxxx
filter = sshd
logpath = /var/log/auth.log
maxretry = 5

📌 Wichtig:
Nur eine port- und logpath-Zeile je Jail.local – sonst startet fail2ban nicht!

✅ Dienst starten und prüfen:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

🔑 5. SSH-Zugang per Schlüsselpaar

🛡️ Sicherheit durch Schlüsselpaare:

Auch wenn ein Angreifer den Benutzernamen kennt, nutzt ihm das nichts ohne den passenden privaten Schlüssel – ein bedeutender Schutz gegen automatisierte Angriffe.

SSH-Schlüsselpaare bestehen aus einem privaten und einem öffentlichen Schlüssel.
- Der öffentliche Schlüssel wird auf dem Server gespeichert.
- Der private Schlüssel verbleibt sicher auf deinem Rechner.

Nur wer im Besitz des passenden privaten Schlüssels ist, kann sich authentifizieren. Das macht diese Methode extrem sicher – besonders im Vergleich zu klassischen Passwörtern, die erraten oder abgefangen werden können.

Die Schlüssel werden verglichen eine Passwortabfrage ist nicht mehr notwendig

🔧 Auf dem lokalen Rechner in Terminal ausführen:

ssh-keygen -t ed25519 -C "user@rechner"
🔐 Schlüssel auf Server kopieren:

ssh-copy-id -p xxxxx benutzer@lokale_ip_Server

🔁 Test:

ssh -p xxxxx benutzer@server


✅ 6. Passwort-Login deaktivieren

  • Erzwingt SSH-Schlüssel – keine Passwortangriffe mehr möglich
  • PasswordAuthentication no`: in die sshd_config eintragen
  • Nur durchführen, wenn der Schlüssel-Login getestet und funktionsfähig ist.

sudo nano /etc/ssh/sshd_config
diesen Eintrag hinzufügen oder entsprechend auskommentieren
PasswordAuthentication no
🔁 SSH neu starten:

sudo systemctl restart ssh
🔎 Test:

✅ Erfolgreicher Login mit Schlüssel

ssh -p xxxxx userserver@ipserver
Ergebnis: Du wirst eingeloggt – ggf. nach deiner Passphrase für den privaten Schlüssel gefragt.

❌ Fehlgeschlagener Test ohne Schlüssel

ssh -p xxxxx userserver@ipserver
Ergebnis: Permission denied (publickey). – das ist korrekt, wenn der private Schlüssel nicht verfügbar ist.

📌 Stolperfallen & Tipps

  • Doppelte Konfigurationszeilen (port, logpath) in fail2ban verursachen Startfehler
  • Immer eigene Konfiguration am Ende einfügen, nicht blind anhängen
  • SSH-Verbindung nie absichern, ohne zuerst zu testen – sonst schließt man sich aus

7. eine SSH config Datei erstellen

💡 SSH-Verbindungen bequem über Aliasnamen starten, ohne IP, Benutzername oder Port anzugeben.

Vorraussetzung ssh Schlüsselpaar wurde bereits erstellt Anleitung

nano ~/.ssh/config
einfügen:
Host meinserver
    HostName HostIP
    User benutzer
    Port ssh_Port
    IdentityFile ~/.ssh/dein-ssh-key
🛠️ Erlärung:
meinserver = frei gewählte Kurzbezeichnung für die Verbindung
HostIp = die lokale Netzwerk Ip Adresse des Servers
benutzer = der User auf dem Server (muss exitieren)
ssh_Port = der Port für ssh für den Zugang zum Server dein-ssh-key = der Dateiname des Key für den Server genau so wie lokal in ~/.ssh hinterlegt

📍 Dateirechte setzen

chmod 600 ~/.ssh/config
👍 danach kann in Zukunft der Aliasmane für die Authorisierung genutzt werden

VSCodium (mit Plugin „Open Remote - SSH“)

F1 → Remote-SSH: Connect to Host...
Auswahl: pinguinbox
VSCodium verwendet automatisch deine ~/.ssh/config

✅ Dateibrowser (z. B. Nautilus, Thunar, Dolphin)

Adresseingabe:
ssh://pinguinbox

✅ Kommandozeile – Datei auf Server kopieren

scp /lokaler/pfad/datei.txt pinguinbox:/ziel/verzeichnis/

🔄 8. Automatische Sicherheitsupdates mit unattended-upgrades

🔧 Sicherheitsrelevante Updates automatisch einspielen lassen – mit Protokollierung.

🧱 Installation:

sudo apt install unattended-upgrades -y
🛠 Aktivierung:

sudo dpkg-reconfigure --priority=low unattended-upgrades
Im Dialog „Ja“ auswählen, um automatische Sicherheitsupdates zu aktivieren.

manueller Testlauf

sudo unattended-upgrade -d
Der Parameter -d steht für „Debug“ und zeigt an, welche Pakete jetzt installiert würden oder ob keine Updates nötig sind.

🕒 Update-Zeitplan prüfen

Ubuntu nutzt systemd-Timer für die Steuerung automatischer Updates – kein klassischer Cronjob.

🧪 Aktuellen Zeitplan anzeigen:

systemctl list-timers --all | grep apt

Beispielausgabe:

apt-daily.timer            führt `apt update` täglich aus
apt-daily-upgrade.timer    startet `unattended-upgrades` täglich
🕓 Standardmäßig startet unattended-upgrades zwischen 06:00 und 07:00 Uhr UTC (08:00–09:00 Uhr MESZ).

9. Logwatch einrichten

prüfen ob Logwatch läuft;

dpkg -l | grep logwatch

wenn nicht installieren

sudo apt install logwatch -y

bei der Insatllation: E-Mail "Keine Konfiguration“ auswählen wir richten im nächste Schritt eine Logdatei ein. Nextdata und Gotify setzen wir für die Systemüberwachung ein

läuft Logwatch automatisch?

ls -l /etc/cron.daily/ | grep logwatch

erwartete Ausgabe in dieser Art:

hagen@homelab:~$ ls -l /etc/cron.daily/ | grep logwatch
-rwxr-xr-x 1 root root  268 Dez 10  2022 00logwatch
00logwatch ist der Name des Skripts dieses wird täglich durch Cron ausgeführt

Logwatch für den täglichen Logeintrag konfigurieren

sudo nano /etc/logwatch/conf/logwatch.conf

eintragen:

Output = file
Format = text
Range = yesterday
Detail = Medium
Filename = /var/log/logwatch.log

Testlauf:

sudo logwatch

Bericht anzeigen:

less /var/log/logwatch.log

Wenn Logwatch nur sehr wenig oder keine Inhalte zeigt, liegt das meist daran, dass am Vortag keine systemrelevanten Ereignisse in den Logs aufgetreten sind. Bei frischen Servern ist das normal.