您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > IPTABLES指南
IPTABLES指南1.序言1.1.为什么要写这个指南我发现目前所有的HOWTO都缺乏Linux2.4.x内核中的Iptables和Netfilter函数的信息,于是我试图回答一些问题,比如状态匹配。我会用插图和例子rc.firewall.txt加以说明,此处的例子可以在你的/etc/rc.d/使用。最初这篇文章是以HOWTO文档的形式书写的,因为许多人只接受HOWTO文档。还有一个小脚本rc.flush-iptables.txt,我写它只是为使你在配置它的时候能象我一样有成功的感觉。--------------------------------------------------------------------------------1.2.指南是如何写的我请教了MarcBoucher及netfilter团队的其他核心成员。对他们的工作以及对我在为boingworld.com书写这个指南时的帮助表示极大的谢意,现在这个指南在我自己的站点frozentux.net上进行维护。这个文档将一步一步教你setup过程,让你对iptables包有更多的了解。这大部分的东西都基于例子rc.firewall文件,因为我发现这是学习iptables的一个好方法。我决定自顶向下地跟随rc.firewall文件来学习iptables。虽然这样会困难一些,但更有逻辑。当你碰到不懂的东西时再来查看这个文件。--------------------------------------------------------------------------------1.3.文中出现的术语文中包含了一些术语,你应该有所了解。这里有一些解释,并说明了本文中如何使用它们。DNAT-DestinationNetworkAddressTranslation目的网络地址转换。DNAT是一种改变数据包目的ip地址的技术,经常和SNAT联用,以使多台服务器能共享一个ip地址连入Internet,并且继续服务。通过对同一个ip地址分配不同的端口,来决定数据的流向。Stream-流是指发送和接收的数据包和通信的双方都有关系的一种连接(译者注:本文中,作者把连接看作是单向的,流表示双向的连接)。一般的,这个词用于描述在两个方向上发送两个或三个数据包的连接。对于TCP,流意味着连接,它发送了一个SYN,然后又回复SYN/ACK。但也可能是指这样的连接,发送一个SYN,回复ICMP主机不可达信息。换句话说,我使用这个词很随意。SNAT-SourceNetworkAddressTranslation源网络地址转换。这是一种改变数据包源ip地址的技术,经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解决这个问题。State-状态指明数据包处于什么状态。状态在RFC793-TransmissionControlProtocol中定义,或由用户在Netfilter/iptables中自定义。需要注意的是Netfilter设定了一些关于连接和数据包的状态,但没有完全使用使用RFC793的定义。Userspace-用户空间,指在内核外部或发生在内核外部的任何东西。例如,调用iptables-h发生在内核外部,但iptables-AFORWARD-ptcp-jACCEPT(部分地)发生在内核内部,因为一条新的规则加入了规则集。Kernelspace-内核空间,与用户空间相对,指那些发生在内核内部。Userland-参见用户空间target-这个词在后文中有大量的应用,它表示对匹配的数据包所做的操作。--------------------------------------------------------------------------------2.准备阶段这一章是学习iptables的开始,它将帮助你理解Netfilter和iptables在Linux中扮演的角色。它会告诉你如何配置、安装防火墙,你的经验也会随之增长。当然,要想达到你的目标,是要花费时间,还要有毅力。(译者注:听起来很吓人的:))--------------------------------------------------------------------------------2.1.哪里能取得iptablesiptables可以从下载,网站中的FAQs也是很好的教程。iptables也使用一些内核空间,可以在用makeconfigure配置内核的过程中配置,下面会介绍必要的步骤。--------------------------------------------------------------------------------2.2.内核配置为了运行iptables,需要在内核配置期间,选择以下一些选项,不管你用makeconfig或其他命令。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的功能,以便于使用一个适当的规则来控制每分钟要匹配的数据包的数量。比如,-mlimit--limit3/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(TypeOfService服务类型)。这个工作也可以用命令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连接总是需要一个TCPRST包。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(MaximumSegmentSize)被钳制于PMTU(PathMaximum
本文标题:IPTABLES指南
链接地址:https://www.777doc.com/doc-6126980 .html