Iptables使用指南

术语:

DNAT  -  Destination Network Address Translation 目的网络地址转换。DNAT是一种改变数据包目的ip地址的技术,经常和SNAT联用,以使多台服务器能共享一个ip地址连入Internet,并且继续服务。通过对同一个ip地址分配不同的端口,来决定数据的流向。

SNAT  -  Source Network Address Translation 源网络地址转换。这是一种改变数据包源ip地址的技术,经常使用多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了。


2.表和链

2.1流程

2.1.1外网数据包进入本地程序(输入)

Step(步骤)Table(表)Chain(链)Comment(注释)
1  在线路上传输(比如:Internet)
2  进入接口(比如:eth0)
3manglePREROUTING这个链用来mangle数据包
4natPREROUTING这个链主要用来做DAT。不要在这个链过滤操作,因为某些情况下会溜包。
5  路由判断。比如:包是发往本地的、还是要转发的。
6mangleINPUT在路由之后,被发往本地程序之前,mangle数据包。
7filterINPUT所有以本地为目的的包都要经过此链,不管他们从哪儿来,对这些包的过滤条件就设定在这里
8  到达本地程序。


2.1.2本地源包输出到外网(输出)

Step(步骤)Table(表)Chain(链)Comment(注释)
1  本地程序创建源数据包(比如:服务程序)
2  路由判断,要使用源地址,外出接口;或是其他。
3mangleOUTPUT在此链mangle数据包。建议不要在这儿做过滤,可能有副作用。
4natOUTPUT此链对从防火墙本身发出的包进行DNAT操作。
5filterOUTPUT对本地发出的包过滤。
6manglePOSTROUTING此链主要在包DNAT之后(虽然在前面有一次路由,但对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个包具体到哪儿去,要由NAT处理之后才能确定。),离开本地之前,对包mangle。有两种包会经过这里,防火墙所在本机产生的包,以及被转发的包。
7natPOSTROUTING在此链做SNAT,但不要在这里做过滤,因为有副作用,而且也些包是会溜过去的,即使你用了DROP策略。
8  离开接口(比如:eth0)
9  在线路上传输(比如:Internet)


2.1.3转发包

Step(步骤)Table(表)Chain(链)Comment(注释)
1  在线路上传输(比如:Internet)
2  进入接口(比如:eth0)
3manglePREROUTING此链mangle数据包
4natPREROUTING此链主要用来做DNAT,不要在此链上进行过滤操作。稍后会做SNAT
5  路由判断。比如:包发往本地或转发。
6mangleFORWARD包继续被发送至mangle表的FORWARD链,这是非常特殊的情况才会用到的。在这里,包被mangle,而这次mangle发生在最初的路由判断之后,和最后一次更改包的目的之前。(就是下面的FORWARD链所做的,因其过滤功能,可能会改变一些包的目的地,如丢弃包。)
7filterFORWARD包继续被发送至这条FORWARD链。只有需要转发的包才会走到这里,并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,不管是内网的还是外网的。自己在书写规则时,需要考虑这点。
8manglePOSTROUTING此链也是针对一些特殊类型的包。这一步mangle是在所有更改包的目的地址操作完成之后的,但包此时还是本地上。
9natPOSTROUTING此链是用来做SNAT,当然也包括Masquerade(伪装)。但不要在这做过滤。
10  离开接口(比如:eth0)
11  又在线路上传输了。

现在,我们来看看在以上三种情况下,用到了哪些不同的链。图示如下:

要弄清楚上面的图,可以这样考虑。在第一个路由判断处,不是发往本地的包,我们会发送它穿过FORWARD链。若包的目的地是本地监听的IP地址,我们就会发送这个包穿过INPUT链,最后到达本地。

值得注意的是,在做NAT的过程中,发往本机的包的目的地址可能会在PREROUTING链里被改变。这个操作发生在第一次路由之前,所以地址被改变之后,才能对包进行路由。

注意,所有的包都会经过上图中的某一条路径。如果你把一个包DNAT回它原来的网络,这个包会继续走完相应路径上剩下的链,直到它被发送回原来的网络。

igz

2.2概述

2.2.1 mangle表

这个表主要用来mangle包,你可以使用mangle匹配来改变包的TOS等特性。强烈建议你不要在这个表里做任何过滤,不管是DNAT,SNAT或Masquerade。

以下是mangle表中仅有的几种操作:

  • TOS :此操作用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。注意这个操作并不完善,有时得不所愿。它在Internet上还不能使用,而且很多路由器不会注意到这个域值。换句话说,不要设置发往Internet的包,除非你打算依靠TOS来路由,比如用iproute2。
  • TTL :此操作用来改变数据包的生存时间域,我们可以让所有数据包只有一个特殊的TTL。它的存在有一个很好的理由,那就是我们可以欺骗一些ISP(互联网提供商)。为什么要欺骗他们呢?因为他们不愿意让我们共享一个链接。那些ISP会查找一台单独的计算机是否使用不同的TTL,并且以此作为判断连接是否被共享的标志。
  • MARK :此操作用来给包设置特殊的标记。iproute2能识别这些标记,并根据不同的标记(或没有标记)决定不同的路由。用这些标记我们可以做带宽限制和基于请求的分类。

2.2.2 nat表

此表仅用于NAT,也就是转换包的源或目标地址。注意,就像我们前面说过的,只有流的第一个包会被这个链匹配,其后的包会自动被做相同的处理。实际的操作分为以下几类:

  • DNAT :此操作主要用在这样一种情况,你有一个合法的IP地址,要把对防火墙的访问重定向到其他的机子上(比如:DMZ)。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。
  • SNAT :此操作改变包的源地址,这在极大程度上可以隐藏你的本地网络或者DMZ等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙就能自动地对包做SNAT或De-SNAT(反向的SNAT),以使LAN能连接到Internet,如果使用类似192.168.0.0/24这样的地址,是不会从Internet得到任何回应的。因为IANA定义这些网络为私有的,只能用于LAN内部。
  • MASQUERADE :此操作对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不像SNAT用的IP地址是配置好的。当然这也有好处,就是我们可以使用通过PPP、PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

2.2.3 filter表

filter表用来过滤数据包,我们可以在任何时候匹配包并过滤他们。我们就是在这里根据包的内容对包做DROP或ACCEPT的。当然,我们也可以预先在其他地方做些过滤,但是这个表才是设计用来过滤的。几乎所有的target都可以在这儿使用。大量具体的介绍在后面,现在只要知道过滤工作主要是在这儿完成的就行。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值