Sun Java System Messaging Server 6.3 管理指南

23.7 配置客户端对 POP、IMAP 和 HTTP 服务的访问

本节包含以下小节:

Messaging Server 支持对其 IMAP、POP 和 HTTP 服务的基于逐个服务的复杂访问控制,从而,您可以对客户端对服务器的访问权限进行大范围和细分的控制。

如果要为大型企业或 Internet 服务提供商管理邮件传送服务,则这些功能可以帮助您从系统中排除垃圾邮件程序和 DNS 欺骗程序并改进网络的常规安全性。有关对未经许可的海量电子邮件的特殊控制,请参见第 18 章,邮件过滤和访问控制


注 –

对于您的企业来说,如果通过 IP 地址控制访问不是重大问题,则不必创建本节所述的任何过滤器。如果您只需进行最小访问控制,则有关设置最小访问控制的说明,请参见23.7.3.2 通常允许


23.7.1 客户端访问过滤器工作原理

Messaging Server 访问控制设备是一种程序,该程序与其服务于的 TCP 守护程序在同一端口上侦听;访问控制设备使用访问过滤器来验证客户端标识,并可授予客户端对此守护程序的访问权限(如果客户端通过过滤进程)。

作为过滤进程的一部分,Messaging Server TCP 客户端访问控制系统执行(必要时)套接字端点地址的以下分析:

系统会将此信息与称为 filters 的访问控制语句进行比较以决定是允许还是拒绝访问。对于每种服务,分隔允许过滤器和拒绝过滤器控制访问集。允许过滤器明确允许访问;拒绝过滤器明确禁止访问。

客户端请求访问某项服务时,访问控制系统将通过以下标准按顺序将客户端的地址或名称信息与此项服务的每个过滤器进行比较:

此处说明的过滤器语法足够灵活,您应该能够以简单而直观的方式实现许多不同种类的访问控制策略。尽管使用几乎排斥的允许或几乎排斥的拒绝可能实现大多数策略,但是还是可以使用允许过滤器和拒绝过滤器的任何组合。

以下各节详细说明了过滤器语法并给出了用法示例。23.7.4 为服务创建访问过滤器一节介绍了创建访问过滤器的过程。

23.7.2 过滤器语法

过滤器语句包含了服务信息和客户端信息。服务信息可包含服务的名称、主机名和主机地址。客户端信息可包含主机名、主机地址和用户名。服务器信息和客户端信息都可以包含通配符名称或模式。

最简单的过滤器格式是:

service:hostSpec

其中 service 是服务的名称(例如 smtppopimaphttp),而 hostSpec 则是代表客户端请求访问的主机名、IP 地址或者通配符名称或模式。处理过滤器后,如果客户端查找访问与 client 相匹配,则会允许或拒绝(取决于此过滤器的类型)对 service 所指定的服务的访问。以下是一些示例:

imap: roberts.newyork.siroe.com
pop: ALL
http: ALL

如果是允许过滤器,则第一个语句将授予主机 roberts.newyork.siroe.com 对 IMAP 服务的访问权限,而第二个和第三个语句则分别授予所有客户端对 POP 和 HTTP 服务的访问权限。如果是拒绝过滤器,上述语句将拒绝那些客户端对那些服务的访问。(有关通配符名称 [例如 ALL] 的说明,请参见23.7.2.1 通配符名称。)

过滤器中的服务器信息或客户端信息在某种程度上都会比这复杂,在这种情况下过滤器更通用的格式为:

serviceSpec:clientSpec

其中 serviceSpec 可以是 serviceservice@hostSpec,而 clientSpec 可以是 hostSpecuser@hostSpecuser 是与客户端主机查找访问相关联的用户名(或通配符名称)。以下是两个示例:

pop@mailServer1.siroe.com: ALL
imap: srashad@xyz.europe.siroe.com

如果是拒绝过滤器,则第一个过滤器拒绝所有客户端访问 mailServer1.siroe.com 主机上的 SMTP 服务。第二个过滤器拒绝 xyz.europe.siroe.com 主机上的 srashad 用户访问 IMAP 服务(有关何时使用这些扩展的服务器和客户端规范的更多信息,请参见23.7.2.4 服务器主机规范23.7.2.5 客户端用户名规范)。

最后,过滤器具有的最通用的格式为:

serviceList:clientList

其中 serviceList 由一个或多个 serviceSpec 条目组成,而 clientList 则由一个或多个 clientSpec 条目组成。serviceListclientList 内的各个条目以空格和/或逗号分隔。

在这种情况下,处理过滤器以后,如果客户端查找访问与 clientList 中的任何 clientSpec 条目相匹配,则允许或拒绝(取决于这是哪种类型的过滤器)对 serviceList 中指定的所有服务的访问。以下是一个示例:

pop, imap, http: .europe.siroe.com .newyork.siroe.com

如果是允许过滤器,则将授予 europe.siroe.com 域和 newyork.siroe.com 域的任一域中的所有客户端对 POP、IMAP 和 HTTP 服务的访问权限。有关使用前导点或其他模式来指定域或子网的信息,请参见23.7.2.2 通配符模式

