<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[iptables的基本概念和数据包流程图 ]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sun, 12 Jun 2011 23:20:02 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	iptables 基本概念<br/><br/>匹配（match）：符合指定的条件，比如指定的 IP 地址和端口。<br/>丢弃（drop）：当一个包到达时，简单地丢弃，不做其它任何处理。<br/>接受（accept）：和丢弃相反，接受这个包，让这个包通过。<br/>拒绝（reject）：和丢弃相似，但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定，也可以自动产生。<br/>目标（target）：指定的动作，说明如何处理一个包，比如：丢弃，接受，或拒绝。<br/>跳转（jump）：和目标类似，不过它指定的不是一个具体的动作，而是另一个链，表示要跳转到那个链上。<br/>规则（rule）：一个或多个匹配及其对应的目标。<br/>链（chain）：每条链都包含有一系列的规则，这些规则会被依次应用到每个遍历该链的数据包上。每个链都有各自专门的用途， 这一点我们下面会详细讨论。<br/>表（table）：每个表包含有若干个不同的链，比如 filter 表默认包含有 INPUT，FORWARD，OUTPUT 三个链。iptables有四个表，分别是：raw，nat，mangle和filter，每个表都有自己专门的用处，比如最常用filter表就是专门用来做包过滤的，而 nat 表是专门用来做NAT的。<br/>策略（police）：我们在这里提到的策略是指，对于 iptables 中某条链，当所有规则都匹配不成功时其默认的处理动作。<br/>连接跟踪（connection track）：又称为动态过滤，可以根据指定连接的状态进行一些适当的过滤，是一个很强大的功能，但同时也比较消耗内存资源。<br/><br/><br/>经过iptables的数据包的流程介绍<br/><br/>一个数据包到达时,是怎么依次穿过各个链和表的（图）。<br/><a href="http://www.dzhope.com/attachment.php?fid=63" target="_blank"><img src="http://www.dzhope.com/attachment.php?fid=63" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>基本步骤如下：<br/>1. 数据包到达网络接口，比如 eth0。<br/>2. 进入 raw 表的 PREROUTING 链，这个链的作用是赶在连接跟踪之前处理数据包。<br/>3. 如果进行了连接跟踪，在此处理。<br/>4. 进入 mangle 表的 PREROUTING 链，在此可以修改数据包，比如 TOS 等。<br/>5. 进入 nat 表的 PREROUTING 链，可以在此做DNAT，但不要做过滤。<br/>6. 决定路由，看是交给本地主机还是转发给其它主机。<br/><br/>到了这里我们就得分两种不同的情况进行讨论了，一种情况就是数据包要转发给其它主机，这时候它会依次经过：<br/>7. 进入 mangle 表的 FORWARD 链，这里也比较特殊，这是在第一次路由决定之后，在进行最后的路由决定之前，我们仍然可以对数据包进行某些修改。<br/>8. 进入 filter 表的 FORWARD 链，在这里我们可以对所有转发的数据包进行过滤。需要注意的是：经过这里的数据包是转发的，方向是双向的。<br/>9. 进入 mangle 表的 POSTROUTING 链，到这里已经做完了所有的路由决定，但数据包仍然在本地主机，我们还可以进行某些修改。<br/>10. 进入 nat 表的 POSTROUTING 链，在这里一般都是用来做 SNAT ，不要在这里进行过滤。<br/>11. 进入出去的网络接口。完毕。<br/><br/>另一种情况是，数据包就是发给本地主机的，那么它会依次穿过：<br/>7. 进入 mangle 表的 INPUT 链，这里是在路由之后，交由本地主机之前，我们也可以进行一些相应的修改。<br/>8. 进入 filter 表的 INPUT 链，在这里我们可以对流入的所有数据包进行过滤，无论它来自哪个网络接口。<br/>9. 交给本地主机的应用程序进行处理。<br/>10. 处理完毕后进行路由决定，看该往那里发出。<br/>11. 进入 raw 表的 OUTPUT 链，这里是在连接跟踪处理本地的数据包之前。<br/>12. 连接跟踪对本地的数据包进行处理。<br/>13. 进入 mangle 表的 OUTPUT 链，在这里我们可以修改数据包，但不要做过滤。<br/>14. 进入 nat 表的 OUTPUT 链，可以对防火墙自己发出的数据做 NAT 。<br/>15. 再次进行路由决定。<br/>16. 进入 filter 表的 OUTPUT 链，可以对本地出去的数据包进行过滤。<br/>17. 进入 mangle 表的 POSTROUTING 链，同上一种情况的第9步。注意，这里不光对经过防火墙的数据包进行处理，还对防火墙自己产生的数据包进行处理。<br/>18. 进入 nat 表的 POSTROUTING 链，同上一种情况的第10步。<br/>19. 进入出去的网络接口。完毕。<br/><br/><br/>Tags - <a href="http://www.dzhope.com/tags/iptables/" rel="tag">iptables</a> , <a href="http://www.dzhope.com/tags/%25E5%259F%25BA%25E6%259C%25AC%25E6%25A6%2582%25E5%25BF%25B5/" rel="tag">基本概念</a> , <a href="http://www.dzhope.com/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%258C%2585/" rel="tag">数据包</a> , <a href="http://www.dzhope.com/tags/%25E6%25B5%2581%25E7%25A8%258B%25E5%259B%25BE./" rel="tag">流程图.</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] iptables的基本概念和数据包流程图 ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>