- 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
- -j ACCEPT:接受此数据包
常见的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张表中
- 官方链按照预先定义的表的顺序执行规则
- 表中的规则可以跳转到表内自定义的链
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END