五链三表
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 ,直接把数据转发给网关
转载于:https://blog.51cto.com/alvin1/1122813