您还可以使用以下语法:

"+" 或 "-" serviceList:*$next_rule

+(允许过滤器)意味着允许客户端列表中的客户端访问守护程序列表服务。

-(拒绝过滤器)意味着拒绝客户端列表中的客户端访问这些服务。

*(通配符过滤器)允许所有客户端使用这些服务。

$ 分隔规则。

以下示例在所有客户端上启用了多项服务。

+imap,pop,http:*

以下示例显示了多条规则,但每条规则都简化为仅有一个服务名称并将通配符用作客户端列表。(这是在 LDIF 文件中指定访问控制的最通用的方法。)

+imap:ALL$+pop:ALL$+http:ALL

以下是一个如何对某个用户禁止所有服务的示例:

-imap:*$-pop:*$-http:*

23.7.2.1 通配符名称

可以使用以下通配符名称来代表服务名称、主机名或地址或者用户名:

表 23–3 服务过滤器的通配符名称

通配符名称 

解释 

ALL, *

通用通配符。匹配所有名称。 

LOCAL

与所有本地主机(其名称不包含点字符的主机)相匹配。但是,如果您的安装仅使用规范名称,即使本地主机名将包含点,因而也不会与此通配符相匹配。 

UNKNOWN

与名称未知的所有用户或与名称或地址未知的所有主机相匹配。 

请小心使用此通配符名称: 

由于临时 DNS 服务器问题,主机名可能不可用—在这种情况下,使用 UNKNOWN 的所有过滤器将与所有客户端主机都匹配。

软件无法标识与之通信的网络的类型时,网络地址不可用—在这种情况下,使用 UNKNOWN 的所有过滤器将与此网络中的所有客户端主机都匹配。

KNOWN

匹配用户名称已知的所有用户,或匹配名称地址已知的所有主机。

请小心使用此通配符名称: 

由于临时 DNS 服务器问题,主机名可能不可用—在这种情况下,使用 KNOWN 的所有过滤器都将不适用于所有客户端主机。

软件无法标识与之通信的网络的类型时,网络地址不可用—在这种情况下,使用 KNOWN 的所有过滤器都将不适用于此网络中的所有客户端主机。

DNSSPOOFER

与其 DNS 名称不匹配自身 IP 地址的所有主机相匹配。 

23.7.2.2 通配符模式

可以在服务或客户端地址中使用以下模式:

23.7.2.3 EXCEPT 运算符

访问控制系统支持单运算符。在 serviceListclientList 中有多个条目时,可以使用 EXCEPT 运算符来创建匹配名称或模式的异常情况。例如,以下表达式:

list1 EXCEPT list2

表示与 list1 相匹配的任何内容都匹配,除非它还与 list2 相匹配。

以下是一个示例:

ALL: ALL EXCEPT isserver.siroe.com

如果是拒绝过滤器,则除了 isserver.siroe.com 主机上的客户端之外,将拒绝所有客户端对所有服务的访问。

可以嵌套 EXCEPT 子句。以下表达式:

list1 EXCEPT list2 EXCEPT list3

被鉴定假设其等价为:

list1 EXCEPT (list2 EXCEPT list3)

23.7.2.4 服务器主机规范

通过将服务器主机名或地址信息包含在 serviceSpec 条目中,您可以进一步标识过滤器中所请求的特定服务。在这种情况下,此条目的格式为:

service@hostSpec

为带有不同 Internet 主机名的多个 Internet 地址设置 Messaging Server 主机计算机时,您可能希望使用此功能。如果您是服务提供商,就可以使用此设备在单个服务器实例中控制具有不同访问控制规则的多个域。

23.7.2.5 客户端用户名规范

对于支持 RFC 1413 中所述的 identd 服务的客户端主机,您可以通过在过滤器的 clientSpec 条目中包含客户端的用户名来进一步标识请求服务的特定客户端。在这种情况下,此条目的格式为:

user@hostSpec

其中 user 是由客户端的 identd 服务返回的用户名(或通配符名称)。

在过滤器中指定客户端用户名会很有用,但请记住以下警告:

用户名查找功能在某些情况下可以有助于您防止来自客户端主机上未经验证用户的攻击。这可以在某些 TCP/IP 中实现,例如,对于使用 rsh(远程 Shell 服务)来冒充信任的客户端主机的盗窃信息者来说,如果客户端主机支持 ident 服务,则可以使用用户名查找来检测这样的攻击。

23.7.3 过滤器示例

本节中的示例显示了控制访问的各种方法。研究这些示例时,请记住允许过滤器在拒绝过滤器之前处理,找到匹配项时搜索即终止,并且找不到任何匹配项时将授权访问。

此处列出的示例使用主机名和域名而不使用 IP 地址。请记住,可以在过滤器中包含地址和网络掩码信息,在名称服务失败时,此过滤器可以改进可靠性。

23.7.3.1 通常拒绝

在这种情况下,访问被拒绝(默认)。仅允许明确经过验证的主机访问。

默认策略(无访问)可通过单个普通拒绝文件实现:

ALL: ALL

此过滤器拒绝允许过滤器没有明显授权的所有客户端访问所有服务。然后,允许过滤器可能类似于以下模式:

ALL: LOCAL @netgroup1

ALL: .siroe.com EXCEPT externalserver.siroe.com

第一个规则允许来自本地域(即,主机名中不包含点的所有主机)中的所有主机和来自 netgroup1 组的成员的访问。第二个规则使用前导点通配符模式允许来自 siroe.com 域的除 externalserver.siroe.com 主机之外的所有主机的访问。

23.7.3.2 通常允许

在这种情况下,访问被授权(默认)。仅拒绝明显指定的主机的访问。

默认策略(已授权访问)使允许过滤器不必使用。在拒绝过滤器中明显列出的不需要的客户端的示例如下:

ALL: externalserver.siroe1.com, .siroe.asia.com
ALL EXCEPT pop: contractor.siroe1.com, .siroe.com

第一个过滤器对特殊主机和特定域拒绝所有服务。第二个过滤器仅允许来自特殊主机和特定域的 POP 的访问。

23.7.3.3 拒绝对被欺骗的域的访问

可以在过滤器中使用 DNSSPOOFER 通配符名称来检测主机名欺骗。指定 DNSSPOOFER 时,访问控制系统执行 DNS 的正向或反向查找以验证客户端所提供的主机名与其实际 IP 地址是否匹配。以下是一个拒绝过滤器的示例:

ALL: DNSSPOOFER

对主机的 IP 地址与其 DNS 主机名不匹配的所有远程主机,此过滤器拒绝提供任何服务。

23.7.3.4 控制对虚拟域的访问

如果邮件服务安装使用虚拟域,其中单个服务器实例与多个 IP 地址和多个域名相关联,则您可以通过使用允许过滤器和拒绝过滤器的组合来控制对每个虚拟域的访问。例如,您可以将类似于以下模式的允许过滤器:

ALL@msgServer.siroe1.com: @.siroe1.com
ALL@msgServer.siroe2.com: @.siroe2.com
...

与类似于以下模式的拒绝过滤器配合使用:

ALL: ALL

每个允许过滤器仅允许 domain N 中的主机连接到服务(IP 地址对应于 msgServer.siroeN.com)。所有其他连接都被拒绝。

23.7.3.5 在允许访问 Webmai 时控制 IMAP 访问

如果想允许用户访问 Webmail,但不访问 IMAP,可以创建类似以下的过滤器:


+imap:access_server_host, access_server_host

允许来自访问服务器主机的 IMAP。您可以在 IMAP 服务器级别使用 service.imap.domainallowed,或在域/用户级别使用 LDAP 属性来设置过滤器。

23.7.4 为服务创建访问过滤器

可以为 IMAP、POP 或 HTTP 服务创建允许过滤器和拒绝过滤器。还可以为 SMTP 服务创建这些过滤器,但这些过滤器几乎没有价值,因为它们仅应用到经过验证的 SMTP 会话中。请参见第 18 章,邮件过滤和访问控制

Procedure创建过滤器

  1. 命令行。您还可以通过如下命令行指定访问和拒绝过滤器:

    要创建或编辑服务的访问过滤器:


    configutil -o service.service.domainallowed -v filter
    

    其中 servicepopimaphttp,而 filter 遵循23.7.2 过滤器语法中所述的语法规则。

    要创建或编辑服务的拒绝过滤器:


    configutil -o service.service.domainnotallowed -v filter
    

    其中 servicepopimaphttp,而 filter 遵循23.7.2 过滤器语法中所述的语法规则。有关各种示例,请参见23.7.3 过滤器示例

23.7.5 为 HTTP 代理验证创建访问过滤器

任何存储管理员都可以代理验证任何服务。(有关存储管理员的更多信息,请参见20.4 指定管理员对存储的访问权限。)如果已授权服务的客户端主机通过代理验证访问过滤器访问服务,则可以对这样的服务进行代理验证。

代理验证允许其他服务(例如一个门户站点)验证用户并将验证证书传递给 HTTP 登录服务。例如,假设一个门户站点提供若干服务,其中之一是 Messenger Express 基于 Web 的电子邮件。通过使用 HTTP 代理验证功能,最终用户仅需要对门户服务进行一次验证;而无需在访问其电子邮件时再次验证。门户站点必须配置作为客户端和服务之间界面的登录服务器。为有助于配置登录服务器来验证 Messenger Express,Sun Java System 提供了一个适用于 Messenger Express 的验证 SDK。

本节说明了如何通过 IP 地址创建允许过滤器以允许 HTTP 代理验证。本节未说明如何设置登录服务器或如何使用 Messenger Express 验证 SDK。有关为 Messenger Express 设置登录服务器和使用验证 SDK 的更多信息,请与您的 Sun Java System 代表联系。

Procedure为 HTTP 代理验证创建访问过滤器

  1. 命令行。通过如下命令行为 HTTP 服务的代理验证指定访问过滤器:


    configutil -o service.service.proxydomainallowed -v filter
    

    其中 filter 遵循23.7.2 过滤器语法中所述的语法规则。