nftables,添加输出规则语法

nftables,添加输出规则语法

我对 nftables 缺乏全面的文档感到有点沮丧,目前我连一个简单的例子都无法工作。我正在尝试创建一个输出规则。这是我唯一的表:

root@localhost ~ # nft list ruleset
table inet filter {
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

我想统计发送到 8.8.8.8 的数据包数量。所以我使用了 nftables wiki 中的示例命令(https://wiki.nftables.org/wiki-nftables/index.php/Simple_rule_management):

root@localhost ~ # nft add rule filter output ip daddr 8.8.8.8 counter                       
Error: Could not process rule: No such file or directory
add rule filter output ip daddr 8.8.8.8 counter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

但由于某种原因,我收到非常无信息的错误消息。我做错了什么以及添加输出规则的正确方法是什么?

root@localhost ~ # uname -a                                                                    
Linux localhost 4.15.3-2-ARCH #1 SMP PREEMPT Thu Feb 15 00:13:49 UTC 2018 x86_64 GNU/Linux
root@localhost ~ # nft --version
nftables v0.8.2 (Joe Btfsplk)
root@localhost ~ # lsmod|grep '^nf'                                                          
nfnetlink_queue        28672  0
nfnetlink_log          20480  0
nf_nat_masquerade_ipv6    16384  1 ip6t_MASQUERADE
nf_nat_ipv6            16384  1 ip6table_nat
nf_nat_masquerade_ipv4    16384  1 ipt_MASQUERADE
nf_nat_ipv4            16384  1 iptable_nat
nf_nat                 36864  4 nf_nat_masquerade_ipv6,nf_nat_ipv6,nf_nat_masquerade_ipv4,nf_nat_ipv4
nft_reject_inet        16384  0
nf_reject_ipv4         16384  1 nft_reject_inet
nf_reject_ipv6         16384  1 nft_reject_inet
nft_reject             16384  1 nft_reject_inet
nft_meta               16384  0
nf_conntrack_ipv6      16384  2
nf_defrag_ipv6         36864  1 nf_conntrack_ipv6
nf_conntrack_ipv4      16384  2
nf_defrag_ipv4         16384  1 nf_conntrack_ipv4
nft_ct                 20480  0
nf_conntrack          155648  10 nft_ct,nf_conntrack_ipv6,nf_conntrack_ipv4,ipt_MASQUERADE,nf_nat_masquerade_ipv6,nf_nat_ipv6,nf_nat_masquerade_ipv4,ip6t_MASQUERADE,nf_nat_ipv4,nf_nat
nft_set_bitmap         16384  0
nft_set_hash           28672  0
nft_set_rbtree         16384  0
nf_tables_inet         16384  2
nf_tables_ipv6         16384  1 nf_tables_inet
nf_tables_ipv4         16384  1 nf_tables_inet
nf_tables             106496  10 nft_ct,nft_set_bitmap,nft_reject,nft_set_hash,nf_tables_ipv6,nf_tables_ipv4,nft_reject_inet,nft_meta,nft_set_rbtree,nf_tables_inet
nfnetlink              16384  3 nfnetlink_log,nfnetlink_queue,nf_tables

答案1

正确的命令是

root@localhost ~ # nft add rule inet filter output ip daddr 8.8.8.8 counter                       

请注意inet表名之前的前缀 ( filter)。这就是桌子的家庭类型。它是可选的,但如果省略它,nft 会假定ip(= IPv4),但我使用的是inet伪系列(IPv4 和 IPv6)。

感谢#netfilterFreenode 频道中的人们,我才了解到这一点。

不用说,nft 错误消息毫无帮助。 :-)

相关内容