Salta al contenuto principale
Lympha technologies

Guide pratiche

So sichern Sie einen VPS mit Rocky Linux ab

Grundlegendes Hardening eines Rocky-Linux-VPS (gilt auch für CentOS 7 und 8): Prüfung der Version, Updates mit dnf, Benutzer in der Gruppe wheel, Verwaltung von firewalld mit permanenten Regeln, Änderung des SSH-Ports und deaktivierter Root-Zugang.

Rocky Linux ist ein Open-Source-Betriebssystem auf Enterprise-Niveau. Seine wichtigste Besonderheit ist, dass es im Gleichschritt mit Red Hat Enterprise Linux entwickelt und gepflegt wird, also zu 100 % Bug-für-Bug-kompatibel ist. In dieser Anleitung führen wir eine erste, grundlegende Absicherung eines frisch installierten Rocky-Linux-VPS durch. Diese ersten einfachen Schritte sollten anschließend durch weitere Sicherheitsmechanismen ergänzt werden, je nachdem, welche Dienste Sie installieren möchten.

Aufgrund des gemeinsamen Ursprungs (Red Hat) gilt diese Anleitung auch für die Betriebssysteme CentOS 7 und 8.

Voraussetzungen

  1. Ein Rocky-Linux-VPS
  2. Ein Benutzer mit angemessenen Rechten, also root
  3. Ein Texteditor, in unserem Beispiel verwenden wir nano
  4. Der Paketmanager dnf, normalerweise im Betriebssystem enthalten
  5. [Empfohlen] Eine Firewall, in unserem Beispiel verwenden wir firewalld

Prüfen wir, welches Betriebssystem installiert ist

Da es sich um eine Linux-Distribution handelt, die Red Hat EL folgt, sollte man im Problemfall genau wissen, mit welcher Version man arbeitet. Dazu können wir den Befehl ausführen:

# cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.0 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.0"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.0 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.0"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.0"

In unserem Beispiel ist es die Version 9.0 mit dem Namen Blue Onyx.

Aktualisieren Sie Ihr Betriebssystem

Um nach verfügbaren Updates zu suchen, verwenden wir den Befehl dnf mit dem Parameter check-update:

# dnf check-update

Dieser Befehl zeigt die Liste aller zu aktualisierenden Pakete an. Nun können Sie wählen, ob Sie alles Vorgeschlagene aktualisieren oder selektiv nur einzelne Pakete. Im ersten Fall genügt der Befehl:

# dnf -y update

Der Parameter -y dient lediglich dazu, das Update aller Pakete vorab zu bestätigen, ohne dass eine Rückfrage erfolgt. Möchten wir stattdessen selektiv vorgehen, also ein bestimmtes Paket aktualisieren, genügt der Befehl:

# dnf update cockpit.x86_64

In unserem Beispiel aktualisieren wir das Paket cockpit und lassen die übrigen außen vor.

Anlegen eines Benutzers mit eingeschränkten Privilegien

Als allgemeine Sicherheitsregel gilt: Verwenden Sie den Benutzer root nicht für die täglichen Arbeiten auf dem VPS. Zu diesem Zweck legen wir einen Benutzer mit eingeschränkten Privilegien an, der bei Bedarf vorübergehend die Rolle des Benutzers root übernehmen kann. Einen neuen Benutzer legt man mit dem Befehl useradd an:

# useradd mio_utente

Nachdem der Benutzer angelegt ist, vergeben wir mit dem Befehl passwd ein Passwort:

# passwd mio_utente
Changing password for user mio_utente
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Auch wenn der neu angelegte Benutzer kaum Möglichkeiten hat, im System Schaden anzurichten, verzichten wir auf schwache Passwörter (mindestens 8 alphanumerische Zeichen, Sonderzeichen eingeschlossen). Nun können wir uns mit dem neu angelegten Benutzer am VPS anmelden, sind aber vorerst nicht in der Lage, Befehle auszuführen, die die Privilegien des Benutzers root erfordern.

Um Befehle auszuführen, die Root-Privilegien erfordern, gibt es zwei Wege:

  1. den Befehl $ su root verwenden, um den Benutzer root zu übernehmen;
  2. den neu angelegten Benutzer in die Gruppe der Sudoer aufnehmen (die Benutzer, die Befehle mit Root-Privilegien ausführen können): Bei Bedarf genügt dann $ sudo comando_con_privilegi (Beispiel $ sudo dnf update).

Während der unprivilegierte Benutzer im ersten Fall das Root-Passwort kennen muss, um arbeiten zu können, ist er im zweiten Fall vorab autorisiert — umso weniger sollte man die Qualität des gewählten Passworts unterschätzen. Besser wäre es, SSH nicht auf dem Standard-Port zu exponieren, und noch besser, sich mit kryptografischen Schlüsseln statt mit dem bloßen Benutzer/Passwort-Verfahren zu verbinden.

Um den angelegten Benutzer in die Gruppe der Sudoer aufzunehmen, melden wir uns als Benutzer root am VPS an und verwenden den Befehl:

# usermod -aG wheel mio_utente

Die Gruppe „wheel“ ist eine spezielle Gruppe, die auf einigen Linux-Systemen steuert, welche Benutzer den Befehl sudo verwenden dürfen. Wenn wir uns nun per SSH mit dem unprivilegierten Benutzer am VPS anmelden, können wir mit sudo, gefolgt vom privilegierten Befehl, Tätigkeiten ausführen, die normalerweise Root-Rechte erfordern, zum Beispiel:

$ sudo dnf check-update
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for mio_utente:

Das abgefragte Passwort ist natürlich das des zuvor angelegten Benutzers, nicht das von root. Auf diese Weise können wir Benutzer für externe Mitarbeiter anlegen, ohne das Root-Passwort weiterzugeben.

Verwaltung der Firewall

Ein wichtiger Aspekt für die Sicherheit des VPS ist die Verwaltung der Firewall. In Rocky Linux ist die Firewall standardmäßig aktiv, mit einer Grundkonfiguration, die Verbindungen per SSH (Standard-Port TCP 22) und zur Web-Konsole Cockpit (Port TCP 9090) erlaubt; letzterer Dienst ist nicht aktiv — wenn Sie also versuchen, die Adresse https://ip_vps:9090 aufzurufen, erhalten Sie keine Antwort. Anders als die von Debian abgeleiteten Betriebssysteme (etwa Ubuntu Server) verwendet Rocky Linux firewalld: Die Befehle für seine Konfiguration unterscheiden sich daher von ufw (wer üblicherweise mit Ubuntu arbeitet, weiß, wovon wir sprechen).

Stellen wir als ersten Schritt sicher, dass die Firewall läuft:

$ sudo firewall-cmd --state

Da Sie einen Nicht-Root-Benutzer verwenden, werden Sie nach dem Passwort gefragt. Wenn alles wie erhofft verläuft, lautet die Ausgabe schlicht „running“.

Die aktuelle Firewall-Konfiguration prüfen wir mit dem Befehl:

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Hier sehen wir, dass die aktive Zone public (active) heißt, dass ihr die Netzwerkschnittstelle eth0 zugewiesen ist, dass eingehende Verbindungen für die Dienste cockpit, dhcpv6-client und ssh erlaubt sind und dass ICMP-Antworten zugelassen werden — icmp-block-inversion: no (Beispiel: die Antworten auf den Befehl ping).

Die Zone public blockiert standardmäßig jede eingehende Kommunikation, sofern nichts anderes festgelegt ist. Ein grundlegendes Konzept von firewalld ist, dass alle Änderungen an der Konfiguration temporär sind, sofern nicht der Parameter --permanent vor dem Befehl verwendet wird. Das heißt: Würden wir beispielsweise den Port 443 öffnen, um den Zugriff per HTTPS zu erlauben, mit folgendem Befehl:

$ sudo firewall-cmd --zone=public --add-service=https

wäre diese Regel beim nächsten Neustart des VPS nicht mehr vorhanden. Möchten wir sie hingegen permanent machen, genügt — wie gesagt:

$ sudo firewall-cmd --permanent --zone=public --add-service=https

Den Port des SSH-Dienstes ändern

Wie der geniale zeitgenössische Schriftsteller Ken Follett über das Vertrauen sagen würde: „Jemandem zu vertrauen ist, als hielte man Wasser in den zur Schale geformten Händen …“; wenn wir über IT-Sicherheit sprechen, stellen Sie sich vor, das Wasser mit völlig gespreizten Fingern zu halten. Da wir den „Jemand“ nicht kennen können, der versuchen wird, sich mit Ihrem VPS zu verbinden, schenken wir ihm keinerlei Vertrauen. Ein bereits in anderen Artikeln gegebener Tipp ist, den Standard-Port des SSH-Dienstes zu ändern: Dieser einfache Schritt verringert die unautorisierten Zugriffsversuche von Skripten, die automatisch eine Verbindung über den Port 22 versuchen.

