Podman und firewalld-cmd --reload

  Lioh Möller   Lesezeit: 2 Minuten  🗪 3 Kommentare

Sofern bei einer Verwendung von Podman und firewalld nach einem Reload der Firewall die Container nicht mehr erreichbar sind, schafft dieser Tipp abhilfe.

podman und firewalld-cmd --reload

Wer Podman auf einem System mit firewalld nutzt, dem ist möglicherweise aufgefallen, dass die Container nach einem firewalld-cmd --reload nicht mehr erreichbar sind. Abhilfe schafft in solch einem Falle ein manuelles Ausführen von podman network reload --all


Um dies zu automatisieren, kann ein systemd Service erstellt werden, welcher mithilfe von busctl monitor auf Änderungen in firewalld reagiert.

Dazu erstellt man eine entsprechende Servicedefinition:

vi /etc/systemd/system/podman-firewalld-reload.service

# /etc/systemd/system/podman-firewalld-reload.service
[Unit]
Description=Redo podman NAT rules after firewalld starts or reloads
Wants=dbus.service
After=dbus.service

[Service]
Type=simple
Environment=LC_CTYPE=C.utf8
ExecStart=/bin/bash -c 'busctl monitor --system --match type=signal,sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameAcquired,arg0=org.fedoraproject.FirewallD1 --match type=signal,path=/org/fedoraproject/FirewallD1,interface=org.fedoraproject.FirewallD1,member=Reloaded | while read line; do if [[ $line = ‣* ]]; then podman network reload --all; fi; echo "$line"; done'

[Install]
WantedBy=multi-user.target

Dieser kann nun wie folgt aktiviert und gestartet werden:

systemctl enable podman-firewalld-reload.service
systemctl start podman-firewalld-reload.service

Überprüfen lässt sich dies bei einer Standardkonfiguration mit dem folgenden Befehlen:

firewall-cmd --reload
firewall-cmd --zone trusted --list-all

Sofern bei der Ausgabe von firewalld unter sources weiterhin die IP-Adresse des Containers angegeben ist, sollte dieser auch nach einem Reload der Firewall weiterhin erreichbar sein.

Quelle: https://github.com/containers/podman/issues/5431

Horst
Geschrieben von Horst am 5. Mai 2023 um 08:42

Danke für deinen Beitrag, ich habe das ExecStart leicht umbauen müssen, damit ich den Service installieren konnte: ExecStart=/bin/bash -c 'busctl monitor --system --match type=signal,sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameAcquired,arg0=org.fedoraproject.FirewallD1 --match type=signal,path=/org/fedoraproject/FirewallD1,interface=org.fedoraproject.FirewallD1,member=Reloaded | while read line; do if [[ $line = ‣* ]]; then podman network reload --all; fi; echo "$line"; done'

Die Quotes durch Single-Quotes ersetzt.

Lioh
Geschrieben von Lioh am 22. Mai 2023 um 18:10

Hoi Horst, ich habe die Anleitung entsprechend angepasst. Unter EL8 funktioniert es allerdings auch mit double-quotes.

Tobias Hochgürtel
Geschrieben von Tobias Hochgürtel am 29. Juli 2023 um 14:43

Danke!!