2006年9月24日星期日

第三节 防火墙

  即使是世界上最好的认证和加密方案,也很难保证系统不会受到黑客高手的攻击。目前,阻止他们的最好办法还是使用防火墙,拒绝来自网络外的非法访问。Linux 在构建防火墙方面做得相当优秀,完全有能力同那些价格不菲的商业防火墙软件一决高低。
 
1、认识防火墙

 
  防火墙可以是一台计算机,一台路由器,或其它专用设备,虽然形式可以多种多样,但目的是为了阻止来自网络外部的非法访问。大多数防火墙都被设置在专用的 Internet 和公用的 Internet 之间,它依据事先定义好的一系列规则,将那些不受欢迎的数据包挡在网络之外,从而提高网络的安全性。

 
  防火墙的作用主要取决管理员的设置,它可以被设置成很开放的,几乎允许所有的数据包通过,也可以被设置成很保守的,仅仅允许极少数的数据包通过。

 
  让网络中的一台计算机专门承担防火墙的职责是一个较好的做法,这是因为防火墙通常用来控制外界对内部网络的访问,它的安全性应该尽可能的高。黑客都清楚如果他们能够控制防火墙,也就相当于控制了整个网络。为了看好这个大门,管理员应该始终牢记下面这此戒律:
 
  第一、关闭防火墙上所有不需要的服务;

  第二、限制对防火墙拥有访问权限的人数;
  第三、不要在防火墙上使用其它地方使用过的口令;
  第四、要确保防火墙在物理上的安全。
 
  目前常用的防火墙有两种主要形式:代理服务器和包过滤器。代理服务器工作在整个网络体系中的应用层,通常都是针对具体协议的,也就是说 FTP、Telne 和HTTP 都有各自专用的代理服务器。包过滤工作在整个网络体系结构中的网络层,它可以查看来自网络外的任何一个 IP 包,然后按照一套事先定义好的规则来决定是允许 IP 包通过,还是简单地将其丢弃。

 
  作为一个优秀的网络操作系统,Linux 从一开始就支持数据包过滤功能。RedHat Linux AS 4 自带了 IPchains 和 iptables 两个软件包,它们都具有对网络中的数据包进行过滤的功能,是构建防火墙系统的基石。

 
2、配置防火墙
 
  以前 Linux 系统管理员在配置防火墙时基本上没有什么工具可言,在部分都是使用命令或者直接修改配置文件,Webmin 的出现总算多少缓解了这一尴尬局面。打开浏览器登录 Webmin,然后单击『网络』图标进入网络管理页面,如图 8-3-1 所示。

 
图 8-3-1 配置防火墙
 
  单击『Linux Firewall』图标,如果之前没有对 IPtables 设置,将看到如图8-3-2 所示的页面。单击『Setup Firewall』按钮,Webmin 将开始初始化IPtables 的配置文件 /etc/sysconfig/iptables。
 
图 8-3-2 初始化 IPtables
 
  不要将防火墙想的很神秘,其实说穿了无非就是对要转发的数据包(FORWARD)、进入网络的数据包(INPUT)和从网络发出的数据包(OUTPUT)进行控制,如图 8-3-3所示。

 
图 8-3-3 定义过滤规则
 
  由于所有的处理规则都是相同的,因此只要学会对一种数据包进行处理,其它两种自然也就不在话下了。

 
  我们以进入网络的数据包为例,一起来看看如何为防火墙定义过滤规则。单击『Incoming packets (input)』区域中的『Add rule』按钮,进入『Add Rule』页面。在『Action to take』内选择符合该过滤规则时采取的动作,最常用的动作是『Accept』和『Drop』,分别表示“接受”和“丢弃”符合过滤规则的数据包,如图 8-3-4 所示。
 
