🔐 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 aufapt 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
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
¶
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"
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
PasswordAuthentication no
sudo systemctl restart ssh
✅ Erfolgreicher Login mit Schlüssel
ssh -p xxxxx userserver@ipserver
❌ Fehlgeschlagener Test ohne Schlüssel
ssh -p xxxxx userserver@ipserver
Permission denied (publickey).
– das ist korrekt, wenn der private Schlüssel nicht verfügbar ist.
📌 Stolperfallen & Tipps
- Doppelte Konfigurationszeilen (
port
,logpath
) infail2ban
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
Host meinserver
HostName HostIP
User benutzer
Port ssh_Port
IdentityFile ~/.ssh/dein-ssh-key
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
✅ 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
sudo dpkg-reconfigure --priority=low unattended-upgrades
manueller Testlauf
sudo unattended-upgrade -d
🕒 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
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.