现在,防火墙最常用于一个组织的内部网络和互联网之间。在设置互联网防火墙的时候,你首先必须决定它的基本结构(假设你已经确定了你的防火墙需求和安全策略,并且决定实施它们)。在本文中,“结构”代表防火墙的各个组成部分(软件和硬件)的总和,以及它们之间的连通性和功能分配。有两种防火墙结构,我们称它们为“单层结构”和“双层结构”。
在确定基本结构(比如主机数量,主机连接方式,每台主机的任务)之后,下一步就是确定这些主机实现的防火墙功能。最基本的两种防火墙功能类型是包过滤和应用代理。这些功能可以单独或者结合使用,并且可以在同一台或者不同的防火墙主机上实现。现在,包过滤防火墙产品已经融入了一些应用代理的特点,并且通常被称作状态验证包过滤(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")。
运行代理的主机并不需要作为路由器。当一个客户程序通过代理建立一个到目的服务器的连接的时候,它首先建立一个到代理服务器的直接连接。然后客户程序与代理商议,通过代理代表客户程序与服务器建立连接。如果成功,应该存在两个连接:一个是客户程序与代理之间的,另外一个是代理与服务器之间的。一旦连接上,代理就开始将从客户程序或者服务器接收到的数据转发给另一方。代理决定所有的连接建立和包转发,运行代理的主机上的所有路由功能都与代理无关。
图1-3 "Application proxy"
和包过滤一样,应用代理可以在特殊的代理机服务器运行,也可以在通用计算机上运行。通常,应用代理比包过滤路由器要慢。但是,应用代理在某些方面天生有着比包过滤路由器更高的安全性。包过滤路由器曾经受到执行缺陷及操作系统漏洞的困扰。由于包过滤能力是“附加”到路由功能上的,因此它们无法更正或补偿某些特定类型的路由失败。
由于要进行更复杂的过滤和访问控制,,应用代理需要占用大量的系统资源,并且需要更为昂贵的主机来运行它。比如,如果一个UNIX平台采用了某种防火墙技术,并且需要支持200个并行会话,这台机器必须能够支持200个HTTP代理进程并提供合理的性能。再加上100个FTP会话,25个SMTP会话,一些LDAP会话和一些DNS事务,那么,你就需要一台能够处理500至1000个代理进程的主机。某些代理通过内核线程来实现(这样可以明显的减少资源需求),但是资源需求依旧很高。
状态验证和动态包过滤
我们使用术语“状态验证或动态包过滤”来指代路由器上一组更有能力的过滤功能。包过滤的限制在于它的过滤决策只基于每个单独的包的包头信息,而不考虑任何之前的包。状态验证过滤允许有效负荷(信息内容)的集合和前面的包提供的上下文作用于过滤决策。和包过滤一样,状态验证也是作为路由功能的“附加”而实现的,因此执行状态验证的主机也必须作为路由器。
状态验证的原理机能是性能和安全的折中。作为路由功能的“附加”,状态验证提供了比代理更好的性能。它也提供了比简单的包过滤更高级的防火墙功能。它能够像代理一样指定更复杂的访问控制标准,也能像包过滤一样基于高质量(比如,准确的)下层路由实现。
需要了解更多关于状态验证和动态包过滤的信息,请参阅《Stateful Inspection Firewall Technology Tech Note》(Check Point 98)和《Application Gateways and Stateful Inspection: A Brief Note Comparing and Contrasting.》(Avolio 98)。更多关于所有防火墙功能以及赞成和反对这些功能的原因,请参见《Firewalls and Internet Security》 (Cheswick 94),《Building Internet Firewalls 》(Chapman 95),《Firewalls Complete》(Goncalves 98),《Third Annual Firewall Industry Guide》(ICSA 98),和《Internet Security Policy: A Technical Guide》(NIST 98)。《Firewalls Market Survey》(SC 99)是一篇关于13个厂商的防火墙产品及其支持的功能的摘要。
对于选择防火墙功能,我们有如下建议:
功能 |
包过滤(PF) |
应用代理(AP) |
状态验证和 动态包过滤 (SI) |
包过滤和 应用代理 |
状态验证,包过滤 和应用代理 |
平台a |
SP GP |
SP GP |
SP GP |
SP GP |
SP GP |
协议/服务b |
A A |
S S |
A A |
A A |
A A |
支持c |
T S |
T S |
T S |
T S |
T S |
安全需求d |
L L |
H H |
M M |
L(PF) L(PF) H(AP) H(AP) |
L(PF) L(PF) M(SI) M(SI) H(AP) H(AP) |
性能/平均需求e |
H H |
L L |
M(SI) M(SI) H(PF) H(PF) |
L(AP) L(AP) H(PF) H(PF) |
L(AP) L(AP) M(SI) M(SI) H(PF) H(PF) |
a. SP – <span style='font-size:10.0pt;font-family:宋体;mso-ascii-font-family:Helvetica; mso-hansi-font-family