1 / 25

ANN/Li Yu Netfilter

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?

cerise
Download Presentation

ANN/Li Yu Netfilter

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ANN/Li YuNetfilter • Linux网络协议栈概况 • Netfilter • Iptable • 连接跟踪 • NAT

  2. Linux networking protocol stack overview ANN/Li YuNetfilter

  3. ANN/Li YuNetfilter

  4. ANN/Li YuNetfilter • Netfilter • 什么是netfilter? • Netfilter如何工作? • Iptable, netfilter, 连接跟踪及NAT. • Play source code.

  5. 什么是netfilter? 只是在Linux协议栈上的各层接合点上的一个hook注入机制。举个例子,当内核检测到接收到的数据包是到达本机的,就会调用内核函数ip_local_deliver(),这个函数不会直接处理相应的事务,而是主动给Netfilter一次执行hook的机会。 这个机制简单,但提供了足够的灵活性,我们可以利用它过滤、修改、抛弃、统计数据包,甚至凭空注入新的数据包。事实上,我们甚至几乎可以在Netfilter上实现另一套Linux协议栈。 ANN/Li YuNetfilter

  6. 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 YuNetfilter

  7. Iptable, netfilter,连接跟踪以及NAT Iptable, 连接跟踪,NAT都在用netfitler框架提供的hook功能实现的扩展。 内核中的Iptable的功能是根据数据包在协议栈上出现的位置,方向和所管理员指定的配置完成对数据包的匹配和目标操作。防火墙一般在filter表内完成,网络地址转换的准备工作在NAT表内完成,此外,还有mangle表和security表。 Linux的防火墙功能之所以强大,就是因为它不仅仅是一个包过滤系统,而且网络连接的状态对数据包判定也有所影响,这势必需要在内核里维护网络连接的状态信息,这个功能就是由“连接跟踪”子系统完成的。注:这里的连接并不是局限于TCP/SCTP这样的有状态协议。 iptable中的nat表完成的只是NAT中的准备工作,即计算出了转换后的地址,具体转换是在iptable之外完成的。而且,NAT功能不仅依赖于iptable,也依赖于“连接跟踪”。 ANN/Li YuNetfilter

  8. It‘s time to play source code! ANN/Li YuNetfilter

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

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

  11. 数据结构的组织 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 YuNetfilter

  12. ANN/Li YuNetfilter 数据结构的组织 图1 整 “Linux netfilter机制分析”PDF。 图2 整补充图,现场手工绘制,不到场的看不着喽!

  13. ANN/Li YuNetfilter • Source code is our good friend, huh? So do not let it live alone!

  14. ANN/Li YuNetfilter • 连接跟踪 • 抽象网络连接状态 • 重要数据结构 • Play source code: tracking and confirm

  15. ANN/Li YuNetfilter • 抽象连接状态 • NF_CT_ESTABLISHED:数据报属于已经完全建立的连接 • NF_CT_RELATED: 数据报属于一个新的连接,但此连接与一个现有连接相关(预期连接),或者是ICMP错误 • NF_CT_NEW:数据报属于一个新的连接 • NF_CT_IS_REPLY:数据报属于一个连接的回复,不单独使用,两种用法:ESTABLISHED+IS_REPLY,RELATED+IS_REPLY • 这里的状态与TCP无一一对应关系

  16. ANN/Li YuNetfilter • 抽象连接状态

  17. ANN/Li YuNetfilter • 重要的数据结构

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

  19. ANN/Li YuNetfilter • Play source code • Defragment IP datagram first if need. • Tracking a connection operation. • Confirm a connection if need.

  20. ANN/Li YuNetfilter • NAT • NAT的概念过程 • Linux如何实现NAT • 重要数据结构 • Play source code

  21. ANN/Li YuNetfilter • NAT的概念过程 • SNAT中的S,和DNAT中的D是什么意思,地球人都知道。 • 可是实现SNAT还需要转换D地址,同理,DNAT的实现也得转换S地址,为什么呢? • 实现NAT功能需要完整的IP数据报。 • 实现NAT功能需要连接跟踪功能。 • SNAT,DNAT典型场景。

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

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

  24. ANN/Li YuNetfilter • Source code is alive, they need your understanding.

  25. ANN/Li YuNetfilter • Switch to next guy, or • Go to FB directly now!

More Related