3. 表与链
3.1. 概述 【相关文章:awk 教程 1】 【扩展阅读:IDC:08 年 Linux PC 售额】3.2. mangle 表 【扩展信息:awk 教程 2】 3.3. nat 表 3.4. filter 表chapter 3. 表与链
这一章我们来讨论数据包是以什么顺序、如何穿越不同的链与表的。稍后,在你自己写规则时,就会知道这个顺序是多么的重要。一些组件是iptables与内核共用的,比如,数据包路由的判断。了解到这一点是很重要的,尤其在你用iptables改变数据包的路由时。这会帮助你弄明白数据包是如何以及为什么被那样路由,一个好的例子是dnat与snat,不要忘了tos的作用。
3.1. 概述当数据包到达防火墙时,如果mac地址符合,就会由内核里相应的驱动程序接收,然后会经过一系列操作,从而决定是发送给本地的程序,还是转发给其他机子,还是其他的什么。
我们先来看一个以本地为目的的数据包,它要经过以下步骤才能到达要接收它的程序:
下文中有个词mangle,我实在没想到什么合适的词来表达这个意思,只因为我的英语太差!我只能把我理解的写出来。这个词表达的意思是,会对数据包的一些传输特性进行修改,在mangle表中允许的操作是 tos、ttl、mark。也就是说,今后只要我们见到这个词能理解它的作用就行了。
table 3-1. 以本地为目标(就是我们自己的机子了)的包
step(步骤)table(表)chain(链)comment(注释)1在线路上传输(比如,internet)2进入接口 (比如, eth0)3mangleprerouting这个链用来mangle数据包,比如改变tos等4natprerouting这个链主要用来做dnat。不要在这个链做过虑操作,因为某些情况下包会溜过去。5路由判断,比如,包是发往本地的,还是要转发的。6mangleinput在路由之后,被送往本地程序之前,mangle数据包。7filterinput所有以本地为目的的包都要经过这个链,不管它们从哪儿来,对这些包的过滤条件就设在这里。 8到达本地程序了(比如,服务程序或客户程序)注意,相比以前(译者注:就是指ipchain)现在数据包是由input链过,而不是forward链。这样更符合逻辑。刚看上去可能不太好理解,但仔细想想就会恍然大悟的。
现在我们来看看源地址是本地器的包要经过哪些步骤:
table 3-2. 以本地为源的包
steptablechaincomment1本地程序(比如,服务程序或客户程序)2路由判断,要使用源地址,外出接口,还有其他一些信息。 3mangleoutput在这儿可以mangle包。建议不要在这儿做过滤,可能有副作用哦。4natoutput这个链对从防火墙本身发出的包进行dnat操作。5filteroutput对本地发出的包过滤。6manglepostrouting这条链主要在包dnat之后(译者注:作者把这一次dnat称作实际的路由,虽然在前面有一次路由。对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个包具体到哪儿去,要由nat代码处理之后才能确定。所以把这称作实际的路由。),离开本地之前,对包 mangle。有两种包会经过这里,防火墙所在机子本身产生的包,还有被转发的包。7natpostrouting在这里做snat。... 下一页