80 FreeBSD连载:构建防火墙

构建防火墙防火墙的主要目标是控制内部网络和外部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访问 。

推荐阅读