构建防火墙
防火墙的主要目标是控制内部网络和外部Internet之间的连接,有限制的允许内部网络中的计算机访问Internet 上的服务,但限制外部网络访问内部计算机。为了实现这个目的,至少需要一个具有两个(或更多)网络界面的 计算机,它的一个网络界面连接外部网络,另一个网络界面连接内部网络。然而如何实现限制网络访问的方法却有所不同,主 要就可以分为基于IP数据包过滤的防火墙和基于代理的防火墙。ipfw/natd和ipfilter都是基于包过滤和 网络地址转换的软件工具,而代理服务器通常通过代理服务器软件来实现。
FreeBSD下用于防火墙的最重要的代理软件是fwtk,它提供了多种代理服务器和统一的认证方式。FreeBSD 上也能运行其他的代理服务器,然而那些代理服务器主要用于代理单个协议,不能单独用于构建全面功能的防火墙系 统,而fwtk则提供了多种代理服务器,为构建一个完整的防火墙系统提供了基础。然而fwtk不是一个设置完好的防火 墙系统,而只是一组构建防火墙的组件。因此要使用fwtk来设定防火墙,仍然是一个复杂的任务。虽然在FreeBSD 下可以使用Ports Collection很方便的编译安装fwtk,但问题的关键是针对具体的服务进行设置。
fwtk能在多种Unix系统上运行,很多资料和书籍都已经介绍了其使用和设置方法,这里就不再介绍fwtk 的使用和设置。这里主要介绍基于包过滤和NAT的防火墙系统。
- 选择防火墙的类型
早期的包过滤防火墙只是建立在路由器的基础上,只支持有限的过滤规则,并且不能保持网络连接状态。更关键的问 题是,基于路由器的防火墙不能隐藏内部网络的拓扑结构,这样入侵者就比较容易利用包括IP欺骗在内的方式对内部计算机 进行攻击。然而,网络地址转换技术可以改变这种情况,使用ipfw/natd或ipfilter可以建立更安全、更高 性能的防火墙系统。
由于NAT改变了内部计算机的IP地址,因此这种方式也可以称作网络层代理。而其他直接支持应用程序的代理服 务器,如squid,fwtk等,被称为应用层代理,应用层代理的好处是可以定义更复杂的访问控制形式,例如针对用户 进行认证等,并能提供较详细的日志记录。然而应用层代理的缺点是不方便用户使用,需要对客户端软件进行其他设置,并且 不一定会具有所有种类的应用程序的代理程序。
代理型防火墙的另一个问题是,无法向外部提供网络服务。这也可以算一个优点,因为向外提供网络服务就必然降低 网络安全性,然而实际上网络使用者也希望通过自己的网络向外发布信息,而不只是简单的浏览Internet。当然在提 供服务的同时也要保证发布信息服务器的安全,因此希望将其放入防火墙内部。对于需要发布信息的要求,NAT通过映射端 口(或地址)就能满足要求,但代理服务器不能。
然而,也能设计这样一种代理服务器,它接收Internet上任意(或受限)主机的访问,而将代理这些访问请 求访问内部的服务器,这种代理服务器称为反向代理服务器。
在不同类型的防火墙之间进行选择主要依赖于不同的需要,一般的情况下,内部网络的使用希望防御外部网络上的入 侵者,但又希望能够最大可能的使用各种网络应用程序来访问Internet,而同时也希望系统配置比较简单,这样直接 利用FreeBSD提供的ipfw/natd或ipfilter均能满足这种要求,网络地址转换类型的防火墙配置简洁 、性能更高,并且对应用程序的支持相当强。
有些网络内部计算机的使用比较混乱,因此希望针对用户进行认证控制,此后才允许用户能访问Internet, 并还希望能限制用户使用访问Internet的应用种类,进行更复杂的日志记录,这些情况下就应该选用应用层代理服务 器fwtk。极端的情况下,只打算对内部用户提供有限种类的Internet服务,那么设置一个专用的应用代理服务器 也就满足要求了,例如设置squid代理WWW访问。
然而,在FreeBSD上构建防火墙系统是通过系统提供的各种组件进行组合得到的,采取多种组件进行组合,就 能构建更复杂的系统。可以根据不同需要,同时利用包过滤、网络地址转换及各种不同应用层代理等多种形式,设置不同复杂 程度的防火墙系统,这就是FreeBSD系统的优势。但在这些情况下,由于FreeBSD提供的这些组件并不是单一软 件,而是相互独立的多个软件,因此要设置一个完整的防火墙系统,还需要使用者进行复杂的设置。或者还需要管理员使用一 些简单的脚本程序以辅助分析系统日志,发送警报,甚至对网络状态进行实时监控,通过迅速改变防火墙设置来保护内部网络 系统。
通过分析防火墙的日志记录,甚至监控通过防火墙的数据流模式,就可以寻找发生过或正在进行的系统入侵行为(通 常可能是服务阻塞、暴力攻击甚至更复杂的特定攻击模式),进而反馈回防火墙系统,以重新调整设置,增强系统安全性。
- 防火墙的拓扑结构
当构建防火墙系统时,首先就要考虑网络的拓扑结构,这将对防火墙的设置产生影响。简单的网络可能只需要一台防 火墙设备,而复杂的网络会需要更多的网络设备,包括多个防火墙系统。以下给出了最常使用的几种使用防火墙的网络拓扑, 基本上这些拓扑将适合大多数的情况,可以使用这些拓扑来作为建立自己内部网络的参考。
最简单的情况为使用具备两个网络界面的一个防火墙来分隔内部与外部网络。这种形式简单易行,适合大部分只需要 访问Internet,而不需要对外发布信息的网络。一旦要向外发布信息,那么所提供的服务就会降低网络的安全性,造 成相应的安全问题。
为了避免在向外提供服务的服务器被侵入之后,影响内部网络的安全性,就需要将对外提供服务的服务器和只访问外 部网络的客户计算机分隔到不同的网络上。可以采用上面的方式,防火墙使用三个网络界面,分别用于外部网络、内部网络和 提供服务的服务器。
使用单个防火墙的网络,网络安全被一台防火墙的安全所限制,更复杂的情况是同时使用多个防火墙系统。例如使用 两个防火墙,第一层防火墙与第二层防火墙之间可以放置允许外部访问的服务器,这个区域被称为停火区,即使入侵者进入这 个区域,还需要近一步攻击内部防火墙才能接触内部网络。
如果这两个防火墙使用不同的技术,如外部防火墙为网络地址转换方式,而内部防火墙为代理服务器方式,这样即使 入侵者侵入一个防火墙,但另一个防火墙使用的是完全不同的技术,就给入侵者带来更大的阻碍,提高整个网络的安全性。
利用这些工具,网络可以设置的非常安全。事实上当前大部分安全问题仍然来源于人的因素,如管理不善造成的口令 泄露等。这就使得正常的安全措施无法正常应用,而带来不可避免的安全问题。
- PicoBSD
软件方式的防火墙系统的一大问题就是由于系统本身能够安装丰富的软件,因此常常同时被用作其他用途,当用作其 他用途时就有可能对本身的安全性造成影响。而硬件防火墙使用专有操作系统,只用作网络服务,这保证了它不会受到其他方 面的影响。对于用作防火墙的计算机,通常应该专用而不要兼作其他用途。因为防火墙的安全性非常重要,内部网络安全要依 赖防火墙的安全来保障,一旦防火墙被入侵,网络安全也就无法保证了。
通常安装的FreeBSD系统都具备硬盘,当具备硬盘的FreeBSD用做防火墙系统时,一方面免不了想提供 多种复杂的服务,这样系统可能会具备潜在的安全漏洞,另一方面入侵者入侵这个系统之后,可以在系统硬盘上隐藏入侵程序 以进一步入侵网络内部。因此对于用作防火墙的FreeBSD系统,最好直接修改系统的rc文件,屏蔽所有的网络服务。 另一种方法是可以尝试使用软盘上的FreeBSD系统,这样计算机本身不具备硬盘,可以从管理上杜绝它用作其他使用的 机会,同时也节约了资源。此时FreeBSD系统可以不使用硬盘、显示器、键盘,通过串口进行设置,这样的系统可以安 装在网络设备的机架上,专门用作防火墙提供安全服务。
PicoBSD就是这样的一个小型FreeBSD系统,能够安装在一张软盘上。PicoBSD提供了四个不同 的版本:dial、isp、net和router,dial为拨号访问Internet的版本,isp为接受拨号访问 的版本,net和router是用于网关和路由器的版本,它们都能够在386处理器和10M内存下运行(dial版本 仅仅需要8MB内存)。虽然从FreeBSD的主页上,可以得到预定制好的多种PicoBSD的磁盘镜像,然而由于计 算机使用的硬件差异很大,定制好的磁盘镜像不一定适合使用者的计算机硬件,由于软盘容量很小,不能容纳尽可能多的硬件 驱动,每个磁盘镜像也不能支持太多的硬件设备,因此就需要根据自己计算机的具体硬件环境定制PicoBSD。
要定制PicoBSD,就需要一个安装了全部源代码的FreeBSD系统,并且这个FreeBSD系统的内核 要支持伪设备vn及具备对应的设备文件,以便PicoBSD的设置程序能完成磁盘镜像文件的创建工作。PicoBSD 的源代码位于系统的/usr/src/release/picobsd目录下,这个目录中包含编译、配置PicoBSD 的说明,以及不同PicoBSD版本的配置。
定制PicoBSD系统要使用的该目录的子目录build中的build脚本,为了制作一个PicoBSD的 磁盘镜像,就需要在这个目录下启动build命令。
# cd /usr/src/release/picobsd # cd build # ./build |
build命令使用菜单将让使用者选择不同的PicoBSD的基本版本,如dial、isp、net和router ,根据不同的目的进行选择,此后选择n(no change)就能继续进行制作镜像文件的处理。当这个执行过程 结束之后,build子目录下就产生了一个1.44MB的磁盘镜像文件picobsd.bin。此后可以在FreeBSD 下,或者在Dos下将镜像文件写入软盘,则一个单软盘的PicoBSD系统就制作完毕了。
build进程将使用/mnt来装载vn0设备,因此必须保证/mnt没有装载其他文件系统,而且vn0设备 没有被占用。否则就会遇到错误。
然而这样制作的PicoBSD使用的还是缺省的设置,如果要定制PicoBSD系统,就需要更改缺省设置。首 先应该根据具体的需要,选择功能相近版本的PicoBSD,再进一步更改硬件设置。每一个PicoBSD版本的设置都 位于具有相同名字的子目录下,例如net版本PicoBSD的目录为/usr/src/release/picobsd/net/ ,在这个目录之下的conf子目录为PicoBSD内核的定制目录,而crunch1目录中为最后复制到 PicoBSD系统中的应用程序的名字列表。
当需要针对运行防火墙的计算机更改硬件设置时,需要更改conf子目录中的内核设置文件PICOBSD,这个 文件就是PicoBSD的内核设置文件,可以删除或增加设置选项,改变对不同硬件设置的支持。如果要更改复制到软盘镜 象中的执行程序的数量,就需要更改同样位于该版本目录下的crunch1子目录中的文件。只是注意软盘空间有限,因此 只能装载有限的程序。
更改完这些设置之后,就可以转回build子目录重新定制PicoBSD,这样产生的镜象文件就为与硬件设置 相符合的设置。将镜象文件写入软盘之后,就可以使用这个软盘启动防火墙系统,然后再使用命令行进行手工设置。需要注意 的是,此时更改的只是写在内存文件系统MFS中的文件,而不是在软盘中文件,因此一旦系统重新启动,配置就不会保留下 来。必须使用update命令将更改后的文件写回磁盘中之后,设置才能保留回磁盘中。
未完,待续。。。
标签: 防火墙