In diesem Beitrag zeige ich dir Schritt für Schritt, wie du einen Linux-Server grundlegend konfigurierst – als stabile Basis für verschiedenste Projekte. In meinem Fall wird der Server später als vollständig funktionsfähiger Mailserver dienen, der über das Internet erreichbar sein soll. Aus diesem Grund ist eine sichere Grundkonfiguration besonders wichtig.
Als Ausgangspunkt dient ein kostengünstiger VPS, wie er bei vielen Hosting-Anbietern verfügbar ist. In der Regel ist bereits eine öffentliche IPv4-Adresse enthalten, über die der Server erreichbar ist. Optional kann eine eigene Domain gebucht werden, um den Server künftig auch unter einem einprägsamen Namen ansprechen zu können.
🖥️ Schritt 1: SSH-Verbindung zum Server herstellen
Um den Server administrieren zu können, wird zunächst eine SSH-Verbindung aufgebaut. Je nach Betriebssystem stehen dir verschiedene Möglichkeiten zur Verfügung:
- Windows: Nutze die PowerShell, das Terminal oder ein externes Programm wie PuTTY
- macOS / Linux: Öffne einfach ein Terminal
ssh root@deine-server-ip
Beim ersten Verbindungsaufbau erhältst du eine Sicherheitsabfrage zur Authentizität des Servers (der sogenannte „Fingerprint“ ist noch nicht bekannt). Bestätige diese Meldung mit yes
. Anschließend wirst du zur Eingabe des Passworts für den Benutzer root aufgefordert.
♻️ Schritt 2: System aktualisieren
Bevor du mit der Einrichtung des Servers fortfährst, solltest du das System auf den aktuellen Stand bringen. So stellst du sicher, dass alle sicherheitsrelevanten Updates sowie Paketverbesserungen installiert sind – besonders wichtig bei frisch installierten Images vom Hosting-Anbieter.
Paketlisten aktualisieren und alle Updates installieren:
apt update && sudo apt upgrade -y
Dieser Befehl führt zwei Schritte in einem Durchlauf aus:
apt update
: Aktualisiert die Paketinformationenapt upgrade -y
: Installiert alle verfügbaren Updates automatisch ohne weitere Rückfrage
(Optional) Neustart nach Kernel-Update:
Falls ein Kernel oder Systempakete aktualisiert wurden, sollte der Server anschließend neu gestartet werden:
reboot
Nach dem Reboot kannst du dich erneut per SSH verbinden:
ssh root@deine-server-ip
🔧 Schritt 3: Hostname korrekt setzen
Ein Server sollte immer über einen vollqualifizierten Domänennamen (FQDN) verfügen – beispielsweise host01.degen-dev.de
. Der Hostname lässt sich mit folgendem Befehl setzen:
hostnamectl set-hostname host01.degen-dev.de
Anschließend sollte die Datei /etc/hosts
geprüft und gegebenenfalls angepasst werden:
nano /etc/hosts
Der Inhalt sollte wie folgt aussehen:
127.0.0.1 localhost
127.0.1.1 host01.degen-dev.de
# (Optional) IPv6:
::1 localhost ip6-localhost ip6-loopback
Ein Neustart des Servers ist empfohlen. Den Hostnamen kannst du über folgenden Befehl prüfen:
hostnamectl
Sollte zeigen:
Static hostname: host01.degen-dev.de
📌 Hinweis zur DNS-Rückauflösung (PTR-Record)
Achte darauf, dass dein Hosting-Anbieter einen PTR-Record (Reverse DNS) für die öffentliche IP-Adresse des Servers einrichtet, der auf denselben Hostnamen zeigt – in diesem Fall host01.degen-dev.de
. Dies ist insbesondere für Mailserver entscheidend, da viele empfangende Server nur E-Mails annehmen, wenn die Rückauflösung korrekt funktioniert.
🕓 Schritt 4: Zeitzone, Uhrzeit und Sprache konfigurieren
Für einen stabilen und nachvollziehbaren Betrieb – insbesondere bei Logging, Cronjobs und E-Mail-Versand – ist es wichtig, dass die Systemzeit korrekt eingestellt ist. Zusätzlich sollte die Zeitzone auf den Standort des Servers bzw. Administrators abgestimmt und die Sprache für die Kommandozeilenausgabe gesetzt werden.
Zeitzone festlegen
Die Zeitzone kann mithilfe des folgenden Befehls interaktiv oder direkt gesetzt werden. Für Deutschland wird in der Regel Europe/Berlin
verwendet:
timedatectl set-timezone Europe/Berlin
Die aktuelle Zeiteinstellung kannst du überprüfen mit:
timedatectl status
Zeitsynchronisierung sicherstellen
Stelle sicher, dass die Zeit automatisch über einen NTP-Dienst synchronisiert wird. Unter Debian ist chrony eine moderne und zuverlässige Lösung für die Zeitsynchronisierung. Installiere und aktiviere chrony wie folgt:
sudo apt install chrony
sudo systemctl enable --now chrony
Nach der Installation kannst du den Synchronisationsstatus mit folgendem Befehl überprüfen:
chronyc tracking
Spracheinstellungen (Locale) konfigurieren
Für deutsche Ausgaben auf der Konsole oder Skripten kann die Systemsprache auf de_DE.UTF-8
umgestellt werden. Du kannst die verfügbaren Sprachpakete konfigurieren mit:
sudo dpkg-reconfigure locales
Wähle de_DE.UTF-8
(und optional weitere Sprachen) aus und lege diese als Standard fest.
🧱 Schritt 5: Firewall einrichten (optional, empfohlen)
Auch auf einem frischen Server sollten nur die Ports offen sein, die wirklich benötigt werden. Eine Firewall schützt den Server zuverlässig vor ungewollten Zugriffen und ist insbesondere bei öffentlich erreichbaren Diensten (z. B. Mailserver, Webserver, SSH) dringend zu empfehlen.
Für einfache Firewall-Regeln bietet sich das Tool UFW (Uncomplicated Firewall) an, das eine benutzerfreundliche Oberfläche für iptables
bzw. nftables
bereitstellt.
UFW installieren:
apt install ufw
Grundregeln setzen:
Zunächst erlauben wir nur SSH-Zugriff, damit du nicht ausgesperrt wirst:
ufw allow OpenSSH
Firewall aktivieren:
ufw enable
Status prüfen:
ufw status verbose
📌 Hinweis zu anderen Firewall-Lösungen
Alternativ zur UFW kann auch direkt mit nftables
gearbeitet werden – dies ist das moderne Standard-Backend unter Debian 12. UFW reicht jedoch in vielen Fällen aus und ist für den Einstieg deutlich einfacher zu handhaben.
🔐 Schritt 6: SSH & Benutzerzugang absichern
Bevor du den Server weiter einrichtest, solltest du den Zugang absichern. Ziel dieses Schrittes:
- 🔒 Den direkten SSH-Login als root deaktivieren
- 👤 Einen eigenen Benutzer mit
sudo
-Rechten anlegen - 🗝️ (Optional, aber empfohlen) SSH-Schlüssel zur Anmeldung verwenden
- ✅ Alle weiteren Arbeiten nur noch über den neuen Benutzer erledigen
Benutzer mit sudo-Rechten anlegen
Ersetze tobias
durch deinen gewünschten Benutzernamen:
adduser tobias
usermod -aG sudo tobias
Während des Anlegens wird ein Passwort für den Benutzer abgefragt. Dieses Passwort benötigst du später, wenn du dich mit dem neuen Benutzer anmeldest oder sudo
verwendest.
SSH-Schlüssel auf deinem Client erzeugen
Da wir aktuell nur ein Passwort für tobias
haben, erzeugen wir auf deinem lokalen Rechner ein neues Schlüsselpaar, um den späteren Login sicherer zu machen.
Unter PowerShell, Linux, macOS oder WSL:
ssh-keygen -t ed25519 -C "tobias@degen-dev.de"
- Mit
ENTER
bestätigen, um den Standardpfad (~/.ssh/id_ed25519
) zu nutzen - Optional: eine Passphrase für zusätzlichen Schutz eingeben
Der öffentliche Schlüssel befindet sich danach in:
~/.ssh/id_ed25519.pub
Öffentlichen Schlüssel auf den Server hochladen
Melde dich weiterhin als root
am Server an und kopiere den öffentlichen Schlüssel für den neuen Benutzer:
mkdir -p /home/tobias/.ssh
nano /home/tobias/.ssh/authorized_keys
- Den Inhalt deiner lokalen Datei
~/.ssh/id_ed25519.pub
hier einfügen - Datei speichern und schließen
Rechte anpassen:
chown -R tobias:tobias /home/tobias/.ssh
chmod 700 /home/tobias/.ssh
chmod 600 /home/tobias/.ssh/authorized_keys
Test: SSH-Login mit neuem Benutzer
Öffne ein zweites Terminal und teste den Login:
ssh tobias@host01.degen-dev.de
Wenn alles funktioniert, wirst du ggf. nur nach der Passphrase des Schlüssels gefragt – nicht nach dem Benutzerpasswort. Wenn der Login erfolgreich ist, kannst du die Root-Session schließen. Ab sofort arbeitest du mit:
sudo <befehl>
Beispiel:
sudo apt update
sudo apt install <paketname>
Root-Login per SSH deaktivieren
Wenn der Login mit dem neuen Benutzer funktioniert, kannst du den direkten Root-Login sperren:
sudo nano /etc/ssh/sshd_config
Ändere oder ergänze:
PermitRootLogin no
(Optional, nur wenn Schlüssel-Login funktioniert):
PasswordAuthentication no
SSH-Dienst neu starten:
sudo systemctl restart ssh
📌 Falls PasswordAuthentication no
keine Wirkung zeigt
Wenn die Einstellung in der Hauptkonfigurationsdatei /etc/ssh/sshd_config
nicht greift, überprüfe zusätzlich das Verzeichnis /etc/ssh/sshd_config.d/
auf weitere Konfigurationsdateien. Diese können über Include-Anweisungen in der sshd_config eingebunden werden. Prüfe, ob in einer dieser Dateien möglicherweise PasswordAuthentication yes gesetzt ist.
Falls weiterhin Passwort-Logins möglich sind, kannst du außerdem versuchen, folgende Optionen in der sshd_config zu ergänzen oder anzupassen:
UsePAM no
ChallengeResponseAuthentication no
Danach den SSH-Dienst neu starten:
sudo systemctl restart ssh