<
Proxmox STRATO Server
01 Vorbereitung Server und VM 02 Netzwerk und SSH 03 Firewall 04 Serielle Konsole 05 Installation Kleine Themen
>

Proxmox Server auf einem STRATO Server

Netzwerk Einstellungen und SSH Server

Diese Seite behandelt die Schritte der Netzwerk Einstellung und der sicheren Konfiguration des SSH Servers auf dem Proxmox. Es basiert auf der erfolgten Installation des Proxmox zu Hause in einer VM aus dem Schritt zuvor. Die Absicherung von Netzwerk Ports gegen Zugriffe vom Internet zeige ich auf der folgenden Seite.

Aktuelle Netzwerk Einstellungen am STRATO Server ermitteln

Nach der initialen Einrichtung steht der Zugriff auf den Server bei STRATO per SSH zur Verfügung. Dies geschieht aktuell noch über Port 22 und mit Passworteingabe des "root" Passworts, welches man im Server Login eingerichtet hat.
Der Server bei STRATO wurde auf bestimmte Netzwerk Einstellungen gesetzt, die auf den Proxmox übertragen werden müssen. Diese können wir nur durch eine Abfrage in dem Linux in Erfahrung bringen. Wie bereits erläutert, kann der VM zu Hause aktuell nicht die Einstellungen gesetzt werden. Jedoch ist es besser jetzt die Einstellungen zu kopieren, damit man sie im Schritt der Übertragung zum Server setzten kann. Und ich kann hier bei Erläuterungen mich auf die Einstellungen beziehen, so dass bekannt ist, wo diese zu setzen sind.
Der Server hat von STRATO eine IP Adresse zugeordnet bekommen. Damit der Server mit dem Internet kommunizieren kann ist ihm dazu von STRATO auch eine Route zugewiesen worden. Am Ende der Route wird über das "Gateway" der Zugriff auf das Internet ermöglicht. Die Kombination aus IP-Adresse und Subnetz (CIDR-Notation) hat als Postfix immer eine "/32". Das ist eine Spezialfunktion bei dem IP Protokoll, so dass der Server nur über die Route mit dem Gateway reden kann. Eine Kommunikation mit anderen Servern intern im STRATO Rechenzentrum ist nicht möglich.
Alle Einstellungen bekommt der Server in der original Konfiguration per DHCP. Damit der Server Namen wie "strato.de" auflösen kann wird der DNS-Server benötigt. Dieser wurde auf einen bei STRATO voreingestellt. Es kann hier auch ein anderer öffentlicher Verwendet werden.
Unten zeige ich eine Befehlskette, mit der sich alle nötigen Daten abfragen lassen. Es wird erst der eingestellte DNS-Server gezeigt, dann die Standardroute, die uns gleichzeitig das Gateway benennt. Danach erfolgt die Ausgabe der Schnittstellen, wo wir bei "eno1" die IP-Adresse des Servers finden. Als letztes wird die "hosts"-Datei und der Hostname ausgegeben. Dieser sollte sich schon jetzt mit dem in der VM decken.

Die Kommandozeile lautet:

cat /etc/resolv.conf && ip route && \
ip a && cat /etc/hosts && cat /etc/hostname

Ausgabe: (Daten zu Demo Zwecken geändert)

domain stratoserver.net
search stratoserver.net
nameserver 81.169.163.106
nameserver 85.214.7.22
nameserver 81.169.148.34
default via 85.214.254.42 dev eno1 
85.214.254.42 dev eno1 scope link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:ab:cd:ef:01:22 brd ff:ff:ff:ff:ff:ff
    altname enp0s25
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:ab:cd:ef:01:01 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 85.214.5.42/32 brd 85.214.5.42 scope global dynamic eno1
       valid_lft 66927sec preferred_lft 66927sec
127.0.0.1   localhost
127.0.1.1   h0000000.stratoserver.net   h0000000

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
h0000000.stratoserver.net

Netwerk Konfiguration des Proxmox

Für die Netzwerk Funktion des Proxmox gibt es verschiedene Varianten. Wie bei der Installation erwähnt, wird initial eine typische Variante installiert (s. folgend Variante 1). Diese ist für einen Server im internen Netzwerk ideal, kann jedoch nicht für einen Server im Internet verwendet werden. Die Variante 2 kann ggf. im internen Gebrauch nützlich sein. Für den Server im Internet ist sie aber Vorhaussetzung für die Nutzung der virtuellen Gäste. Daher wird unten gezeigt, wie der Proxmox auf die andere Variante umgestellt wird.

Variante 1 - Bridged Netzwerk