Bevor wir mit der Konfiguration beginnen, legen wir fest, welchen Port wir verwenden: In diesem Beispiel haben wir den Port 4322/TCP gewählt.

Schritt 1 — Wir konfigurieren die Firewall. Wir fügen der Firewall-Konfiguration den Port 4322/TCP hinzu:

$ sudo firewall-cmd --permanent --zone=public --add-port=4322/tcp

Wie Sie sehen, haben wir den Parameter verwendet, um die Konfiguration permanent zu machen. Nun laden wir alle Parameter neu und vergewissern uns, dass keine Fehler vorliegen:

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-ports

In der Ausgabe erscheint unser 4322/tcp.

Schritt 2 — Wir konfigurieren den SSH-Dienst. Das Vorgehen zum Ändern des Standard-Ports ist recht einfach: Es genügt, in der Datei /etc/ssh/sshd_config die Portnummer zu ändern und anschließend den Dienst neu zu starten. Zum Bearbeiten der Datei verwenden wir den Editor nano:

$ sudo nano /etc/ssh/sshd_config

Alles, was in dieser Datei mit „#“ beginnt, ist ein Kommentar und wird vom System nicht berücksichtigt; zugleich verrät es uns aber den Standardwert. Wir suchen die Zeile, die mit #Port 22 beginnt, entfernen das Zeichen „#“ und ändern den Wert des Ports — oder wir fügen direkt unter dem Kommentar eine Zeile mit unserem neuen SSH-Port hinzu: Port 4322. Bleibt nur noch, die Änderung mit STRG+X zu speichern und mit Y zu bestätigen.

Damit die Änderungen wirksam werden, muss der Dienst neu gestartet werden:

$ sudo systemctl restart sshd.service

Wenn Sie jetzt versuchen, sich per SSH mit Ihrem VPS zu verbinden, erhalten Sie die Meldung ssh: connect to host IP_VPS port 22: Connection refused. Um sich verbinden zu können, muss dem Befehl die Option -p gefolgt vom neuen Port hinzugefügt werden:

ssh mio_utente@IP_VPS -p 4322

Den Root-Zugriff per SSH deaktivieren

Für mehr Sicherheit Ihres VPS wird dringend empfohlen, dem Benutzer root den Zugriff per SSH nicht zu erlauben: Zu diesem Zweck haben wir zuvor einen Benutzer mit eingeschränkten Privilegien angelegt, der bei Bedarf root werden kann. Nun unterbinden wir den SSH-Zugriff für root. Auch in diesem Fall müssen wir die Konfigurationsdatei des SSH-Dienstes bearbeiten, wie schon beim Wechsel des Standard-Ports.

Wir öffnen die Datei /etc/ssh/sshd_config mit dem Editor nano ($ sudo nano /etc/ssh/sshd_config), suchen die Zeichenfolge „PermitRootLogin yes“ und setzen sie auf „no“:

# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes

Wir speichern die Änderung mit STRG+X und bestätigen mit Y. Anschließend starten wir den Dienst neu, damit die Änderungen wirksam werden:

$ sudo systemctl restart sshd.service

Auch wenn es unbequem erscheinen mag, root die Verbindung per SSH zu verwehren, ist dies ein wichtiger Schritt, um das Sicherheitsniveau des VPS zu erhöhen. Sollten Sie sich direkt mit dem Benutzer root an der Maschine anmelden müssen, können Sie jederzeit die Web-Konsole im Dashboard Ihres VPS GREEN-Kontos verwenden.

Diese Anleitung erschien ursprünglich im Blog von VPS GREEN, dem VPS-Dienst auf unserer grünen Private Cloud.

Diesen Artikel teilen

LinkedIn X Email

Lympha-Redaktion

Die Artikel dieses Blogs entstehen aus der Praxiserfahrung unserer Business Units und Kompetenzzentren: Es schreiben diejenigen, die die Systeme, über die wir berichten, täglich planen, betreiben und supporten. Die Inhalte dienen der Information und geben den Stand der Technik zum Zeitpunkt der Veröffentlichung wieder.

Das könnte Sie auch interessieren