核心概念

  • Table: 一组协议相同的 Chain的集合
  • Chain: 一组类型Hook 点相同的 Rule 的集合
  • Rule: 一些处理网络Package的规则,每个Rule 都由 ExpressionStatement 组成
    • Expression: 表示一个值
    • Statement: 表示一个操作
  • Chain Type 不同种类的Chain有一些特殊的行为
    • filter: 默认的type
    • nat: 根据 conntrack 结果进行转发,每个链接只有第一个packet 会过chain
    • route: 仅支持 output hook, 过chain的包会在额外做一次route lookup
  • undefined|752 概念详述
  • Chain Hook Hook决定了Chain会在何时收到何种包。没有Hook的Chain只能通过其他有Hook 的Chain goto跳转才能执行。
    • prerouting: 所有进入本机的包
    • input: 发给本机进程的包
    • forward: 发给别的机器的包
    • output: 本机进程发出的包
    • postrouting: 所有从本机发出的包
  • Address Family Table级别的属性,决定了Table 处理何种流量。不同 AF的Table 可用的Hook也不同
    • ip: ipv4 协议
    • ip6: ipv6 协议
    • inet: v4v6双栈
  • Expression Expression 表示一个值,被用在需要值的地方,例如 matching
    • Payload Expression: 表征包中的信息,比如各种协议的header payload expression
    • Primary Expression:表征一些除了 Payload外的信息,比如发包的interface_name, 进程ID等等 primary expression
  • Statements Statements 表示一个动作 Man page of NFT (netfilter.org)
    • VERDICT: acceptdropjumpgoto
    • NAT: snat,dnat,redirect,masq 实际应用
  • Firewall
  • Counter
  • NAT Gateway