内容


保证 Lotus Domino Web 服务器的安全

Comments

许多客户都将 Lotus Domino 用于其内部网或 Internet 站点。在这些环境中 —— 特别是在 Internet 上,保护 Domino 服务器的安全对于确保数据的完整性和 Web 站点的可用性来说至关重要。

在本文中,我们将探讨如何使用 Domino 安全特性来加强 Web 环境的安全性。我们将从快速浏览 Domino 安全模型开始。然后将查看如何通过 Web 身份验证、服务器安全性和数据安全性来确保 Web 服务器的安全。本文假定读者是一名有经验的 Domino 系统管理员。

Domino 安全模型

让我们从简要回顾多层 Domino 安全模型开始。(以前的一些 developerWorks:Lotus 文章已经详细探讨了 Notes/Domino 的安全性,例如“Overview of Notes/Domino security”。这一简要回顾为我们稍后将在文章中描述的一些概念打下了基础,特别是关于 Domino Web 服务器安全性的那些概念。)

在 Lotus Domino 中有几个不同的层,这这些层中,可以限制用户对数据和/或资源的访问。在每一层中都存在一个用户身份验证难题。例如,要获得对 Domino 数据库的访问权,必需先获得访问数据库所在的 Domino 服务器的权利。这些访问层可以划分为 5 个更一般的类别:

  • 服务器访问
  • 数据库访问
  • 视图访问
  • 文档访问
  • 字段访问

以下几节是对各个组的回顾。

数据库访问

数据库访问包括:

  • 网络访问
    数据库访问通常由防火墙或路由器控制。防火墙和路由器能够阻塞网络端口,限制对 Domino 服务器的访问。例如,防火墙通过阻塞 1352 端口来阻止对 Notes 客户机的访问。
  • 用户身份验证
    用户身份验证确认用户名和口令是否正确。与用户授权不同,后者是通过 Domino 服务器和 Domino 数据库执行的。
  • Domino 服务器
    Domino 服务器访问是在 Domino 目录的 Server 文档中定义的。如果用户出现在禁止访问列表中,或没有列在允许访问列表中,那么就不能授予该用户访问服务器的权限。在 Lotus Domino 5 中,Server 文档中的服务器访问设置不会应用于通过 Web 浏览器对服务器进行访问的用户。然而,Lotus Domino 6 允许强行授予 Web 用户访问服务器的权限(参见图 1)。
图 1. 对 Web 用户执行服务器访问设置
对 Web 用户执行服务器访问设置
对 Web 用户执行服务器访问设置

数据库访问

数据库访问是由每个数据库的访问控制列表 (Access Control List,ACL) 控制的。ACL 确定用户是否具有访问数据库的权限,并授予用户权限级别。还可以为用户和用户组分配角色。应用程序可以用这些角色授予用户更多特定访问级别。例如,可以授予用户访问 Domino 目录的作者权限,但为该用户分配 Group Creator 角色。这允许用户在没有访问数据库的编辑访问权限的情况下创建组(参见图 2)。

图 2. Domino 数据库访问权限列表
Domino 数据库访问权限列表
Domino 数据库访问权限列表

视图访问

视图访问由视图属性控制。可以定义哪些用户能够查看视图;尽管如此,用户可以访问同一文档中的其他视图。多数情况下,视图访问为用户提供的是管理接口,而不是真正的数据安全(参见图 3)。

图 3. 视图访问控制
视图访问控制
视图访问控制

文档访问

文档访问由一个或多个 Readers 字段控制,在创建和修改文档时,这些 Readers 字段是作为文档的一部分保存的。字段中列出了所允许的读者,明确指定了可以读取表单中所创建文档的用户和/或组。如果没有访问文档的 Reader 访问权限,那么用户将无法看到视图和数据库中的文档。

字段访问

可以通过修改字段属性来隐藏或限制单个字段(参见图 4)。

图 4. 字段隐藏属性
字段隐藏属性
字段隐藏属性

