防火墙系统设计要求你能够了解并鉴别你的网络的安全域。网络的安全域是指一个网络中的在统一的安全策略下运行的邻近域。无论这些域的交叉点在那里,在这些域的边界肯定有一种潜在的对策略冲突决策机制的需求。这也是防火墙技术有用的地方。
现在,防火墙最常用于一个组织的内部网络和互联网之间。在设置互联网防火墙的时候,你首先必须决定它的基本结构(假设你已经确定了你的防火墙需求和安全策略,并且决定实施它们)。在本文中,“结构”代表防火墙的各个组成部分(软件和硬件)的总和,以及它们之间的连通性和功能分配。有两种防火墙结构,我们称它们为“单层结构”和“双层结构”。
在单层结构中(见图1-1“单层结构”),一台主机实现所有功能,并且与需要它控制访问的所有网络相连接。这种方法通常适用于对价格敏感或者只有两个网络互联的情况。它的优点在于,那台主机上的防火墙可以监控一切事情。在需要实行的安全策略比较简单,并且接入的网络也不多的情况下,这种结构是十分划算并且容易维护的。它最大的缺点是容易受执行缺陷(Implementation Flaw)以及配置错误的影响——由于这种结构的特性,只要有一个缺陷或者错误,就可以使防火墙失效。
在多层结构中(见图1-2“多层结构”),防火墙功能需要一定数量的主机来实现,而且通常采用级联方式,并且它们之间有DMZ网络。这种结构比单层结构更难设计和操作,但是它能够通过多样化的防御措施而提供更强的安全性。我们建议在每台防火墙主机中使用不同的防火墙技术,虽然这样的花费也更高。这样可以避免在不同的层中出现相同的执行缺陷和配置错误。这种结构最常见的设计方法就是在一个DMZ网络中接入一个由两台主机互联而组成的互联网防火墙。(The most common design approach for this type of architecture is an Internet firewall composed of two hosts interconnected with one DMZ network. )
在确定基本结构(比如主机数量,主机连接方式,每台主机的任务)之后,下一步就是确定这些主机实现的防火墙功能。最基本的两种防火墙功能类型是包过滤和应用代理。这些功能可以单独或者结合使用,并且可以在同一台或者不同的防火墙主机上实现。现在,包过滤防火墙产品已经融入了一些应用代理的特点,并且通常被称作状态验证包过滤(Stateful Inspection Packet Filter)。如果希望了解更多的关于防火墙功能的细节,请参见《Building Internet Firewalls》[Chapman 95]和《Firewalls Complete》[Goncalves 98]以及《Firewalls fend off invasions from the Net》[Lodin 98]。
关于同时使用包过滤和应用代理,这里有一个很好的理由。某些服务(例如SMTP,HTTP,NTP)通常是十分容易通过包过滤控制的,而其他一些服务(例如DNS,FTP)则可能需要一些只有应用代理才有的更复杂的特性。包过滤的速度很快,应用代理的速度要慢一些。在一些要求高访问量控制并且对代理性能要求很高的情况下,状态验证包过滤或许是一个比较折衷的方案。在任何情况下我们都需要尽量使用这些不同的功能(比如包过滤,代理和状态验证),并且将它们应用于合适的地方。
理论上,防火墙结构的设计应该在防火墙硬件和软件选择之前。然而,我们发现在一些组织中,一些形式的防火墙已经在运行了。(However, we recognize that in some organizations, some form of firewall may already be in place.)
为什么很重要
如果你没有选择正确并且有效的防火墙结构,你就可能在使你的组织的安全策略正确执行方面遇到困难。这个设计可以决定那些策略可以被执行,哪些不可以,以及防火墙完成任务的情况等。一旦部署了防火墙,那么,要更改它的结构就是一项困难而昂贵的工作。因此一个有效的,可升级的并且易于管理的防火墙设计就隐含了巨大的价值(节省的费用)。
防火墙系统在安全域的边界提供一个安全策略执行机制。如果对手可以通过利用其他疏于保护的边界以获取对你的网络的访问权(比如一个用户工作站的Modem或者通过合作伙伴的网络),那么,你在与那个网络交界处所部署的所有防火墙以及访问控制边界都会失效。
怎么做
将环境归档
制作和使用图标在你设计防火墙结构的时候是十分重要的。图表是一种十分有效的交流手段,它们也是你在之后避免错误的绝佳工具。最重要的一条基本原则是“如果你画不出来,你就无法构建它”。千万不要忽略或者敷衍这个步骤。一个有效的方法是跟一群有相关知识的人一起用电子白板构建图表。
确定防火墙功能
现在的防火墙产品所提供的功能有包过滤,应用代理和状态验证包过滤。每个功能都包含了一个特定的应用平台范围。防火墙应用平台是特定的硬件和操作系统的结合,防火墙在这个平台上面运行。在某些情况下,功能和平台是独立选择的,但是在另外一些情况下,确定了其中一个就会影响另外一个的选择。接下来的部分讲述了每种功能及其适用平台。
包过滤
因为路由器通常分布在有不同安全需求和安全策略的网络的交界处,因此可以通过在路由器上使用包过滤在可能的情况下实现只允许授权网络的数据进入。在这些路由器上使用包过滤师一种比较经济的在现有路由基础结构上增加防火墙功能的机制。顾名思义,包过滤在路由过程中对指定包进行过滤(丢弃)。对过滤的判断通常基于单个包的头部所包含的内容(例如源地址,目的地址,协议,端口等)。某些过滤工具提供依据其他信息过滤的能力,我们将在下面的状态验证包过滤中介绍。
通常来说,包过滤路由器提供了最高的防火墙性能。然而,由于它们需要比较低级的配置,需要你了解协议2细节,因此比较难配置。
包过滤通常运行在两种平台上
· 作为路由器的通用计算机
· 特殊用途的路由器
下表列举了每种平台理论上的优势和缺点。
作为路由器的通用计算机
特殊用途的路由器
我们发现费用在选择包过滤平台的过程中并不是的主要因素。
特殊用途路由器的商家已经在他们的路由器产品中加入了包过滤功能,以使他们的产品能够根据客户需求和最低的实现成本提供访问控制。但是,他们只是路由器厂商,并不是安全产品生产商,因此当他们需要在安全功能和路由功能之间进行取舍的时候,他们一定会选择路由功能。在这样的情况下,性能是一个路由功能上的问题,而不是安全功能上的。此外,向路由器添加过滤功能可能对性能产生下列消极影响:
· 可能对路由甚至网络性能产生消极影响
· 可能需要更多的内存
通用计算机以及运行于其上的系统软件并没有被设计为象高性能路由器那样。最常见的选择通用计算机的原因有:
· 在同一台机器上使用防火墙机制和包过滤
· 对于被选择平台已经拥有较深入的了解
· 减轻特殊用途路由器的过滤负荷
· 大量的源代码
应用代理
应用代理是一个在两个网络之间的防火墙上运行的应用程序(见图1-3 "Application proxy")。
运行代理的主机并不需要作为路由器。当一个客户程序通过代理建立一个到目的服务器的连接的时候,它首先建立一个到代理服务器的直接连接。然后客户程序与代理商议,通过代理代表客户程序与服务器建立连接。如果成功,应该存在两个连接:一个是客户程序与代理之间的,另外一个是代理与服务器之间的。一旦连接上,代理就开始将从客户程序或者服务器接收到的数据转发给另一方。代理决定所有的连接建立和包转发,运行代理的主机上的所有路由功能都与代理无关。
和包过滤一样,应用代理可以在特殊的代理机服务器运行,也可以在通用计算机上运行。通常,应用代理比包过滤路由器要慢。但是,应用代理在某些方面天生有着比包过滤路由器更高的安全性。包过滤路由器曾经受到执行缺陷及操作系统漏洞的困扰。由于包过滤能力是“附加”到路由功能上的,因此它们无法更正或补偿某些特定类型的路由失败。
由于要进行更复杂的过滤和访问控制,,应用代理需要占用大量的系统资源,并且需要更为昂贵的主机来运行它。比如,如果一个UNIX平台采用了某种防火墙技术,并且需要支持200个并行会话,这台机器必须能够支持200个HTTP代理进程并提供合理的性能。再加上100个FTP会话,25个SMTP会话,一些LDAP会话和一些DNS事务,那么,你就需要一台能够处理500至1000个代理进程的主机。某些代理通过内核线程来实现(这样可以明显的减少资源需求),但是资源需求依旧很高。
状态验证和动态包过滤
我们使用术语“状态验证或动态包过滤”来指代路由器上一组更有能力的过滤功能。包过滤的限制在于它的过滤决策只基于每个单独的包的包头信息,而不考虑任何之前的包。状态验证过滤允许有效负荷(信息内容)的集合和前面的包提供的上下文作用于过滤决策。和包过滤一样,状态验证也是作为路由功能的“附加”而实现的,因此执行状态验证的主机也必须作为路由器。