在 nftables 中配置链时,必须提供一个priority
值。几乎所有在线示例都将a设置piority
为0;有时,值 100 与某些钩子 ( output
, postrouting
) 一起使用。
nftables wiki不得不说:
优先级可用于对链进行排序或将它们放在某些 Netfilter 内部操作之前或之后。例如,优先级为 -300 的 prerouting 钩子上的链将被放置在连接跟踪操作之前。
作为参考,以下是 iptables 中使用的不同优先级的列表:
- NF_IP_PRI_CONNTRACK_DEFRAG (-400):碎片整理的优先级
- NF_IP_PRI_RAW (-300):在连接跟踪操作之前放置的原始表的传统优先级
- NF_IP_PRI_SELINUX_FIRST (-225):SELinux 操作
- NF_IP_PRI_CONNTRACK (-200):连接跟踪操作
- NF_IP_PRI_MANGLE (-150): 破坏操作
- NF_IP_PRI_NAT_DST (-100):目标 NAT
- NF_IP_PRI_FILTER(0):过滤操作,过滤表
- NF_IP_PRI_SECURITY (50):例如可以设置secmark的安全表位置
- NF_IP_PRI_NAT_SRC (100):源 NAT
- NF_IP_PRI_SELINUX_LAST (225):SELinux 在数据包出口
- NF_IP_PRI_CONNTRACK_HELPER (300):退出时的连接跟踪
这表明priority
控制与内部 Netfilter 操作的交互,但仅提及 iptables 使用的值作为示例。
在哪些情况下是priority
相关的(即必须设置为值≠ 0)?仅适用于具有相同钩子的多个链条?结合 nftables 和 iptables 怎么样?哪些内部 Netfilter 操作与确定正确priority
值相关?