V Arch Linuxu nefunguje nftables

jejda

V Arch Linuxu nefunguje nftables
« kdy: 07. 04. 2017, 15:26:54 »
Ahojte!
Snažím se na archlinuxu rozhýbat firewall

Vytvořím tabulku s názvem filter
Kód: [Vybrat]
# nft add table filterStrčím do ní chain na filtrování příchozích paketů
Kód: [Vybrat]
# nft add chain filter input { type filter hook input priority 0 \; }Přidám do chainu pár nějakých pravidel
Kód: [Vybrat]
# nft add rule filter input iifname lo accept
# nft add rule filter input tcp dport 443 accept
# nft add rule filter input tcp dport 53 counter reject with tcp reset
# nft add rule filter input udp dport 53 counter drop
# nft list ruleset
table ip filter {
chain input {
type filter hook input priority 0; policy accept;
tcp dport https accept
tcp dport domain counter packets 0 bytes 0 reject with tcp reset
udp dport domain counter packets 0 bytes 0 drop
}
}
Až po sem to projde a chová se to podle očekávání.
Teď bych chtěl přidat pravidla co povolí už navázaná spojení
Kód: [Vybrat]
# nft add rule filter input ct state established accept
<cmdline>:1:1-50: Error: Could not process rule: No such file or directory
add rule filter input ct state established accept
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# nft add rule filter input ct state related accept
<cmdline>:1:1-46: Error: Could not process rule: No such file or directory
add rule filter input ct state related accept
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Nebo bych chtěl přidat další tabulku ve které se nebude rozlišovat jestli se jedná o ipv4 nebo o ipv6
Kód: [Vybrat]
# nft add table inet table2
<cmdline>:1:1-22: Error: Could not process rule: Address family not supported by protocol
add table inet table2
^^^^^^^^^^^^^^^^^^^^^^
Na wiki archu se píše že když nft hází podobný errory tak asi chybí jaderný moduly
Kód: [Vybrat]
# lsmod | grep '^nf'
nfnetlink_queue        24576  0
nfnetlink_log          20480  0
nft_reject_ipv4        16384  1
nf_reject_ipv4         16384  1 nft_reject_ipv4
nft_reject             16384  1 nft_reject_ipv4
nft_counter            16384  3
nft_meta               16384  2
nf_tables_ipv4         16384  3
nf_tables              77824  32 nft_reject,nft_reject_ipv4,nf_tables_ipv4,nft_meta,nft_counter
nfnetlink              16384  3 nfnetlink_log,nfnetlink_queue,nf_tables
Modul nf_tables se tváří že je aktivni a v pořádku, lsmod ho vidí.
jenže
Kód: [Vybrat]
# modinfo nf_tables
modinfo: ERROR: Module alias nf_tables not found.
Co to je "module alias"? Tady už se začínám ztrácet.
Kód: [Vybrat]
# find /usr/lib/modules/ -name nft*
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/bridge/netfilter/nft_reject_bridge.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/bridge/netfilter/nft_meta_bridge.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_set_rbtree.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_numgen.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_fib.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_hash.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_set_hash.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_reject.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_fwd_netdev.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_objref.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_meta.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_limit.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_compat.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_ct.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_exthdr.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_nat.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_dup_netdev.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_queue.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_masq.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_log.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_reject_inet.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_redir.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_quota.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_counter.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_rt.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_fib_inet.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_masq_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_redir_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_fib_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv4/netfilter/nft_dup_ipv4.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_redir_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_dup_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_fib_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/net/ipv6/netfilter/nft_masq_ipv6.ko.gz
/usr/lib/modules/4.10.8-1-ARCH/kernel/drivers/mtd/nftl.ko.gz

# modinfo /usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_ct.ko.gz
filename:       /usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_ct.ko.gz
alias:          nft-expr-notrack
alias:          nft-expr-ct
author:         Patrick McHardy <kaber@trash.net>
license:        GPL
depends:        nf_tables,nf_conntrack
intree:         Y
vermagic:       4.10.8-1-ARCH SMP preempt mod_unload modversions
Nějaké moduly by tu byly, zkusím je teda ručně natáhnout
Kód: [Vybrat]
# insmod nft_ct
insmod: ERROR: could not load module nft_ct: No such file or directory

# insmod /usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_ct.ko.gz
insmod: ERROR: could not insert module /usr/lib/modules/4.10.8-1-ARCH/kernel/net/netfilter/nft_ct.ko.gz: Unknown symbol in module
Tady jsem se zaseknul. Nerozumím tomu proč nftables fungujou jenom tak nějak napůl. Podle čeho se nftables rozhoduje které moduly si natáhnout automaticky a které ignorovat?
Taky jsem na to zkoušel jít přes systemd. Tajně jsem doufal že když pustím nftables jako "service" tak to celé proběhne nejak automatizovaně bez ručního žonglování s modulama no nepovedlo se.
Kód: [Vybrat]
# systemctl start nftables.service
Job for nftables.service failed because the control process exited with error code.
nft jako systemd nftables.service si defaultně čte kofigurák /etc/nftables.conf a na tom to celé shoří protože ten přidává tabulku "table inet filter" která a teď budu hádat, asi potřebuje modul "nft_fib_inet"? Prostě to celé spadne se starou známou hláškou "Address family not supported by protocol". Takže ani systemd si nedokáže natáhnout moduly pro nft automaticky. Co s tím? Potřeboval bych trochu popostrčit.
« Poslední změna: 07. 04. 2017, 21:32:18 od Petr Krčmář »


jejda

Re:V Arch Linuxu nefunguje nftables
« Odpověď #1 kdy: 07. 04. 2017, 23:16:53 »
To jsem blázen  :o už to funguje. Ta systemd service se musí nastavit na enable
Kód: [Vybrat]
systemctl enable nftables.serviceA po restartu stroje to začalo chodit.
Když není ta service nastavená na "enabled" a putsí se to ručně příkazem
Kód: [Vybrat]
systemctl start nftables.serviceTak to zlobí. Ručně se ten firewall zapnout asi nedá. Teda dá ale půlka věcí v něm potom nefunguje. Když to běží jako systemd service tak není problém.

Re:V Arch Linuxu nefunguje nftables
« Odpověď #2 kdy: 07. 04. 2017, 23:56:44 »
A neaktualizoval jsi mezi tím jádro? Moduly na disku z nové verze, nabootovaná stará?

To by ten reboot vysvětlil.

jejda

Re:V Arch Linuxu nefunguje nftables
« Odpověď #3 kdy: 08. 04. 2017, 00:25:30 »
A neaktualizoval jsi mezi tím jádro? Moduly na disku z nové verze, nabootovaná stará?
Ajo vidíš, zrovna včera
Kód: [Vybrat]
# pacman -Qi linux | grep -P "^(Install Date|Name|Version)"
Name            : linux
Version         : 4.10.8-1
Install Date    : Thu 06 Apr 2017 11:58:24 AM CEST
to mě nedocvaklo