Diese Variante ist vorinstalliert. Es wird eine "Linux Bridge" (vmbr0) installiert. Diese bekommt alle Einstellungen, wie IP-Adresse, Subnetzmaske und Gateway IP-Adresse. Ferner bekommt sie noch für den "Bridge"-Modus die Schnittstelle benannt, die sie "bridgen" soll. In der Installation auf dem STRATO Server ist das dann die "eno1" Schnittstelle. Auf der VM zuhause (vgl. Screenshots Schritt 01) war das "enp0s3". Diese Schnittstelle bekommt wiederum keine IP-Adressen eingestellt und wird in der Web Konfiguration als "Aktiv: Nein" angezeigt.
Durch das "bridging" wirkt sich die Variante wie ein Netzwerk Switch aus. In einem lokalen Netzwerk kann durch Verwendung der IP-Adresse eines Gastes transparent zugegriffen werden. Dieser verwendet dabei eine IP-Adresse des gleichen Netzwerks, welches der Proxmox Host auch verwendet. Vorteil: Keine Port freigaben sind nötig, man verwendet einfach die IP-Adresse des Gastes. In einem Privaten Netzwerk geht das, im Internet nicht. Dort gibt es nur für den Host eine IP-Adresse, die auch die im Internet ist. Daher können auch nicht einfach eigene Adressen dazu kommen.

Variante 2 - NAT Netzwerk

In dieser Variante "NAT Netzwerk" wird die "Bridge" ohne Verbindung zu realer Schnittstelle verwendet. In den Einstellungen zu der "Linux Bridge" wird eine IP-Adresse selbst definiert. Eine Subnetzmaske wird auch selbst gewählt, je nachdem, wie viele Gäste dieses Netzwerk verwenden sollen (Achtung: Eine Einstellung - CIDR-Notation). Dadurch entsteht ein virtuelles Netzwerk, welches der Proxmox seinen Gästen nun anbieten kann. Die Gäste befinden sich dabei in einem privaten Netzwerk und sind nicht von außen ohne weiteres erreichbar. Das bringt unter anderem ein wenig Sicherheit mit sich. Alle Gäste in einem dieser Netzwerke können aber miteinander kommunizieren. Der Proxmox Host kann dies auch. Es gibt keine automatische IP-Adressvergabe (DHCP), was ich in diesem Fall habe als Container nach installiert. Die IP-Adresse, die im Host angegeben wird, ist u.a. die Gateway Adresse der Gäste. Diese können über den Proxmox Host auf das Internet zugreifen.
Um von außen den Zugriff zu erlauben, muss hier für jeden Port pro Gast eine Weiterleitung im Proxmox Host eingestellt werden. Zum Internet erreicht man die jeweiligen Dienste dann über den Hostnamen / öffentliche IP (eno1) des Proxmox + Port.
Es kann übrigens ein "NAT Netzwerk" neben anderen Netzwerken existieren, z.B. einer Bridge aus Variante 1. Die IP Einstellungen, die bei Variante 1 an "vmbr0" waren, werden je nach Setup platziert. Hat man eine neu Schnittstelle parallel hinzugefügt (vmbrN), verbleibt vermutlich die IP Einstellung an vmbr0. Man kann aber (s. unten) auch nur virtuelle Netzwerke im NAT Modus verwenden und verschiebt die IP Einstellungen für das STRATO Netzwerk / das VM Netzwerk (zu Hause) an die "eno1" / "enp0s3" Schnittstelle. Diese wird dann im Webinterface als "Aktiv: Ja" angegeben.

Anpassung der Konfiguration für den Server im Internet

Es muss für den Proxmox, wenn dieser auf einem Server im Internet laufen soll, die Netzwerkschnittellen geändert werden. Es ist per Setup eine "Linux Bridge" vorhanden und für Variante 1 konfiguriert. Diese Bridge kann für Variante 2 weiter verwendet werden. Es wird so umkonfiguriert, dass der Host unter der realen Schnittstelle erreichbar ist und die Bridge das virtuelle Netzwerk für die Gäste einstellt. Die Einstellungen erfolgen nun zunächst unter Beibehaltung der IP Adressen aus der VM von zu Hause und wird während der Installation kurz um die IP-Adressen ein weiteres mal modifiziert. Das Bearbeiten passiert im Editor auf der Eingabe in der Konfigurationsdatei "/etc/network/interfaces".
Man verschiebt, wie unten zu sehen, die IP-Adresse von "vmbr0" zu "enp0s3". Gleiches macht man mit der Angabe des Gateway, welche bei "vmbr0" nicht mehr benötigt wird. Bei "vmbr0" ändert man die Zeile "bridge-ports" von "enp0s3" auf "none". Für "vmbr0" wird das Feld "address" auf eine Frei gewählte Adresse gesetzt. Ich habe hier eine Private gewählt mit der 9, weil diese nicht weiter in Verwendung zu beobachten war. Das ist wegen Aderessüberschneidung wichtig zu wählen. Die Angabe "/24" ist das Subnetz und so ermöglicht es mir 253 virtuelle IP Adressen für Gäste. Nun fehlt noch die Möglichkeit Ports freigeben zu können (überhaupt). Das steckt hinter den "post-up" bzw "post-down" Zeilen.
Ist dies gespeichert, muss die VM einmal neu starten um die Schnittstellen umzustellen. Danach sollte der Proxmox weiterhin wie gehabt per Weboberfläche und per SSH (noch) erreichbar sein.

