过滤器语句包含了服务信息和客户端信息。服务信息可包含服务的名称、主机名和主机地址。客户端信息可包含主机名、主机地址和用户名。服务器信息和客户端信息都可以包含通配符名称或模式。
最简单的过滤器格式是:
service:hostSpec
其中 service 是服务的名称(例如 smtp、pop、imap 或 http),而 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 可以是 service 或 service@hostSpec,而 clientSpec 可以是 hostSpec 或 user@hostSpec。user 是与客户端主机查找访问相关联的用户名(或通配符名称)。以下是两个示例:
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 条目组成。serviceList 和 clientList 内的各个条目以空格和/或逗号分隔。
在这种情况下,处理过滤器以后,如果客户端查找访问与 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–3 服务过滤器的通配符名称
通配符名称 |
解释 |
---|---|
ALL, * |
通用通配符。匹配所有名称。 |
LOCAL |
与所有本地主机(其名称不包含点字符的主机)相匹配。但是,如果您的安装仅使用规范名称,即使本地主机名将包含点,因而也不会与此通配符相匹配。 |
UNKNOWN |
与名称未知的所有用户或与名称或地址未知的所有主机相匹配。 请小心使用此通配符名称: 由于临时 DNS 服务器问题,主机名可能不可用—在这种情况下,使用 UNKNOWN 的所有过滤器将与所有客户端主机都匹配。 软件无法标识与之通信的网络的类型时,网络地址不可用—在这种情况下,使用 UNKNOWN 的所有过滤器将与此网络中的所有客户端主机都匹配。 |
KNOWN |
匹配用户名称已知的所有用户,或匹配名称和地址已知的所有主机。 请小心使用此通配符名称: 由于临时 DNS 服务器问题,主机名可能不可用—在这种情况下,使用 KNOWN 的所有过滤器都将不适用于所有客户端主机。 软件无法标识与之通信的网络的类型时,网络地址不可用—在这种情况下,使用 KNOWN 的所有过滤器都将不适用于此网络中的所有客户端主机。 |
DNSSPOOFER |
与其 DNS 名称不匹配自身 IP 地址的所有主机相匹配。 |
可以在服务或客户端地址中使用以下模式:
以点字符 (.) 开头的字符串。如果主机名的最后组成部分与指定的模式相匹配,则主机名是匹配的。例如,通配符模式 .siroe.com 与 siroe.com 域中的所有主机都匹配。
以点字符 (.) 结尾的字符串。如果主机地址的首批数字字段与指定的模式相匹配,则主机地址是匹配的。例如,通配符模式 123.45. 与 123.45.0.0 子网中所有主机的地址都匹配。
n.n.n.n/m.m.m.m 格式的字符串。此通配符模式被解释为一个 net/mask 对。如果 net 与地址的按位 AND 和 mask 相等,则该主机地址是匹配的。例如,模式 123.45.67.0/255.255.255.128 与范围在 123.45.67.0 到 123.45.67.127 之间的所有地址都匹配。
访问控制系统支持单运算符。在 serviceList 或 clientList 中有多个条目时,可以使用 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)
通过将服务器主机名或地址信息包含在 serviceSpec 条目中,您可以进一步标识过滤器中所请求的特定服务。在这种情况下,此条目的格式为:
service@hostSpec
为带有不同 Internet 主机名的多个 Internet 地址设置 Messaging Server 主机计算机时,您可能希望使用此功能。如果您是服务提供商,就可以使用此设备在单个服务器实例中控制具有不同访问控制规则的多个域。
对于支持 RFC 1413 中所述的 identd 服务的客户端主机,您可以通过在过滤器的 clientSpec 条目中包含客户端的用户名来进一步标识请求服务的特定客户端。在这种情况下,此条目的格式为:
user@hostSpec
其中 user 是由客户端的 identd 服务返回的用户名(或通配符名称)。
在过滤器中指定客户端用户名会很有用,但请记住以下警告:
identd 服务未经验证;如果客户端系统已损坏,则不能信任此服务返回的客户端用户名。总的来说,请不要使用具体的用户名;仅使用通配符名称 ALL、KNOWN 或 UNKNOWN。
大多数现代客户端计算机都不支持 identd,因此它在现代部署中提供的附加值不大。我们正考虑在将来的版本中删除 identd 支持,所以如果此功能对您站点有价值,请通知 Sun Java System。
用户名查找需要花费时间;对所有用户执行查找可能会减慢不支持 identd 的客户端的访问。有选择的用户名查找可以缓解此问题。例如,如下规则:
serviceList:@xyzcorp.com ALL@ALL
将匹配 xyzcorp.com 域中的用户而不执行用户名查找,但它将对所有其他系统执行用户名查找。
用户名查找功能在某些情况下可以有助于您防止来自客户端主机上未经验证用户的攻击。这可以在某些 TCP/IP 中实现,例如,对于使用 rsh(远程 Shell 服务)来冒充信任的客户端主机的盗窃信息者来说,如果客户端主机支持 ident 服务,则可以使用用户名查找来检测这样的攻击。