请记住,在使用字段隐藏属性时,可以通过其他机制访问数据条目。在这种情况下,字段隐藏为用户提供的是接口管理,而不是真正的数据安全。同样,可以使用私钥对字段进行加密。任何没有密钥的用户都不能够访问加密的数据。在反对为实现接口管理目的而隐藏字段的同时,这为字段提供了安全性。

图 5. 字段安全选项
字段安全选项
字段安全选项

Web 安全性

现在让我们看一个基于 Web 的例子,这个例子使用了所有 5 种安全级别。一家定购运输公司想让用户通过 Internet 提交订单。为了确保安全,当在他们的 DMZ 中配置 Domino 服务器时,他们进行了如下操作:

  1. 限制通过 Internet 对 80 (HTTP) 端口和 443 (HTTPS) 端口的访问。
  2. 要求所有的用户都必须在服务器上进行身份验证,并且在检验数据库访问前确认服务器访问。直到用户身份验证成功,否则他们将不能读取服务器上的任何 Web 页面。
  3. 通过将“Allow HTTP clients to browse databases”设置为 No 来禁用服务器浏览。
  4. 修改应用程序数据库上的 ACL,只赋予用户作者权限。这允许他们创建新的订单并查看过去的订单。
  5. 限制视图访问。数据库中有一些视图,但是限制用户只能访问 Catalog 视图和 Orders 视图。
  6. 添加计算后的 Readers 字段,该字段列出了提交了订单的用户。订单表单包括几个私有字段,只供运输公司追踪订单时使用。这些字段是在用户提交订单时隐藏了规则的情况下创建的。

现在我们已经概括了 Domino 的安全性,接下来我们将探讨涉及这个多层方法的安全问题。Internet 上可访问的数据库都面对着潜在的威胁。这些威胁都是特定于能够通过 Internet 访问的服务器的特性的。因此,产生了三个需要探讨的主要安全主题:

  • Web 身份验证
  • 服务器安全性
  • 数据安全性

我们现在把注意力放在这些主题、相关的威胁和如何消除这些威胁上。

Web 身份验证

Web 身份验证是用户向 Web 服务器确认自身的过程。这通常是通过用户名和口令对话框提示实现的。假设您要设置一个 Web 站点,并强制所有用户都进行身份验证。黑客使用一个固定的用户名和不同的口令不断地访问您的站点,直到获得正确口令,从而访问您的 Web 站点。这被称为字典攻击。 防止这种类型攻击的最佳方法是加强策略,使口令很难被猜中。口令策略应该包括安全措施,例如口令尝试失败后进行口令锁定、最短口令长度或“强度”、 口令老化和口令历史记录。例如,您的口令策略可能与下面的相似:

  • 口令尝试失败三次后,帐号锁定 15 分钟。这使得那些快速循环使用上千个不同的口令、直到输入正确口令的登录例程变得难以应用。
  • 口令的最短长度为 8 个字符。
  • 口令必需包含数字和符号。
  • 口令必需每隔 60 天进行更改。
  • 用户不能够使用他或她前 10 次使用过的口令。

尽管 Lotus Domino 7 提供了在一特定时间段后强制更改网络口令的功能,但是 Lotus Domino 并没有为 Web 身份验证提供开箱即用的口令策略功能。在 Lotus Domino 的当前版本中,这种强制口令更改可以通过定制登录表单来实现。Lotus Domino 7 还允许锁定用户帐号,在下次身份验证时强制更改口令。

要实施较强 Internet 口令策略,可以开发定制的身份验证 DSAPI 过滤器,或者可以依据 LDAP 目录进行身份验证。大多数 LDAP 目录能实施足够强的口令策略。

身份验证的类型

