您的位置:首页 > 其它

iptables的工作原理和案例应用

2013-01-20 16:16 239 查看
五链三表

1, 五条iptables 规则链: 1,PREROUTING: 路由前数据包位置 主要是要 DNAT

2,FORWARD: 进入非防火墙本机的数据包要经过的位置 主要是要 filter

3,POSTROUTING: 数据包出去之前路由之后时位置 主要是做 SNAT

4,INPUT: 数据包进入防火墙本机的数据包是位置 主要是filter

运维联盟论坛原创文档 http://bbs. ywlm.net

5,OUTPUT: 数据包从防火墙本机外出( 到局域网或外网) 的数据包位置 主要

是filter 注意: OUTPUT 是指源地址是防火墙本机的时候才能说是OUTPUT

2, 三张iptables 表: 1,filter: 主要在 INPUT FORWARD OUTPUT 链位置作用

2,nat(snat 和dnat): 主要在 PREROUTING POSTROUTING OUTPUT 链位置

作用

3,mangle: 主要在 PREROUTING POSTROUTING INPUT OUTPUT

FORWARD 链位置作用

3, 五链, 三表, 规则三者之间的关系: 1), 特定的表作用在特定的链的位置上, 数据包经过特定

的链位置才受到表及规则限制

2),表由规则组成

4, 三表详细解:

4.1 mangle :

TTL(生存周期,每经过一个路由器将减 1.mangle 可以修改此值设定 TTL 要被增加的值,比

如-- ttl -inc 4。假设一个进来的包的TTL 是53 ,那么当它离开我们这台机子时,TTL 应是多

少呢?答案是56,原因同-- ttl -dec。使用这个选项可以使我们的防火墙更加隐蔽,而不被

trace -routes 发现,方法就是设置-- ttl -inc 1 。原因应该很简单了,包每经过一个设备,TTL 就

要自动减1 ,但在我们的防火墙里这个1 又被补上了,也就是说,TTL 的值没变,那么

trace -routes 就会认为我们的防火墙是不存在的)

MARK(特殊标记,用来做高级路由

用来设置mark值,这个值只能在本地的 mangle 表里使用,不能用在其他任何地方,就更不

用说路由器或另一台机子了。因为mark比较特殊,它不是包本身的一部分,而是在包穿越

计算机的过程中由内核分配的和它相关联的一个字段。它可以和本地的高级路由功能联用,

以使不同的包能使用不同的队列要求,等等。)

