Chinaunix首页 | 论坛 | 博客
  • 博客访问: 364196
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: 网络与安全

2007-04-23 02:28:42

1、iptables或IP6tables下一共有三个表:Filter、NAT和mangle。
 
1)filter
filter表是专门过滤包的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。
    FORWARD链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,
    INPUT恰恰针对那些目的地是本地的包;
    OUTPUT是用来过滤所有本地生成的包。 
 
2)nat
nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因。 
    PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话;
    OUTPUT链改变本地产生的包的目的地址;
    POSTROUTING链在包就要离开防火墙之前改变其源地址;
 
3)mangle
这个表主要用来mangle数据包。
我们可以改变不同的包及包头的内容,比如 TTL,TOS或MARK。注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT和 FORWARD。
       PREROUTING在包进入防火墙之后、路由判断之前改变包;
       POSTROUTING是在所有路由判断之后,改变包;
       OUTPUT在确定包的目的之前更改数据包;
       INPUT在包被路由到本地之后,但在用户空间的程序看到它之前改变包;
       FORWARD在最初的路由判断之后、最后一次更改包的目的之前mangle包。
注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地址。NAT是在nat表中操作的。
 
------------------------------------------------
------------------------------------------------
 
2、数据包通过各个链的顺序
  1)以本地为目标(就是我们自己的机子了)的包
    A、在线路上传输(比如,Internet); 
    B、进入接口 (比如, eth0); 
    C、mangle PREROUTING 这个链用来mangle数据包,比如改变TOS等;
    D、 nat PREROUTING 这个链主要用来做DNAT。不要在这个链做过虑操作,某些情况下包会溜过去; 
    E、路由判断,比如,包是发往本地的,还是要转发的;
    F、mangle INPUT 在路由之后,被送往本地程序之前,mangle数据包;
    G filter INPUT 所有以本地为目的的包都要经过这个链;
    H、到达本地程序了(比如,服务程序或客户程序)
 
 2)以本地为源的包
    A、本地程序(比如,服务程序或客户程序);
    B、路由判断,要使用源地址,外出接口,还有其他一些信息;  
    C、mangle OUTPUT 在这儿可以mangle包。建议不要在这儿做过滤,可能有副作用哦; 
    D、nat OUTPUT 这个链对从防火墙本身发出的包进行DNAT操作; 
    E、filter OUTPUT 对本地发出的包过滤;
    F、mangle POSTROUTING 这条链主要在包DNAT之后(注:作者把这一次DNAT称作实际的路由,虽然
      在前面有一次路由。对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个包具体到哪儿
      去,要由NAT代码处理之后才能确定。所以把这称作实际的路由。),离开本地之前,对包 mangle。
      有两种包会经过这里,防火墙所在机子本身产生的包,还有被转发的包;
    G、nat POSTROUTING在这里做SNAT。不要在这里做过滤,有些包是会漏掉,即使你用了DROP策略;
    H、离开接口(比如: eth0);
    I、在线路上传输(比如,Internet);
 
 3)被转发的包
    A、在线路上传输(比如,Internet);
    B、进入接口(比如, eth0);
    C、mangle PREROUTING mangle数据包,,比如改变TOS等; 
    D、nat PREROUTING 这个链主要用来做DNAT。(不要在这个链做过虑操作),稍后会做SNAT; 
    E、路由判断,比如,包是发往本地的,还是要转发的; 
    F、mangle FORWARD 包继续被发送至mangle表的FORWARD链,这是非常特殊的情况才会用到的。在这
      里,包被mangle(还记得mangle的意思吗)。这次mangle发生在最初的路由判断之后,在最后一次
      更改包的目的之前(译者注:就是下面的FORWARD链所做的,因其过滤功能,可能会改变一些包的目
      的地,如丢弃包); 
    G、filter FORWARD 包继续被发送至这条FORWARD链。只有需要转发的包才会走到这里,并且针对这
      些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,不管是外网到内网的还是内网到
      外网的。在你自己书写规则时,要考虑到这一点;  
    H、mangle POSTROUTING 这个链也是针对一些特殊类型的包(注:参考第6步,可以发现,在转发包
      时,mangle表的两个链都用在特殊的应用上)。这一步mangle是在所有更改包的目的地址的操作完成
      之后做的,但这时包还在本地上; 
    I、nat POSTROUTING 这个链就是用来做SNAT的,当然也包括Masquerade(伪装);但不要在这儿做
      过滤,因为某些包即使不满足条件也会通过;
    J、离开接口(比如: eth0); 
    K、又在线路上传输了(比如,LAN) 
 
    综上,凡是有mangle表出现的地方,mangle上的链表总是要优先于另外两个表中的处理链。
    在第一个路由判断处,不是发往本地的包,我们会发送它穿过 FORWARD链;若包的目的地是本地监听的IP地址,我们就会发送这个包穿过INPUT链,最后到达本地。
    值得注意的是在做NAT的过程中,发往本机的包的目的地址可能会在PREROUTING链里被改变。这个操作发生在第一次路由之前,所以在地址被改变之后,才能对包进行路由。所有的包都会经过上述某一条路径。如果你把一个包DNAT回它原来的网络,这个包会继续走完相应路径上剩下的链,直到它被发送回原来的网络。
阅读(1406) | 评论(0) | 转发(0) |
0

上一篇:shell语法小结

下一篇:IPtables的状态机制

给主人留下些什么吧!~~