手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Iptables 指南 1.1.19(中文版)(四)

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

首先,我们解决的是局域网要能连接到Internet的问题。那我们就要对任何数据包做NAT操作,因为局域网内的机子都没有真实的IP地址。NAT是在PREROUTING链中完成的,这也是脚本最后创建的那个规则所在的链。这意味着我们必须要在FORWARD链中做过滤工作,否则我们就是允许任何外部的机子都能完全访问局域网了。因为我们完全信任局域网,所以允许任何由内向外的数据通过。由于我们假设Internet上的机子都不能够访问局域网内的机子,所以要阻塞任何由外向内的连接,但已建立的或相关的连接除外,因为他们只是用来回应内网对外网的访问,而不是建立对内网的新连接。

由于资金有限,我们的防火墙只提供了有限的几个服务:HTTP FTPSSHIDENTD。因此,我们要在INPUT链里允许这些协议通过,还要在 OUTPUT链里允许返回的数据通过。我们除了完全信任局域网,也信任loopback和他的IP地址,因此我们要有相应的规则来允许任何来自局域网和loopback的数据通过。但是我们不会允许一些特别的包或包头通过,也不会接受Internet上某一段IP的访问。比如,网段 10.0.0.0/8是为局域网而保留的,一般来说,我们不允许来自他们的包进入,因为这样的包90%都是用来进行欺骗的。但是,在实现这条标准之前,还要注意一个问题,就是有一些ISP在他们的网络里使用的恰恰就是这些地址。 在附录常见问题和解答里有这个问题的进一步说明。

因为我们在防火墙上运行FTP服务,而且想让包经历最少的规则,所以要把处理established和related状态的规则放到INPUT链的顶部。基于同样的原因,我们把这些规则分到子链中。这样,包就能够尽量少地穿越规则,从而节省时间,也能够降低网络的冗余。

在这个脚本里,我们依据不同的协议(如TCP UDPICMP)把包分到子链中。用来匹配 TCP包的链叫做tcp_packets,他能够匹配任何我们允许通过的TCP端口和子协议(如FTP、HTTP等)。我们还要建立一个名为allowed的子链,以便在真正接受“那些使用有效端口来访问防火墙的TCP包”之前,对他们进行附加的检查。至于ICMP包,自有称作 icmp_packets的链来处理。在决定如何建立这个链时,我考虑到假如我们同意接受ICMP包的类型和代码,就没有必要对他们做附加的检查,所以直接接受他们就行了。最后,UDP包由谁处理呢?当然就是 udp_packets了。假如包是那种允许被接收的类型,就直接放行了。

因为我们的网络很小,所以防火墙也要作为工作站来用。这就需要我们要允许一些特别的协议能和他通信,比如speak freelyICQ

现在,我们来考虑考虑OUTPUT链。因为很信任防火墙,所以我们允许几乎任何离开他的包通过,而没有阻塞任何用户和协议。但我们也不想让人利用这台机子进行IP欺骗,因此我们只放行那些从防火墙本身的IP发出的包。为了实现这一点,我们很可能在ACCEPT链中加入这样一条规则:假如包是由防火墙的IP发出的,就放行,否则,他们就会被OUTPUT链的缺省策略DROP掉。


7.2.5. 缺省策略的配置

在开始写其他规则之前,我们先要用下面的语句建立缺省的策略:

iptables [-P ]

每一条链的策略都是用来处理那些在相应的链里没被规则匹配的包。也就是说,假如有一个包没有被规则集中的任何规则匹配,那策略就有用武之地了。

Caution

要谨慎地配置其他表里的链的策略,因为他们不是用来过滤包的,这就可能引起很怪异的行为发生。


7.2.6. 自定义链的配置

现在,您对我们的防火墙应该已有了一个很清楚的印象,心动了吧。心动不如行动,让我们把他变为现实吧。这一节我们就要小心仔细地创建任何自定义链和链内的规则。

如前所述,我们要建立这几条自定义链:icmp_packetstcp_packetsudp_packets allowed,其中allowed链是由tcp_packets链调用的。任何进入$INET_IFACE的ICMP包都会被重定向到icmp_packets链,TCP包是到 tcp_packets链,那UDP包自然就是udp_packets链了,周详的解释都在 INPUT chain里。创建自定义链的命令还记得吗?很简单哦,只要使用选项-N ,再指定链的名字即可(不要忘了,新建的链都是空的),如下:

iptables [-N chain]

在下面的几节里,我们会详尽地介绍上面创建的每一条链,以使您了解他们包含哪些规则、有什么作用。


7.2.6.1. bad_tcp_packets链

这条链包含的规则检查进入包(incoming packet)的包头是否不正常或有没有其他问题,并进行相应地处理。但事实上,我们使用他只是为了过滤掉一些特别的包:没有配置SYN位但又是NEW状态的TCP包,更有那些配置了SYN/ACK但也被认为是NEW状态的TCP包。这条链能够用来检查任何可能的不一致的东西,比如上面的包或XMAS port-scans等。我们还能够为INVALID状态的包增加一条规则的。

假如您想完全了解无SYN位的NEW状态(NEW not SYN),能够去附录常见问题和解答里看看未配置SYN的NEW状态包一节,他介绍了未配置SYN的NEW状态包通过其他规则的情况。在某些情况下能够允许这种包通过,但99%的情况是我们不想让他们通过。因此,我们会先记录这种包,然后再扔掉他们。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!