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