在nftables中,判决语句“接受”是最终的吗?

在nftables中,判决语句“接受”是最终的吗?

我在理解 中的判决陈述时遇到问题nftables。从man nft,或从这里,在“判决声明”标题下方不久,我们读到以下内容:

接受和放弃是绝对的判决——它们立即终止规则集评估。

但是,在下一句话中(强调我的):

接受:终止规则集评估并接受数据包。该数据包稍后仍可能被另一个钩子丢弃[...]

我忍不住,但这本身不是一个矛盾吗?哪一个是真的?是否accept立即终止规则集评估?所引用的陈述中只有一项可能是真实的。

accept我对钩子中语句的行为特别感兴趣ingress

答案1

是的,接受是 iptables 和 nftables 的最终决定。

但是...仅适用于当前表。

https://www.frozentux.net/iptables-tutorial/chunkyhtml/c3965.html

一旦完全满足数据包的匹配规范,并且我们指定 ACCEPT 作为目标,规则就会被接受并将不继续遍历当前链或同一个表中的任何其他链。但请注意,在一个链中接受的数据包可能仍会穿过其他表中的链,并且仍可能被丢弃在那里。

nftables 也有同样的逻辑。

答案2

思考他们的意思是,accept将结束特定的钩子,但另一个可能会阻止它。例如,看着这个插图,如果前勾拳accept,但随后后路由钩子是的drop,这会满足你后面的引用,因为它是“另一个钩子”。

(这是猜测,因为我只有经验,ipchains/iptables但看起来很相似,IIRC 也以类似的方式工作。)

答案3

也许我第一次错过了以下信息,或者也许 netfilter 的人已经更新了文档。然而,我想即使考虑到其他答案也值得添加。从文档(强调我的):

如果一个数据包被接受并且有另一个链,则轴承相同的钩子类型并且具有较晚的优先级,则数据包随后将遍历该另一条链。因此,接受判决- 无论是通过规则还是默认链策略 -不一定是最终的。然而,对于受到丢弃判决的数据包来说,情况并非如此。相反,删除会立即生效,无需评估进一步的规则或链。

对我来说,这不会留下任何问题。唯一可能可以额外解释的是“优先级”一词的用法有点奇怪:

较低的优先级数字(例如 -400 与 -300)意味着更高优先级是指具有较低优先级编号的链/钩子将首先被评估。因此,这个钩子可以对数据包做任何事情,包括阻止其他钩子处理它。在自然语言中,我们可能会将此称为最高优先级(但请注意,我的说法可能完全错误,因为我不是母语人士)。

但更高的优先级数字(例如 300 与 -300)也可能意味着更高优先级是指具有较高优先级编号的链/钩子可以覆盖具有较低优先级编号的链/钩子做出的“接受”判决。

我花了一段时间才明白这一点。在这种情况下,最好放弃“优先级”一词,并将其替换为“评估时间”或母语人士能想到的更好的东西。

相关内容