Podman und firewalld-cmd --reload

Mo, 3. April 2023, Lioh Möller

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