核心概念
- Table: 一组协议相同的
Chain的集合 - Chain: 一组类型Hook 点相同的
Rule的集合 - Rule: 一些处理网络Package的规则,每个Rule 都由
Expression和Statement组成- Expression: 表示一个值
- Statement: 表示一个操作
- Chain Type
不同种类的Chain有一些特殊的行为
filter: 默认的typenat: 根据conntrack结果进行转发,每个链接只有第一个packet 会过chainroute: 仅支持outputhook, 过chain的包会在额外做一次route lookup
概念详述- 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 表示一个值,被用在需要值的地方,例如
matchingPayload Expression: 表征包中的信息,比如各种协议的headerpayload expressionPrimary Expression:表征一些除了 Payload外的信息,比如发包的interface_name, 进程ID等等 primary expression
- Statements
Statements 表示一个动作 Man page of NFT (netfilter.org)
VERDICT:accept、drop、jump、gotoNAT: snat,dnat,redirect,masq 实际应用
- Firewall
- Counter
- NAT Gateway