BASIC SERVER SECURITY
13. November 2025
Basic Server Security: die beste, sicherste Haustür bringt nichts, wenn der Schlüssel steckt.
Basic Server Security
Meistens würde ich Docker und ein direktes Container Hosting (wie z.B. DigitalOcean App Platform) empfehlen zu benutzen, aber in manchen Fällen braucht man einen guten altmodischen Server. Celery, um nur ein Beispiel zu nennen, kann nicht auf der DigitalOcean App Platform genutzt werden (Stand: 07.11.2025).
Wenn man an diesen Punkt kommt, an dem man einen Server braucht, oder man mit der Pflege eines alten Servers betraut wird, sollte man einige grundlegende Schritte kennen, um einen Server abzusichern. Man kann Stunden um Stunden damit verbringen, seine Applikationen abzusichern, aber wenn der Server diese grundlegende Sicherheit vermisst, ist es, als würde man einen Schlüssel in seiner Haustür stecken lassen.
Hier sind unsere grundlegenden Schritte, die wir auf jedem Server ausführen.
Disclaimer: Diese Anleitung gilt für Ubuntu Server ab 24.04. Die meisten Befehle sollten auch auf älteren Versionen und anderen Betriebssystemen funktionieren.
Accounts erstellen
Der Zugriff auf den Server sollte immer nur über dedizierte Nutzeraccounts und nicht über zentralisierte Accounts oder gar den root Nutzer erfolgen. Dies hat zwei einfache Gründe:
1. Wenn ein Nutzer kompromittiert wird, kann diesem Nutzer der Zugriff entzogen werden
2. Man kann nachverfolgen, welcher Nutzer, welche Änderungen vorgenommen haben
Ein Nutzeraccount wird mittels sudo adduser <username> --force-badname angelegt. Danach wird der Nutzer der Gruppe sudo hinzugefügt, sodass er Befehle als Administrator ausführen kann: sudo usermod -aG sudo <username>.
Grundsätzlich sollte der Zugang nur mittels SSH Keys möglich sein. Dazu hinterlegt man den öffentlichen SSH Key im Nutzeraccount. Mittels sudo su <username> wechselt man zum neu angelegten Nutzer und erstellt das Verzeichnis .ssh in dessen Homeverzeichnis (mkdir ~/.ssh).
In diesem Verzeichnis wird die Datei authorized_keys erstellt, die den Public Key enthalten wird. Der Befehl hierzu lautet: cd ~/.ssh && nano authorized_keys. Hier den Public Key eintragen und die Datei speichern. Zuletzt müssen die Zugriffsrechte auf den .ssh Ordner und die authorized_keys Datei korrekt gesetzt werden. Dies geschieht mit dem Befehl: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys.
Dies wird nun für jeden Nutzer, der Zugriff auf den Server haben soll, wiederholt.
Sudo nur mit Passwort
Damit der sudo Befehl nur mit Passwort möglich ist - dies ist ein zusätzlicher Sicherheitsmechanismus, muss eine Konfiguration angelegt werden. Dies geschieht mittels sudo nano /etc/sudoers.d/10-default-user-config. Hier wird für jeden Benutzer-Account ein Eintrag nach folgendem Schema angelegt: <username> ALL=(ALL) ALL. Damit wird bei der ersten Benutzung des sudo Befehls in einer Session nach dem Passwort gefragt.
Wichtig: Nur Nutzer, die einen SSH Zugang haben, dürfen in diese Datei aufgenommen werden.
SSH absichern
Nachdem die Nutzer angelegt wurden, wird SSH selbst abgesichert. Wie weiter oben schon beschrieben, wollen wir den Zugriff für den root Nutzer verhindern und gleichzeitig den Login nur mittels Keys erlauben. Außerdem ist es eine gute Idee, den SSH-Port zu ändern (am besten auf einen Port > 1024). Dies verhindert zwar keine Angriffe, aber erschwert sie. Dazu wird eine Konfigurationsdatei für ssh mittels cd /etc/ssh/sshd_config.d && sudo nano 10-custom-ssh.conf erzeugt. Folgende Konfiguration nutzen wir:
Port <SSH Port>
PermitRootLogin no # Verhindert Root Login
PasswordAuthentication no # Verhindert Login mit Passwort
IgnoreRhosts yes # Deaktiviert altes RSH Protokoll
Seit Ubuntu 22.04 benutzt ssh sockets, daher muss dort der Port angepasst werden. Dazu wird mit sudo nano /lib/systemd/system/ssh.socket die Datei geöffnet und überall wo 22 steht der vorher gewählte SSH Port eingesetzt.
Nun kann SSH mit den Befehlen sudo systemctl daemon-reload && sudo systemctl restart ssh neu gestartet werden.
Nach einem Logout, kann man sich nur noch mit den angelegten Benutzeraccounts anmelden.
Root Shell deaktivieren
Damit ein Nutzer nicht zur Root Shell wechselt und Befehle dort ausführt, wird die Root Shell deaktiviert. Dazu öffnet man mit sudo nano /etc/passwd die nötige Konfiguration und ändert in der Zeile, in der root steht /bin/bash auf /usr/sbin/nologin. Somit wird verhindert, dass ein Nutzer mit su root auf die Root Shell wechselt. Der Versuch, auf die Root Shell zu wechseln, wird ebenso aufgezeichnet.
Firewall
Im letzten Schritt wird eine Firewall aktiviert, damit lediglich die Ports geöffnet sind, die benötigt werden. So werden Zugriffsversuche auf andere Ports direkt durch die Firewall blockiert. Als Firewall benutzen wir ufw. Mittels sudo ufw default deny incoming und sudo ufw default allow outgoing, blockieren wir grundsätzlich jeden ankommenden Traffic und erlauben ausgehenden. Nun wird der SSH Port mit sudo ufw allow <SSH Port> wieder geöffnet. Dies darf nicht vergessen werden, da sonst der Zugriff per SSH nicht mehr funktioniert, sobald die Firewall aktiviert wird. Nach dem gleichen Schema werden weitere Ports geöffnet. Mit dem Befehl sudo ufw enable wird die Firewall anschließend aktiviert.
Fazit
Mit dieser kleinen Anleitung ist ein Server grundlegend gesichert. Weitere Konfigurationen und Absicherungen müssen anhand der spezifischen Anforderungen geprüft und gemacht werden.
TL;DR
Für alle, die nur eine schnelle kleine Anleitung wollen.
Accounts erstellen
1. sudo adduser <username> --force-badname -> fügt den Account hinzu
2. sudo usermod -aG sudo <username> -> fügt den Account zur sudo Gruppe hinzu
3. sudo su <username> && mkdir ~/.ssh -> wechselt zum erstellten Account und erzeugt ein .ssh Verzeichnis in dessen Home Verzeichnis
4. cd ~/.ssh && nano authorized_keys -> wechselt in das .ssh Verzeichnis und öffnet die Datei authorized_keys. In diese wird der Public Key des Nutzers eingetragen.
5. chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys -> setzt die passenden Zugriffsrechte
Punkt 1 - 5 für jeden weiteren Nutzer wiederholen.
Sudo nur mit Passwort
1. sudo nano /etc/sudoers.d/10-default-user-config -> Legt eine neue sudoers Konfiguration an
2. <username> ALL=(ALL) ALL -> für jeden Nutzer diese Zeile hinzufügen
Nur SSH-Accounts dürfen in diese Datei aufgenommen werden!
SSH absichern
1. cd /etc/ssh/sshd_config.d && sudo nano 10-custom-ssh.conf -> erstellen einer SSH Konfiguration mit folgendem Inhalt
Port <SSH Port>
PermitRootLogin no # Verhindert Root Login
PasswordAuthentication no # Verhindert Login mit Passwort
IgnoreRhosts yes # Deaktiviert altes RSH Protokoll
Seit Ubuntu 22.04 nutzt ssh sockets. Um auch dort den Port umzustellen muss folgendes gemacht werden
1. sudo nano /lib/systemd/system/ssh.socket
2. ListenStream=0.0.0.0:22 auf ListenStream=0.0.0.0:<SSH Port> ändern
3. ListenStream=[::]:22 auf ListenStream=[::]:<SSH Port> ändern
SSH mittels sudo systemctl daemon-reload && sudo systemctl restart ssh neustarten. Nun ausloggen und mit einem der erstellen Accounts einloggen und prüfen, ob alles funktioniert.
Root Shell deaktivieren
1. sudo nano /etc/passwd -> öffnet die Konfiguration
2. /bin/bash auf /usr/sbin/nologin ändern in der Zeile, die mit root anfängt
Firewall
1. sudo ufw default deny incoming -> grundsätzlich ankommenden Traffic blockieren
2. sudo ufw default allow outgoing -> grundsätzlich ausgehenden Traffic erlauben
3. sudo ufw allow <SSH Port> -> SSH erlauben
4. sudo ufw allow <port> -> weitere Ports öffnen (falls notwendig)
5. sudo ufw enable -> aktiviert die Firewall. WICHTIG: Vorher muss auf jeden Fall der SSH-Port geöffnet sein, sonst ist der Zugriff auf den Server nicht mehr möglich.
Server
Security
SSH
sudo
Privacy
Data Leaks
Firewall
Fabian Clemenz
[email protected]

