如何保护Lotus Domino Web服务器
保护Lotus Domino Web服务器
原文地址:https://www.ibm.com/developerworks/cn/lotus/tutorials/xpages-themes/
马修米尔扎和斯科特罗杰斯
2005年7月19日发布
FacebookTwitterLinked InGoogle+E-mail this page
许多客户将Lotus Domino用于其Intranet或Internet站点。 在这些环境中保护Domino服务器对于确保数据的完整性和Web站点的可用性非常重要,尤其是在Internet上。
在本文中,我们将讨论如何使用Domino安全功能来强制Web环境中的安全性。 我们首先快速概述Domino安全模型。 然后,我们将考虑通过Web身份验证,服务器安全性和数据安全性来保护Web服务器。 本文假设您是一位经验丰富的Domino系统管理员。
Domino安全模型
让我们首先简要回顾一下多层Domino安全模型。 (之前的developerWorks:Lotus文章更详细地讨论了Notes / Domino安全性,例如,“ Notes / Domino安全性概述”。但快速概述将有助于为我们稍后在本文中描述的一些概念奠定基础,特别是关于Domino Web服务器安全性。)
在Lotus Domino中,有几个不同的层可以限制用户对数据和/或资源的访问。 在每个层中,存在用户授权质询。 例如,要访问Domino数据库,必须有权访问数据库所在的Domino服务器。 这些访问层可以分为五大类:
- 服务器访问
- 数据库访问
- 查看访问权限
- 文档访问
- 现场访问
以下部分将回顾这些组。
服务器访问
服务器访问包括:
-
网络访问
网络访问通常由防火墙或路由器控制。 防火墙或路由器可以阻止网络端口,从而限制对Domino服务器的访问。 例如,阻止端口1352的防火墙阻止Notes客户端访问。 -
用户认证
用户身份验证验证用户名和密码是否正确。 这与用户授权不同,用户授权由Domino服务器和Domino数据库执行。 -
Domino服务器
Domino服务器访问在Domino目录的“服务器”文档中定义。 如果用户列在拒绝访问列表中或未列在允许的访问列表中,则无法授予用户访问服务器的权限。 在Lotus Domino 5中,“服务器”文档中的服务器访问设置未应用于使用Web浏览器访问服务器的用户。 但是,Lotus Domino 6允许为Web用户强制执行服务器权限(参见图1)。
图1.为Web用户强制执行服务器访问设置
数据库访问
数据库访问由每个数据库的访问控制列表(ACL)控制。 ACL确定用户是否有权访问数据库以及授予他们的权限级别。 还可以将角色分配给用户和用户组。 应用程序可以使用这些角色为用户授予更具体的访问级别。 例如,您可以授予用户作者对Domino目录的访问权限,但为其分配Group Creator角色。 这允许用户在没有编辑器访问数据库的情况下创建组(参见图2)。
图2. Domino数据库访问控制列表
查看访问权限
视图访问权限由视图属性控制。 您可以定义哪些用户可以查看视图; 但是,用户可以访问显示相同文档的其他视图。 大多数情况下,视图访问提供用户界面管理而不是真正的数据安全性(参见图3)。
图3.查看访问控制
文档访问
文档访问由一个或多个Readers字段控制,这些字段在创建或修改时保存为文档的一部分。 允许的读者在该字段中列出,明确命名可以读取从表单创建的文档的用户和/或组。 如果没有Reader对文档的访问权限,用户就无法在视图或数据库中看到该文档。
现场访问
通过修改字段属性可以隐藏或限制各个字段(参见图4)。
图4.字段隐藏属性
请记住,使用字段隐藏属性时,可以通过其他机制访问数据项。 在这种情况下,字段隐藏提供用户界面管理而不是真正的数据安全性。 此外,可以使用私钥加密字段。 任何没有**的用户都无法访问加密数据。 这为字段提供了安全性,而不是为了接口管理目的而隐藏字段(参见图5)。
图5.现场安全选项
网络安全
现在让我们看一下使用所有五个安全级别的基于Web的示例。 订购和运输公司希望用户通过互联网下订单。 要在DMZ中安全地设置Domino服务器,他们会执行以下操作:
- 限制对端口80(HTTP)和443(HTTPS)的Internet访问。
- 要求所有用户在检查数据库访问权限之前对服务器进行身份验证并验证服务器访问权限 在成功进行身份验证之前,不允许用户读取服务器上的任何网页。
- 通过将“允许HTTP客户端浏览数据库”设置为“否”来禁用服务器浏览
- 修改应用程序数据库上的ACL,仅为用户提供作者访问权限。 这允许他们创建新订单并查看他们过去的订单。
- 限制视图访问权限。 数据库中有多个视图,但用户仅限于“目录”视图和“订单”视图。
- 添加计算的“读者”字段,其中列出了下订单的用户。 订单表单包含几个私人字段,这些字段仅供运输公司用于跟踪订单。使用hide / when公式创建这些字段,以便从下订单的用户隐藏。
现在我们已经查看了Domino安全性的概述,让我们来谈谈覆盖这种多层方法的安全问题。 可从Internet访问的Web服务器可能会受到潜在威胁。 这些威胁特定于可通过Internet访问的服务器的性质。 因此,应该解决三个主要的安全主题:
- Web身份验证
- 服务器安全
- 数据安全
我们现在将注意力转向这些主题,相关威胁以及如何消除威胁。
Web身份验证
Web身份验证是用户向Web服务器标识自己的过程。 这通常是通过用户名和密码对话框提示。 我们假设您设置了一个网站,并强制所有用户进行身份验证。 黑客确定用户名并使用各种密码不断点击您的站点,直到找到正确的密码,从而获得对您站点的访问权限。 这称为字典攻击。 防止此类攻击的最佳方法是实施使密码难以猜测的策略。 密码策略应包括安全措施,例如密码尝试失败后的帐户锁定,最小密码长度或“强度”,密码老化和密码历史记录。 例如,您的密码策略可能类似于以下内容:
- 在三次密码尝试失败后,帐户被锁定15分钟。 这使得很难使用快速循环数百个不同密码的登录例程,直到输入正确的密码。
- 最小密码长度为八个字符。
- 密码必须包含数字和符号。
- 密码必须每60天更改一次。
- 用户不能使用他或她之前的10个密码。
Lotus Domino不提供开箱即用的Web身份验证的密码策略功能,尽管Lotus Domino 7提供了在指定的时间长度后强制执行Internet密码更改的功能。 通过自定义登录表单,可以在当前版本的Lotus Domino中实现密码更改的强制实施。 Lotus Domino 7还允许您锁定用户帐户并在下次身份验证时强制更改密码。
若要实施更强大的Internet密码策略,您可以开发自定义身份验证DSAPI筛选器,或者可以对LDAP目录进行身份验证。 大多数LDAP目录都提供了强制执行适当密码策略的功能。
身份验证的类型
有三种类型的身份验证,每种身份验证都有自己独特的安全问题。 基本认证是简单的用户名和密码认证。 系统会提示用户输入其用户名和密码。 还有基于表单或基于令牌的密码。 系统会提示用户输入用户名和密码,并提供会话cookie或会话标头。然后将此cookie或标头传递到该系统(有时是其他几个系统),并且不再提示用户进行身份验证。 此会话cookie或标头被赋予超时值。 超过超时值后,将再次提示用户输入其用户名和密码。 如果令牌生成机制或标头生成机制变得容易被伪造,这可能导致一些安全问题。 黑客需要做的就是传递正确的令牌或标题,黑客不会受到身份验证的挑战。
第三种认证机制是基于证书的。 这可以通过向网站提供x.509证书的用户来完成。 此证书特定于该个人,并且用户不会受到身份验证的挑战。 如果用户丢失证书或证书被盗,黑客可以访问此信息而不会受到身份验证的质疑。 可以使用x.509证书接受用户名,但仍会提示用户输入PIN或密码。
Domino服务器可以允许Web用户使用许多用户名变体进行身份验证。 Domino Server文档中有一个设置,用于控制可用于标识用户进行身份验证的信息。 默认设置为“安全性较高的名称变化较少”。 此设置允许用户使用以下任何一种进行身份验证:完整的分层名称,公用名称,“个人”文档的用户名字段中的任何别名,Internet地址和uid(参见图6)。
图6.使用更少名称和更高安全性的Internet身份验证
另一个设置是“更多名称变化,安全性更低”。 此设置允许用户使用以下内容进行身份验证:仅限姓氏,仅限名字,短名称,通用名称,完整分层名称,用户名字段中的任何别名,Internet地址和uid。
用户可以通过Web服务器进行身份验证的方式对安全性有直接影响。 允许的名称变体越多,网站对字典攻击的开放程度就越高。 例如,如果姓氏是有效的用户名,那么在大公司中找到“史密斯”或“亚当斯”相当容易。 黑客可以轻松尝试使用任意数量的常用姓氏访问该网站。
可以进一步限制允许的用户名。 通过将NABWebLookupView参数添加到服务器的Notes.ini文件,您可以限制使用哪个视图来标识用户。 例如,您可以在Domino目录中创建一个名为($ web)的自定义视图,该视图按全名排序。 然后,您可以在Notes.ini中设置NABWebLookupView =($ web)参数并重新启动HTTP任务。 任务启动后,只能通过全名访问该网站。 通过修改身份验证筛选器以仅列出允许的LDAP字段名称,LDAP服务器可以实现类似的功能。 默认LDAP身份验证筛选器是(|(cn =%*)(|(&(sn =%a)(givenname =%z))(&(sn =%z)(givenname =%a))))。 此过滤器通常转换为全名身份验证(例如,John Doe)。
Web服务器安全性
安全性的一个重要方面是服务器的物理位置。 服务器应存储在安全的房间中。 这个房间应该有限的访问权限由电子徽章控制。 电子徽章有两个目的:提供实际锁定和解锁门的方法,并跟踪谁进入房间以及何时进入房间。 如果允许未经授权的用户获得对服务器的物理访问,则他有可能获得安全数据或对服务器造成严重损害。 ISO 17799(或BS 7799)是详细的安全标准。 它分为十个主要部分; 其中一个部分是为了物理安全。
还应该保护服务器免受网络访问。 这与物理访问同样重要。 服务器应位于防火墙或能够阻止端口的路由器后面。 服务器只能从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。 加密数据库。 修改复制设置。 删除数据库。 执行较低访问级别允许的所有任务。 |
设计师 | 修改所有数据库设计元素。 创建全文搜索索引。 执行较低访问级别允许的所有任务。 |
编辑 | 创建文档。 编辑所有文档,包括其他人创建的文档。 除非表单中有“读者”字段,否则请阅读所有文档。 如果“读者”字段中未列出编辑器,则具有编辑器ACL访问权限的用户无法读取或编辑该文档。 |
作者 | 如果用户或服务器还具有“创建文档访问级别”权限,则创建文档。 为用户或服务器分配作者访问权限时,还必须指定“创建文档访问级别”权限。 编辑文档中有“作者”字段的文档,并在“作者”字段中指定用户。 除非表单中有“读者”字段,否则请阅读所有文档。 |
读者 | 读取表单中有“读者”字段并在字段中指定用户名的文档。 |
储户 | 创建文档,但除了读取公共文档和写入公共文档的选项之外,无法访问。 这些是设计师可能选择授予的特权。 |
无法访问 | 除了读取公共文档和写入公共文档的选项之外,没有访问权限。 这些是设计师可能选择授予的特权。 |
也可以限制对系统数据库的访问。 您可以启用“不允许URL打开”数据库属性(参见图7)。 这可以防止从Web打开数据库。 这是Lotus Domino 6中引入的功能。如果在Domino目录中启用了此功能,则用户仍可以进行身份验证。 当服务器上的注册用户需要对服务器的其他用户保持匿名时,这非常有用。
图7.不允许URL打开数据库属性
您还应该删除webadmin.ntf和webadmin.nsf数据库。 这消除了未经授权的Web管理访问的风险。 由Carl Kriger撰写的一篇题为“构建安全的多媒体Web应用程序:如何避免8个让您的应用程序大开的开发陷阱”的文章,在2000年7月/ 8月版的The View中发布,详细描述了数据库开发的最佳实践用于安全的Domino Web应用程序。
安全套接字层(SSL)
我们已经保护了对数据的访问权限,但是当用户被授予对数据的访问权限时会发生什么,并且黑客可以在通过Internet发送数据包时访问它们? 为了解决这种可能性,强制通过安全套接字层(SSL)强制进行所有通信。 SSL是一种协议,用于加密与最终用户和Web服务器之间的网络通信。 这允许安全的加密Web浏览,确保用户和服务器之间发送的所有数据都被加密,防止黑客在传输过程中访问信息。
使用Lotus Domino,您可以创建自己的SSL证书,也可以购买第三方证书。 大多数第三方证书都保证**不会被破坏,并提供支付罚款。 SSL可能会产生一些性能影响,因为必须解密发送到服务器和从服务器发送的每个数据。 对于大容量网站,应使用SSL加速卡或设备。
其他数据安全问题
应监视服务器的黑客攻击尝试。 配置事件监视并启用更改数据库ACL时生成的警告。 这将在进行更改时通知您,您应该验证更改是否已获得授权和计划。 此外,启用Domino Web服务器日志。 这会跟踪服务器的每个GET和POST请求。 记录记录传入的IP,请求的URL和引用URL。 还应监视服务器的CPU和内存使用率过高。 这可能表示拒绝服务类型的攻击或过度使用的Web服务器。
拒绝服务攻击既是安全威胁,也是稳定威胁。 它们对Web服务器的性能有直接影响,因为过多的流量可能导致服务器崩溃。有第三方产品可用于防止对Domino Web服务器的拒绝服务类型的攻击。 这些第三方产品记录访问服务器的每个IP。 如果特定IP重复生成失败的登录尝试,则服务器将停止处理该IP的HTTP请求。 大多数这些产品允许在指定的时间段后对服务器进行IP访问。 阻止处理特定IP的HTTP请求可防止暴力密码攻击。 如果IP尝试访问帐户并反复登录失败,则将在服务器上阻止该用户IP。 这是保护密码安全的有效方法。
漏洞扫描有助于识别操作系统或Lotus Domino配置中的任何潜在安全漏洞。 如果服务器CPU和内存似乎运行得过高,则应检查Domino Web日志是否存在拒绝服务类型的攻击。
结论
在本文中,我们概述了Domino安全模型以及一些特定设置,以使Domino Web服务器在单服务器环境中更安全。 这些提示有助于确保Domino托管的Web站点尽可能安全,同时仍为用户提供高性能,可靠性和易用性。
可下载的资源
相关话题
- developerWorks:Lotus文章“ Notes / Domino安全性概述 ”提供了Lotus Notes和Domino中可用的安全性功能的详细摘要。
- 有关Lotus Domino中可用的所有安全功能的详细信息,请参阅Lotus Domino文档 。
- 要了解有关Lotus Notes和Domino的更多信息,请参阅Lotus Notes / Domino产品页面 。