iptables 表链关系傻傻分不清

2023-12-19 14:59:31 +08:00
 WaterWestBolus
一个疑惑,明明数据包都是走的链,然后在链里面按顺序匹配对应的表,再匹配对应的规则。
那为什么都说表包含什么什么链呢?而鲜见到链包含什么什么表的描述。
表包含链这个说法应该从什么维度进行理解才比较说得通?

凤凰架构里也写的也是“每张表能够使用到的链”
看了 man 手册也还是不太懂,求诸位解惑
2209 次点击
所在节点    Linux
14 条回复
lambdaq
2023-12-19 15:03:22 +08:00
这事直接去问 gpt
GopherDaily
2023-12-19 15:19:20 +08:00
- iptables 是基于 netfilter 实现的,是对 netfilter 暴露的 hook 的使用
- iptables 的 chain(PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING) 对应 netfilter 的五个钩子
- iptables 的 table 对应不同的功能,比如 nat 是改写目的地/来源地,filter 是用来过滤的
- 从结构上来看 table 由 chain 组成,chain 由 rule 组成,rule 由 match 和 target 组成

Link: https://arthurchiao.art/blog/deep-dive-into-iptables-and-netfilter-arch-zh/#3-iptables-%E8%A1%A8%E5%92%8C%E9%93%BEtables-and-chains
Link: https://github.com/j2gg0s/j2gg0s/blob/main/_posts/wips-k8s%20network%3A%20kube-proxy%20%E5%92%8C%20flannel.md#iptables-%E5%9B%9E%E9%A1%BE

当然我觉得这事还是需要 google 来结果,基础好的,直接看 wiki 和 manpage ,
基础薄的看别人的 blog

LLM 大部分都是回答一些看上去对或者不对的内容。
mohumohu
2023-12-19 15:20:57 +08:00
这个问题你随便找张 iptables/netfilter 的图就明白了,对于默认 chain 来说,能够适用的 table 不一样。
old9
2023-12-19 15:55:18 +08:00
julyclyde
2023-12-19 16:17:43 +08:00
你这个“明明”是错的
所以按这个思路看正确的内容就觉得不对劲了

表-链-规则
WaterWestBolus
2023-12-19 16:46:40 +08:00
谢谢诸位 @GopherDaily @old9
大致是明白了
理解下来应该是这样:netfilter 在网络协议栈里埋了 5 个 hook ,每个 hook 都会触发对应的 chain ,但是同一个 chain 可能会存在于多个表里,触发 chain 的时候需要按预定义的顺序从各个表里捞出对应的 rule 去执行
GeruzoniAnsasu
2023-12-19 16:50:35 +08:00
Panic
2023-12-19 16:59:57 +08:00
enum nf_ip_hook_priorities {
NF_IP_PRI_FIRST = INT_MIN,
NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
NF_IP_PRI_CONNTRACK_DEFRAG = -400,
NF_IP_PRI_RAW = -300,
NF_IP_PRI_SELINUX_FIRST = -225,
NF_IP_PRI_CONNTRACK = -200,
NF_IP_PRI_MANGLE = -150,
NF_IP_PRI_NAT_DST = -100,
NF_IP_PRI_FILTER = 0,
NF_IP_PRI_SECURITY = 50,
NF_IP_PRI_NAT_SRC = 100,
NF_IP_PRI_SELINUX_LAST = 225,
NF_IP_PRI_CONNTRACK_HELPER = 300,
NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
NF_IP_PRI_LAST = INT_MAX,
};

table 的设计确实不好理解, 感觉也并不是太合理, chain 才是关键.
leonshaw
2023-12-19 17:03:44 +08:00
@WaterWestBolus 一个 chain 只在一个表里,虽然是可以同名的。2023 年了,换 nftables.
daxy223
2023-12-19 18:43:21 +08:00
@GeruzoniAnsasu 这个是真好 我也准备推荐的
jasonyang9
2023-12-19 19:37:03 +08:00
同。iptables 每次都要搞一下脑子。nftables 中表的概念弱化了
chenqh
2023-12-19 19:40:41 +08:00
感觉 iptables 真的难学,
huangmingyou
2023-12-20 09:32:07 +08:00
学 nftables 吧
WaterWestBolus
2023-12-20 14:09:00 +08:00
@leonshaw 公司还在用 iptables= =积重难返

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1001655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX