Iptables 指南

Oskar Andreasson

     oan@frozentux.net

Copyright © 2001-2003 by Oskar Andreasson

本文在符合 GNU Free Documentation 许可版本1.1的条件下,可以拷贝、分发、更改,但必须保留绪言和所有的章节,如印刷成书,封面要包括“原著:Oskar Andreasson”,且书背不准有文字。本文附录有 “GNU Free Documentation License”的详细内容。文中的所有脚本均置于GNU General Public License版本2下,可以自由地分发、更改。给出这些脚本是希望它们有所作用,但没有任何保证,也没有商业可用性或某些特殊用途的内在保证。参见GNU General Public License

本文附带一份GNU General Public License,在章节“GNU Free Documentation License”中,如没有,请联系the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- 1307 USA

献辞

首先,我要把本文献给我那wonderful的女友Ninel(她给我的帮助远远胜过我给她的):希望我能让你幸福,就象你给我的。( 译者注:我没有想到合适的词能表达作者女友的wonderful,你就自己想去吧。还有,不知他们现在是否结婚了:) )

其次,我要把这篇文章献给所有Linux的开发者和维护者,就是他们完成了令人无法相信的艰难工作,使这么优秀的操作系统成为可能。

目录
译者序
关于作者
如何阅读
必备知识
本文约定
1. 序言
1.1. 为什么要写这个指南
1.2. 指南是如何写的
1.3. 文中出现的术语
2. 准备阶段
2.1. 哪里能取得iptables
2.2. 内核配置
2.3. 编译与安装
2.3.1. 编译
2.3.2. 在Red Hat 7.1上安装
3. 表和链
3.1. 概述
3.2. mangle 表
3.3. nat 表
3.4. Filter 表
4. 状态机制
4.1. 概述
4.2. conntrack记录
4.3. 数据包在用户空间的状态
4.4. TCP 连接
4.5. UDP 连接
4.6. ICMP 连接
4.7. 缺省的连接操作
4.8. 复杂协议和连接跟踪
5. 保存和恢复数据管理规则
5.1. 速度
5.2. restore的不足之处
5.3. iptables-save
5.4. iptables-restore
6. 规则是如何练成的
6.1. 基础
6.2. Tables
6.3. Commands
6.4. Matches
6.4.1. 通用匹配
6.4.2. 隐含匹配
6.4.3. 显式匹配
6.4.4. 针对非正常包的匹配
6.5. Targets/Jumps
6.5.1. ACCEPT target
6.5.2. DNAT target
6.5.3. DROP target
6.5.4. LOG target
6.5.5. MARK target
6.5.6. MASQUERADE target
6.5.7. MIRROR target
6.5.8. QUEUE target
6.5.9. REDIRECT target
6.5.10. REJECT target
6.5.11. RETURN target
6.5.12. SNAT target
6.5.13. TOS target
6.5.14. TTL target
6.5.15. ULOG target
7. 防火墙配置实例 rc.firewall
7.1. 关于rc.firewall
7.2. rc.firewall详解
7.2.1. 参数配置
7.2.2. 外部模块的装载
7.2.3. proc的设置
7.2.4. 规则位置的优化
7.2.5. 缺省策略的设置
7.2.6. 自定义链的设置
7.2.7. INPUT链
7.2.8. FORWARD链
7.2.9. OUTPUT链
7.2.10. PREROUTING链
7.2.11. POSTROUTING链
8. 例子简介
8.1. rc.firewall.txt脚本的结构
8.1.1. 脚本结构
8.2. rc.firewall.txt
8.3. rc.DMZ.firewall.txt
8.4. rc.DHCP.firewall.txt
8.5. rc.UTIN.firewall.txt
8.6. rc.test-iptables.txt
8.7. rc.flush-iptables.txt
8.8. Limit-match.txt
8.9. Pid-owner.txt
8.10. Sid-owner.txt
8.11. Ttl-inc.txt
8.12. Iptables-save ruleset
A. 常用命令详解
A.1. 查看当前规则集的命令
A.2. 修正和清空iptables的命令
B. 常见问题于与解答
B.1. 模块装载问题
B.2. 未设置SYN的NEW状态包
B.3. NEW状态的SYN/ACK包
B.4. 使用私有IP地址的ISP
B.5. 放行DHCP数据
B.6. 关于mIRC DCC的问题
C. ICMP类型
D. 其他资源和链接
E. 鸣谢
F. History
G. GNU Free Documentation License
0. PREAMBLE
1. APPLICABILITY AND DEFINITIONS
2. VERBATIM COPYING
3. COPYING IN QUANTITY
4. MODIFICATIONS
5. COMBINING DOCUMENTS
6. COLLECTIONS OF DOCUMENTS
7. AGGREGATION WITH INDEPENDENT WORKS
8. TRANSLATION
9. TERMINATION
10. FUTURE REVISIONS OF THIS LICENSE
How to use this License for your documents
H. GNU General Public License
0. Preamble
1. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
2. How to Apply These Terms to Your New Programs
I. 示例脚本的代码
I.1. rc.firewall脚本代码
I.2. rc.DMZ.firewall脚本代码
I.3. rc.UTIN.firewall脚本代码
I.4. rc.DHCP.firewall脚本代码
I.5. rc.flush-iptables脚本代码
I.6. rc.test-iptables脚本代码
List of Tables
3-1. 以本地为目标(就是我们自己的机子了)的包
3-2. 以本地为源的包
3-3. 被转发的包
4-1. 数据包在用户空间的状态
4-2. 内部状态
6-1. Tables
6-2. Commands
6-3. Options
6-4. Generic matches
6-5. TCP matches
6-6. UDP matches
6-7. ICMP matches
6-8. Limit match options
6-9. MAC match options
6-10. Mark match options
6-11. Multiport match options
6-12. Owner match options
6-13. State matches
6-14. TOS matches
6-15. TTL matches
6-16. DNAT target
6-17. LOG target options
6-18. MARK target options
6-19. MASQUERADE target
6-20. REDIRECT target
6-21. REJECT target
6-22. SNAT target
6-23. TOS target
6-24. TTL target
6-25. ULOG target
C-1. ICMP类型

译者序

译者sllscn是中国Linux公社里的“Linux 新鲜社员”,一个Linux爱好者,在实际工作中使用iptables构造防火墙时,发现有关iptables的中文资料太少,故而不得已参考英文版的材料。为了今后参考的方便,也为了广大使用者,不怕自己的英文水平太差,翻着字典翻译了本文。翻译只为了能看懂,达不到“好看”,勿怪!

第一章序言部分除了第三小节介绍的术语要看看,其他都没什么。第二章对想要亲自编译iptables的兄弟们是有些帮助的。第三、第四两章可以使我们理解、掌握iptables工作方式和流程。第五章和第六章是iptables命令使用方法的详细介绍。第七章与第八章是实例讲解,对我们编写自己的规则很有指导意义的,强烈建议你看一看。附录里有一些资源链接是很好的,相信你一定会喜欢。

因为术语的缘故,目录部分有一些未翻译,但正文的内容都翻译了。附录F是本文的更新历史,附录G是GNU Free Documentation License,附录H是GNU General Public License,它们对理解 iptables没有什么作用,故未翻译。

在阅读本文时,你可能会发现有重复的地方,这不是原作者的水平不高,反而恰恰是他为我们考虑的结果。你可以把这篇文章的任何一章抽出来阅读,而不需要反复地参照其他章节。在此,再次向作者表示敬意!

因译者水平有限,对原文的理解不敢保证完全正确,如有意见或建议,可以联系译者slcl@sohu.com

郑重声明:翻译得到了原文作者Oskar Andreasson的许可。对于本文(不是原文),可自由使用、修改、传播、转载,但对以盈利为目的使用,保留所有权利。


关于作者

我的局域网里有很多“年老的”计算机,他们也想连接到Internet上,还要保证安全。做到这一点, iptables是的ipchains的一个很好的升级。使用ipchains你可以通过丢弃所有“目的端口不是特定端口” 的包来建立一个安全的网络。但这将导致一些服务出现问题,比如被动FTP,还有在IRC中流出的DCC。它们在服务器上分配端口,并告知客户端,然后再让客户连接。 但是,iptables的代码中也有一些小毛病,在某些方面我发现这些代码并没有为作为完整的产品发布做好准备,但我仍然建议使用ipchains或更老的 ipfwadm 的人们进行升级,除非他们对正在使用的代码满意,或它们足以满足他们的需要。


如何阅读

本文介绍了iptables,以便你可以领会iptables的精彩,文中不包含iptables或Netfilter在安全方面的 bug。如果你发现iptables(或其组成部分)任何bug或特殊的行为,请联系Netfilter mailing lists ,他们会告诉你那是否是bug或如何解决。iptables或Netfilter中几乎没有安全方面的bug,当然偶尔也会出些问题,它们能在Netfilter主页中找到。

文中用到的脚本不能解决Netfilter内部的bug,给出它们,只是为了演示如何构造规则,以便我们能解决遇到的数据流管理问题。但本文没有包括象“如何关闭HTTP端口,因为Apache 1.2.12偶尔会被攻击” 这样的问题。本指南会告诉你如何通过iptables关闭HTTP端口,但不是因为Apache偶尔会被攻击。

本文适合于初学者,但也尽可能完善。因为有太多的targets或matches,所以没有完全收录。如果你需要这方面的信息,可以访问Netfilter主页


必备知识

阅读本文,要具备一些基础知识,如Linux/Unix,shell脚本编写,内核编译,最好还有一些简单的内核知识。

我尝试着尽可能使读者不需要这些知识也能完全弄懂这篇文章,但要理解扩展部分是不行的。所以还是要有点基础的:)


本文约定

以下的约定会在文中用到:

  • 代码和命令输出使用定宽字体,命令用粗体。
  • 所有的命令和程序名都用粗体。
  • 所有的系统部件,如硬件、内核部件、loopback使用斜体
  • 计算机文本输出用 这种字体
  • 文件名和路径名象这样 /usr/local/bin/iptables

原文地址:http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html


发表评论

(必填)

(必填)

(以便回访)