一张图让你领会iptables防火墙

Life is short , play more!
本文来自lihao's Blog,转载请注明。

下面这张文字图,将会让你很快领悟iptables防火墙。
当网卡接收到数据包时,就先来到Prerouting 阶段。这时候我们通常会用到nat(dst) ,来改变目标地址。之所以在routing之前,做dnat就不废话了, 因为routing就是根据目标地址进行routing的,所以我们改变dst(目标地址)基本都是为了让其路由到相应的网络上。 当然我们也可以什么都不做。下一阶段,这时候就来到了routing阶段。 routing会根据目标地址来看, 这个数据包是给我机器本身的,还是要转发到其他的机器上的。 判断的依据很简单,就是根据路由表了。 这时候就可能会有2中分支了。

1) 到本机的过程:

a) 假设发现目标地址是本机地址,那不用说了,本地有个软件或服务软件,在等待这个数据包的到来。 这时就到了input阶段(确切应该叫做chain),为了好理解,我们把这些chain都给流程化,就成了每个阶段。 这时候我们可以通过设定策略,来判断哪些数据包允许进入到本机,哪些被禁止。

b) input阶段允许通过的数据包就到了应用程序那里。应用程序收到了很开心, 就回一个数据包给发送数据包的人,告诉他我收到了,很开心。这时候就开始output数据包了。 这里我们可以设定是否允许特定数据包的output。

c) 假设我们允许这个”很开心的“数据包发送出去,这时候真实情况还会进行一次routing过程(图上并未画出来)。要看这个数据包从哪个门出去。决定后,这时候就到了最后的postrouting阶段。 这时候我们可以做snat,或者mangle数据包。 在最后数据包出去的时刻,对数据包进行变动,以达到我们想要的目的。

2) 路由到其他网络过程:

a) 我们来看下这个分支。 假设在routing阶段,发现这个目标地址不是本机啊, 那好吧。我们就成了一个过路机,那得看下我得转发给谁。 因为我家有好几个门。 这时候查看下路由表, 通过正确的门发送出去。

b) 是否能够将数据转发出去,linux 里有一个设定,来决定是否允许系统进行ip数据包转发。这个是功能性的是系统级别的,不是进行数据包的过滤行为。 当我们echo 1 > /proc/sys/net/ipv4/ip_foward 后,则系统开通了ipv4的转发功能。 这时候根据forward的filter策略,来进行是否允许转发特定的数据包。

c) 假设数据包可以被转发,这时候就到了指定的门(网卡),进行postrouting了。

iptables


发表评论

电子邮件地址不会被公开。 必填项已用*标注