Für weitere Informationen zu Netzwerk Konfigurationen mehr hier...

root@h0000000:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto enp0s3
iface enp0s3 inet static
    address 192.168.55.4/24
    gateway 192.168.55.1

auto vmbr0
iface vmbr0 inet static
    address 192.168.9.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0
    post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up   iptables -t nat -A POSTROUTING -s '192.168.9.1/24' -o enp0s3 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '192.168.9.1/24' -o enp0s3 -j MASQUERADE

Ändern der SSH Server Konfiguration

Hier soll nun auch die SSH Verbindung geändert werden. Bislang läuft der Server in der Standardeinstellung wie bei jedem Linux. Nun geht es um das Ändern des SSH Ports und das Ändern der Authentifizierungsmöglichkeiten für den Nutzer "root". Das Ändern des SSH Ports ist nicht unbedingt nötig und bedeutet nicht unbedingt ein mehr an Sicherheit. Jedoch versuchen Angreifer automatisiert oft nur den Standardport. Ferner habe ich vor den Angreifern eine Falle zu stellen, die sie zwar nicht unbedingt zurück angreift, jedoch die automatischen Scripte aufhält in ihrer Arbeit. Da in diesem Fall natürlich der Standard SSH Port verwendet werden soll, muss der richtige SSH Server auf einen anderen Port umgestellt werden.
Da der Zugriff dann per SSH aufwändiger wird, wird gezeigt, wie man sich den Zugriff dann ganz einfach machen kann.

Ändern des SSHD

Um den Port und die Authentifizierung für den User "root" zu ändern, bearbeitet man die Konfiguration des SSH Servers im Proxmox unter "/etc/ssh/sshd_config". Das Ändern der Authentifizierung für root ist wichtig, denn diese ist weniger sicher, wenn es mit Passwort geht. Es wurde zwar hoffentlich ein starkes Passwort gesetzt. Jedoch sind Passwörter immer noch unsicherer als das Public-Key Verfahren von SSH. Bedeutet, dass eine Signatur auf dem Server angelegt und eine von einem Rechner von uns zu Hause hinterlegt sein muss. Diese Signatur ist wesentlich komplexer und daher etwas sicherer. Außerdem ermöglicht es uns die Anmeldung am System ohne Passwort Eingabe.
Für normale Debian Systeme gilt, das anmelden von dem Nutzer "root" mit Passwort Authentifizierung wird nicht erlaubt. Normalerweise wird nur o.g. Public-Key Anmeldung erlaubt. Man möchte den "root" Nutzer besonders schützen, weil man mit diesem alles darf. In geschützten Netzwerken, wie dem Heimnetzwerk, kann man auch das Anmelden für root mittels Passwort nachträglich erlauben. Proxmox stellt hier eine merkwürdige Ausnahme da. Hier ist voreingestellt das Anmelden von "root" mit Passwort möglich. Für die Installation eines Servers im Internet ist das leider nicht ok. Deswegen setze ich explizit, dass sich nur root mit Public-Key anmelden kann. Ferner möchte ich, dass dies auch für alle anderen Linux Benutzer gilt. Über Bildschirm Eingabe oder später per Serieller Konsole ist das Anmelden mit Passwort für alle Nutzer weiter möglich.
Die Ausgabe unten zeigt nun, welche Zeilen ich in der Konfiguration geändert habe. Nachdem Speichern der Datei gelten die Einstellungen solange nicht, bis SSH neugestartet wird. Damit wartete ich, bis ich alle hier gezeigten Schritte fertig hatte. Hinweis siehe unten.

diff /etc/ssh/sshd_config /etc/ssh/sshd_config.new
15c15
< #Port 22
---
> Port 2222
34c34
< PermitRootLogin yes
---
> PermitRootLogin prohibit-password
39c39
< #PubkeyAuthentication yes
---
> PubkeyAuthentication yes
58c58
< #PasswordAuthentication yes
---
> PasswordAuthentication no

Client Public-Key einspielen

