📄 iptables 指南 1_1_19.htm
字号:
<DT>I.5. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#INCLUDE.FLUSHIPTABLES">rc.flush-iptables脚本代码</A>
<DT>I.6. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#INCLUDE.TESTTABLES">rc.test-iptables脚本代码</A></DT></DL></DD></DL></DIV>
<DIV class=LOT>
<DL class=LOT>
<DT><B>List of Tables</B>
<DT>3-1. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.DESTINATIONLOCALHOST">以本地为目标(就是我们自己的机子了)的包</A>
<DT>3-2. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.SOURCELOCALHOST">以本地为源的包</A>
<DT>3-3. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.FORWARDEDPACKETS">被转发的包</A>
<DT>4-1. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.USERLANDSTATES">数据包在用户空间的状态</A>
<DT>4-2. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.INTERNALSTATES">内部状态</A>
<DT>6-1. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.TABLES">Tables</A>
<DT>6-2. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.COMMANDS">Commands</A>
<DT>6-3. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.OPTIONS">Options</A>
<DT>6-4. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.GENERICMATCHES">Generic
matches</A>
<DT>6-5. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.TCPMATCHES">TCP
matches</A>
<DT>6-6. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.UDPMATCHES">UDP
matches</A>
<DT>6-7. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.ICMPMATCHES">ICMP
matches</A>
<DT>6-8. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.LIMITMATCH">Limit
match options</A>
<DT>6-9. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.MACMATCH">MAC
match options</A>
<DT>6-10. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.MARKMATCH">Mark
match options</A>
<DT>6-11. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.MULTIPORTMATCH">Multiport
match options</A>
<DT>6-12. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.OWNERMATCH">Owner
match options</A>
<DT>6-13. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.STATEMATCHES">State
matches</A>
<DT>6-14. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.TOSMATCHES">TOS
matches</A>
<DT>6-15. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.TTLMATCHES">TTL
matches</A>
<DT>6-16. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.DNATTARGET">DNAT
target</A>
<DT>6-17. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.LOGTARGET">LOG
target options</A>
<DT>6-18. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.MARKTARGET">MARK
target options</A>
<DT>6-19. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.MASQUERADETARGET">MASQUERADE
target</A>
<DT>6-20. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.REDIRECTTARGET">REDIRECT
target</A>
<DT>6-21. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.REJECTTARGET">REJECT
target</A>
<DT>6-22. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.SNATTARGET">SNAT
target</A>
<DT>6-23. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.TOSTARGET">TOS
target</A>
<DT>6-24. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.TTLTARGET">TTL
target</A>
<DT>6-25. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.ULOGTARGET">ULOG
target</A>
<DT>C-1. <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#TABLE.ICMPTYPES">ICMP类型</A></DT></DL></DIV>
<DIV class=PREFACE>
<HR>
<H1><A name=prelude>译者序</A></H1>
<P>译者sllscn是<A href="http://www.linuxfans.org/"
target=_top>中国Linux公社</A>里的“Linux
新鲜社员”,一个Linux爱好者,在实际工作中使用iptables构造防火墙时,发现有关iptables的中文资料太少,故而不得已参考英文版的材料。为了今后参考的方便,也为了广大使用者,不怕自己的英文水平太差,翻着字典翻译了本文。翻译只为了能看懂,达不到“好看”,勿怪!</P>
<P>第一章序言部分除了第三小节介绍的术语要看看,其他都没什么。第二章对想要亲自编译iptables的兄弟们是有些帮助的。第三、第四两章可以使我们理解、掌握iptables工作方式和流程。第五章和第六章是iptables命令使用方法的详细介绍。第七章与第八章是实例讲解,对我们编写自己的规则很有指导意义的,强烈建议你看一看。附录里有一些资源链接是很好的,相信你一定会喜欢。</P>
<P>因为术语的缘故,目录部分有一些未翻译,但正文的内容都翻译了。附录F是本文的更新历史,附录G是GNU Free Documentation
License,附录H是GNU General Public License,它们对理解 iptables没有什么作用,故未翻译。</P>
<P>在阅读本文时,你可能会发现有重复的地方,这不是原作者的水平不高,反而恰恰是他为我们考虑的结果。你可以把这篇文章的任何一章抽出来阅读,而不需要反复地参照其他章节。在此,再次向作者表示敬意!</P>
<P>因译者水平有限,对原文的理解不敢保证完全正确,如有意见或建议,可以联系译者slcl@sohu.com</P>
<P><B>郑重声明:翻译得到了原文作者Oskar
Andreasson的许可。对于本文(不是原文),可自由使用、修改、传播、转载,但对以盈利为目的使用,保留所有权利。</B></P></< DIV>
<DIV class=PREFACE>
<HR>
<H1><A name=ABOUTTHEAUTHOR>关于作者</A></H1>
<P>我的局域网里有很多“年老的”计算机,他们也想连接到Internet上,还要保证安全。做到这一点,
iptables是的ipchains的一个很好的升级。使用ipchains你可以通过丢弃所有“目的端口不是特定端口”
的包来建立一个安全的网络。但这将导致一些服务出现问题,比如被动FTP,还有在IRC中流出的DCC。它们在服务器上分配端口,并告知客户端,然后再让客户连接。
但是,iptables的代码中也有一些小毛病,在某些方面我发现这些代码并没有为作为完整的产品发布做好准备,但我仍然建议使用ipchains或更老的
ipfwadm 的人们进行升级,除非他们对正在使用的代码满意,或它们足以满足他们的需要。</P></< DIV>
<DIV class=PREFACE>
<HR>
<H1><A name=HOWTOREAD>如何阅读</A></H1>
<P>本文介绍了iptables,以便你可以领会iptables的精彩,文中不包含iptables或Netfilter在安全方面的
bug。如果你发现iptables(或其组成部分)任何bug或特殊的行为,请联系Netfilter mailing lists
,他们会告诉你那是否是bug或如何解决。iptables或Netfilter中几乎没有安全方面的bug,当然偶尔也会出些问题,它们能在<A
href="http://www.netfilter.org/" target=_top>Netfilter主页</A>中找到。</P>
<P>文中用到的脚本不能解决Netfilter内部的bug,给出它们,只是为了演示如何构造规则,以便我们能解决遇到的数据流管理问题。但本文没有包括象“如何关闭HTTP端口,因为Apache
1.2.12偶尔会被攻击” 这样的问题。本指南会告诉你如何通过iptables关闭HTTP端口,但不是因为Apache偶尔会被攻击。 </P>
<P>本文适合于初学者,但也尽可能完善。因为有太多的targets或matches,所以没有完全收录。如果你需要这方面的信息,可以访问<A
href="http://www.netfilter.org/" target=_top>Netfilter主页</A>。 </P></DIV>
<DIV class=PREFACE>
<HR>
<H1><A name=PREREQUISITES>必备知识</A></H1>
<P>阅读本文,要具备一些基础知识,如Linux/Unix,shell脚本编写,内核编译,最好还有一些简单的内核知识。 </P>
<P>我尝试着尽可能使读者不需要这些知识也能完全弄懂这篇文章,但要理解扩展部分是不行的。所以还是要有点基础的:)</P></DIV>
<DIV class=PREFACE>
<HR>
<H1><A name=CONVENTIONSUSED>本文约定</A></H1>
<P>以下的约定会在文中用到: </P>
<P></P>
<UL>
<LI style="LIST-STYLE-TYPE: disc">
<P>代码和命令输出使用定宽字体,命令用粗体。</P><PRE class=SCREEN>[blueflux@work1 neigh]$ <B class=COMMAND>ls</B>
default eth0 lo
[blueflux@work1 neigh]$
</PRE>
<LI style="LIST-STYLE-TYPE: disc">
<P>所有的命令和程序名都用粗体。 </P>
<LI style="LIST-STYLE-TYPE: disc">
<P>所有的系统部件,如硬件、内核部件、loopback使用<I><I>斜体</I></I>。 </P>
<LI style="LIST-STYLE-TYPE: disc">
<P>计算机文本输出用 <TT class=COMPUTEROUTPUT>这种字体</TT>。 </P>
<LI style="LIST-STYLE-TYPE: disc">
<P>文件名和路径名象这样 <TT class=FILENAME>/usr/local/bin/iptables</TT> 。
</P></LI></UL></DIV>
<DIV class=CHAPTER>
<HR>
<H1><A name=INTRODUCTION>1. 序言</A></H1>
<DIV class=SECTION>
<H1 class=SECTION><A name=WHYTHISDOCUMENT>1.1. 为什么要写这个指南</A></H1>
<P>我发现目前所有的HOWTO都缺乏Linux 2.4.x 内核中的Iptables和Netfilter
函数的信息,于是我试图回答一些问题,比如状态匹配。我会用插图和例子 <A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#RCFIREWALLTXT"><I>rc.firewall.txt</I></A>
加以说明,此处的例子可以在你的<TT
class=FILENAME>/etc/rc.d/</TT>使用。最初这篇文章是以HOWTO文档的形式书写的,因为许多人只接受HOWTO文档。</P>
<P>还有一个小脚本<A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#RCFLUSH-IPTABLESTXT"><I>rc.flush-iptables.txt</I></A>,我写它只是为使你在配置它的时候能象我一样有成功的感觉。</P></DIV>
<DIV class=SECTION>
<HR>
<H1 class=SECTION><A name=HOWITWAS>1.2. 指南是如何写的 </A></H1>
<P>我请教了Marc Boucher 及netfilter团队的其他核心成员。对他们的工作以及对我在为boingworld.com
书写这个指南时的帮助表示极大的谢意,现在这个指南在我自己的站点frozentux.net上进行维护。这个文档将一步一步教你setup过程,让你对iptables包有更多的了解。这大部分的东西都基于例子rc.firewall
文件,因为我发现这是学习iptables的一个好方法。我决定自顶向下地跟随rc.firewall 文件来学习
iptables。虽然这样会困难一些,但更有逻辑。当你碰到不懂的东西时再来查看这个文件。 </P></DIV>
<DIV class=SECTION>
<HR>
<H1 class=SECTION><A name=TERMSUSED>1.3. 文中出现的术语</A></H1>
<P>文中包含了一些术语,你应该有所了解。这里有一些解释,并说明了本文中如何使用它们。</P>
<P>DNAT - Destination Network Address Translation 目的网络地址转换。 DNAT是一种改变数据包目的
ip地址的技术,经常和SNAT联用,以使多台服务器能共享一个ip地址连入Internet,并且继续服务。通过对同一个ip地址分配不同的端口,来决定数据的流向。
</P>
<P>Stream - 流
是指发送和接收的数据包和通信的双方都有关系的一种连接(译者注:本文中,作者把连接看作是单向的,流表示双向的连接)。一般的,这个词用于描述在两个方向上发送两个或三个数据包的连接。对于TCP,流意味着连接,它发送了一个SYN,然后又回复SYN/ACK。但也可能是指这样的连接,发送一个SYN,回复ICMP主机不可达信息。换句话说,我使用这个词很随意。</P>
<P>SNAT - Source Network Address
Translation源网络地址转换。这是一种改变数据包源ip地址的技术,经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解决这个问题。</P>
<P>State - 状态 指明数据包处于什么状态。状态在<A
href="http://1842.net/iptables/iptables-tutorial%201-1-19.html#RFC793"><I>RFC
793 - Transmission Control
Protocol</I></A>中定义,或由用户在Netfilter/iptables中自定义。需要注意的是Netfilter设定了一些关于连接和数据包的状态,但没有完全使用使用RFC
793的定义。</P>
<P>User space - 用户空间,指在内核外部或发生在内核外部的任何东西。例如,调用 <B class=COMMAND>iptables -h</B>
发生在内核外部,但<B class=COMMAND>iptables -A FORWARD -p tcp -j ACCEPT</B>
(部分地)发生在内核内部,因为一条新的规则加入了规则集。 </P>
<P>Kernel space - 内核空间 ,与用户空间相对,指那些发生在内核内部。</P>
<P>Userland - 参见用户空间 </P>
<P>target - 这个词在后文中有大量的应用,它表示对匹配的数据包所做的操作。</P></DIV></DIV>
<DIV class=CHAPTER>
<HR>
<H1><A name=PREPARATIONS>2. 准备阶段</A></H1>
<P>这一章是学习iptables的开始,它将帮助你理解Netfilter和<B
class=COMMAND>iptables</B>在Linux中扮演的角色。它会告诉你如何配置、安装防火墙,你的经验也会随之增长。当然,要想达到你的目标,是要花费时间,还要有毅力。(
译者注:听起来很吓人的:) )</P>
<DIV class=SECTION>
<HR>
<H1 class=SECTION><A name=WHERETOGET>2.1. 哪里能取得iptables </A></H1>
<P><B class=COMMAND>iptables</B> 可以从<A
href="http://www.netfilter.org/"><I>www.netfilter.org
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -