没有合适的资源?快使用搜索试试~ 我知道了~
首页超详细的iptables设置
超详细的iptables设置
需积分: 34 14 下载量 149 浏览量
更新于2023-03-03
评论
收藏 162KB DOCX 举报
目前所有的HOWTO都缺乏Linux 2.4.x 内核中的Iptables和Netfilter 函数的信息,于是作者试图回答一些问题,比如状态匹配。作者会用插图和例子 rc.firewall.txt 加以说明,此处的例子可以在你的/etc/rc.d/使用。最初这篇文章是以HOWTO文档的形式书写的,因为许多人只接受HOWTO文档。
资源详情
资源评论
资源推荐
1. 序言
1.1. 为什么要写这个指南
我发现目前所有的 HOWTO 都缺乏 Linux 2.4.x 内核中的 Iptables 和 Netfilter 函数的信
息,于是我试图回答一些问题,比如状态匹配。我会用插图和例子 rc.firewall.txt 加以说明,
此处的例子可以在你的/etc/rc.d/使用。最初这篇文章是以 HOWTO 文档的形式书写的,因为
许多人只接受 HOWTO 文档。
还有一个小脚本 rc.flush-iptables.txt,我写它只是为使你在配置它的时候能象我一样有
成功的感觉。
--------------------------------------------------------------------------------
1.2. 指南是如何写的
我请教了 Marc Boucher 及 netfilter 团队的其他核心成员。对他们的工作以及对我在为
boingworld.com 书写这个指南时的帮助表示极大的谢意,现在这个指南在我自己的站点
frozentux.net 上进行维护。这个文档将一步一步教你 setup 过程,让你对 iptables 包有更多的
了解。这大部分的东西都基于例子 rc.firewall 文件,因为我发现这是学习 iptables 的一个好
方法。我决定自顶向下地跟随 rc.firewall 文件来学习 iptables。虽然这样会困难一些,但更
有逻辑。当你碰到不懂的东西时再来查看这个文件。
--------------------------------------------------------------------------------
1.3. 文中出现的术语
文中包含了一些术语,你应该有所了解。这里有一些解释,并说明了本文中如何使用
它们。
DNAT - Destination Network Address Translation 目的网络地址转换。 DNAT 是一种改变
数据包目的 ip 地址的技术,经常和 SNAT 联用,以使多台服务器能共享一个 ip 地址连入
Internet,并且继续服务。通过对同一个 ip 地址分配不同的端口,来决定数据的流向。
Stream - 流 是指发送和接收的数据包和通信的双方都有关系的一种连接(译者注:本
文中,作者把连接看作是单向的,流表示双向的连接)。一般的,这个词用于描述在两个
方向上发送两个或三个数据包的连接。对于 TCP,流意味着连接,它发送了一个 SYN,然
后又回复 SYN/ACK。但也可能是指这样的连接,发送一个 SYN,回复 ICMP 主机不可达
信息。换句话说,我使用这个词很随意。
SNAT - Source Network Address Translation 源网络地址转换。这是一种改变数据包源 ip
地址的技术,经常用来使多台计算机分享一个 Internet 地址。这只在 IPv4 中使用,因为
IPv4 的地址已快用完了,IPv6 将解决这个问题。
State - 状态 指明数据包处于什么状态。状态在 RFC 793 - Transmission Control Protocol
中定义,或由用户在 Netfilter/iptables 中自定义。需要注意的是 Netfilter 设定了一些关于连
接和数据包的状态,但没有完全使用使用 RFC 793 的定义。
User space - 用户空间,指在内核外部或发生在内核外部的任何东西。例如,调用
iptables -h 发生在内核外部,但 iptables -A FORWARD -p tcp -j ACCEPT (部分地)发生在
内核内部,因为一条新的规则加入了规则集。
Kernel space - 内核空间 ,与用户空间相对,指那些发生在内核内部。
Userland - 参见用户空间
target - 这个词在后文中有大量的应用,它表示对匹配的数据包所做的操作。
--------------------------------------------------------------------------------
2. 准备阶段
这一章是学习 iptables 的开始,它将帮助你理解 Netfilter 和 iptables 在 Linux 中扮演的
角色。它会告诉你如何配置、安装防火墙,你的经验也会随之增长。当然,要想达到你的
目标,是要花费时间,还要有毅力。( 译者注:听起来很吓人的:) )
--------------------------------------------------------------------------------
2.1. 哪里能取得 iptables
iptables 可以从 www.netfilter.org 下载,网站中的 FAQs 也是很好的教程。iptables 也使
用一些内核空间,可以在用 make configure 配置内核的过程中配置,下面会介绍必要的步
骤。
--------------------------------------------------------------------------------
2.2. 内核配置
为了运行 iptables,需要在内核配置期间,选择以下一些选项,不管你用 make config
或其他命令。
CONFIG_PACKET - 允许程序直接访问网络设备(译者注:最常用的就是网卡了),
象 tcpdump 和 snort 就要使用这个功能。
严格地说,iptables 并不需要 CONFIG_PACKET,但是它有很多用处(译者注:其他
程序需要),所以就选上了。当然,你不想要,不选就是了。(译者注:建议还是选的为
好)
CONFIG_NETFILTER - 允许计算机作为网关或防火墙。这个是必需的,因为整篇文章
都要用到这个功能。我想你也需要这个,谁叫你学 iptables 呢:)
当然,你要给网络设备安装正确的驱动程序,比如,Ethernet 网卡, PPP 还有 SLIP 。
上面的选项,只是在内核中建立了一个框架, iptables 确实已经可以运行,但不能做任何
实质性的工作。我们需要更多的选项。以下给出内核 2.4.9 的选项和简单的说明:
CONFIG_IP_NF_CONNTRACK - 连接跟踪模块,用于 NAT(网络地址转换) 和
Masquerading(ip 地址伪装),当然,还有其他应用。如果你想把 LAN 中的一台机子作为
防火墙,这个模块你算选对了。脚本 rc.firewall.txt 要想正常工作,就必需有它的存在。
CONFIG_IP_NF_FTP - 这个选项提供针对 FTP 连接进行连接跟踪的功能。一般情况下,
对 FTP 连接进行连接跟踪是很困难的,要做到这一点,需要一个名为 helper 的动态链接库。
此选项就是用来编译 helper 的。如果没有这个功能,就无法穿越防火墙或网关使用 FTP。
CONFIG_IP_NF_IPTABLES - 有了它,你才能使用过滤、伪装、NAT。它为内核加入
了 iptables 标识框架。没有它,iptables 毫无作用。
CONFIG_IP_NF_MATCH_LIMIT - 此模块并不是十分必要,但我在例子 rc.firewall.txt
中用到了。它提供匹配 LIMIT 的功能,以便于使用一个适当的规则来控制每分钟要匹配的
数据包的数量。比如, -m limit --limit 3/minute 的作用是每分钟最多匹配三个数据包。这个
功能也可用来消除某种 DoS 攻击。
CONFIG_IP_NF_MATCH_MAC - 选择这个模块,可以根据 MAC 地址匹配数据包。例
如,我们想要阻塞使用了某些 MAC 地址的数据包,或阻塞某些计算机的通信,用这个很
容易。因为每个 Ethernet 网卡都有它自己的 MAC 地址,且几乎从不会改变。但我在
rc.firewall.txt 中没有用到这个功能,其他例子也未用到。(译者注:这又一次说明了学习
是为将来打基础:) )
CONFIG_IP_NF_MATCH_MARK - 这个选项用来标记数据包。对数据包做 MARK(标
记)操作,我们就可以在后面的表中用这个标记来匹配数据包。后文有详细的说明。
CONFIG_IP_NF_MATCH_MULTIPORT - 选择这个模块我们可以使用端口范围来匹配
数据包,没有它,是无法做到这一点的。
CONFIG_IP_NF_MATCH_TOS - 使我们可以设置数据包的 TOS(Type Of Service 服务
类型)。这个工作也可以用命令 ip/tc 完成,还可在 mangle 表中用某种规则设定。
CONFIG_IP_NF_MATCH_TCPMSS - 可以基于 MSS 匹配 TCP 数据包。
CONFIG_IP_NF_MATCH_STATE - 相比较 ipchains 这是最大的更新,有了它,我们可
以对数据包做状态匹配。比如,在某个 TCP 连接的两个方向上已有通信,则这个连接上的
数据包就被看作 ESTABLISHED(已建立连接)状态。在 rc.firewall.txt 里大量使用了此模
块的功能。
CONFIG_IP_NF_MATCH_UNCLEAN - 匹配那些不符合类型标准或无效的
P、TCP、UDP、ICMP 数据包(译者注:之所以此模块名为 UNCLEAN,可以这样理解,
凡不是正确模式的包都是脏的。这有些象操作系统内存管理中的“脏页”,那这里就可以称
作“脏包”了,自然也就 UNCLEAN 了)。我们一般丢弃这样的包,但不知这样做是否正确。
另外要注意,这种匹配功能还在实验阶段,可能会有些问题。
CONFIG_IP_NF_MATCH_OWNER - 根据套接字的拥有者匹配数据包。比如,我们只
允许 root 访问 Internet。在 iptables 中,这个模块最初只是用一个例子来说明它的功能。同
样,这个模块也处于实验阶段,还无法使用。
CONFIG_IP_NF_FILTER - 这个模块为 iptables 添加基本的过滤表,其中包含
INPUT、FORWARD、OUTPUT 链。通过过滤表可以做完全的 IP 过滤。只要想过滤数据包,
不管是接收的还是发送的,也不管做何种过滤,都必需此模块。
CONFIG_IP_NF_TARGET_REJECT - 这个操作使我们用 ICMP 错误信息来回应接收到
的数据包,而不是简单地丢弃它。有些情况必须要有回应的,比如,相对于 ICMP 和 UDP
来说,要重置或拒绝 TCP 连接总是需要一个 TCP RST 包。
CONFIG_IP_NF_TARGET_MIRROR - 这个操作使数据包返回到发送它的计算机。例如,
我们在 INPUT 链里对目的端口为 HTTP 的包设置了 MIRROR 操作,当有人访问 HTTP 时,
包就被发送回原计算机,最后,他访问的可能是他自己的主页。(译者注:应该不难理解
为什么叫做 MIRROR 了)
CONFIG_IP_NF_NAT - 顾名思义,本模块提供 NAT 功能。这个选项使我们有权访问
nat 表。端口转发和伪装是必需此模块的。当然,如果你的 LAN 里的所有计算机都有唯一
的有效的 IP 地址,那在做防火墙或伪装时就无须这个选项了。rc.firewall.txt 是需要的:)
CONFIG_IP_NF_TARGET_MASQUERADE - 提供 MASQUERADE(伪装)操作。如
果我们不知道连接 Internet 的 IP,首选的方法就是使用 MASQUERADE,而不是 DNAT 或
SNAT。换句话说,就是如果我们使用 PPP 或 SLIP 等连入 Internet,由 DHCP 或其他服务分
配 IP,使用这个比 SNAT 好。因为 MASQUERADE 不需要预先知道连接 Internet 的 IP,虽
然对于计算机来说 MASQUERADE 要比 NAT 的负载稍微高一点。
CONFIG_IP_NF_TARGET_REDIRECT - 这个操作和代理程序一起使用是很有用的。它
不会让数据包直接通过,而是把包重新映射到本地主机,也就是完成透明代理。
CONFIG_IP_NF_TARGET_LOG - 为 iptables 增加 LOG(日志)操作。通过它,可以使
用系统日志服务记录某些数据包,这样我们就能了解在包上发生了什么。这对于我们做安
全审查、调试脚本的帮助是无价的。
CONFIG_IP_NF_TARGET_TCPMSS - 这个选项可以对付一些阻塞 ICMP 分段信息的
ISP(服务提供商)或服务。没有 ICMP 分段信息,一些网页、大邮件无法通过,虽然小邮
件可以,还有,在握手完成之后,ssh 可以但 scp 不能工作。我们可以用 TCPMSS 解决这个
问题,就是使 MSS(Maximum Segment Size)被钳制于 PMTU(Path Maximum Transmit
Unit)。这个方法可以处理被 Netfilter 开发者们在内核配置帮助中称作“criminally brain-dead
ISPs or servers”的问题。
CONFIG_IP_NF_COMPAT_IPCHAINS - ipchains 的,这只是为内核从 2.2 转换到 2.4 而
使用的,它会在 2.6 中删除。
CONFIG_IP_NF_COMPAT_IPFWADM - 同上,这只是 ipfwadm 的暂时使用的兼容模式。
上面,我简要介绍了很多选项,但这只是内核 2.4.9 中的。要想看看更多的选项,建议
你去 Netfilter 看看 patch-o-matic。在那里,有其他的一些选项。POM 可能会被加到内核里,
当然现在还没有。这有很多原因,比如,还不稳定,Linus Torvalds 没打算或没坚持要把这
些补丁放入主流的内核,因为它们还在实验。
把以下选项编译进内核或编译成模块,rc.firewall.txt 才能使用。
CONFIG_PACKET
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_FTP
CONFIG_IP_NF_IRC
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_FILTER
CONFIG_IP_NF_NAT
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_TARGET_LOG
CONFIG_IP_NF_MATCH_LIMIT
CONFIG_IP_NF_TARGET_MASQUERADE
以上是为保证 rc.firewall.txt 正常工作而需要的最少的选项。其他脚本需要的选项,在
相应的章节里都有说明。目前,我们只需注意要学习的这个脚本。
--------------------------------------------------------------------------------
2.3. 编译与安装
下面,我们来看看如何编译 iptables。iptables 很多组件的配置、编译是与内核的配置、
编译相关联的,了解这一点是很重要的。某些 Linux 产品预装了 iptables,比如 Red Hat,
但是它的缺省设置是不启用 iptables 的。后文我们会介绍如何启用它,也会介绍一下其他
Linux 产品里的 iptables 情况。
--------------------------------------------------------------------------------
2.3.1. 编译
首先要解压 iptables 包。这里,我用 iptables 1.2.6a 做例子(译者注:在我翻译时,最
新版本已经是 1.2.9,其中又有了不少改进,修补了一些 bug,增添了几个 match 和
target。)。命令 bzip2 -cd iptables-1.2.6a.tar.bz2 | tar -xvf -(当然也可以用 tar -xjvf iptables-
1.2.6a.tar.bz2,但这个命令可能对一些老版的 tar 不适用 ) 将压缩包解压至目录 iptables-
1.2.6a,其中的 INSTALL 文件有很多对编译、运行有用的信息。
这一步,你将配置、安装一些额外的模块,也可以为内核增加一些选项。我们这里只
是检查、安装一些未被纳入内核的标准的补丁。当然,更多的在实验阶段的补丁,仅在进
行其他某些操作时才会用到。
有一些补丁仅仅处在实验阶段,把它们也安装上不是一个好主意。这一步,你会遇到
很多十分有趣的匹配和对数据包的操作,但它们还正在实验。
为了完成这一步,我们要在 iptables 的目录内用到如下一些命令:
剩余63页未读,继续阅读
xierui54
- 粉丝: 13
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0