身份验证的类型有三种,每种类型都有其自身独特的安全问题。基本的身份验证是简单的用户名身份验证和口令身份验证,系统会提示用户输入其用户名和口令。口令分为基于表单的口令和基于标记的口令。用户会获得提示,要求输入用户名和口令,并将口令和密码保存在会话 cookie 或会话 header 中。然后将此 cookie 和 header 传递到将要登录的系统中(有时是其他几个系统),系统不会再提示用户进行身份验证。指定会话 cookie 和 header 的超时值。超过这个超时值之后,保存的值将过期,并且系统会提示用户再次输入用户名和密码。这可能会产生一些安全问题,伪造标记或 header 的产生机制会变得很容易。黑客需要做的全部事情就是传送正确的标记或 header,系统不会要求他们进行身份验证。

第三种类型的身份验证机制是基于证书的。可以通过用户向站点提供 x.509 证书来实现这种身份验证。证书是特定于每一位用户的,用户在进行身份验证方面不存在什么困难。如果用户的证书丢失或被盗,黑客就能够访问信息而不用经过身份验证。可以使用 x.509 证书来接受用户名,但系统仍然会提示用户输入 PIN 或口令。

Domino 服务器允许 Web 用户通过许多不同的用户名进行身份验证。可以在 Domino Server 文档中进行设置,控制可以用什么样的信息对用户进行身份验证。默认设置是“Fewer name variations with higher security”。该设置允许用户通过下列任何方式进行身份验证:完整层次结构名、公用名称、个人文档用户名字段中的任何别名、Internet 地址和 uid(参见图 6)。

图 6. 使用较少的名称和较高的安全性进行 Internet 身份验证
使用较少的名称和较高的安全性进行 Internet 身份验证
使用较少的名称和较高的安全性进行 Internet 身份验证

另一个设置是“More name variations with lower security”。该设置允许用户通过下列任何方式进行身份验证:仅使用姓、仅使用名、简称、公用名称、完整层次结构名、用户名称域中的任何别名、Internet 地址和 uid。

用户可以通过 Web 服务器进行身份验证的方法的数量对安全性有直接的影响。允许使用的名称形式越多,Web 站点受到字典攻击的可能性就越大。例如,如果姓是有效的用户名,那么在一家大公司中很容易找到“Smith”或“Adams”这样的用户名。于是黑客就可以通过任意数量的常见姓氏,很容易地获得站点的访问权限。

进一步限制所允许的用户名是可以做到的。通过将 NABWebLookupView 属性添加到服务器的 Notes.ini 文件中,可以限制用哪一个视图标识用户。例如,在 Domino 目录中创建一个名为 ($web) 的客户视图,并使用全名保存它。然后就可以在 Notes.ini文档中设置 NABWebLookupView=($web) 参数,并重启 HTTP 服务。启动任务之后,Web 站点就会只接受全名。在 LDAP 服务器上,可以通过修改身份验证过滤器,只列出所允许的 LDAP 字段名称,也可以实现类似的功能。默认的 LDAP 身份验证过滤器是 (|(cn=%*)(|(&(sn=%a)(givenname=%z))(&(sn=%z)(givenname=%a))))。这个过滤器通常转换为根据全名进行身份验证(例如:John Doe)。

Web 服务器安全性

安全性的一个重要方面是服务器的物理位置。服务器应该存储在一个安全的房间里。这个房间应该只具有有限的访问权限,这些权限通过电子标记来控制。电子标记可以起两个作用:对房间进行实际的锁定和开锁,跟踪哪些人进入该房间以及何时进入的。如有未授权的用户被允许对服务器进行物理访问,那么他有可能盗取了加密数据或对服务器进行严重的破坏。ISO 17799(或 BS 7799)是一个具体的安全标准。主要包括 10 个部分,其中有一个部分讲述的就是物理安全问题。

还应该从网络访问方面确保服务器的安全性。这与物理访问同样重要。服务器应该位于防火墙或能阻塞端口的路由器之后。通过 Internet 只能访问服务器的端口 80 和 443。内部用户只能通过端口 80 HTTP、443 HTTPS 和 1352 NRPC 访问服务器。在基于 Unix 的系统上,您可能还需要打开用于 SSH 的端口 22,或打开用于 Windows 终端服务的端口 3389。但是,建议您不要打开这些端口,而是直接在服务器上执行管理任务。这些协议都已经经过加密,使用的是操作系统身份验证方法。这样可以防止大多数攻击直接发生在操作系统上。通过限制端口访问,可以阻止对其他所有服务(例如,文件共享)和 FTP 的攻击。

现在我们已经确保了服务器的安全,接下来应该讨论服务器在网络拓扑结构中的位置。外部 Web 服务器可以放在外部网或 DMZ 中。服务器的位置取决于服务器是否需要访问内部服务器来复制数据或对用户进行身份验证。为获得最高安全性,该服务器应该只能放在外部网上。这样,即使黑客获得了访问服务器的访问权限,他们也无法获得访问任意内部服务器的访问权限。如果服务器需要访问内部数据,并且能通过 Internet 访问该服务器,那么建议将服务器放在内部网络中,并使用一个反向代理服务器。反向代理服务器可以保护服务器免受病毒攻击和大多数黑客攻击,因为反向代理服务器是惟一能够通过 Internet 访问的服务器。同时,使用反向代理服务器可使解决方案具有可扩展性和容错性。

应该不断地更新操作系统。管理员应该密切注意发布了哪些安全补丁,它们是否适用于自己的系统。关于安全补丁的一个重要方面,就是需要根据操作系统来安排停机时间。建议您创建一个每周打开一次的停机窗口,以便应用安全补丁。在 Windows 服务器上,必需有这种维护窗口,但是在 Domino 服务器仍然运行的同时,可以将补丁应用到大多数基于 Unix 的操作系统上。当服务器正在运行时,惟一不能应用的补丁是更新内核程序和 TCP/IP 堆栈的补丁。这些补丁要求重新启动 Unix 操作系统。

服务器应该包含操作系统和 Domino 病毒扫描功能。这样可以确保任何要发送和接收的电子邮件都不包含病毒。任何存储在服务器上的文件都不包含病毒,存储在 Domino 数据库中的任何附件也不包含病毒。这非常重要,因为病毒具有破坏性,会限制服务器的可用性,还会引起隐私问题。

数据安全性

现在我们已经确保了操作系统和服务器的安全性,接下来将讨论如何确保 Domino 服务器上数据库的安全性。设置 ACL,使之具有适当的权限访问数据库,这非常重要。应该列出具有管理员权限的管理员,所有用户都应该具有编辑者或较低访问级别。对数据库的可用访问级别如下表所示。

访问级别允许用户
管理者修改数据库 ACL。
加密数据库。
修改复制设置。
删除数据库。
执行较低访问级别允许的所有任务。
设计者修改数据库所有的设计元素。
创建全文检索索引。
执行较低访问级别允许的所有任务。
编辑创建文档。
编辑所有的文档,包括其他人创建的文档。
阅读所有的文档,除非表单中有 Readers 字段。如果在 Readers 字段中没有列出该编辑,那么具有编辑 ACL 访问权限的用户不能阅读和编辑这个文档。
作者如果用户或服务器还具有 Create documents 访问级别权限,那么可以创建文档。当分配对用户或服务器的作者访问级别时,还必须同时指定创建文档访问级别的权限。
编辑文档,文档中有 Authors 字段并且用户名存在于 Authors 字段中。
阅读所有的文档,除非表单中有 Readers 字段。
读者阅读文档,表单中有 Readers 字段并且字段中已经指定了用户名。
存放者创建文档,但是除了读公共文档和写公共文档之外都拒绝访问。这些是设计者可以选择获得的特权。
拒绝访问除了 Read 公共文档和 Write 公共文档之外都拒绝访问。这些是设计者可以选择获得的特权。

还可以限制对系统数据库的访问。您可以启用“Don’t allow URL open”数据库属性(参见图 7)。这样可以防止从 Web 打开数据库。这是 Lotus Domino 6 中引入的功能。如果在 Domino 目录中启用了该功能,那么仍旧可以对用户进行身份验证。当某台服务器上的已注册用户需要保持该服务器的其他用户的匿名时,这非常有用。

图 7. 不允许打开 URL 数据库属性
不允许打开 URL 数据库属性
不允许打开 URL 数据库属性

还应该删除 webadmin.ntf 和 webadmin.nsf 数据库。这样会消除未授权 Web 管理访问的风险。Carl Kriger 撰写了一篇文章,标题为“Building Secure Domino Web Applications: How to Avoid 8 Development Pitfalls That Leave Your Application Wide Open”,在 The View 的 2000 年 7/8 月版上发表,这篇文章详细讲述了安全 Domino Web 应用程序的数据库开发的最佳实践。

安全套接字层 (SSL)

我们已经确保了访问数据的安全性,但在授予用户访问数据的权限,而黑客却能够访问通过 Internet 传输的数据包时,会出现什么情况呢?要解决这种可能出现的情况,需要强制所有通信都通过安全套接字层 (SSL) 进行传输,这一点至关重要。SSL 是一种协议,该协议会对终端用户和 Web 服务器间的网络通信进行加密。这将允许进行安全加密的 Web 浏览,确保所有在用户和服务器间传送的数据都经过了加密,防止黑客在数据传输过程中获取信息。

使用 Lotus Domino,您可以创建自己的 SSL 证书,也可以购买第三方证书。大多数第三方证书都保证密钥不会被破解,如果被破解,他们将负责提供赔偿。SSL 对性能有一定影响,因为每个发送到服务器和从服务器传出的数据片都必须加密。对于高容量的 Web 站点,应该使用 SSL 加速卡或加速设备。

其他数据安全问题

应该对服务器进行监控,以防止黑客攻击。需要配置更改数据库 ACL 时生成的事件监控和警告。这样您会获得通知,知道数据库何时做了更改,然后您应该验证此更改是否被授权并且是计划好的。另外,还应该启用 Domino Web 服务器日志。这样可以跟踪针对服务器的每个 GET 和 POST 请求。日志会记录外来 IP、所请求的 URL 和引用 URL。应该对服务器进行监控,防止出现过高的 CPU 和内存使用。过高的 CPU 和内存使用可能预示着存在拒绝服务型攻击,或者 Web 服务器在超负荷运行。

拒绝服务攻击既对安全性造成威胁,也对稳定性造成威胁。他们会直接影响 Web 服务器的性能,因为过量的通信会导致服务器崩溃。现在有一些第三方产品可以防止 Domino Web 服务器上的拒绝服务型攻击。这些第三方产品可以记录访问服务器的每一个 IP。如果某一特定 IP 不断尝试登录,那么服务器将停止处理该 IP 的 HTTP 请求。大多数产品都允许 IP 在特定时间段后重新访问服务器。通过阻塞特定 IP 的 HTTP 请求处理,可以防止暴力破解口令攻击。如果有一个 IP 试图通过某一帐户不断地访问并登录失败,那么服务器将锁定该用户 IP。这是一种有效的保护口令安全性的方法。

漏洞攻击扫描有助于识别操作系统或 Lotus Domino 配置中潜在的安全漏洞。如果服务器 CPU 和内存的运用率极高,那么应该检查 Domino Web 日志是否存在拒绝服务型攻击。

结束语

在本文中,我们概述了 Domino 安全模型和某些特定设置,使 Domino Web 服务器在单服务器环境中更安全。这些技巧将有助于确保 Domino 主机上的 Web 站点尽可能的安全,同时仍然可以为用户提供高性能、高可靠性和高易用性。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=94447
ArticleTitle=保证 Lotus Domino Web 服务器的安全
publish-date=08222005