Turris Omnia: UFW im LXC-Container
Ich habe festgestellt, dass einige meiner LXC-Container, die ich auf dem Turris betreiber keine IPv6-Adressen mehr zugeordnet bekommen haben. NAch etwas suchen bin ich darauf gekommen, dass es an der UFW-Firewall liegt, die ich in den Containern verwende. Diese wurde nicht mehr korrekt gestartet, so dass vor allem die benötigten IPv6 Regeln nicht mehr korrekt initialisiert wurden. Vielmehr kam beim Starten von UFW (ufw enable
) folgende Fehlermeldungen:
ERROR: problem running ufw-init
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.14.162/modules.dep.bin'
modprobe: FATAL: Module nf_conntrack_ftp not found in directory /lib/modules/4.14.162
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.14.162/modules.dep.bin'
modprobe: FATAL: Module nf_nat_ftp not found in directory /lib/modules/4.14.162
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.14.162/modules.dep.bin'
modprobe: FATAL: Module nf_conntrack_netbios_ns not found in directory /lib/modules/4.14.162
iptables-restore: line 6 failed
iptables-restore: line 22 failed
iptables-restore v1.8.2 (nf_tables): Couldn't load match `conntrack':No such file or directory
Error occurred at line: 2
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
iptables-restore: line 4 failed
iptables-restore: line 5 failed
iptables-restore: line 21 failed
iptables-restore v1.8.2 (nf_tables): unknown option "--dport"
Error occurred at line: 19
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
iptables-restore: line 10 failed
iptables-restore v1.8.2 (nf_tables): unknown option "--log-prefix"
Error occurred at line: 23
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
iptables-restore v1.8.2 (nf_tables): Chain 'ufw-before-input' does not exist
sysctl: setting key "net.ipv4.conf.all.accept_redirects": Read-only file system
sysctl: setting key "net.ipv4.conf.default.accept_redirects": Read-only file system
sysctl: setting key "net.ipv6.conf.all.accept_redirects": Read-only file system
sysctl: setting key "net.ipv6.conf.default.accept_redirects": Read-only file system
sysctl: setting key "net.ipv4.icmp_echo_ignore_broadcasts": Read-only file system
sysctl: setting key "net.ipv4.icmp_ignore_bogus_error_responses": Read-only file system
sysctl: setting key "net.ipv4.icmp_echo_ignore_all": Read-only file system
sysctl: setting key "net.ipv4.conf.all.log_martians": Read-only file system
sysctl: setting key "net.ipv4.conf.default.log_martians": Read-only file system
Problem loading ipv6 (skipping)
Problem running '/etc/ufw/before.rules'
Problem running '/etc/ufw/after.rules'
Problem running '/etc/ufw/user.rules'
Kernelmodule in Turris OS installieren
UFW benötigt einige Kernelmodule. Damit diese in den LXC-Containern genutzt werden können müssen diese zunächst alls benötigten Kernelmodule auf dem Host installiert werden. Mindestens folgende Pakete sollten daher installiert werden:
- nf_conntrack_ftp (im opkg-Paket
kmod-nf-nathelper
) - nf_nat_ftp (im opkg-Paket
kmod-nf-nathelper
) - ip6t_rt (im opkg-Paket
kmod-ip6tables-extra
)
Aus der Fehlermeldung oben geht hervor, dass UFW auch das Modul nf_conntrack_netbios_ns
versucht zu installieren. Dieses konnte ich per opkg nicht installieren bzw. habe kein entsprechendes Paket dazu gefunden, was mich aber nicht weiter stört, da ich das Moful nicht benötige. Mit lsmod
auf dem Turris OS kann kontrolliert werden, ob die entsprechenden Module auch geladen werden.
UFW Konfiguration im Container anpassen
Da in unpriviligierten LXC-Containern weder Kernel Module geladen noch schreibend auf sysctl zugegriffen werden kann müssen Einstellungen IPT_SYSCTL
und IPT_MODULES
in der Datei /etc/default/ufw
angepasst werden. Die Datei sollte anschließend ungefähr so aussehen (siehe Zeilen 37ff und 49ff):
# /etc/default/ufw
#
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=yes
# Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if
# you change this you will most likely want to adjust your rules.
DEFAULT_INPUT_POLICY="DROP"
# Set the default output policy to ACCEPT, DROP, or REJECT. Please note that if
# you change this you will most likely want to adjust your rules.
DEFAULT_OUTPUT_POLICY="ACCEPT"
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="DROP"
# Set the default application policy to ACCEPT, DROP, REJECT or SKIP. Please
# note that setting this to ACCEPT may be a security risk. See 'man ufw' for
# details
DEFAULT_APPLICATION_POLICY="SKIP"
# By default, ufw only touches its own chains. Set this to 'yes' to have ufw
# manage the built-in chains too. Warning: setting this to 'yes' will break
# non-ufw managed firewall rules
MANAGE_BUILTINS=no
#
# IPT backend
#
# only enable if using iptables backend
#
#
# Disabled, as sysctl params may only be set on host level.
#
#IPT_SYSCTL=/etc/ufw/sysctl.conf
# Extra connection tracking modules to load. Complete list can be found in
# net/netfilter/Kconfig of your kernel source. Some common modules:
# nf_conntrack_irc, nf_nat_irc: DCC (Direct Client to Client) support
# nf_conntrack_netbios_ns: NetBIOS (samba) client support
# nf_conntrack_pptp, nf_nat_pptp: PPTP over stateful firewall/NAT
# nf_conntrack_ftp, nf_nat_ftp: active FTP support
# nf_conntrack_tftp, nf_nat_tftp: TFTP support (server side)
#
# Disabled, as modules may only be loaded on host level.
#
#IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"
IPT_MODULES=""
Für meine LXC-Container, die noch mit Debian 9 (Stretch) laufen war das ausreichen. Danach lief die UFW in den Containern wie gewohn und es wurden wieder die IPv6-Adressen per SLAAC bezogen.
Zusätzliche Anpassungen für Debain 10 Gastsysteme
Wird Debian 10 (buster) als Gast-System verwendet, so kann es sein, dass danach noch weitere Fehlermeldungen behoben werden müssen. Bei mir trat zunächst folgende MEldung beim Starten von UFW auf:
ufw enable
ERROR: problem running ufw-init
iptables-restore: line 6 failed
iptables-restore: line 22 failed
iptables-restore v1.8.2 (nf_tables): Couldn't load match `conntrack':No such file or directory
Error occurred at line: 2
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
iptables-restore: line 4 failed
iptables-restore: line 5 failed
iptables-restore: line 21 failed
iptables-restore v1.8.2 (nf_tables): unknown option "--dport"
Error occurred at line: 19
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
iptables-restore: line 10 failed
iptables-restore v1.8.2 (nf_tables): unknown option "--log-prefix"
Error occurred at line: 23
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
iptables-restore v1.8.2 (nf_tables): Chain 'ufw-before-input' does not exist
Problem loading ipv6 (skipping)
Problem running '/etc/ufw/before.rules'
Problem running '/etc/ufw/after.rules'
Problem running '/etc/ufw/user.rules'
Dies liegt daran, dass ab Buster standardmäßig scheinbar iptables-nft verwendet wird. Das lässt sich aber einfach mit dem Befehl update-alternatives --config iptables
beheben:
update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode
Press to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode
Die noch verbleibende Fehlermeldung beim Starten von UFW:
ufw enable
ERROR: initcaps
[Errno 2] iptables: Operation not supported.
wird durch die Verwendung des Legacy-Modes von ip6tables
behoben:
update-alternatives --config ip6tables
There are 2 choices for the alternative ip6tables (providing /usr/sbin/ip6tables).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/ip6tables-nft 20 auto mode
1 /usr/sbin/ip6tables-legacy 10 manual mode
2 /usr/sbin/ip6tables-nft 20 manual mode
Press to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables (ip6tables) in manual mode
Zu guter letzt habe ich noch eine Fehlermeldung ERROR: problem running ip6tables
beim Abfragen des FW status ufw status verbose
erhalten. NAchdem iptables aber durch einen Neustart frisch initialisiert wurde war auch diese Fehlermeldung beseitig und UFW lief wieder fehlerfrei - sowhl Starten und Stopen als auch Regeln hinzufügen und Status abfragen.
Kommentare