
Inhalt (4 Abschnitte)
Die Firewall von Proxmox hat eine trügerisch einfache Oberfläche: ein Kästchen Firewall an der Netzwerkkarte jeder Maschine, bei der Erstellung standardmäßig angekreuzt. Angekreuzt = geschützt, oder? Nein. Dieses Kästchen ist ein Schalter… der womöglich mit keinem Stromkreis verbunden ist. Wir haben das bei einem Audit unserer eigenen Serverflotte festgestellt: Maschinen mit öffentlicher IP, Firewall „aktiviert“, in Wirklichkeit für die ganze Welt offen. Hier die genaue Anatomie der Falle und wie Sie in dreißig Sekunden prüfen, ob Sie betroffen sind.
Drei Ebenen und eine kontraintuitive Hierarchie #
Die Proxmox-Firewall wird auf drei Ebenen konfiguriert: Datacenter (der gesamte Cluster), Knoten (jeder Hypervisor) und Gast (jede VM bzw. jeder CT). Die Intuition sagt, dass die Regeln des Datacenters auf alles „durchsickern“, was es enthält. Im Code sieht es anders aus: Die Regeln auf Datacenter- und Knotenebene schützen die Hypervisoren selbst: ihr SSH, ihre Administrationsoberfläche. Auf den Verkehr der Gäste werden sie nie angewendet. Wer glaubt, eine Datacenter-Regel „SSH nur von unseren IPs“ decke die gesamte Serverflotte ab, lässt bei jeder VM mit öffentlicher IP deren eigenes SSH für die ganze Welt offen.
Die Falle: ein Schalter ohne Stromkreis #
Damit ein Gast tatsächlich gefiltert wird, braucht es zwei Bedingungen zugleich: das Kästchen firewall=1 an seiner Netzwerkschnittstelle und eine eigene Regeldatei des Gastes (/etc/pve/firewall/<vmid>.fw), die mindestens enable: 1 und eine Richtlinie enthält. Das Kästchen allein bewirkt nichts: keine Standardrichtlinie, keine implizite Sperre, der Verkehr läuft vollständig durch. Und da das Kästchen bei der Erstellung von vornherein angekreuzt ist, füllt sich die Serverflotte ganz von selbst mit Maschinen, die eine Firewall anzeigen, ohne eine zu haben.
# Die Prüfung, von einem Knoten des Clusters aus:
ls /etc/pve/firewall/
# cluster.fw 105.fw 133.fw ...
# Mit den Gästen abgleichen, die eine öffentliche IP haben:
# Jede exponierte Maschine OHNE ihre <vmid>.fw ist ein Loch.
# Und die letzte Instanz: VON AUSSEN testen
nmap -Pn <ip-publique-du-guest>Unser Audit: 4 von 9 Maschinen geschützt #
Echte Zahlen aus unserem internen Audit: Von neun Maschinen mit öffentlicher IP hatten nur vier eine Regeldatei. Fünf „aktivierte Firewalls“ filterten nichts. Lehrreiches Detail am Rande: Eine aktive Regeldatei verwies auf einen Gast… der längst gelöscht war: das Spiegelbild der Falle, die Regel ohne Maschine. Zwei Lehren: Dieser Fehler ist in der Oberfläche nicht zu sehen (alles wirkt normal), und er lässt sich nur durch ein Audit erkennen, das die Liste der Regeldateien mit der Liste der exponierten Maschinen abgleicht.
Die vollständige Anleitung #
# /etc/pve/firewall/<vmid>.fw: das Lebensnotwendige für einen exponierten Gast
[OPTIONS]
enable: 1
policy_in: DROP
policy_out: ACCEPT
[RULES]
IN ACCEPT -p tcp -dport 80
IN ACCEPT -p tcp -dport 443
# SSH: nie für die ganze Welt offen, beschränkt auf ein ipset mit Administrations-IPs
IN ACCEPT -source +admin-ips -p tcp -dport 22- Bei der Erstellung jeder exponierten Maschine: Netzwerkkarte und Regeldatei werden gemeinsam angelegt, nie das eine ohne das andere. Das ist eine Zeile auf der Checkliste, keine Sache des Gedächtnisses.
- Die ipsets (auf Datacenter-Ebene definiert) bündeln die Listen der Administrations-IPs: Ändert sich eine IP, ist nur eine Stelle anzupassen.
- Beim Löschen einer Maschine: ihre Regeldatei entfernen. Verwaiste Regeln sind das Rauschen, das das nächste echte Loch verdecken wird.
- Regelmäßig: erneut von außen scannen. Eine Firewall weist man nach, man unterstellt sie nicht.
Diese Falle ist ein Lehrbuchfall für unsere Überzeugung von Sicherheit als Reihe geprüfter Details: Das Werkzeug ist gut, die Oberfläche ist klar, und der Fehler entsteht genau dadurch, dass alles konfiguriert aussieht. Das Audit, das ihn bei uns aufgespürt hat, gehört zu dem, was wir auf die Infrastrukturen anwenden, die wir im Rahmen unserer Managed Services betreuen. Wenn Ihre exponierten Maschinen noch nie von außen gescannt wurden, fangen Sie damit an.



