欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    Netfilter实现机制和扩展技术.docx

    • 资源ID:1469123       资源大小:306.08KB        全文页数:23页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Netfilter实现机制和扩展技术.docx

    1.inuxNetfilter实现机制和扩展技术本文从1.inUX网络协议栈中报文的流淌过程分析起先,对1.inUX24.x内核中最流行的防火墙构建平台NetfiItCr进行了深化分析,着重介绍了如何在NCtfiIte1.iPlabIeS机制中进行应用扩展,并在文木给出一个利用扩展Neifille1.iptables实现VPN的方案.2.4.1, 内核相对于2.2.乂在Ip协议栈部分有比较大的改动,Nelmte1.iPlUbleS更是其一大特色,由于它功能强大,并且及内核完备结合,因此快速成为1.inUX平台卜进行网络应用扩展的主要利蹲,这些扩展不仅包括防火墙的实现一这只是NetfiIte1.iPtabIeS的基本功能一还包括各种报文处理工作(如报文加密、报文分类统计等),甚至还可以借助NetfiIte1.iPtableS机制来实现虚拟专用网(VPN。本文将致力于深化剖析NeIfilIer-ipiables的组织结构,并具体介绍如何对其进行扩展。Netfilter目前已在ARP、IPv4和IPv6中实现,考虑到IPv4是目前网络应用的主流,本文仅就IPv4的Notfiker实现进行分析.要想理解NCtfiIter的工作原理,必需从对1.inUXIP报文处理流程的分析起先,NCtfiker正是将自己紧密地构建在这一流程之中的。1. IPPacketFlowingIP协议栈是1.inUX操作系统的主要组成部分,也是1.inUX的特色之一,素以高效桎定著称。Netfilter及IP协议枝是亲密结合在一起的,要想理解Netfilter的工作方式,必需理解IP协议栈是如何对报文进行处理的。下面将通过个经由IPTunnel传输的TCP报文的流淌路径,简要介绍一下IPv4协议栈(IP乂)的结构和报文处理过程。IPTUnnel是2.0.X内核就已经供应f的虚拟局域网技术,它在内核中建立一个虚拟的网络设备,聘正常的报文(其次层)封装在IP报文中,再通过TCP/IP网络进行传送。假如在网关之间建立IPTUnne1.并协作ARP报文的解析,就可以实现虚拟局域网。我们从报文进入IPTunnel设备打算发送起先。1.1 报文发送ipip模块创建tunnel设备(设备名为tunl(tunlx)时,设置报文发送接口(hard_StarjXmit)为ipip_tunn。1.XInit(),流程见下图:图1报文发送流程1. 2报文接收报文接收从网卡驱动程序起先,当网卡收到一个报文时,会产生一个中断,其邪动程序中的中断服务程序将调用确定的接收函数来处理。以下仍以IPTunnel报文为例,网卡驱动程序为de4x50流程分成两个阶段:驶动程序中断股务程序阶段和IP协议栈处理阶段,见下图:图2报文接收流程之驱动程序阶段图3报文接收流程之林议栈阶段假如报文须要转发,则在上图红筋头所指处调用ipforward。:图4报文转发流程从上面的潦程可以看出,NetfiIter以NFHooK。的形式出现在报文处理的过程之中。2. NetfilterFrameNetfilter是2.4.x内核引入的,尽管它供应了对2.0.x内核中的ipfw以及2. 2.X内核中的ipchains的兼容,但事实上它的工作和意义远不止于此。从上而对IP报文的流程分析中可以看出NetfiIter和IP报文的处理是完全结合在一起的,同时由下其结构相时独立,又是可以完全剥离的.这种机制也是Netfi1ter-iptabIes既高效又敏捷的保证之一。在剖析NeIfiIIer机制之前,我们还是由浅入深的从NeIfiller的运用起先。2. 1编译在NeIWOrkingOptions中选定NetWOrkpacketfiltering项,并将其下的IP:NetfilterConfiRUiations小节的全部选项设为MOdUIe模式。编译并安装新内核,然后重启,系统的核内NetfiIter就配置好了。以下对相关的内核配置选项稍作说明,也可以参阅编译系统自带的Help:Kcrne1/1.'sernet1inksocket建立,一类PF_NET1.INK套接字族,用于核心及用户进程通信.当Netfilter须要运用用户队列来管理某些报文时就要运用这一机制:Networkpacketfiltering(replacesipchains)1NeIfiIIer主选项,供应Netfilter框架:(Networkpacketfilteringdebugging】NeIfiner主选项的分支,支持更具体的NetfiIter报告:IP:NetfilterConfiguration)此节F是netfilter的各种选项的集合:Connectiontracking(requiredformsqNT)连接跟踪,用于基于连接的报文处理,比如NAT:IPIablessupport(requiredforilleringmsqNT)这是NemIler的框架,NAT等应用的容版:ipchains(2.2-style)Suppoitlipchains机制的兼容代码,在新的Netfilter结构上实现了ipchains接口:ipfwadm(2.O-style)SUPPOrt】2.0内核防火墙ipfwadm我容代码,基于新的NetfiIter实现。2.2 总体结构Netfilter是嵌入内核IP协议栈的一系列调用入口,设置在报文处理的路径上.网络报文依据来源和去向,可以分为三类:潦入的、流经的和流出的,其中流入和流经的报文须要经过路由才能区分,而流经和流出的报文则须要经过投递,此外,流经的报文还有个FORWARD的过程,即从个NIC转到另个NIC。Netfilter就是依据网络报文的潦向,在以下几个点插入处理过程:NFJPPRE.ROUTING,在报文作路由以前执行:NFJP_FORWARD,在报文转向另一个NIC以前执行:NFJPPOSTROUTING,在报文流出以前执行;NFIP1.OCA1.IN,在流入本地的报文作路由以后执行;NI'IP1.OCA1.OVT,在本地报文做流出路由前执行。如图所示:图5NetfilterHOoK位置Netfilter框架为多种协议供应了一套类似的钩子(HOOK),用一个SlrUClIiStjIeadnf_hooksNPROTONFJ!AXHooKS二维数组结构存储,一维为协议族,二维为上而提到的各个调用,口。每个希望嵌入Netfilter中的模块都可以为多个协议族的多个调用点注册多个钩子函数(HK),这些钩子函数将形成一条函数指针链,每次协议栈代码执行到NFHoOKo函数时(有多个时机),都会依次启动全部这些函数,处理参数所指定的协议枝内容。每个注册的钩子函数经过处理后都将返回下列值之一,告知NelfilIer核心代码处理结果,以便对报文实行相应的动作:NFACCEPT:接着正常的报文处理;NFDROP:将报文丢弃:NI'STO1.EN:由钩子函数处理了该报文,不要再接着传送:NF_QUEUE:将报文入队,通常交由用户程序处理:NEREPEAT:再次谢用该钩了函数。2.3 IPTablesNCtfilt。1.iPtab1。S由两部分组成,一部分是NetfiIter的"钩子",另一部分则是知道这些钩子函数如何工作的一套规则一这些规则存储在被称为iptables的数据结构之中。钩子函数通过访问iptables来推断应当返回什么值给Netfilter框架。在现有(kernel)中已内建了三个iptables:filter-natflmangle.绝大部分报文处理功能都可以通过在这些内建(built-in)的表格中填入规则完成:filter,该模块的功能是过注报文,不作任何修改,或者接受,或者拒绝。它在NFP_1.OCA1.lN、NFIP_FORWARD和NF/P_1.OCA1._OUT三处注册了钩子函数,也就是说,全部报文都将经过filler模块的处理。nat,网络地址转换(NetworkAddressTranslation),该模块以COnneCtionTraCking模块为基础,仅对每个连接的第一个报文进行匹置和处理,然后交由ConnectionTraCking模块将处理结果应用到该连接之后的全部报文。nat在NEIP_PRE.ROUTING、NFP_POST_RoUTING注册了钧了函数,假如须要,还可以左NFIP_1.OCA1.jN和NFlP1.OCAM)UT两处注册钩子,供应对本地报文(出/入)的地址转换。nal仅对报£头的地址信息进行修改,而不修改报文内容,按所修改的部分,nat可分为源NAT(SNAT)和目的MT(DNAT)两类,前者修改第个报文的源地址部分,而后者则修改第个报文的目的地址部分。SNAT可用来实现IP伪装,而DNAT则是透亮代理的实现基础.mangle,属于可以进行报文内容修改的IPTables,可供修改的报文内容包括MARK、ToS、TT1.等,mangle表的操作函数嵌入在NetfiIter的NFJPPKERO1.TING和NFlP1.OCA1.OUT两处。内核编程人员还可以通过注入模块,调用NeIfilIer的接口函数创史新的iptables。在卜面的Netfi1ter-iptables应用中我们将进一步接触NetfiIter的结构和运用方式“2.4 Netfilter配置工具iptables是特地针对2.4.X内核的NetfiltCr制作的核外配置工具,通过socket接口对Netfilter进行操作,创建socket的方式如下:socketCrjAF,SOCK_RAW,IPPR0T0RAW)其中TjAF就是AFNET0核外程序可以通过创建个"原始IP套接字”获得访问Netfilter的句柄,然后通过getsockopt()和SetSoCkoPt()系统调用来读取、更改NelfilIer设置,详情见下。iptables功能强大,可以对核内的表进行操作,这些操作主要指对其中规则链的添加、修改、清除,它的吩咐行参数主要可分为四类:指定所操作的IPTabIeS(-t):指定对该表所进行的操作(-A、-D等):规则描述和也配:对iptables吩咐本身的指令1.n等)。在下面的例子中,我们通过iptables将访问.1的53端口(DNS)的TCP连接引导到192.168.0.1地址上。iptables-tnat-APREROUTING-pTCP-ieth-d.1-dport53-jDNAT-to-destination192.168.0.1由于iptables是操作核内Netfilter的用户界面,有时也把Netfilteriplables简称为iplables,以便及ipchains、ipfwadm等老版本的防火墙并列。2. 5iptables核心数据结构«在1.inUX内核里,iptables用StrUCtipt_table表示,定义如下(include/1inux/netfilter_ipv4/ip_tables.h):structipttablestructlist_headlist:*囊链*/charnameIPTTAB1.EXNME1.EN;*表名,如"filter"、"nat”等,为了满意自动模块加载的设计,包含该表的模块应命名为iptable.'name'.o*/structiptreplace*table:/*表模子,初始为initialtable,repl*/unsignedintvalidhooks;/*位向量,标示本表所影响的HOOK*/rwlocklock:/*读写锁,初始为打开状态*/structipttable_info+private;*iptable的数据区,见下/structmodule*me:/*是否在模块中定义/;structipttabi。.info是实际描述表的数据结构(netipv4netfilteriptables,c):structipttable,infounsignedintsize:*表大小/unsignedintnumber;*表中的规则数*/unsignedintinitial_entries;*初始的规则数,用于模块计数*/unsignedinthookentryNI'IPNUMHOOKS;*记录所影响的HoOK的规则入口相对于卜.面的entries变量的偏移值*/unsignedintunderflowNF_IP_NUMHOOKS:/及hookenlry相对应的规则表上限偏移量,当无规则录入时,相应的hook_entry和underflow均为0*/Charentries0cache1ine_aligned:*规则表入口/;例如内建的filter表初始定义如F(netipv4netfilteriptable-filter.c):staticstructipttablepacketfiller=(NU1.1.,NU1.1.I,/链表"filter",/表名&initial_table.repl,/初始的表模板FI1.TERVA1.IDHOOKS,/定义为(1«NFIP61.OCA1.IN)(1«NFP6_FORRARD>I(1<<NFP6_1.OCA1.orr),即关切INPUT.FORWARD、OVTPUT三点RW1.OCKjjN1.OCKED,锁NU1.1.,/初始的表数据为空THlS.MODU1.E/模块标示;经过询用ipt_registeJtabIe(&packetfilter)后,filter表的PriVate数据区即参照模板填好了。规则规则用SIrUCliPlentry结构表示,包含匹配用的IP头部分、一个Targel和O个或多个VatCh。由于MatCh数不定,所以一条规则实际的占用空间是可变的。结构定义如下(include/1inux/netfilter_ipv4):structiplentrystructiptipip;*所要匹配的报文的IP头信息*/unsignedintnfcache;*位向量,标示本规则关切报文的什么部分,暂未运用*/uintl6ttargetoffset;*target区的偏移,通常IargeI区位于match区之后,而match区则在iptentry的末尾;初始化为SiZeOf(StrUCtiPt_Cntry),即假定没有match/uinll6Inextoffset;/*卜一条规则相对于本规则的偏移,也即本规则所用空间的总和,初始化为sizeof(structiptentry)+sizeof(structiptIarget),即没有malch*/unsignedintcoraefrom;/*位向量,标记调用本规则的HooK号,可用于检查规则的有效性*/structiptCountexscounters;/*记录该规则处理过的报文数和报文总字节数/unsignedcharelems0;/target或者是match的起始位理/规则依据所关注的HOOK点,被放置在structipt_table:private->entries之后的区域,比邻排列.规则填写过程在了解了iptables在核心中的数据结构之后,我们再通过遍历一次用户通过iptables配置程序填写规则的过程,来了解这些数据结构是如何工作的了。一个最简洁的规则可以描述为拒绝全部转发报文,用iptables吩咐表示就是:iptables-AFORWARD-jDROP:iptables应用程序招吩咐行输入转换为程序可读的格式(iptables-standalone.c:nain()::docommand()»然后再调用Iibiptc库供应的iptjcoranitO函数向核心提交该操作恳求。在IibiPtC/libiptc.c中定义了iptccommit()(即TC-COMMIT(),它依据恳求设置了一个StrUCtiptreplace结构,用来描述规则所涉及的表(filter)和HoOK点(FORWARD)等信息,并在其后附接当前这条规则一一个structipt_entry结构(事实上也可以是多个规则entry)。组织好这些数据后,iptjcOranito调用setsock。Pto系统调用来启动核心处理这一恳求:Setsockopt(sockfd,/通过socket(TC_AF,SOCK_RAW,IPPROT(1.RAW)创建的套接字,其中TCRF即AFlNETTCIPPROTO,即IPPROTOIPS(1.SET_REP1.ACE,即1PT_SO_SETREP1.ACErepl,/structipt_replace结构sizeof(*repl)+(*handle)->entries.size)ipjreplac。加上后面的iplentry核心时于setsock。Pto的处理是从协议栈中一层层传递上来的,调用过程如F图所示:图6规则澳写过程nfSockopts是在iptables进行初始化时通过nfregiStejsockoptO函数生成的一个StrUCtnf_sockopt_OPS结构,对于ipv4来说,在nelipv4netfilleriptables.c中定义了一个ipl_soCkOPlS变量(structnfsockoptops),其中的Set操作指定为do_ipt_set_ctl0,因此,当nf_sockoptb调用对应的set操作时,限制将转入netipv4netfi1ter/ip_tables.c:do_ipt_set_ctl()中。对于IPT_SOSETREP1.ACE吩咐,do_ipt_set_ctl0调用do_r。PIaCeo来处理,该函数将用户层传入的structipt_replace和structiptentry组织到fi1ter(依据SlrUCtiplreplace:name项)表的hookentryNEIPFORWARD所指向的区域,假如是添加规则,结果将是filter表的PriVate(structipt_table_info)项的hook_entryNFP_FORWARD和UnderfloWfNFnFORWARD的差值扩大(用丁容纳该规则),private->number加1,规则应用过程以上描述J'规则注入核内iplables的过程,这些规则都挂接在各自的表的相应HOOK入口处,当报文流经该HOOK时进行匹配,对于及规则匹配胜利的报文,调用规则对应的Target来处理。仍以转发的报文为例,假定fiIter表中添加了如上所述的规则:拒绝全部转发报文。如1.2节所示,经由本地转发的报文经过路由以后将调用ipforward。来处理,在ip_forward()返回前,将调用如下代码:NF_HooK(PF!NET,NFIPFORWARD,skb,skb->dev,dev2,ip.forwardfinish)NFJ100K是这样一个宏(ircludelinux/nelfilter.h):defineNFJ100K(pf,h<x>k,skb,indev,outdev,okfn)(list_empty(&nfhooks(pf)(hook)?(okfn)(skb):nfhook-slow(pf),(hook),(skb),(indev),(outdov),(okfn)也就是说,假如nf_hooksPF_INETNFPFORWARD:所指向的链表为空(即该钩子上没有挂处理由数),则干脆调用ip_forward_finish(skb)完成ip_forward()的操作:否则,则调用nct/core/nctfi1ter.c:nf_hook_slow()转入NotfiIter的处理.这里引入了一个nfjooks链表二维数组:structIiSJheadnfhksNPROTO'NFXHOOKS;每个希望运用NetfiIter挂钩的表都须要将表处理函数在nfhooks数组的相应链表上进行注册“对于filter表来说,在其初始化Se期ipv"netfilter/iptablefiller.c:init()时,调用了net/core/netfi1ter.c:nf_register_hookO.将预定义的三个structnf_hook。PS结构(分别对应INPUT、FoRWARD、OUTPUT涟)连入链表中:structnfhookops(struct1isthead1ist;链表nfh<>kfn*h<x>k:处理函数指针intpf:协议号inthook11un;/HOOK号intpriority:优先级,在nfOOkS链表中各处理函数按优先级排序;对于fi1ter表来说,FORWARD点的hook设置成ipt_hook(),它将干脆调用iptdotable0.几乎全部处理函数最终都将调用ipt_do_tableO来查询表中的规则,以调用对应的target。下图所示即为在FORWARD点上调用nf_hook_s】owO的过程:图7规则应用流程Netfilter的结构特点由上可见,nf_hOokS链表数组是联系报文处理流程和iptablcs的纽带,在iptables初始化(各自的init()函数)时,一方面调用nf_registr-tabl()建立规则容器,另一方面还要调用nregisterhook0将自己的挂钩愿望表达给NeIfilIer框架。初始化完成之后,用户只须要通过用户级的iplubles吩咐操作规则容器(添加规则、删除规则、修改规则等),而对规则的运用则完全不用操劳。如果个容器内没有规则,或者nf_hoOkS上没有须要表达的愿望,则报文处理照常进行,丝充不受Wtfilte1.iPIableS的影响:即使报文经过过港规则的处理,它也会犹如平常一样亚新回到报文处理流程上来,因此从宏观上看,就像在行车过程中去了一趟加油站。Netfilter不仅仅有此高效的设计,同时还具备很大的敏捷性,这主要表现在Netfilter-iptables中的许多部分都是可扩充的,包括TabIe、Match,Target以及ConneCtiOnTrackProtocolHelper,下面一节将介绍这方面的内容.3. Netfilter-IptablesExtensionsNetfilter供应的是一套HoOK框架,其优势是就是易丁扩充.可供扩充的NeIfiIIer构件主要包括TabIe、Natch、Target和ConnectionTrackProtocolHeIPer四类,分别对应四套扩展函数,全部扩展都包括核内、核外两个部分,核内部分置于<kcrnel-root>nctipv4netfiIter/下,模块名为ipt_'name'.o;核外部分置F<iptables-root>extensions下,动态链接库名为Iibipl'name'.so。3.1 TableTable在以上章节中已经做过介绍了,它作为规则存储的媒介,确定了该规则何时能起作用。系统供应的filter、nat、IDangle涵盖了全部的HoOK点,因此,大部分应用都可以困绕这三个已存在的表进行,但也允许编程者定义自己的拥有特别目的的表,这时须要参考己有表的StrUCliPtJabIe定义创建新的iptIable数据结构,然后调用iptregisierIableO注册该新表,并调用ipjregiSteJhOOko将新表及NetfiltcrHOOK相关联。对表进行扩展的情形并不多见,因此这里也不详述。3.2 Match&TargetMatch和Target是Netfilter-iptables中坡常运用的功能,敏捷运用Match和Target,可以完成绝大多数报文处理功能。Match数据结构核心用structipt_match表征一个Match数据结构:structiptjnaich(structIistheadlist;*通常初始化成NU1.1.,NU1.1.,由核心运用*/constcharnameIPTFUNCTIONMAXNAMEI.EN:*MalCh的名字,同时也要求包含该MHlCh的模块文件名为ipt_'name'.o*/int(*atch)(conststructsk_buff*skb,conststructnetdevice*in,conststructnet_device*out,constvoid*matchinfo,intoffset,constvoid*hdr,u_intl6_tdatale11,int*hotdrop);*返回非。表示匹配胜利,假如返回。且hotdrop设为1,!iJ表示该报文应当立即丢弃*/int(*checkentry)(constchar*tablename,conststructiptip*ip,void*matchinfo,unsignedintalchinosize,unsignedinthookmask):*在运用本MatCh的规则注入表中之前调用,进行有效性检查,假如返回0,规则就不会加入iptablos中*/void(*<lestroy)(void*nalchinfo,unsignedintInalchinfosize);/*在包含本Match的规则从表中时(除时调用,及checkentry协作可用于动态内存安排和释放*/structmodule*me:/*表示当前MUICh是否为模块(NU1.1.为否)/;定义好个ipl_match结构后,可调用iptregisterInatCho将本MatCh注册到iptmalch链表中备用,在模块方式下,i函数通常EiniJmoduleO中执行。Match的用户级设Jt要运用核心定义的MatCh(包括已仃的和自定义的),必需在用户缎的iptables程序中有所说明,iptabl。S源代码也供应了己知的核心VatCh,但未知的MatCh则须要自行添加说明。在iptables中,一个MatCh用structiptablesnatch表示:structiptablesmatchstructiptablesmatch*next;/MatCIr链,初始为NU1.1.*/ipt_chainlabelname;*Match名,和核心模块加载类似,作为动态链接库存在的IptablesEXtenSiOn的命名规则为IibiPt'name'.so(对于ipv6为IibiP6t_'name'.so),以便于iplables主程序依据MaICh名加载相应的动态链接库*/constchar*vcrsion;/版本信息,一般设为NETFn.TERVERSION/sizetsize;/MatCh数据的大小,必需用IPTA1.IGNo宏指定对界*/SiZe_tuserspacesize:/*由于内核可能修改某些域,因此size可能及准确的用户数据不同,这时就应当把不会被变更的数据放在数据区的前面部分,而这里就应当填写被变更的数据区大小:股来说,这个值和size相同*/void(*help)(void);/*当iplables要求显示当前match的信息时(比如iptables-raipext-h),就会调用这个函数,输出在iptables程序的通用信息之后*/void(*init)(structiptentrynutch*n,unsignedint*nfcache):*初始化,在ParSe之前调用*/int(*parse)(intc,char*argv,intinvert,unsignedint*flags,conststructipt_entry*entry,unsignedint*nfcache,structiptentrymatch*alch);*扫描并接收本match的吩咐行参数,正确接收时返回非0,flags用于保存状态信息/void(*finalcheck)(unsignedintflags);*当吩咐行参数全部处理完毕以后调用,假如不正确,应当退出(exit-errorO)/void(+print)(conststructiptip*ip,conststructipt_entry_match*match,intnumeric);*当杳询当前表中的规则时,显示运用了当前mulch的规则的额外的信息*/void(+save)(conststructiptip*ip,conststructiptentrymatch*natch):*依据JMirse允许的格式将未InatCh的吩咐行参数输出到标准输出,用于iptables-sa,e吩咐/conststructoption*cxtraopts:*NU1.1.结尾的参数列表,StrUCtOPtion及getopt(3)运用的结构相同/*以卜参数由iptables内部运用,用户不用关切*/unsignedintoptionoffset:structipjentryJnatCh*m:unsignedintmfkgs;unsignedintused;structoption(constchar*na11e;*参数名称,用于匹配吩咐行输入/inthas_arg;/*本参数项显否允许带参数,。表示没有,1表示有,2表示可有可无/int*flag;/*指定返回的参数值内容,假如为Nu1.1.,则干脆返回下面的val值,否则返回0.val存于flag所指向的位置*/intval;/*缺省的参数值*/如对于一optvalue)参数来讲,在StrUCtOPtion中定义为"opt”,1,0,'T,表示。Pt带参数值,假如出现-OPtvalue参数,则返回'1'用于ParSe()中的intc参数。实际运用时,各个函数都可以为空,只要保证name项及核心的对应MUICh名字相同就可以了。在定义了iptablesmatch之后,可以调用register-match()让iptables主体识别这个新MatCh。当iptables吩咐中第次指定运用名为ip_exl的MatCh时,iptables主程序会自动加载IibiPJiPext.so,并执行其中的init()接口,所以registermatch0操作应该放在inil()中执行。Target数据结构Target数据结构StrUCtiPtjarget和StrUCtiPtIDatCh基本相同,不同之处只是用target函数指针代替match函数指针:structipt_targctunsignedint(*target)(structskbuff*pskb,unsignedinthooknm,conststructnetdevice*in,conststructnetdevice*out,constvoid*targinfo,void*userdata):*假如须要接着处理则返回IIyTCOw'INUE(-1),否则返回NFACCEPT.NI'DROP等值,它的调用者依据它的返回值来推断如何处理它处理过的报文*/及iplregistermatch。对应,TarRet运用iptregistertargetO来进行注册,但文件命名、运用方法等均及MatCh相同。Target的用户级设置Targel的用户级设置运用StrUeliPIabIeSIargeI结构,及SIrUCIiptabIeSJnatCh完全相同。regiStejtargetO用于注册新Targe3方法也及Match相同。3. 3ConnectionTrackProtocolHelper前面提到,VVr仅对个连接(TCP或UDP)的第个报文进行处理,之后就依靠COnneCtiOnTraCk机制来完成对后续报文的处理.ConnectionTraCk是一套可以和NAT协作运用的机制,用于在传输层(甚至应用层)处理及更高层协议相关的动作。关于COnneCtiOnTrack,NetfiIIer中的实现比较困难,而且实际应用频率不高,因此这里就不绽开了,以后专文介绍。3.4iptablesPatCh机制对于NCtfiIte1.iPIableS扩展工作,用户当然可以干脆修改源代码并编译安装,但为了标准化和简便起见,在iptables源码包供应了一套PatCh机制,希里用户依据其格式要求进行扩展,而不必分别修改内核和iplubles代码。和Netfilter-iptables的结构特点相适应,对iptables进行扩展也须耍同时修改内核和iplables程序代码,因此PaICh也分为两个部分。在iplubles-中,核内补丁由PatCh-O-matic包供应,iptablesT.2.8的源码中的extensions节目则为iptables程序本身的补丁。PatCh-O-InatiC供应了个runme'脚原来给核心打PatCh,依据它的规范,核内补丁应当包括五个部分,且命名有肯定的规范,例如,假如Target名为ip_oxt,那么这五个部分的文件名和功能分别为: ip_ext.patch主务件,内容为diff格式的核心.c、J源文件补丁,实际运用时类似给内核打patch(patch-p<ip_ext.patch); ip_ext.patch,config,in对kernel-root>netipv4netfilterConfig.in文件的修改,第一行是原Config.in中的一行,以指示补丁添加的位置,后面则是添加在以上匹配行之后的内容。这个补丁的作用是使核心的配置界面中支持新增加的补丁选项: ip_ext.patch,configure,help对<kee卜rool/DoCUInenlalion/Configure,help的修改,第一行为原COnfigUre.help中的一行帮助索引,以卜几行的内容添加在这一行相关的帮助之后。这个补丁的作用是补充内核配置时对新增加的选项的说明: ipext.patch,help用于runme脚本显示本patch的楮助信息: ip_ext.patch,makefile 对<kerncl-root>netipv4netfiltor/MakefiIe的修改,和前两个文件的格式相同,用于在指定的位置上添加用于生成i*ipexl.o的make指令。示例可以参看PatCh-

    注意事项

    本文(Netfilter实现机制和扩展技术.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开