ann/li yu netfilter

25
ANN/Li Yu Netfilter Linux 网网网网网网网 Netfilter Iptable 网网网网 NAT

Upload: cerise

Post on 24-Jan-2016

145 views

Category:

Documents


19 download

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 Presentation

TRANSCRIPT

Page 1: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Linux 网络协议栈概况 Netfilter Iptable 连接跟踪 NAT

Page 2: ANN/Li Yu Netfilter

ANN/Li Yu NetfilterLinux networking protocol stack overview

Page 3: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Page 4: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Netfilter 什么是 netfilter ? Netfilter 如何工作? Iptable, netfilter, 连接跟踪及 NAT. Play source code.

Page 5: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

什么是 netfilter?

只是在 Linux 协议栈上的各层接合点上的一个 hook 注入机制。举个例子,当内核检测到接收到的数据包是到达本机的,就会调用内核函数ip_local_deliver() ,这个函数不会直接处理相应的事务,而是主动给Netfilter 一次执行 hook 的机会。

这个机制简单,但提供了足够的灵活性,我们可以利用它过滤、修改、抛弃、统计数据包,甚至凭空注入新的数据包。事实上,我们甚至几乎可以在 Netfilter 上实现另一套 Linux 协议栈。

Page 6: ANN/Li Yu Netfilter

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);}

Page 7: ANN/Li Yu Netfilter

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 ,也依赖于“连接跟踪”。

Page 8: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

It‘s time to play source code !

Page 9: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Iptable 基本术语及其数据结构 数据结构的组织 Play source code: (1) 初始化过程 Play source code: (2) 核心处理过程

Page 10: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

基本术语及其数据结构 规则 → ipt_entry,” 包模式”保存于 ipt_entry 的 ip 成员内; 匹配 → ipt_match 目标 → ipt_target 表 → xt_table 和 xt_table_info 其他 : ipt_replace

Page 11: ANN/Li Yu Netfilter

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[]记录的就是这个栈的栈底偏移。

Page 12: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

数据结构的组织

图 1 整 “ Linux netfilter 机制分析” PDF 。图 2 整补充图,现场手工绘制,不到场的看不着喽!

Page 13: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Source code is our good friend, huh? So do not let it live alone!

Page 14: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

连接跟踪 抽象网络连接状态 重要数据结构 Play source code: tracking and confirm

Page 15: ANN/Li Yu Netfilter

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无一一对应关系

Page 16: ANN/Li Yu Netfilter

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

Page 17: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter 重要的数据结构

Page 18: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter 重要的数据结构

实际上,连接跟踪中涉及到的数据结构很多,画图太累了,还是用代码说明数据结构最直接,再说我也挺 LAN 的 ~

Page 19: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Play source code Defragment IP datagram first if need. Tracking a connection operation. Confirm a connection if need.

Page 20: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

NAT NAT 的概念过程 Linux 如何实现 NAT 重要数据结构 Play source code

Page 21: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

NAT 的概念过程 SNAT 中的 S ,和 DNAT 中的 D 是什么意思,地球人都知道。

可是实现 SNAT 还需要转换 D 地址,同理, DNAT 的实现也得转换 S 地址,为什么呢?

实现 NAT 功能需要完整的 IP 数据报。 实现 NAT 功能需要连接跟踪功能。 SNAT , DNAT典型场景。

Page 22: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Linux 如何实现 NAT 连接跟踪即已经要求 IP分片重组了。 Iptable 的 Nat 表内保存了 NAT 规则。 使用连接跟踪状态表保存地址转换关系。

Page 23: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

重要数据结构 前面都已经提到过了。 懒惰,是一种美德,所以,请参考之前的图片。

Page 24: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Source code is alive, they need your understanding.

Page 25: ANN/Li Yu Netfilter

ANN/Li Yu Netfilter

Switch to next guy, or Go to FB directly now!