ann/li yu netfilter
DESCRIPTION
ANN/Li Yu Netfilter. Linux网络协议栈概况 Netfilter Iptable 连接跟踪 NAT. Linux networking protocol stack overview. ANN/Li Yu Netfilter. ANN/Li Yu Netfilter. ANN/Li Yu Netfilter. Netfilter 什么是netfilter? Netfilter如何工作? Iptable, netfilter, 连接跟踪及NAT. Play source code. 什么是netfilter? - PowerPoint PPT PresentationTRANSCRIPT
ANN/Li Yu Netfilter
Linux 网络协议栈概况 Netfilter Iptable 连接跟踪 NAT
ANN/Li Yu NetfilterLinux networking protocol stack overview
ANN/Li Yu Netfilter
ANN/Li Yu Netfilter
Netfilter 什么是 netfilter ? Netfilter 如何工作? Iptable, netfilter, 连接跟踪及 NAT. Play source code.
ANN/Li Yu Netfilter
什么是 netfilter?
只是在 Linux 协议栈上的各层接合点上的一个 hook 注入机制。举个例子,当内核检测到接收到的数据包是到达本机的,就会调用内核函数ip_local_deliver() ,这个函数不会直接处理相应的事务,而是主动给Netfilter 一次执行 hook 的机会。
这个机制简单,但提供了足够的灵活性,我们可以利用它过滤、修改、抛弃、统计数据包,甚至凭空注入新的数据包。事实上,我们甚至几乎可以在 Netfilter 上实现另一套 Linux 协议栈。
ANN/Li Yu Netfilter
Netfilter 如何工作?
Netfilter 的工作方式非常简单,它的主要功能入口是通过 NF_HOOK宏,以下是一个例子:
int ip_local_deliver(struct sk_buff *skb){
/* 这里省略若干代码 */return NF_HOOK(PF_INET, NF_INET_LOCAL_IN, skb,
skb->dev, NULL, ip_local_deliver_finish);}
ANN/Li Yu Netfilter
Iptable, netfilter ,连接跟踪以及 NAT
Iptable, 连接跟踪, NAT 都在用 netfitler 框架提供的 hook 功能实现的扩展。
内核中的 Iptable 的功能是根据数据包在协议栈上出现的位置,方向和所管理员指定的配置完成对数据包的匹配和目标操作。防火墙一般在filter 表内完成,网络地址转换的准备工作在 NAT 表内完成,此外,还有mangle 表和 security 表。
Linux 的防火墙功能之所以强大,就是因为它不仅仅是一个包过滤系统,而且网络连接的状态对数据包判定也有所影响,这势必需要在内核里维护网络连接的状态信息,这个功能就是由“连接跟踪”子系统完成的。注:这里的连接并不是局限于 TCP / SCTP 这样的有状态协议。
iptable 中的 nat 表完成的只是 NAT 中的准备工作,即计算出了转换后的地址,具体转换是在 iptable 之外完成的。而且, NAT 功能不仅依赖于 iptable ,也依赖于“连接跟踪”。
ANN/Li Yu Netfilter
It‘s time to play source code !
ANN/Li Yu Netfilter
Iptable 基本术语及其数据结构 数据结构的组织 Play source code: (1) 初始化过程 Play source code: (2) 核心处理过程
ANN/Li Yu Netfilter
基本术语及其数据结构 规则 → ipt_entry,” 包模式”保存于 ipt_entry 的 ip 成员内; 匹配 → ipt_match 目标 → ipt_target 表 → xt_table 和 xt_table_info 其他 : ipt_replace
ANN/Li Yu Netfilter
数据结构的组织
Ipt_replace 和 xt_table_info 的 entries 成员保存的是一个 ipt_entry 数组
” 匹配要求”和“目标处理”保存于 ipt_entry 的 elems 成员内,这又是一个结构数组。这个数组以 ipt_match 序列开始,之后是 ipt_target 序列。 Ipt_target 序列以字节 ipt_entry->target_offset 开始。
Ipt_replace 和 xt_table_info 的成员hook_entry[NF_INET_NUMHOOKS] 保存的是一系列 entries 的偏移。例如, hook_entry[NF_INET_LOCAL_IN] 保存着 LOCAL_IN 链上需要处理的第一个 iptable 规则的偏移。 Iptables 的核心函数 ipt_do_table() 会从这个偏移上找到的 iptable 规则开始处理。请注意,默认 hooks 表中有许多 hook 其实只是ipt_do_table() 的包装函数,它们使用不同的 iptable table 调用它。
Ipt_replace 和 xt_table_info 的成员underflow[NF_INET_NUMHOOKS] 保存的是也一系列 entries 的偏移。有些iptable target 可能返回 IPT_RETURN ,这表明这要求内核返回到上一个处理的规则上,这个回溯关系事实上是一条“链栈”。而每个 chain 都可以有这样一个链栈, underflow[]记录的就是这个栈的栈底偏移。
ANN/Li Yu Netfilter
数据结构的组织
图 1 整 “ Linux netfilter 机制分析” PDF 。图 2 整补充图,现场手工绘制,不到场的看不着喽!
ANN/Li Yu Netfilter
Source code is our good friend, huh? So do not let it live alone!
ANN/Li Yu Netfilter
连接跟踪 抽象网络连接状态 重要数据结构 Play source code: tracking and confirm
ANN/Li Yu Netfilter
抽象连接状态 NF_CT_ESTABLISHED :数据报属于已经完全建立的连接 NF_CT_RELATED : 数据报属于一个新的连接,但此连接与一个现有连
接相关(预期连接),或者是 ICMP错误 NF_CT_NEW :数据报属于一个新的连接 NF_CT_IS_REPLY :数据报属于一个连接的回复,不单独使用,两种用法: ESTABLISHED+IS_REPLY , RELATED+IS_REPLY
这里的状态与 TCP无一一对应关系
ANN/Li Yu Netfilter
• 抽象连接状态
发包方向 TCP 标志位 连接状态 说明A->B SYN NEW Also apply for
UDP, ICMP
B->A SYN/ACK ESTABLISHED+IS_REPLY
Also apply for UDP, ICMP
A->B ACK ESTABLISHED TCP only
ANN/Li Yu Netfilter 重要的数据结构
ANN/Li Yu Netfilter 重要的数据结构
实际上,连接跟踪中涉及到的数据结构很多,画图太累了,还是用代码说明数据结构最直接,再说我也挺 LAN 的 ~
ANN/Li Yu Netfilter
Play source code Defragment IP datagram first if need. Tracking a connection operation. Confirm a connection if need.
ANN/Li Yu Netfilter
NAT NAT 的概念过程 Linux 如何实现 NAT 重要数据结构 Play source code
ANN/Li Yu Netfilter
NAT 的概念过程 SNAT 中的 S ,和 DNAT 中的 D 是什么意思,地球人都知道。
可是实现 SNAT 还需要转换 D 地址,同理, DNAT 的实现也得转换 S 地址,为什么呢?
实现 NAT 功能需要完整的 IP 数据报。 实现 NAT 功能需要连接跟踪功能。 SNAT , DNAT典型场景。
ANN/Li Yu Netfilter
Linux 如何实现 NAT 连接跟踪即已经要求 IP分片重组了。 Iptable 的 Nat 表内保存了 NAT 规则。 使用连接跟踪状态表保存地址转换关系。
ANN/Li Yu Netfilter
重要数据结构 前面都已经提到过了。 懒惰,是一种美德,所以,请参考之前的图片。
ANN/Li Yu Netfilter
Source code is alive, they need your understanding.
ANN/Li Yu Netfilter
Switch to next guy, or Go to FB directly now!