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

PostadresseE-MailadresseFestnetzMobiltelefonSMS/SignalThreemaTwitter DirektnachrichtFAXWeb Page