TOS(服务类型,根据不同的服务质量。来选择经过路由的路径。1 、Minimize -Delay 16 (0x10),

要求找一条路径使延时最小,一些标准服务如telnet、SSH 、FTP - control 就需要这个选项。

2 、Maximize-Throughput 8 (0x0,要求找一条路径能使吞吐量最大,标准服务 FTP -data 能用

到这个。

3 、Maximize-Reliability 4 (0x04) ,要求找一条路径能使可靠性最高,使用它的有 BOOTP和

TFTP。

4 、Minimize-Cost 2 (0x02) ,要求找一条路径能使费用最低,一般情况下使用这个选项的是

运维联盟论坛原创文档 http://bbs. ywlm.net

一些视频音频流协议,如RTSP(Real Time Stream Control Protocol)。

5 、Normal-Service 0 (0x00) ,一般服务,没有什么特殊要求。这个值也是大部分包的缺省值。)

这个表主要用来mangle 包,你可以使用mangle 匹配来改变包的TOS 等特性。

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

TOS

TTL

MARK

TOS

操作用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。

注意这个操作并不完善,有时得不所愿。它在 Internet 上还不能使用,而且很多路由器不会

注意到这个域值。换句话说,不要设置发往 Internet 的包,除非你打算依靠 TOS 来路由,比

如用iproute2 。

TTL

操作用来改变数据包的生存时间域,我们可以让所有数据包只有一个特殊的TTL 。它的存

在有一个很好的理由,那就是我们可以欺骗一些 ISP 。为什么要欺骗他们呢?因为他们不愿

意让我们共享一个连接。那些 ISP 会查找一台单独的计算机是否使用不同的TTL ,并且以此

作为判断连接是否被共享的标志。

MARK

用来给包设置特殊的标记。iproute2 能识别这些标记,并根据不同的标记(或没有标

记)决定不同的路由。用这些标记我们可以做带宽限制和基于请求的分类。

4.2 nat 表

此表仅用于N AT ,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的

第一

个包会被这个链匹配,其后的包会自动被做相同的处理。实际的操作分为以下几类:

󲐀 DNAT

󲐀 SNAT

󲐀 MASQUERADE

DNAT 操作主要用在这样一种情况,你有一个合法的IP 地址,要把对防火墙的访问重定向

到其

他的机子上(比如DMZ)。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。

SNAT 改变包的源地址,这在极大程度上可以隐藏你的本地网络或者DMZ等。一个很好的

例子是

我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙

就能自动地对包做SNAT 和De-SNAT( 就是反向的SNAT),以使LAN能连接到Internet。如果

使用类

似 192.168.0.0/24这样的地址,是不会从 Internet 得到任何回应的。因为IANA 定义这些网

运维联盟论坛原创文档 http://bbs. ywlm.net



(还有其他的)为私有的,只能用于LAN内部。

强烈建议你不要在这个表里做任何过滤,不管是DANT ,S N AT 或者Masquerade。

MASQUERADE 的作用和MASQUERADE 完全一样,只是计算机的负荷稍微多一点。因为

对每个匹配

的包,MASQUERADE 都要查找可用的IP 地址,而不象 SNAT 用的IP 地址是配置好的。当

然,这也

有好处,就是我们可以使用通过 PPP 、 PPPOE 、SLIP等拨号得到的地址,这些地址可是由

ISP

的DHCP 随机分配的。

4.3, Filter 表

filter 表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。我们就是在这里根据包

的内容对包做DROP 或ACCEPT 的。当然,我们也可以预先在其他地方做些过滤,但是这

个表才

是设计用来过滤的。几乎所有的 target 都可以在这儿使用。大量具体的介绍在后面,现在你

只要知道过滤工作主要是在这儿完成的就行了。

5, 三表五链工作过程

架构详解:

运维联盟论坛原创文档 http://bbs. ywlm.net



案例一, WAN(外网络)访问 DMZ区的服务器, 外网用户输入 eth0 的公网IP 117.34.70.22

1, 数据进来时的处理过程:

数据包------ >eth0------ > 被PREROUTING 进行mangle 处理------> 被

PREROUTING 进行D N AT 处理( 即 iptables –t nat –A PREROUTING –p tcp –dport 80 -i eth0 –j

DNAT -- to 192.168.10.10:80 )

------>IP 协议栈检查信息包的头信息,看被 N AT 后的数据包要去哪里( 目的地址)

------> 知道要去 DMZ区的192.168.10.10 后,交给FORWARD 链进行mangle 处



运维联盟论坛原创文档 http://bbs. ywlm.net

------> 继续在 FORWARD 链进行filter 处理------ > 根据路由表进行路由到eth1 ------>

转发出去

总结:

data ->eth0->PRETOUTING(mangle)- >PREROUTING(DNAT)- >FORWARD(mangl

e) - >FORWARD(filter)->route

2,数据返回时的处理过程:

回应数据包------>eth1------ > 交由PREROUTING(mangle) 处理

------>IP 协议栈检查包的头信息( 注意此时目的地址无需转换,因此无需交给

PREROUTING( D N AT ) 链处理) ------> 知道要去往外网,交给FORWARD 链进行

mangle 处理------> 继续在 FORWARD 链进行filter 处理------ > 根据路由表进行路由

到eth0 ------ > 交由POSTROUTING 进行mangle 处理------ > 继续在POSTROUTING

链进行S N AT 处理即( iptables –t nat –A POSTROUTING –p tcp –dport 80 –o eth1 –s 192.168.10.0/24 –j

S N AT -- to 117.34.70.22)----- -> 转发出去

总结:

Data- >eth1->FORWARD(mangle)->FORWARD(filter)- >route - >POSTROUTING(M

ANGLE)- >POSTROUTING(SNAT)



案例二,LAN访问外网web 服务

运维联盟论坛原创文档 http://bbs. ywlm.net

1,数据出去的处理过程:

数据包------>eth2 ------ >

ip 协议栈检查包头信息( 注意此时目的地址无需转换,因此无需交给

PREROUTING( D N AT ) 链处理) ------> 知道要去外网,交给 FORWARD 链进行

mangle 处理------> 继续在 FORWA R D 链进行filter 处理------ > 根据路由表进行路由

到eth0 ------ > 交由POSTROUTING 进行mangle 处理------ > 继续在POSTROUTING

链进行S N AT 处理即( iptables –t nat –A POSTROUTING –p tcp –dport 80 –o eth1 –s 192.168.10.0/24 –j

S N AT -- to 117.34.70.22)------ > 转发出去

2,数据返回时的处理过程

数据包------ >eth0------ > 被PREROUTIN G 进行mangle 处理------> 被

PREROUTING 进行D N AT 处理

------>IP 协议栈检查信息包的头信息,看被 N AT 后的数据包要去哪里( 目的地址)

------> 知道要去 DMZ区的192.168.10.10 后,交给FORWARD 链进行mangle 处



------> 继续在 FORWARD 链进行filter 处理------ > 根据路由表进行路由到 eth3 ------>

转发出去



案例三,防火墙本身是web

1, 请求数据进来时的处理过程:

运维联盟论坛原创文档 http://bbs. ywlm.net

数据包----- ->eth0------ >交由PREROU TING(mangle)处理

------> 由于是固定公网 IP 无需经过N AT ,因此无需经过PREROUTING(NAT) 阶

段,因此交由 INPUT 进行mangle 处理------ > 继续在INPUT 进行filter 处理------ >

交由web 程序处理

2, 回复数据出去时的处理过程

数据包------>eth0------ >交由OUTPUT 进行mangle 处理------ > 交由 OUTPUT 进行

filter

处理------>交由POSTROUTING 进行mangle 处理------ > 发给网关

注意,这里没有NAT这个过程,因为本身有公网IP ,直接把数据转发给网关



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: