gitpuls

Blog · Server

Umgeht Docker UFW, und überleben meine Regeln einen Neustart?

Von Cédric Freivogel, outperform GmbH · Veröffentlicht

Ja: Verkehr auf einen veröffentlichten Container-Port wird geroutet, bevor die Regeln von UFW greifen, UFW sieht ihn also nie, und eigene Regeln gehören in Dockers Kette DOCKER-USER. Ob sie wirklich schützen, zeigt erst der Blick auf IPv4 und IPv6 getrennt und noch einmal nach einem Neustart; auf unserem VPS tragen beide Familien dieselben 4 Regeln in DOCKER-USER, wiederhergestellt aus einer Datei, die Wochen vor dem letzten Start gespeichert wurde.

Warum umgeht Docker UFW?

Weil die Pakete nie in der Kette ankommen, die UFW filtert. Dockers Dokumentation sagt es im Abschnitt zu ufw in einem Satz: «Packets are routed before the firewall rules can be applied» (Docker Docs, Paketfilter und Firewalls, geprüft am 9. Oktober 2026). Dieselbe Seite bittet, die von Docker angelegten Regeln nicht zu ändern.

ufw status sieht deshalb korrekt aus, während ein veröffentlichter Port aus dem Internet erreichbar ist. Auf unserem eigenen VPS ist UFW gar nicht installiert; dort laufen schlichte iptables-Regeln, gespeichert mit netfilter-persistent. Das macht den Effekt leichter sichtbar, ändert ihn aber nicht.

Wohin gehören eigene Regeln?

In die Kette DOCKER-USER. Docker beschreibt sie als «a placeholder for user-defined rules that will be processed before rules in the DOCKER-FORWARD and DOCKER chains» (Docker Docs, Docker mit iptables, geprüft am 9. Oktober 2026), und dieselbe Seite sagt: «to add additional rules to filter these packets, use the DOCKER-USER chain.»

Auf unserem VPS, gelesen am 9. Oktober 2026, stehen in DOCKER-USER 4 Regeln und in INPUT 8, davon ein Sprung in eine Kette, die ein VPN-Dienst bei jedem Start selbst anlegt.

Gibt es dieselben Regeln für IPv6?

Sie müssen ein zweites Mal angelegt werden, mit ip6tables. Docker verwaltet auch IPv6-Regeln; zur Option ip6tables heisst es in der Dokumentation: «It is enabled by-default, but can be disabled» (Docker Docs, IPv6, geprüft am 9. Oktober 2026). Mit Docker 29.8 auf unserem VPS gibt es die Kette DOCKER-USER in beiden Familien, und beide tragen dieselben Regeln: 4 in DOCKER-USER und 8 in INPUT für IPv4, genau gleich für IPv6.

Eine Regel, die es nur für IPv4 gibt, lässt den Port über die IPv6-Adresse des Servers offen. In iptables -S fällt diese Lücke nicht auf, nur in ip6tables -S.

Überleben die Regeln einen Neustart?

Nur, wenn sie gespeichert sind und beim Start etwas sie wiederherstellt. In der Shell getippte Regeln sind nach dem nächsten Neustart weg. Auf unserem VPS ist netfilter-persistent eingeschaltet und aktiv; die gespeicherten Dateien für IPv4 und IPv6 stammen vom 8. September 2026, der letzte Start war am 1. Oktober 2026, und nach diesem Start waren die laufenden Regeln in INPUT und DOCKER-USER in beiden Familien gleich den gespeicherten.

Das Datum zählt in beide Richtungen. Eine gespeicherte Datei, die älter ist als der Start, ist in Ordnung, solange nach dem Speichern nichts geändert wurde; eine Regel, die nach dem letzten Speichern dazukam, wirkt heute und ist beim nächsten Start verloren. Der Vergleich von laufenden und gespeicherten Regeln zeigt das vor dem Neustart.

Wie prüfe ich das alles in einer Minute?

Als root auf dem Server ausführen, danach von einer zweiten Maschine testen:

iptables -S DOCKER-USER; ip6tables -S DOCKER-USER
iptables -S INPUT | grep -c '^-A'; ip6tables -S INPUT | grep -c '^-A'
systemctl is-enabled netfilter-persistent
diff <(iptables-save | grep -E '^-A (INPUT|DOCKER-USER)') <(grep -E '^-A (INPUT|DOCKER-USER)' /etc/iptables/rules.v4)
diff <(ip6tables-save | grep -E '^-A (INPUT|DOCKER-USER)') <(grep -E '^-A (INPUT|DOCKER-USER)' /etc/iptables/rules.v6)

Die beiden diff-Zeilen geben nichts aus, wenn laufende und gespeicherte Regeln übereinstimmen. Von aussen zeigen curl -4 und curl -6 auf einen veröffentlichten Port, ob die Regeln für jede Adressfamilie halten.

Wie dieser Text entstanden ist

Dieser Artikel ist mit einem KI-Assistenten aus unseren eigenen Messungen und den oben verlinkten Quellen entstanden; die Quellen wurden am 9. Oktober 2026 geprüft. Die Zahlen stammen von der Methodenseite, geschätzt ist nichts.