Sun Java System Messaging Server 6.3 管理指南

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 服务,则可以使用用户名查找来检测这样的攻击。