Auf dieser Seite geht es um die Firewall Einstellung für den Proxmox Server, bevor er auf den STRATO Server verschoben werden kann. Hierbei geht es nun um die Erhöhung der Sicherheit, wenn man Proxmox auf einem Server einsetzt,
der im Internet steht.
Dabei geht es hier nicht um die Firewall der virtuellen Gäste, sondern um den Proxmox Host selbst. In den Seiten zuvor wurde der Proxmox zur Image Vorbereitung in einer Virtuellen Maschine zu Hause installiert. Im Anschluss wurde das
Netzwerk vom STRATO Server kopiert und der SSH Zugriff geändert. Durch die Änderung des SSH Ports und dem Einsatz von Public-Key Authentifizierung ist schon einiges an der Sicherheit des Servers passiert. Doch weiterhin ist der
Port der Weboberfläche Welt-offen. Und der Proxmox enthält noch ein paar Dienste, die im Hintergrund arbeiten. Diese sollten nicht einfach dem Internet offen stehen. Daher sollen diese Ports nun dem Internet gesperrt werden. Der
Zugriff auf die Weboberfläche erfolgt über die Portweiterleitung von SSH, die im Kapitel 2 angelegt wurde. Der Port für den SSH Server muss offen bleiben, weshalb bei diesem die Erhöhung der Sicherheit sehr wichtig war.
Der Proxmox besteht aus einigen Diensten, die dafür da sind, um Funktionen des Proxmox zu ermöglichen. Offensichtlich ist der Port, der für die Weboberfläche benötigt wird. Der Port 8006 ist dafür
verantwortlich. Die Weboberfläche wird nur mit Benutzer und Passwort Abfrage geschützt. Man kann auch eine Zwei-Faktor-Authentifizierung einschalten, jedoch empfiehlt es sich trotzdem nicht, diesen Port offen zu haben. Den der
Proxmox benutzt diesen Port auch für das Kommunizieren von anderen Diensten. Einige andere Dienste laufen mit dem Proxmox um weitere Funktionen zu ermöglichen. Es gibt Dienste, die für die Cluster Funktion von Proxmox
benötigt werden. Wenn man diese auf dem Server im Internet benutzen möchte, müssen diese Ports zugänglich bleiben. Für die Steuerung von VMs gibt es Dienste wie VNC oder SPICE. Diese will man von zu Hause ggf. auch
Verwenden, wenn man VMs laufen hat. Aber jedoch sollten diese Ports nicht 24/7 online für jeder man verfügbar sein. Da es möglich ist, diese Ports durch den SSH Tunnel zu leiten, sollte man die in der Firewall für das
Internet schließen und nur durch den SSH Tunnel zugreifen.
Es gibt von den Proxmox Entwicklern einen Artikel zu der Firewall im Proxmox, welcher auch ganz unten auflistet, welche Dienste laufen und welche Ports öffnen. Die Seite hierzu findet man hier.
Der Proxmox hat eine Firewall. Diese kann man für die Gäste verwanden und auch für den Host einstellen. Hier soll nun aber eine eigene Firewall installiert und verwendet werden. Das hat seinen Grund.
Die Firewall des Proxmox tut bestimmte Ports nicht sperren, auch wenn man das einstellt. So steht es in dem Firewall Artikel von Proxmox. Das ist aber wegen oben genannten Ports und dem Einsatz auf einem Server im Internet nicht gut.
Man sperrt bei Proxmox die Ports nicht, weil die Dienste untereinander kommunizieren müssen. Dies ist für deren Funktion und dem Zusammenspiel notwendig. Ferner ist es Notwendig, wenn man z.B. die Cluster Funktion von Proxmox
verwenden möchte, dass dann mehr als ein Dienst nach Außen erreichbar ist. Daher müssten in dem Fall die Ports leider geöffnet werden. Man sollte sich Überlegen, ob man diese Funktionen für einen Server im
Internet offen haben und verwenden möchte. In dem Setup hier werden solche Funktionen nicht verwendet und daher die Ports und alle weiteren Proxmox Ports vor dem Internet Zugriff versperrt. Ein Zugriff auf die Ports bleibt aber Server
intern, sowie aus den virtuellen Netzwerken möglich.
Da die Proxmox eigene Firewall leider das Sperren der Ports verweigert, muss man hierfür eine eigene Firewall installieren und verwenden. Klassisch empfiehlt sich unter Linux "iptables", welches auch für die
Portweiterleitung an Gäste benötigt wird. Da die Befehle für "iptables" nicht so gängig sind, gibt es ein Frontend dafür, welches die einfacheren, hier benötigten Regeln verwalten kann.
Als Firewall Frontend wird hier UFW eingesetzt und installiert. Es ist ein kleines Kommandozeilen Tool, welches "iptables" Regeln für den Nutzer setzt, welche in der vereinfachten Form der UFW benannt werden. Frontend
heißt hier, dass es ein Tool für die Kommandozeile ist, welches aus den eigenen Regeln "iptables" Regeln macht.
Um die UFW verwenden zu können, loggt man sich auf dem Proxmox ein. Dies kann hier auch per SSH passieren, da der Port für SSH weiterhin zugelassen wird (es wird der Port aus dem Kapitel 02 verwendet). Nur in der
Weboberfläche eine Kommandozeile des Proxmox Host öffnen und verwenden sollte man lassen, da der Zugriff von Außen auf den Port 8006 gesperrt wird, wenn die Firewall aktiv geschaltet wird.
Ist man auf der Kommandozeile des Proxmox, installiert man per apt install ufw die Firewall. Diese ist nach dem installieren noch nicht aktiviert, sodass erst mal nur die Ports konfiguriert werden können.
Das ist für die SSH Verbindung auch besser, da man erst die Regeln anlegen muss, dass die SSH Verbindung zugelassen wird, bevor man die Firewall aktiviert.
Nach der Installation werden nun Regeln für die Ports des Proxmox erstellt. Dabei ist einiges zu beachten. Generell werden nun Regeln erstellt, die den Zugriff auf die Ports vom Internet aus verbieten. Dies muss nun aus der Sicht des
Servers bei STRATO passieren, obwohl der Proxmox aktuell noch in der VM zu Hause läuft. Das kommt daher, dass wenn der Proxmox auf dem Server bei STRATO installiert worden ist, diese Regeln sofort gelten sollen. Daher soll hier der
Zugriff auf die IP des STRATO Servers verboten werden. Für den Zugriff auf die IP der VM macht man das sinnvollerweise gleich. So kann man alles testen. Bestimmte Ports werden dann wiederum vom "localhost" aus
erlaubt.
Unten ist nun ein Befehlsset für die UFW, welche die Regeln setzt. Es wird hierbei "routed" und "incomming" Traffic generell erst mal erlaubt. Das bedeutet, andere Ports, die von den Regeln hier nicht verboten
werden, funktionieren weiterhin. Das Erlaubt den SSH Port aus Kapitel 02 und Port freigaben für virtuelle Gäste, die später beliebig folgen können. Wie bereits erklärt, sind virtuelle Gäste in einem privaten
Netzwerk geschützt. Somit sind andere Ports (z.B. der SSH Ports eines Gastes) solange vor dem Internet sicher, bis man ihn im Host freigibt. Die UFW Firewall wird diese Ports nie beschränken. Man kann die PVE Firewall im
übrigen trotzdem Verwenden.
Einige Proxmox Ports, wie z.B. der von dem "corosync"-Dienst oder der für die Live Migration werden hier nicht geblockt. Diese erfordern Dienste, die nicht installiert und aktiviert sind, wenn der Proxmox frisch installiert
wurde.
Sind die unten gezeigten Regeln eingetragen, sollte die Ausgabe der Regeln durch ufw status verbose wie im Bild gezeigt aussehen.
ufw logging off
ufw default allow routed
ufw default allow incoming
ufw allow from 127.0.0.1 to 127.0.0.1 port 8006
ufw deny to 192.168.55.4 port 8006
ufw deny to 85.214.5.42 port 8006
ufw allow from 127.0.0.1 to 127.0.0.1 port 3128
ufw deny to 192.168.55.4 port 3128
ufw deny to 85.214.5.42 port 3128
ufw deny to 192.168.55.4 port 111
ufw deny to 85.214.5.42 port 111
Ausgabe der UFW Regeln im Terminal (Daten zu Demo zwecken geändert)
Sind die oben gezeigten Einstellungen gesetzt, kann die Firewall aktiviert werden. Mit dem Befehl ufw enable wird die Firewall eingeschaltet. Sind bis zu dem Zeitpunkt Verbindungen (z.B. Weboberfläche auf
Port 8006) zu der Proxmox IP-Adresse aufgebaut gewesen, werden diese nun getrennt. Das sollte die SSH Verbindung nicht betreffen. Wurde der Port 8006 als Port-forwarding in der SSH Verbindung eingestellt (s. Kapitel 02), ist nun nur noch
nach dem aufbauen der SSH Verbindung und aufrufen von "https://<IP-VM-Host>:8006" der Zugriff auf die Weboberfläche des Proxmox möglich. Mit diesen Einstellungen kann der Proxmox im Internet betrieben werden.
Sollte bei der Einstellung etwas nicht geklappt haben, kann ggf. am Bildschirm der VM durch Eingabe des Befehls ufw disable die Firewall wieder deaktiviert werden. Ist die Firewall erfolgreich aktiviert, gelten
die oben gezeigten Einstellungen bei jedem Neustart automatisch. Das ist im übrigen ein Unterschied zur eigentlichen "iptables" Firewall.