图 8-3-4 采取的动作
 
  为防火墙设置的每条过滤规则,实际上都可以简单地描述为:符合某些条件时,采取相应的动作。过滤规则中的动作在前面已经选好了,接下去自然就是定义过滤规则应该满足的条件了。说起来容易,但真正做起来可就不那么轻松了,因为可能的条件实在太多。不要着急,让我们各个击破。

 
  在『Source address or network』和『Destination address or network』区域中,可以设置符合该过滤规则的数据包应该具有的源地址和目标地址,如图8-3-5 所示。

 
图 8-3-5 源地址和目标地址
 
  源地址和目标地址既可以是某一主机的 IP 地址,也可以是以 CDIR 形式表示的网络地址。在地址前面的条件下拉框中,可以选择『』、『Equals』和『Does not equsl』,分别表示忽略、等于和不等于三种情况。

 
  在『Incoming interface』和『Outgoing interface』区域中,可以设置符合过滤规则的数据包应该来自哪个网络接口,以及应该发送到哪个网络接口,如图8-3-6 所示。
 
图 8-3-6 网络接口
 
  出于安全性的考虑,大多数防火墙一般都装有两块网上,一块用来连接外部网络,另一块则用来连接内部网络,因为这样可以很好地将外部网络和内部网络隔开。
 
  在『Network protocol』区域中,可以设置符合过滤规则的数据包应该属于哪个网络协议,如图 8-3-7 所示。

 
图 8-3-7 网络协议
 
  网络管理员通常不希望某类可能产生安全问题的协议数据包穿越防火墙,因此这个设置项非常实用。
 
  在『Source TCP or UDP port』和『Destination TCP or UDP port』区域中,可以设置符合该过滤规则的数据包应该有的源端口和目标端口号。可以同时指定多个端口,也可以指定一个端口的范围,如图 8-3-8 所示。

 
图 8-3-8 源端口和目标端口
 
  如果源端口和目标端口相同,则只需在『Source and destination port (s)』区域中设置就足够了,不用将两者分开对待。
 
  如果熟悉 TCP 协议,那肯定知道 TCP 数据包中有一些标记(flag)字段,这些也可以成为防火墙对数据包进行过滤时的依据,如图 8-3-9 所示。

 
图 8-3-9 TCP 标记
 
  其它一些设置项由于不是经常用到,这里就不作介绍了。在设置好过滤规则后,单击『Add Rule』页面中的『新建』按钮,就可以在『Linux Firewall』页面中看到刚刚添加的过滤规则了,如图 8-3-10 所示。
 
图 8-3-10 防火墙过滤规则
 
  使用同样的办法可以添加多条过滤规则。需要注意的是,防火墙是按照一定的顺序来应用过滤规则的。对于同一个数据包,可能前一条规则允许它通过防火墙,而后一条规则不允许,此时防火墙将按照前一条规则来处理它。当同时存在多条过滤规则时,规则之间的应用顺序非常重要。通过单击规则列表『Move』列中的上下箭头,可以改变过滤规则的应用顺序,如图 8-3-11 所示。
 
图 8-3-11 规则应用顺序
 
3、启用防火墙
 
  在设置好防火墙的过滤规则后,需要激活这些新的配置。单击『LinuxFirewall』页面底部的『Apply Configuration』按钮,防火墙将按照最新定义的过滤规则,对经过的每个数据包进行处理,并采取相应的动作,如图 8-3-12 所示。

 
图 8-3-12 应用新的过滤规则
 
  如果希望在系统启动的时候,防火墙就能自动运行并激活这些过滤规则,那就应该在『Linux Firewall』页面底部的『Activate at boot』按钮旁边选择『是』单选框,然后单击『Activate at boot』按钮,如上图所示。
 
  再强调一下,不管使用哪种策略和技术,绝对安全的系统都是不存在的。一个真正较为安全的系统是需要根据不同网络的具体情况,以及不同用户对安全性的需求进行定制。优秀的网络管理员应该做到比黑客更精明,即所谓的“魔高一尺,道高一丈”。

 
  现在你已经读完本书了,有什么感觉?我想,你会发现成为一名合格的 Linux管理员已经不再是一伯难事了!

没有评论: