例如:
#!/usr/sbin/nft -f
add table ip filter_4
add chain ip filter_4 input {
type filter hook input priority filter; policy drop;
}
add chain ip filter_4 new_in_4 {
comment "New input IPv4 traffic"
}
# Note it's goto not jump! (thus no way out of new_in_4 chain)
add rule ip filter_4 input ct state new goto new_in_4
# Is this block drop or accept rule?
add rule ip filter_4 new_in_4 log prefix "some comment: "
该规则没有明确accept
或drop
判决,那么哪个是默认的?
没有任何。规则并不需要有最终裁决——如果您没有指定,那么它就没有最终裁决。数据包处理将继续到下一条规则。
如果数据包到达您所做的链的末端
goto
,那么结果就好像它到达父链的末端 - 在这种情况下,“输入”链有policy drop
,因此将应用它。(换句话说,有一条出路可以从新链中出来,就像有一条出路可以从“输入”链中出来一样——链策略可以被认为位于调用堆栈的开头,并且是您执行操作的最终位置。将“返回”到。使用“jump”时,堆栈将是
policy > chain input > chain new_in_4
,使用“goto”时,堆栈将是policy > chain new_in_4
。)上述并不是 nftables 独有的;iptables 中的情况大致相同(也有“JUMP”和“GOTO”、链策略和没有最终裁决的规则)。
nftables 可以让您逐条查看数据包处理 - 将规则应用于
nftrace set 1
您的数据包(最好尽早)并运行nft monitor trace
。编写规则集的更易读的方法是:
通常会进行相反的
chain new
操作 - 输入链将有一个规则来覆盖接受已建立的数据包,然后其他所有内容都将是“新的”,并且您根本不需要第二条链。