3 总体设计
分布式防火墙的前两个组件从本质上说是安全授权问题。传统的授权机制包括访问控制列表(ACL)和公钥证书体系(X.509、PKI)。但是ACL不适用于开放、动态的分布式环境,证书体系在授予权限、信任模式、委托权利等方面也不能很好地满足分布式防火墙的要求。
信任管理(Trust Management)是解决分布式环境下授权、信任问题的一种新思想,它提供了适合网络应用的开放、动态、分布特性的安全解决框架。KeyNote是信任管理系统的一个实例。它提供了一种简练、灵活、易扩展和富于表达能力的语言来描述安全策略(Security Policy)和安全凭证(Security Credential),这种可编程的语言易读、易写,而且与应用无关,使KeyNote很容易与应用系统集成。本地策略绑定了公钥和直接授权;远程策略经DSA、RSA数字签名后作为安全凭证,采用了与安全策略相同的语法。安全凭证支持间接信任关系和权利委派,可以在不受信任的网络上传播、发布。因此,基于KeyNote实现防火墙的前两个组件是可行而有效的。
防火墙中应用的KeyNote体系结构中服务器进程根据外来的连接请求,调用Keynote API,将三元组(r,C,P)提交给信任管理引擎,该引擎使用通用的、与应用独立的一致性验证算法,这种深度优先算法采用递归的方式,试图在本地或者LDAP服务器上查找到至少一条能够满足请求的策略断言,从而做出策略是否被满足的判断结果,并返回给服务器进程。
实施策略的组件对进出主机的通信都进行了控制,不但可以保护主机应对外来的威胁,而且可以防止非法用户使用该主机访问网络,从而实现了双向过滤的功能。
4 实现
我们在Redhat Linux 7.2(kernel ver: 2.4.7)上开发、实现了分布式防火墙。Linux是当前比较流行的网络服务器平台,并且具有集成的、良好的安全特性和库,支持IPsec、SSL。同时,利用其开放的源代码,我们可以修改内核使之与KeyNote库libkeynote0(同样是开放源代码的)很好地协作。
4.1 系统结构
系统由三个组件构成:内核扩展集、用户级守候进程和设备驱动程序。我们的范例主要着眼于对TCP连接的控制。
(1) 内核扩展(Kernel Extension)。用户使用connect()和accept()这两个系统调用来创建向外的连接以及决定到来的连接请求。我们要根据策略对这两个系统调用加以修改,对某些连接进行过滤。策略上下文(Policy Context)是包含与某一连接相关的所有信息的容器,这些信息包括发起连接的用户ID,源IP地址、端口号,目的IP地址、端口号,等等。
(2) 策略驱动(Policy Driver)。这里实现了一个伪设备驱动/dev/policy作为内核中被修改的系统调用与用户空间的守候进程直接通信的渠道。我们把该驱动视为一个文件,它支持一般的文件操作,如open(),close(),read(),write(),ioctl()。
(3) 策略守候进程(Policy Daemon)。这是一个用户级进程,负责根据安全策略和安全凭证作出决策——允许还是拒绝连接。
4.2 系统流程
我们先说明对外来连接accept()进行过滤的工作流程。
第一步:首先,操作系统启动策略守候进程,并调用open()打开策略驱动。策略守候进程读取本地的包含策略和凭证的文件(当然,也可以定制进程启动时即从远程的LDAP服务器上下载、更新策略和凭证),open()将初始化有关数据结构。策略守候进程调用read(),试图从策略驱动中读取连接请求信息。如果驱动中没有请求信息,则守候进程阻塞。
第二步:服务器进程收到了连接请求,首先调用accept()。这个被修改过的系统调用形成策略上下文并提交到策略驱动中。服务器进程阻塞。
第三步:此时,read()返回请求消息,策略守候进程被唤醒。它读取该消息,调用KeyNote的一致性检查器(compliance checker)根据本地策略和凭证进行分析。如果未找到与此连接相关的策略,策略守候进程就联系远程的LDAP服务器查找、下载相应的凭证。若策略许可(即:找到策略或安全凭证,根据签名算法验证无误,并且符合凭证断言),则允许该连接,若在本地及远程服务器上均没有找到相应的策略或凭证,或者与策略、凭证的断言不符,则拒绝之。策略守候进程调用write()将自己的决策写入策略驱动中。
第四步: accept()从策略驱动中读取策略守候进程的决策,服务器进程被唤醒。若决策允许,accept()返回非负的套接字描述符;否则返回-1拒绝该连接请求。
对系统向外发起连接的connect()进行过滤的系统流程与此类似。
其它两个系统调用的功能是,close()关闭伪设备驱动,会释放已分配资源并禁用分布式防火墙;ioctl()用于内核与守候进程之间同步时的错误处理。
5 结论
分布式防火墙实施在各个网络端点上,克服了传统防火墙的缺陷,有效保护了主机,适应了新的网络应用的需要。我们构建了一个可运行的范例展示了分布式防火墙的可行性。其健壮性、有效性和可扩展性还需要作进一步的试验进行评估、测定。