iptables的工作原理和案例应用

五链三表
 
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 
   

绘图1.jpg


案例一, 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)  

局域网代理 防火墙.jpg


 
案例二,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 ------>
转发出去

网站防火墙.jpg


案例三,防火墙本身是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 ,直接把数据转发给网关

 

 

 

你可能感兴趣的:(iptables,工作原理,案例应用)