Um nun für den Nutzer "root" weiterhin Zugriff zu haben, muss nun ein Public-Key von einem Computer, mit dem man den Proxmox verwalten tut, im "root" User des Proxmox installiert werden. Wer nicht weis, ob er einen Public-Key auf seinem lokalen Benutzer unter Linux hat, gibt ls ~/.ssh/ in ein Terminal ein und Prüft, ob (im Regelfall) die Datei "id_rsa.pub" existiert. Existiert diese nicht oder man bekommt den Fehler, dass das Verzeichnis nicht existiert, hat man noch keinen Public-Key für den Linux Nutzer.
Einen Public-Key legt man an, in dem man ssh-keygen ausführt. Das Tool stellt einem dann die Frage nach einem Passwort. Diese kann man unbeantwortet lassen und einfach mit Enter abwehren. Dann ist der Public-Key erstellt.
Den Public-Key in den Proxmox "root" Benutzer kopieren geht nun mithilfe von ssh-copy-id root@<IP-Adresse-VM-Host> also hier zu ersetzen die IP Adresse des Hosts, welcher die Proxmox hosted. Das sollte für den Hostrechner gemacht werden, weil mit dem im Laufe der Vorbereitung noch zugegriffen werden muss. Ferner empfiehlt es sich einen weiteren Rechner mit Public-Key auszustatten und diesen mit selben Befehl und IP-Adresse auf den Proxmox zu kopieren. Diesen kann man später als "Proxy" Rechner zur Verwaltung verwenden. Ist dies getan, kann nun eine Anmeldung als "root" mit Public-Key und ohne Passwort erfolgen.

Einfache Anmeldung an SSH durch Client Config

In der Konfiguration des SSHD vom Proxmox habe ich oben noch den SSH Port geändert. Das bedeutet, dass der Zugriff mit den Clients in Zukunft immer die Angabe des Geänderten Ports benötigt. Damit man diese lästige Einstellung los wird und man keinen Nutzer mehr angeben muss, kann man an dem Client eine Konfiguration anlegen. Ferner möchte ich, dass die Management Funktion später nicht mehr dem Internet verfügbar ist. Jedoch soll der Port 8006 mir weiter zur Verfügung stehen, um den Proxmox verwalten zu können. SSH erlaubt eine Portweiterleitung einzustellen, die dann durch den SSH Tunnel weitergeleitet wird. Die Kommandooption dafür ist auch nicht so, dass man diese bei jeder Verbindung mit eingeben möchte. Auch diese Einstellung lässt sich viel einfacher in der Konfiguration beim Client ablegen. Ergebnis der Konfig und oben gezeigter Public-Key Anmeldung ist, dass simpel ohne weiteres nachfragen man sich auf SSH anmelden kann, ohne Eingabe von Nutzer und Passwort und dass der Proxmox Management Port lokal zur Verfügung steht.
Erreicht wird das ganze, in dem man auf dem Verwaltenden Rechner bzw. dem auf dem die VM vorbereitet wird, in dem Linux Nutzer der angemeldet ist eine Konfiguration unter "~/.ssh/config" anlegt. Wurde nie ein Eintrag angelegt, fehlt die Datei normalerweise. Unten steht ein Eintrag den man der (leeren) Datei hinzufügt. Hinter "Host" wird ein frei zu wählender Name angelegt. Im übrigen kann nach Eingabe eines beliebigen SSH Befehls ("ssh", "ssh-copy-id", "scp", "sshfs", ...) durch Autovervollständigung dieser Name ergänzt werden. Bei "HostName" wird entweder der Hostname des Strato Server eingegeben oder während der Vorbereitung die IP-Adresse des VM Host Computers. Durch "User" wird der Nutzer am Proxmox benannt, mit dem sich angemeldet werden soll. Dadurch entfällt die Vorbenennung von "root@....." im Befehl. Die Angabe "Port" beachtet die Portänderung, die am SSHD des Proxmox (s.o.) vorgenommen wurde. Die Angabe "LocalPort" sorgt für die Portweiterleitung. Sie besagt, dass wenn jemand an dem Computer auf Port 8006 zugreift, der Proxmox Server die Verbindung an "127.0.0.1:8006" weiterleiten soll, also sich selbst.
Ist die Datei mit den Einstellungen gespeichert, kann man die Einstellung sofort verwenden.

Host stratoserver
    Hostname h0000000.stratoserver.net
    User root
    Port 2222
    LocalForward 8006 127.0.0.1:8006

Nun ist es Zeit auf dem SSHD im Proxmox die Konfiguration durch Neustart des SSH Servers zu übernehmen. Das sollte am besten vom Bildschirm der VM passieren, weil Neustarten bedeutet, die Verbindung geht verloren. Danach sollte der Konfigurierte Client sich mit einem einfachen "ssh stratoserver" anmelden können. Funktioniert dass nicht, kann man die Einstellungen am Bildschirm der VM wieder zurückstellen und durch erneuten Neustart des SSH Servers die Verbindung zurück gewinnen.