- 论坛徽章:
- 0
|
摘要\r\n\r\n本文介绍构建安全的N层环境的一些建议。\r\n\r\n这里提出的架构已经在几个大机构里实现了。实际上,本文可以作为一个学习案例,讲述如何在不同的场所实现一个架构。这里的架构有一个模块化的设计,允许不同的机构根据他们具体的环境选用所需的组件。\r\n\r\n本文针对这样一个事实,许多机构依靠互联网来完成他们的业务,但这些机构没有正确地构建他们的电子商务环境。遵循本文以下建议,这些机构能改进他们的架构以增强可用性和安全性。\r\n\r\n概述\r\n\r\n在设计上,N层架构使用多层环境的特性来增强安全性。虽然这里提出的架构能解决RAS(Reliability-可靠性,Availability-可用性和Serviceability-可服务性)问题,但本文的着重点在于构建一个安全的环境。在设计上要满足RAS的要求,同时要避免降低架构的安全性,这是一个关键之处。\r\n\r\n本文关于增强安全性的论述包括以下几部分:\r\n\r\nn 物理分段\r\n\r\nn OS安装自动化\r\n\r\nn OS安装的强化和最小化\r\n\r\nn 环境分层\r\n\r\nn 专用的网络连接\r\n\r\nn 基于主机的防火墙\r\n\r\nn IP重定向\r\n\r\nn 加密\r\n\r\nn 备份\r\n\r\nn 中心日志生成\r\n\r\nn 入侵侦测\r\n\r\n有万全之策吗?\r\n\r\n这里的架构是基于我在Sun Professional Services - Global Enterprise Security Service (GESS)里工作的经验而提出的。\r\n\r\n开发模块化、健壮而安全的架构的动机,来源于许多机构迅速地开发和部署电子商务的基础应用。虽然我的着重点在于基础应用的安全上,但性能和易于管理问题也是很重要的。\r\n\r\n如果在一个新的场所中有用于测试的模块化的架构,那么开发团队就可以关注其它重要的问题。\r\n\r\n与商场上流行的骗局不同,解决安全问题没有万全之策。虽然本文的重点主要是安全问题,但时间上不允许对方方面面进行讨论。\r\n\r\n本文主要关注于安全的具有高可用性的N层架构,在这个架构里,没有任何一个部件会成为整个环境的单点故障。也并不是所有的建议和需求都适用于所有的机构。\r\n\r\nN层描述\r\n\r\n典型的三层架构中所具有的层如下:\r\n\r\n1. Web服务器/外部服务层\r\n\r\n2. 应用服务器层\r\n\r\n3. 数据库服务器层\r\n\r\n这些层中包括了那些提供不同服务的系统,例如Web服务器层几乎总有以下这些服务:\r\n\r\nn 外部域名服务(DNS)\r\n\r\nn 简单邮件传输协议(SMTP)\r\n\r\nn 文件传输协议(FTP)\r\n\r\n实际上,在N层环境中还有其它的层。如果本文中讲到的所有的特性都要实现的话,那么就应当有以下七层:\r\n\r\n1、Web服务器/外部服务器层\r\n\r\n2、应用服务器层\r\n\r\n3、数据库服务器层\r\n\r\n4、外部资源网/服务提供层\r\n\r\n5、存储区域网络层\r\n\r\n6、备份层\r\n\r\n7、管理控制层\r\n\r\n下图示意了这七层:\r\n\r\n*******************************************************************************\r\n\r\n* 此处有图片 *\r\n\r\n*******************************************************************************\r\n\r\nWeb Server Tier (Tier 1)\r\n\r\nBackup Tier (Tier 6) Extranet Tier (Tier 4)\r\n\r\nDatabase Tier (Tier 3)\r\n\r\nStorage Area Network Tier (Tier 5)\r\n\r\nManagement\r\n\r\nTier (Tier 7)\r\n\r\nApplication Tier (Tier 2)\r\n\r\n*******************************************************************************\r\n\r\n下面对每一个单独的层进行论述:\r\n\r\n1 Web服务器层\r\n\r\n这一层应当只包括那些直接向互联网提供服务的系统,例如DNS、SMTP、HTTP和实用的HTTPS服务。而那些在环境内部提供服务的系统(如轻量目录访问协议-LDAP)就不能在该层出现。但如果LDAP服务是直接向互联网提供的话,那么把LDAP服务器定位在该层则又是恰当的了。\r\n\r\n由于该层中的系统是直接暴露在公开的互联网上的,因而它们最易受到攻击,本文提出的安全建议对这些系统就显得特别重要。\r\n\r\n2 应用服务器层\r\n\r\n这一层包括所有与Web服务器层和数据库服务器层通信的系统,此外,那些Web服务器层需要能够与其通信,但又不能直接向互联网提供服务的服务,也要定位在这一层。一个系统在架构中如何放置的原则就是,服务应当往环境中位置尽量低的层中放。举个例子,如果一个LDAP服务器要在Web服务器层中进行信息认证,但又不能在互联网中被人访问,那么整个服务就可放在与Web服务器层相邻且靠下的层中。\r\n\r\n虽然位于该层的系统没有直接暴露在对外的网络中,但它们对后端数据库中存储信息的访问有严格的权限许可,因此这一层中的系统必须是安全的。\r\n\r\n3 数据库服务器层\r\n\r\n这一层在环境中极其重要,它通常包括关系数据库服务器(RDBMS)和内部DNS服务器等等。此处的这些服务器提供应用服务器层和本层所需的所有服务。虽然从环境之外不能直接访问这些系统,但它们也应当是安全的。\r\n\r\n4 存储区域网络层\r\n\r\n这一层是最近才加到架构中去的。这样做有两个原因,其一,基于IP的存储区域网络(SAN)设备正在越来越广泛地部署使用,这些设备或系统向位于数据库服务器层的某部分服务提供存储空间,因而必须隔离开。\r\n\r\n其二,也是主要的原因,是由于资源外置化的SAN设备的普及。在这种模式下,存储器是作为第三方的外置资源而位于架构中相应的设备中。\r\n\r\n在这种情形下,第三方供应商可以访问存储在SAN中的信息,甚至是网络中的关键服务,因此SAN以及其所在的网络必须是专用的,以便与其它网络隔离开,同时它与第三方存储设备还要有专用的连接。\r\n\r\n5 备份层\r\n\r\n关键数据的备份对于系统支持是至关重要的,但是只有那些具有动态变化数据的系统需要备份。例如,如果外部的Web服务器使用从应用服务器层中动态生成的内容,但它本身没有动态应用信息,那么就不需要备份,但很显然,Web应用程序和OS的日志记录需要上载,除了这些日志记录,就没有需要备份的其它信息了。\r\n\r\n为了只备份尽可能少的系统,备份层就需要减少与它连接的层的数量,每一个连接就向入侵者提供了一个访问备份层内容的方式,而访问备份层就相当于访问了所备份系统中相同的信息。\r\n\r\n6 外部资源网/服务提供层\r\n\r\n几乎每一个电子商务数据处理中心都需要来源于外部资源的信息和服务,这些信息可能象股票机中的股票信息那样简单,也可能象货物运输信息那样复杂。无论这些信息如何,都要求能及时而安全地访问到它。\r\n\r\n不同的机构、服务提供商和合作伙伴提供不同的访问机制得到所需的信息。服务器可能需要位于数据处理中心,或者可能要使用专用出租线路,两种情况下所有的连接(用于数据库服务器层或用于应用服务器层)都位于外部资源网层。如果架构中的其它层要使用这里的信息,那么就要用独立的外部资源网层来容纳所需的必要硬件。\r\n\r\n7 管理控制层\r\n\r\n有些人认为管理控制层是架构中最重要也是最容易受到攻击的层。该层中运行有所有的网络管理软件和服务器管理软件,所有的简单网络管理协议(SNMP)服务器就位于该层,通常用另外的终端控制台来访问该层中的每一个服务。\r\n\r\n由于管理控制层提供管理员权限访问环境,因此该层易于受到攻击。所有的软件升级、调试和打补丁都在该层上执行。这意味着管理员和操作员必须访问该层,或通过本地的Window管理器和桌面系统访问该层。\r\n\r\n深度防范\r\n\r\n深度防范,这个关于安全的概念已经应用于N层架构中。它的前提就是任何层次、任何设备或任何阻塞点都不能在一个机构中成为安全性的单点故障。根据这个前提,通过孤立和隔离服务或服务器,试图访问架构的入侵者在到达敏感信息前就需要穿过好几层。入侵者可能位于机构内部,或者通过外部资源网,或者通过互联网访问。\r\n\r\n通过隔离各个网络和各个层,可以加强侦测企图突破安全的入侵行为的能力。\r\n\r\n隔离\r\n\r\n将具有类似的服务、安全风险和公开要求的系统分割或隔离成层,对于架构而言是很关键的,在一个模块化的N层环境中就要将系统分组,使其能象堆积木那样搭建架构。\r\n\r\n系统建造需求\r\n\r\n所有层中的每一个系统必须是安全的。每一个系统暴露出不同的安全风险,因此对不同的系统,其安全性要求也是不同的。安全性要求随着具体的物理层和它如何与系统(物理层)连接的不同而不同,那些与互联网直接连接的系统最易受到攻击。\r\n\r\n然而,保护与合作伙伴或外部资源网连接的系统,必须象保护那些直接暴露在互联网上的系统的方式那样。每一个系统必须是安全的,这有以下要求:\r\n\r\nn 专一功能\r\n\r\nn 强化系统\r\n\r\nn 基于主机的防火墙\r\n\r\nn 最小化功能\r\n\r\n下面论述其中的每一点:\r\n\r\n专一功能\r\n\r\n专一功能是最重要的。例如,如果把RDBMS安装在外围的web服务器上,那么就不可能建立一个安全的环境。这是一个主要的安全性问题,它与N层架构对横向和纵向扩展性的基本要求相冲突。\r\n\r\n系统应当围绕着它们在环境中提供的服务来建立。例如,一个LDAP服务器只能为向那些需要访问它的网络提供服务,且只能使用具有加密机制的用户访问方式,如SSH。管理员和操作者就只能使用这样的用户访问机制。\r\n\r\n用专一功能方法建立的系统在环境中只提供一种服务,这样通过服务器的客户化可以增强安全性。通过使用专用的硬件,基于主机的防火墙规则、包列表、OS和应用程序的配置就很简单。\r\n\r\n强化(harden)系统\r\n\r\n环境中的每个系统必须得到强化,安全性强化是通过修改Solaris操作环境的默认配置实现的,通常许多安全性的特性都被禁止了。这些特性必须打开以增强抵御对未经认可操作的能力。了解更多关于Solaris操作环境的强化的信息,请参考本文引用中所列的文章“Solaris操作环境安全( Solaris Operating Environment Security)”,该文来自于Sun BluePrints OnLine。此外,有一个工具提供强化Solaris操作环境的脚本,Sun BluePrints OnLine中的文章“Jumpstart架构和安全脚本(JumpStart \r\n\r\n\r\nArchitecture and Security Scripts)”提到了这个工具。\r\n\r\n基于主机的防火墙\r\n\r\n今天,防火墙很常见了,人们通常把它看成是解决安全问题的灵丹妙药。虽然防火墙在N层环境中使用很有效,但它也会引发潜在的问题,特别是由于它成为网络物理层之间的阻塞点,相反防火墙会影响网络的性能和可用性。一些机构在N层环境的每个物理层之间都部署防火墙,这也许是基于最良好的愿望,然而它会显著地影响架构的性能和安全性。\r\n\r\n有几个原因会影响安全性和性能。首先,所有的流量都要经过这个单一的系统(或HA配置的群集防火墙),这样网络交通就易于受到影响。另外,在一个群集的系统中,防火墙要在层间监控网络流量,这会使得满足系统的可扩展性和可用性要求变得更加困难。在一个不允许单点故障的环境里,这是非常严重的。\r\n\r\n其次,在于防火墙的规则集本身。电子商务应用中使用的协议在服务器端和客户端频繁地动态变换端口,而且环境中的协议和服务会越加越多,防火墙打开了这么多的端口,它的安全性功能就会大打折扣。\r\n\r\n第三个原因在于N层架构使用的网络数量。在生产上,如果网络层间使用了防火墙,那么备份网络也要使用防火墙。网络管理是一个关键,当防火墙的数量呈指数级递增时,管理员的噩梦就开始了。\r\n\r\n第四个原因在于对服务的访问。服务器提供的服务很多时候只希望被一个网络所使用,然而大多数服务器至少与三个或更多的网络连接,由于这个因素,未经认可的访问就会来自其他网络,而位于层间的防火墙却不能防御这种情况。\r\n\r\n然而,防火墙所带来的问题还是有解决方案的,这个方案有两部分。首先,安装防火墙前必须对防火墙能带来的效果仔细加以评估。防火墙位置的选择不象检查一个箱子那样简单,如果没有带来安全上的好处,那就不要安装防火墙了。其次,在单独的服务器本身上安装防火墙也许比在层间安装防火墙更有效。在这种方式下,对于向特定的网络提供服务,防火墙可以给出更好的粒度控制,同时防火墙的规则集简单,对网络的影响最小。\r\n\r\n功能最小化\r\n\r\n最小化是指Solaris操作环境中不需的组件不要在系统中安装。来源于Sun BluePrints OnLine的文章“Solaris操作环境最小化(Solaris Operating Environment Minimization)”讲述了实现的方法。每个系统中如果Solaris操作环境的组件数量最少,则需要强化、打补丁和配置的组件数就减少了。决定哪些包是需要的这个过程很费时,因此只对那些特别易受安全性影响的系统才推荐使用该方法。外部Web服务器、防火墙、目录服务器和域名服务器就是使用该方法的最好情形。\r\n\r\n通信和IP重定向\r\n\r\nSolaris操作环境内核有一个设置项,用来使能或禁止系统中网络接口间网络重定向,在N层环境中,每个系统都会有很多网络接口,特别是这些系统还有冗余备份网络连接时。\r\n\r\n如果作为网关或阻塞点的功能不是很明显,那么IP重定向就必须禁止,系统就必须物理地与需要通信的网络连接。粗看这似乎会带来对安全性的负面影响,但另一负面它允许网络连接通过分段而隔离开。\r\n\r\n网络隔离会带来一个好处,它强迫入侵者穿过多层才能访问到敏感信息。要使该方法有效,必须将敏感信息隔离开,放置在多层之后。这就是为什么N层架构分割成许多小网络的主要原因。\r\n\r\n网络流量\r\n\r\n由于基础应用的可用性和性能要求不同,网络安全的目标和要求就有很大的差别。对于一个不允许单点故障的环境,多重网络连接和设备是必须的。即使实现了这样的安排,又会出现管理环境中对网络流量的要求。\r\n\r\n防火墙是一个阻塞点,对网络基础应用有显著的负面影响,因此建议使用基于主机的防火墙取代基于阻塞点的防火墙。然而用专用防火墙得到正确的解决方案则要满足很多条件。\r\n\r\n只有清楚地知道会得到好的效果才使用防火墙,这一点很关键。例如,一个已经强化和最小化的Web服务器仅仅向互联网提供HTTP和HTTPS服务,防火墙对它就没有什么作用。实际上,防火墙真正的用处在于限制在网络接口上提供服务,这对于提供特定功能的应用也许不是必需的。\r\n\r\n网络的吞吐量不能因为安全性的原因而降低,这就是说防火墙必须很好地集成到网络基础中去。\r\n\r\n网络管理问题也是要考虑的。用于监控网络设备的SNMP协议是基于流量管理的,这个弱点是主要的安全性隐患。网络管理必须在隔离的网络中进行,且不要用于其他任何用途。\r\n\r\n系统配置\r\n\r\n将深度防范一节中指出的原理和物理隔离的原则结合起来,安全系统的概念就出现了。用这样的方式建立起来的系统会更安全,这是因为:\r\n\r\nn 只有那些绝对需要的设备才可以提供\r\n\r\nn 只有绝对需要的服务才可以在网络接口上提供\r\n\r\nn 系统是经过强化的\r\n\r\nn 系统是经过最小化的(具有实用性的)\r\n\r\nn 在整个环境中使用基于服务器的防火墙\r\n\r\n综合这些特性,与标准的OS安装相比,系统就会更健壮,对未认可访问的抵抗能力增强了。\r\n\r\n网络连接(Network Segmentation)\r\n\r\n象前面所描述的那样,一个N层架构有多于三个的基础网络层。本文论述的架构多达7层,它用来支持3层应用模型。\r\n\r\n每层之间会有一个唯一的物理连接,此外在Web服务器与互联网之间还有一个连接。7层架构模型包括以下物理连接:\r\n\r\n1、互联网-Web服务器层\r\n\r\n2、Web服务器-应用服务器层\r\n\r\n3、应用服务器层-数据库层\r\n\r\n4. 外部资源网层-数据库层\r\n\r\n5、备份层-需要备份的系统\r\n\r\n6、SAN层-使用SAN的系统\r\n\r\n7、管理控制层-所有的服务器\r\n\r\n网络必须是物理上分开的,有各自的IP地址、网络设备、网络接口服务器和网络线缆。一个架构实现了这些安排,就会增强环境的安全性,因为要访问到敏感信息就要穿越更多的层。下面介绍层间的网络连接:\r\n\r\nn 互联网-Web服务器层\r\n\r\n向Web服务器层中的所有系统提供与互联网的直接连接。\r\n\r\nn Web服务器层-应用服务器层\r\n\r\n象前面所述那样,这个网络连接使用与其他网络连接不同的网络接口和IP地址范围。\r\n\r\nWeb服务器与应用服务器层间所有的通信都要经过这个网络连接。\r\n\r\nn 应用服务器层-数据库层\r\n\r\n象前面所述那样,这个网络连接使用与其他网络连接不同的网络接口和IP地址范围。\r\n\r\n应用服务器与数据库服务器层之间所有的通信都要经过这个网络连接。\r\n\r\nn 外部资源网层-数据库层\r\n\r\n直到最近,外部资源网或与合作伙伴/服务提供商的网络连接才开始普及,几乎每个环境都可找到外部资源网。由于这种类型的网络延伸到其他机构里去,因此网络连接必须仔细地控制和隔离。虽然在N层架构里许多网络连接并没有使用防火墙,但在这个网络连接是部署基于阻塞点方式的包状态过滤(SPF)机制的有效位置。\r\n\r\nn 备份层-需要备份的系统\r\n\r\n备份网络与需要备份的系统相连,它使用单独的网络接口、交换器和IP地址,只有那些需要备份的系统才与备份层相连。例如,外围的Web服务器只有一些静态的配置,几乎没有内容,这种情况下,它就无需备份。在理想情况下,应用层中的系统也属这种情况。\r\n\r\nn SAN层-使用SAN的系统\r\n\r\nSAN层只能与那些需要它提供服务的系统相连,并且只能使用独立的IP地址、网络设备和网络接口。\r\n\r\nn 管理控制层-所有的服务器\r\n\r\n管理网络是最关键,也是最易于遭受攻击的,因为它用于环境的升级、管理和监控。管理网络提供了极高级别的不安全的服务(如Window管理器),能访问环境中所有的系统。\r\n\r\n将管理控制层和环境中所有的系统连接起来的过程分两步。首先,物理地分开和隔离与环境中所有系统连接的管理网络。\r\n\r\n然而,即使使用了独立的网络设备,网络中所有系统之间的互连仍与环境的安全性要求相违背,因此管理网络要通过网关或防火墙系统中独立的接口与每一层相连。网关系统能将网络流量隔离开,同时能允许管理网络与各个系统进行通信。\r\n\r\n建立步骤\r\n\r\n系统的安装和配置要尽量做到自动化(100%的自动化最理想)。这包含OS的安装和配置,网络配置,账号、应用程序和安全性的修改。当使用Solaris操作环境时,建议使用Jumpstart软件工具。理想情况下,所有的安装和配置过程都是自动的。Jumpstart工具中提供了一个框架和许多脚本,可以自动地完成Solaris操作环境中大多数的强化和最小化任务。\r\n\r\n前面所述的在管理控制层中的网关系统也是一个关键的步骤。网关系统不仅是作为防火墙,同时也是启动Jumpstart的服务器。每个网络都需要这些系统,它们提供每个服务器最初的引导启动信息,因为为服务器提供IP地址的协议(反向地址解析协议RARP)不是一个很确定的协议。\r\n\r\n加密\r\n\r\n许多服务可能需要加密,包括环境中那些所有需要与用户交互的应用。这样的协议有TELNET、FTP和r*系列协议,它们要被加密协议所取代,如SSH和SEAM协议。另外使用SKIP和IPSec协议的底层的网络通信也要加密。\r\n\r\n基于协议的非交互的网络也要使用加密和认证机制。如使用远过程调用(RPC)服务的NFS或其他服务应当用更安全的RPC协议来实现。\r\n\r\n备份\r\n\r\n设置备份时,对要备份的信息以及信息是如何备份的进行研究很重要。对安全性敏感的信息如用户账号和密码信息要加密,另外,包含有安全信息的密钥要非常小心地管理好。\r\n\r\n日志集中\r\n\r\n要对系统、网络设备和应用程序进行监控,只有在建立和监控日志的条件下才能侦测到入侵。每个系统中的应用程序会产生不同的日志,OS也会产生日志。至少要对OS产生的日志用基本规则进行审查,但在审查日志时必须先产生它们。因此,环境中的每个系统必须配置成可以产生OS日志,它们必须定向到一个集中的日志库中,以便系统审查。必须仔细地保护好中心日志库,日志库中包含有大量与安全有关的信息,这些信息是入侵者想抹掉的。\r\n\r\n服务器收集到的信息量可能非常大,这个信息量与服务器的数量和生成的日志的级别有关。即使是只生成最基本的日志信息,其信息量也是一个人无法有效审查的。因此中心监控站要安装合适的工具软件来审查这些日志内容,如果侦测到不正常的进入,会有一个报警的机制提示。\r\n\r\n为了有效地集中日志,另一个关键是在这个环境内使用网络时间协议(NTP)。为了有效地统一不同的系统产生的日志记录,使其成为一个综合的整体,所有的系统要有同步的时钟。只要在管理网络里部署一个或两个时间服务器,其他的服务器都与时间服务器同步,这样就可以有效地同步时间。\r\n\r\n入侵侦测\r\n\r\n在设计时将入侵侦测系统考虑进环境中,通常会更有效。在本文论述的分段和分层的架构里,如果所有的网络流量都经过几个共享的网络,入侵侦测系统会发挥更有效的作用。这是由于这样架构的网络经过很好地定义的缘故。每个网段都有熟知的协议数据流在其上经过,入侵侦测系统只需关注那些陌生的协议和和这些协议中的恶意信息流。入侵侦测的任务就显得简单,因而更有效。\r\n\r\n引用参考\r\n\r\nNoordergraaf, Alex和Watson, Keith, Solaris操作环境最小化以增强安全性(Solaris Operating Environment Minimization for Security), Sun BluePrints OnLine, 1999年12月\r\n\r\nhttp://www.sun.com/blueprints/1299/minimization.pdf\r\n\r\nNoordergraaf, Alex和Watson, Keith, Solaris操作环境网络安全性设置(Solaris Operating Environment Network Settings for Security), Sun BluePrints OnLine, 1999年12月\r\n\r\nhttp://www.sun.com/blueprints/1299/network.pdf\r\n\r\nNoordergraaf, Alex和Watson, Keith, Solaris操作环境安全性(Solaris Operating Environment Security), Sun BluePrints OnLine, 2000年1月\r\n\r\nhttp://www.sun.com/blueprints/0100/security.pdf\r\n\r\nNoordergraaf, Alex, Jumpstart架构和安全性脚本工具-第一部分(Jumpstart Architecture and Security Scripts Toolkit - Part 1), Sun BluePrints OnLine, 2000年7月\r\n\r\nhttp://www.sun.com/blueprints/0700/jssec.pdf\r\n\r\nNoordergraaf, Alex, Jumpstart架构和安全性脚本工具-第二部分(Jumpstart Architecture and Security Scripts Toolkit - Part 2), Sun BluePrints OnLine, 2000年8月\r\n\r\nhttp://www.sun.com/blueprints/0800/jssec2.pdf\r\n\r\nNoordergraaf, Alex, Jumpstart架构和安全性脚本工具-第三部分(Jumpstart Architecture and Security Scripts Toolkit - Part 3), Sun BluePrints OnLine, 2000年9月 |
|