电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Netfilter源代码分析详解

57页
  • 卖家[上传人]:壹****1
  • 文档编号:482245141
  • 上传时间:2022-10-26
  • 文档格式:DOCX
  • 文档大小:72.94KB
  • / 57 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、一、概述1. Netfilte/PTable框架简介 il/PTabes是继2.0.的Ifwm、2.2x的IPcains之后,新一代的Linu防火墙机制。Netfilter采用模块化设计,具有良好的可扩大性。其重要工具模块ITbles连接到Nefiltr的架构中,并容许使用者对数据报进行过滤、地址转换、解决等操作。 Ntfltr提供了一种框架,将对网络代码的直接干涉降到最低,并容许用规定的接口将其她包解决代码以模块的形式添加到内核中,具有极强的灵活性。.重要源代码文献 Lnux内核版本:2.4.2 etfter主文献:neoe/etfilr.c etfilter主头文献:ncld/linuxetfiter. IPv4有关: c文献:ne/iv4efilter/* 头文献:include/lnuxefilter_iv4h include/liux/netfiter_i4/*.h I4合同栈主体的部分c文献,特别是与数据报传送过程有关的部分: p_inpt.,ip_rwardc,ip_output.,i_fragen.等二、NefilteTbls-IPv4总体架构 Nefiltr重要通过表

      2、、链实现规则,可以这样说,Netiltr是表的容器,表是链的容器,链是规则的容器,最后形成对数据报解决规则的实现。具体地说,NetflteITables的体系构造可以分为三个大部分:1.etfltr的HOOK机制Nfilr的通用框架不依赖于具体的合同,而是为每种网络合同定义一套HK函数。这些OOK函数在数据报通过合同栈的几种核心点时被调用,在这几种点中,合同栈将数据报及OK函数标号作为参数,传递给Ntilter框架。 对于它在网络堆栈中增长的这些HOOK,内核的任何模块可以对每种合同的一种或多种HOK进行注册,实现挂接。这样当某个数据报被传递给etfter框架时,内核能检测到与否有任何模块对该合同和OO函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块就有机会检查、修改、丢弃该数据报及批示Netitr将该数据报传入顾客空间的队列。 这样,OO提供了一种以便的机制:在数据报通过inu内核的不同位置上截获和操作解决数据报。2.Ibls基本模块 IPable基本模块实现了三个表来筛选多种数据报,具体地讲,ux24内核提供的这三种数据报的解决功能是互相间独立的模块,都基

      3、于Netfiter的HOOK函数和多种表、链实现。这三个表涉及:fltr表,na表以及manle表。3.具体功能模块1. 1. 数据报过滤模块2. 连接跟踪模块(Connrck)3. 网络地址转换模块(NAT)4. 数据报修改模块(manl)5. 其他高档功能模块于是,tfiler/IPbls总体架构如图三、HOK的实现1. Netfiltr-IP4中的OK Nefiler模块需要使用HO来启用函数的动态钩接,它在IPv4中定义了五个HOK(位于文献iude/linux/ntiteipv.h,ine 39),分别相应0-4的hookum简朴地说,数据报通过各个HOOK的流程如下: 数据报从进入系统,进行IP校验后来,一方面通过第一种OOK函数NF_IPPEOUTNG进行解决;然后就进入路由代码,其决定该数据报是需要转发还是发给本机的;若该数据报是发被本机的,则该数据通过OO函数N_I_LOCL_I解决后来然后传递给上层合同;若该数据报应当被转发则它被N_IPFRWARD解决;通过转发的数据报通过最后一种HOK函数NF_IP_POST_ROUING解决后来,再传播到网络上。本地产生的数据

      4、通过HOK函数NFIPLOCLOUT解决后,进行路由选择解决,然后通过F_P_PSOUTING解决后发送出去。总之,这五个HOOK所构成的Ntfilter-IPv数据报筛选体系如图: (注:下面所说etfilter/ITabes均基于IPv4,不再赘述)具体地说,各个OOK及其在IP数据报传递中的具体位置如图 NF_PPRE_RUTING(0) 数据报在进入路由代码被解决之前,数据报在I数据报接受函数ip_rcv()(位于et/iv4/ip_iput.,ne3)的最后,也就是在传入的数据报被解决之前通过这个HOOK。在iprcv()中挂接这个HOOK之前,进行的是某些与类型、长度、版本有关的检查。 通过这个HOOK解决之后,数据报进入prcv_finih()(位于ntipvi_inpuc,Line06),进行查路由表的工作,并判断该数据报是发给本地机器还是进行转发。 在这个HOK上重要是对数据报作报头检测解决,以捕获异常状况。波及功能(优先级顺序):Conntrk(-20)、ngle(-1)、DNAT(-100) N_IP_LOCAIN() 目的地为本地主机的数据报在IP数据报本地投递

      5、函数iplocal_eliver()(位于net/ipv/ipnput.c,Line290)的最后通过这个HOO。 通过这个HOOK解决之后,数据报进入ip_lol_eliv_fi()(位于ne/vp_inpt.,Le2) 这样,IPbls模块就可以运用这个OOK相应的NT规则链表来对数据报进行规则匹配的筛选了。防火墙一般建立在这个OOK上。波及功能:mange(-150)、filter(0)、NA(0)、onntck(N_MAX-1) N_I_FORWAR() 目的地非本地主机的数据报,涉及被NT修改正地址的数据报,都要在IP数据报转发函数ifoard()(位于net/ipv4/ipfowr.c,Lin73)的最后通过这个HOO。 通过这个K解决之后,数据报进入_forfinish()(位于netpv4/ip_forwadc,ne44) 此外,在net/i4/ipmr.c中的imre_xmit()函数(Line119)最后也会通过这个OK。(ipr为多播有关,估计是在需要通过路由转发多播数据时的解决) 这样,IPabs模块就可以运用这个HOOK相应的FORWARD规则链表来对数据报进

      6、行规则匹配的筛选了。波及功能:mangl(-1)、filter(0) FPLOAL_OU (3)本地主机发出的数据报在IP数据报构建/发送函数i_eue_xmit()(位于net/pv/ip_outpu.c,Line339)、以及ip_uildand_senpk()(位于etip4/ip_outt.c,Line22)的最后通过这个HK。(在数据报解决中,前者最为常用,后者用于那些不传播有效数据的SNAK包) 通过这个HOOK解决后,数据报进入i_queuxit2()(位于neipv/ipoutput.c,Line81) 此外,在i_ildxmisow()(位于tipv4/p_outut.,Lin49)和i_uld_mit()(位于et/ipv4/ip_ouptc,Line638)中用于进行错误检测;在igm_ed_rprt()(位于nt/ipv4/igmp.c,Lin195)的最后也通过了这个OO,进行多播时有关的解决。 这样,PTabls模块就可以运用这个HOOK相应的OTPUT规则链表来对数据报进行规则匹配的筛选了。波及功能:Connrc(20)、manle(-150)、DNAT(

      7、-100)、fiter(0) NIP_PO_ROI (4) 所有数据报,涉及源地址为本地主机和非本地主机的,在通过网络设备离开本地主机之前,在IP数据报发送函数ip_fish_outpu()(位于netipv4/ip_utut.,ine184)的最后通过这个HOK。 通过这个HOO解决后,数据报进入ip_finh_outut2()(位于ne/p4/_outp.c,ine1)此外,在函数pmc_opu()(位于net/ipv4/ip_otut.c,Lne15)中在克隆新的网络缓存kb时,也通过了这个OOK进行解决。波及功能:mane(-50)、SNT(100)、Ctrack(NTMAX)其中,入口为net_xaton()(位于nt/core/dev.c,Line1602),作用是将数据报一种个地从P的输入队列中拿出,然后传递给合同解决例程。出口为dev_queuxmit()(位于e/corede.,Line0),这个函数被高层合同的实例使用,以数据构造strct sk_uf *b的形式在网络设备上发送数据报。2. HOOK的调用 OK的调用是通过宏NF_HOK实现的,其定义位于nlude/lix/Netfier.,ine12:#deie NHOOK(pf,hook, skb, indev, odev,o) /(lit_empty(f_hoos(p)(hook) /?(okfn)(b) /: n_hk_slow(pf),(hoo), (skb), (indv),(ue), (okn) 这里先调用list_emty函数检查HOK点存储数组nf_hoos与否为空,为空则表达没有HOK注册,则直接调用on继续解决。如果不为空,则转入nf_hook_sw()函数。 nf_hok_slw()函数(位于net/re/netfer.,Lin449)的工作重要是读nf_h数组遍历所有的n_hook_ops构造,并调用nho()解决各个数据报。 即HK的调用过程如图下面阐明一下NFHOOK的各个参数: pf:合同族标记,有关的有效合同族列表位于includinux/scket.,Lie1。对于Iv4,应当使用合同族FNET; o:HOO标记,即前面所说个OO相应的hookum; skb:是具有需要被解决包的sbuuf数据构造的指针。skuff是Lnux网络缓

      《Netfilter源代码分析详解》由会员壹****1分享,可在线阅读,更多相关《Netfilter源代码分析详解》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.