V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
WaterWestBolus
V2EX  ›  Linux

iptables 表链关系傻傻分不清

  •  
  •   WaterWestBolus · 325 天前 · 2164 次点击
    这是一个创建于 325 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个疑惑,明明数据包都是走的链,然后在链里面按顺序匹配对应的表,再匹配对应的规则。
    那为什么都说表包含什么什么链呢?而鲜见到链包含什么什么表的描述。
    表包含链这个说法应该从什么维度进行理解才比较说得通?

    凤凰架构里也写的也是“每张表能够使用到的链”
    看了 man 手册也还是不太懂,求诸位解惑
    14 条回复    2023-12-20 14:09:00 +08:00
    lambdaq
        1
    lambdaq  
       325 天前
    这事直接去问 gpt
    GopherDaily
        2
    GopherDaily  
       325 天前
    - 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
        3
    mohumohu  
       325 天前
    这个问题你随便找张 iptables/netfilter 的图就明白了,对于默认 chain 来说,能够适用的 table 不一样。
    julyclyde
        5
    julyclyde  
       325 天前
    你这个“明明”是错的
    所以按这个思路看正确的内容就觉得不对劲了

    表-链-规则
    WaterWestBolus
        6
    WaterWestBolus  
    OP
       325 天前
    谢谢诸位 @GopherDaily @old9
    大致是明白了
    理解下来应该是这样:netfilter 在网络协议栈里埋了 5 个 hook ,每个 hook 都会触发对应的 chain ,但是同一个 chain 可能会存在于多个表里,触发 chain 的时候需要按预定义的顺序从各个表里捞出对应的 rule 去执行
    GeruzoniAnsasu
        7
    GeruzoniAnsasu  
       325 天前   ❤️ 6
    Panic
        8
    Panic  
       325 天前
    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
        9
    leonshaw  
       325 天前   ❤️ 1
    @WaterWestBolus 一个 chain 只在一个表里,虽然是可以同名的。2023 年了,换 nftables.
    daxy223
        10
    daxy223  
       325 天前 via iPhone
    @GeruzoniAnsasu 这个是真好 我也准备推荐的
    jasonyang9
        11
    jasonyang9  
       325 天前
    同。iptables 每次都要搞一下脑子。nftables 中表的概念弱化了
    chenqh
        12
    chenqh  
       325 天前
    感觉 iptables 真的难学,
    huangmingyou
        13
    huangmingyou  
       324 天前
    学 nftables 吧
    WaterWestBolus
        14
    WaterWestBolus  
    OP
       324 天前
    @leonshaw 公司还在用 iptables= =积重难返
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2706 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:18 · PVG 20:18 · LAX 04:18 · JFK 07:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.