- netfilter
netfilter指的是linux内核中的一个框架,这个框架在协议栈中引入了5个hook点,并允许内核模块在这些hook点注册回调函数。
1.1. iptables和netfilter的关系
iptables是一个用户空间的工具,通过特定的机制与内核中的netfilter框架进行交互,负责在这些hook点上配置回调函数。
- netfilter的5个hook
2.1. 数据包常见的三种hook路径
- 本机接收到的,目标IP是本机的数据包:NF_IP_PRE_ROUTING -> NF_IP_LOCAL_IN
- 本机接收到的,目标IP不是本机的数据包:NF_IP_PRE_ROUTING -> NF_IP_FORWARD -> NF_IP_POST_ROUTING
- 本机发送出去的数据包:NF_IP_LOCAL_OUT -> NF_IP_POST_ROUTING
- hook回调函数:注册到hook点的规则(rule)就是回调函数,rule由匹配条件(match)和目标操作(target)组成。
示例:
3.1. match
- -p tcp:--protocol tcp,指定TCP协议
- --dport 21:--destination-port,指定目的端口为21
3.2. target
常见的target有:
- DROP:丢弃数据包
- RETURN:跳出当前链
- ACCEPT:通过数据包
- QUEUE:将数据包放入用户空间队列
- custom-chain:跳转到用户自定义的链
- table:对规则进行分类
规则具有不同的功能,根据其功能分为五类,如:
- Filter表:用于过滤规则
- NAT表:用于地址转换规则
- Mangle表:用于修改IP数据包头,如TTL
- Raw表:用于给数据包打标记
- Security表:与SELinux相关的规则
- hook如何调rule:hook调用chain,chain将rule组织成链
规则数量众多,而hook点只有5个,hook如何调用这些规则呢?
答:将规则组织成5条链,每条链对应一个hook点。
table-chain-rule关系:


- 自定义chain
创建自定义链时需要指定在哪个表中创建,默认是在filter表中。
在nat表中创建自定义链时,hook点无法直接调用自定义链,hook点调用5大官方链,官方链中的规则通过jump跳转到自定义链。
- 总结
netfilter包的处理流程汇总如下:
- 数据包按照netfilter框架分别经过5个hook点
- 每个hook点调用自己对应的官方链
- 官方链串联的规则按类别分布在5张表中
- 官方链按照预先定义的表的顺序执行规则
- 表中的规则可以跳转到表内自定义的链
以上就是k8s使用的iptables,具体原理是什么?深入浅出的详细内容,更多请关注php中文网其它相关文章!