Virtual Machine Manager & QEMU/KVM: Port-Forwarding zw. Host und VM ohne Root-Rechte mit "passt"-Backend
Aus Sicherheitsgründen ist es empfehlenswert VMs ohne Root-Rechte auszuführen. Wie sich das mit Virtual Machine Manager (VMM) und QEMU/ KVM umsetzen lässt, hatte ich bereits in dem Beitrag Virtual Machine Manager & QEMU/KVM: VMs ohne Root-Rechte ausführen beschrieben.
Ohne Root-Rechte verwendet eine VM standardmäßig das funktional eingeschränkte "Benutzermodus"-Netzwerk mit SLIRP als Backend. Grundsätzlich erlaubt auch SLIRP Port-Forwarding, aber das lässt sich anscheindend nicht direkt über VMM konfigurieren. Seit libvirt v9.0.0 kann für das "Benutzermodus"-Netzwerk als Alternative zu SLIRP das moderne und mit "security in mind" entwickelte passt als Backend genutzt werden. Hiermit lassen sich Port-Weiterleitungen direkt in VMM - derzeit allerdings nur durch manuelle XML-Anpassung - einstellen.
Voraussetzungen
Als erstes müsst ihr passt auf eurem System installieren, falls noch nicht geschehen:
Des Weiteren muss euer Kernel Unprivileged User Namespaces unterstützen und aktiviert haben. Unter den gängigen Systemen, wie z.B. Arch Linux und Debian ist das der Fall. Um zu überprüfen, ob bei euch die Funktioanlität aktiviert ist, verwendet folgenden Befehl:
Da Unprivileged User Namespaces in der Vergangenheit öfters für Privilege Escalation ausgenutzt wurde, habe ich es bei mir standardmäßig deaktiviert. Ich aktiviere es immer nur temporär, wenn ich es benötige. Dazu nutze ich folgenden Befehl:
Port-Forwarding/-Weiterleitung in VMM einrichten
In meinem Fall läuft zu Testzwecken in meiner VM bspw. Proxmox und ich möchte von meinem Host-System auf die Web-GUI von Proxmox zugreifen. In der VM ist die Web-GUI über den Port 8006 erreichbar. Im konkreten Fall möchte ich nun den Host-Port 33333 auf den VM-Port 8006 weiterleiten, so dass ich auf die Web-GUI auf meinem Host über https://localhost:33333/
zugreifen kann.
Öffnet in VMM die Konfiguration eurer VM, für die ihr eine Port-Weiterleitung einrichten möchtet. Wählt anschließend die Netzwerkkarte aus und den dazugehörigen XML-Tab. Hier ändert ihr nun das Backend von SLIRP auf passt und definiert die benötigten Port-Weiterleitungen (Details siehe libvirt-Doku: Userspace (SLIRP or passt) connection).
In VMM sieht das dann bei mir so aus:
Anschließend kann die VM gestartet werden und die Port-Weiterleitung sollte funktionieren.
Fazit
Trotz eingechränktem "Benutzermodus"-Netzwerk lässt sich mit VMM bei Bedarf leicht eine Port-Weiterleitung konfigurieren.