免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1341 | 回复: 0
打印 上一主题 下一主题

基本介绍 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-18 20:56 |只看该作者 |倒序浏览

                                                                 
               
       
一、基本介绍
1.1、常用名词解释
1、target//规则匹配后的处理方法
一般将target分为两类,一类为标准的target,即下面的宏定义
NF_DROP                丢弃该数据包
NF_ACCEPT            保留该数据包
NF_STOLEN            忘掉该数据包
NF_QUEUE            
将该数据包插入到用户空间
NF_REPEAT            再次调用该hook函数
另一类为由模块扩展的target,
REJECT,LOG,ULOG,TOS,DSCP,MARK,REDIRECT,MASQUERADE,NETMAP
2、hook
//这个成员用于指定安装的这个函数对应的具体的hook类型:
NF_IP_PRE_ROUTING    在完整性校验之后,选路确定之前
NF_IP_LOCAL_IN        在选路确定之后,且数据包的目的是本地主机
NF_IP_FORWARD        目的地是其它主机地数据包
NF_IP_LOCAL_OUT        来自本机进程的数据包在其离开本地主机的过程中
NF_IP_POST_ROUTING    在数据包离开本地主机“上线”之前
3、chain
相同类型的hook的所有操作以优先级升序排列所组成的链表。
4、match
//匹配方式
4.1、标准匹配
interface,ip
address,protocol
4.2、由模块延伸出来的匹配
tcp协议高级匹配,udp协议高级匹配,MAC
address
匹配,Multiport匹配,匹配包的MARK值,Owner匹配,IP范围匹配,包的状态匹配,AH和ESP协议的SPI值匹配,pkttype匹配,(MTU)匹配,limit特定包的重复率匹配,recent,特定包重复率匹配,
ip报头中的TOS值匹配,匹配包中的数据内容。
5、table
//netfilter中规则都存放在此结构中
1.2、简介
Netfilter是Linux的第三代防火墙,在此之前有Ipfwadm和Ip
chains两种防火墙。Netfilter
是通过将一系列调用入口,嵌入到内核IP协议栈的报文处理的路径上来完成对数据包的过滤,修改,跟踪等功能。网络数据包按照来源和去向,可以分为三类:流入的(IN)、流经的(FORWARD)和流出的(OUT),其中流入和流经的报文需要经过路由才能区分,而流经和流出的报文则需要经过投递,此外,流经的报文还有一个FORWARD的过程。
具体来说,Netfilter
框架为多种协议提供了一套类似的钩子(HOOK),用一个struct
list_head
nf_hooks[NPROTO][NF_MAX_HOOKS]二维数组结构存储,一维为协议族,二维为上面提到的各个调用入口。每个希望嵌入
Netfilter中的模块都可以为多个协议族的多个调用点注册多个钩子函数(HOOK),这些钩子函数将形成一条函数指针链,每次协议栈代码执行到
NF_HOOK()函数时(有多个时机),都会依次启动所有这些函数,处理参数所指定的协议栈内容。
每个注册的钩子函数经过处理后都将返回下列值之一,告知Netfilter核心代码处理结果,以便对报文采取相应的动作。
   在现有(kernel
2.6.30.3)中已内建了四个tables:filter、nat、mangle和raw,和一个辅助功能,连接跟踪(ConnTrack)。绝大部分报文处理功能都可以通过在这些内建(built-in)的表格中填入规则完成:
FILTER,该模块的功能是过滤报文,不作任何修改,或者接受,或者拒绝。它在NF_IP_LOCAL_IN、NF_IP_FORWARD和NF_IP_LOCAL_OUT三处注册了钩子函数,也就是说,所有报文都将经过filter模块的处理。
NAT,网络地址转换(Network
Address Translation),该模块以Connection
Tracking模块为基础,仅对每个连接的第一个报文进行匹配和处理,然后交由Connection
Tracking模块将处理结果应用到该连接之后的所有报文。nat在NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING注册了
钩子函数;如果需要,还可以在NF_IP_LOCAL_IN和NF_IP_LOCAL_OUT两处注册钩子,提供对本地报文(出/入)的地址转换。nat
仅对报文头的地址信息进行修改,而不修改报文内容,按所修改的部分,nat可分为源NAT(SNAT)和目的NAT(DNAT)两类,前者修改第一个报文
的源地址部分,而后者则修改第一个报文的目的地址部分。SNAT可用来实现IP伪装,而DNAT则是透明代理的实现基础。
MANGLE,属于可以进行报文内容修改的table,可供修改的报文内容包括MARK、TOS、TTL等,mangle表的操作函数嵌入在Netfilter的NF_IP_PRE_ROUTING,NF_IP_LOCAL_IN,NF_IP_FORWARD,NF_IP_LOCAL_OUT,NF_IP_POST_ROUTING五处。
内核编程人员还可以通过注入模块,调用Netfilter的接口函数创建新的iptables。
ConnTrack,
连接跟踪用来跟踪和记录连接状态,是netfilter的一部分,也通过在hook点设定操作函数来完成。
RAW,netfilter提供了连接跟踪功能,在为了不让某一连接被跟踪时,可以使用raw
table,同时它也可以使数据包绕过 nat
,因此raw table
的主要作用就是减少不必要的包处理。Raw
table只注册在NF_IP_PRE_ROUTING,NF_IP_LOCAL_OUT两个hook点。
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

  Normal
  0
  
  7.8 磅
  0
  2
  
  false
  false
  false
  
   
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4



/* Style Definitions */
table.MsoNormalTable
        {mso-style-name:普通表格;
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
        mso-para-margin:0cm;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:"Times New Roman";
        mso-ansi-language:#0400;
        mso-fareast-language:#0400;
        mso-bidi-language:#0400;}


  

1.3、数据包处理流程
 SHAPE 
\* MERGEFORMAT


   综上所述,Netfilter的处理结构如上图所示,我们用不同的颜色来代表不同的表,不同的表在不同的hook点有不同的优先级顺序,在前面的表有较高的优先级,Netfilter中不同的表在不同的hook点的优先级如下所示:
NF_IP_PRI_FIRST = INT_MIN,
       NF_IP_PRI_CONNTRACK_DEFRAG
= -400,//连接跟踪
       NF_IP_PRI_RAW
= -300,//RAW表的优先级
       NF_IP_PRI_SELINUX_FIRST
= -225,
       NF_IP_PRI_CONNTRACK
= -200,//
       NF_IP_PRI_MANGLE
= -150,//
       NF_IP_PRI_NAT_DST
= -100,//目标NAT(DNAT)优先级
       NF_IP_PRI_FILTER
= 0,//FILTER表优先级
       NF_IP_PRI_SECURITY
= 50,
       NF_IP_PRI_NAT_SRC
= 100,//源NAT优先级
       NF_IP_PRI_SELINUX_LAST
= 225,
       NF_IP_PRI_CONNTRACK_CONFIRM
= INT_MAX,//确认CONNTRACK优先级
       NF_IP_PRI_LAST
= INT_MAX,
简单说来,进入内核的数据包在经过不同的hook点时会遇到不同的处理机制,由Netfilter各个不同的表中规则对数据包进行处理。在目前的内核版本中,netfilter提供四种处理机制,这四种处理机制有一定的先后顺序,在制定防火墙规则时要多加注意。
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/67118/showart_2055566.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP