上一页    目录    索引    下一页
iPlanet Messaging Server 5.2 管理员指南

第 10 篇 邮件过滤与访问控制


本章介绍邮件服务的访问控制方法以及通过映射表和服务器端规则(SSR)过滤邮件的方法。

有时您可能需要在系统级上拒收发自(或发至)某些用户的邮件,或在某些用户之间设定较复杂的信量限制条件,或准许用户为其各自的来件设置过滤器(包括根据邮件头内容拒收邮件)。

如果需要在信封级上进行控制,则可用映射表过滤邮件。如果需要使用基于邮件头的控制,或如果用户希望实现他们各自的个人化控制,则可采用较一般的邮件过滤方法,服务器端规则在此种情况下较为适切。

本章共分两个部分:

第一部分:映射表

第二部分:邮箱过滤器


第一部分:映射表



第一部分包括下列章节:


用映射表控制访问

您可通过配置映射表对用户访问邮件服务实行控制。您可用映射表控制哪些用户能或不能发送邮件、接收邮件或收发兼而有之(表 10-1)。有关映射文件格式和使用的一般信息,请参见 iPlanet Messaging Server Reference Manual

表 10-1 列示了本节描述的映射表。

表 10-1 访问控制映射表


映射表

说明

SEND_ACCESS
(参见 1。)

用于以信封 From 地址,信封 To 地址,源通道和目标通道为根据,阻塞入站连接。在完成了重写、别名扩展等操作后,系统将对 To 地址加以核实。

ORIG_SEND_ACCESS
(见 1。)

用于以信封 From 地址,信封 To 地址,源通道和目标通道为根据,阻塞入站连接。在完成了重写后但在别名扩展操作前,系统将对 To 地址加以核实。

MAIL_ACCESS
(见 1。)

用于阻塞入站连接,所用根据是在 SEND_ACCESSPORT_ACCESS 表中找到的综合信息:即 SEND_ACCESS 表中找到的通道和地址信息与 PORT_ACCESS 表中找到的 IP 地址和端口号信息的结合体。

ORIG_MAIL_ACCESS
(见 1。)

用于阻塞进入的连接,所用根据是在 ORIG_SEND_ACCESSPORT_ACCESS 表中找到的综合信息:即 ORIG_SEND_ACCESS 表中找到的通道和地址信息与 PORT_ACCESS 表中找到的 IP 地址和端口号信息的结合体。

FROM_ACCESS
(见 1。)

用于根据信封 From 地址过滤邮件。如果 To 地址不相关,可使用此表。

PORT_ACCESS
(见 1。)

可根据 IP 号阻塞外来的连接。

MAIL_ACCESSORIG_MAIL_ACCESS 映射是最通用者,不仅能提供可用于 SEND_ACCESSORIG_SEND_ACCESS 的地址和通道信息,而且还能提供任何可通过 PORT_ACCESS 映射表而使用的信息,其中包括 IP 地址和端口号信息。


SEND_ACCESS 和 ORIG_SEND_ACCESS 表

您可用 SEND_ACCESSORIG_SEND_ACCESS 映射表控制谁能或不能发送邮件、接收邮件或收发兼而有之。访问检查可确认邮件的信封 From 地址和信封 To 地址是可用的,并知晓邮件从何通道进入以及准备从何通道的发出。

如果 SEND_ACCESSORIG_SEND_ACCESS 映射表存在,MTA 则对通过 MTA 的每封邮件的每一收件人用下列格式的字符串在表中扫描(请注意使用的竖杠字符|):

src-channel|from-address|dst-channel|to-address

src-channel 是排列该邮件的通道;from-address 是发件人的地址;dst-channel 是邮件将被列于其中队列的通道;to-address 是邮件的收件人地址。如果在这四个字段中的任何一个字段中输入一个星号,则可使该字段与任何适当的通道或地址相匹配。

这里的地址指信封地址;也就是信封 From 地址和信封 To 地址。对于 SEND_ACCESS,信封 To 地址是在重写、别名扩展等操作完成后才予以检查;而对于ORIG_SEND_ACCESS,原先指定的信封To地址是在重写后,但在别名扩展前予以检查。

如果搜索字符串与某一模式相匹配(即表中项目左侧者),系统则对随后生成的映射输出进行检查。如果输出包括 $Y 或 $y 标志,那么针对该特定的收件人地址的入队是允许的。如果输出含任何 $N、$n、$F 或 $f 标志,则拒绝该特定地址入队。在出现被拒绝的情况时,系统可在映射输出中提供一则任选讯息,以说明被拒原因。该字符串将包括在 MTA 发出的拒收错误讯息之中。如果输出中没有字符串($N、$n、$F 或 $f 标志以外的),系统将使用默认的拒收讯息。有关其它标志的说明,请见“访问控制映射表标志”

在下面的范例中,从 mail、Pine 等 UNIX 用户代理程序发送的邮件来自本地通道 l,通往互联网的邮件须经由某种 TCP/IP 通道送出。假定您不准许本地用户(postmaster 除外)向互联网发送邮件,但可以从互联网接收邮件。那么可以实行这一限制规定的方法是通过如图 10-1 中所示的 SEND_ACCESS 映射表。在映射表中,本地主机名被假定为 sesta.com。在通道名“tcp_*”中则使用通配符,以便与任何可能的 TCP/IP 通道名匹配(例如,tcp_local)。

在拒收讯息中,系统使用了美元符号摘引该则讯息中的空格。没有这些美元符号,拒收将会过早停止并且只显示“Internet”而不是“Internet postings are not permitted”。注意,本例忽略其他可能的“本地”邮件传送源,比如来自基于 PC 的邮件系统,或者来自 POP 或 IMAP 客户机。

图 10-1 SEND_ACCESS 映射表

SEND_ACCESS

  *|postmaster@sesta.com|*|*    $Y
  *|*|*|postmaster@sesta.com    $Y
  l|*@sesta.com|tcp_*|*         $NInternet$ postings$ are$ not$ \
    permitted




备注: 试图发送邮件的客户机可决定是否向企图发送该邮件的用户显示 MTA 拒收错误讯息。如果 SEND_ACCESS 被用来拒收来自 SMTP 的邮件,MTA 则只发出一组 SMTP 拒收代码,其中包括可选用的拒收讯息;此后便由负责发送邮件的 SMTP 客户机用该信息组成一则退回讯息并将其回送给原发件人。




MAIL_ACCESS 和 ORIG_MAIL_ACCESS 映射表

MAIL_ACCESS 映射表是 SEND_ACCESSPORT_ACCESS 两个映射表的超集。它综合了 SEND_ACCESS 的通道和地址信息以及 PORT_ACCESS 的 IP 地址和端口号信息。与之相类似的是,ORIG_MAIL_ACCESS 映射表是 ORIG_SEND_ACCESSPORT_ACCESS 两个映射表的超集。MAIL_ACCESS 的探查字符串格式为:

port-access-probe-info|app-info|submit-type|send_access-probe-info

ORIG_MAIL_ACCESS 的探查字符串格式与之类似,即:

port-access-probe-info|app-info|submit-type|orig_send_access-probe-info

此处的 port-access-probe-info 中,包含有在 SMTP 来电情况下通常于 PORT_ACCESS 映射表探查项中包括的所有信息,否则是空的。在通过 SMTP 提交邮件的情况下,app-info 通常为 SMTP,否则是空的。submit-type 可为 MAIL、SEND、SAML 或 SOML 中的任何一项,与邮件被提交到 Messaging Server 的方法相一致。该值通常为 MAIL,表示是以邮件形式提交的;在有向 SMTP 服务器提交广播请求(或综合广播/邮件请求)的情况下,则会出现 SEND、SAML 或 SOML。至于 MAIL_ACCESS 映射,send-access-probe-info 中包含有 SEND_ACCESS 映射表探查项中通常包括的所有信息。ORIG_MAIL_ACCESS 映射与之类似,orig-send-access-probe-info 中包含有 ORIG_SEND_ACCESS 映射表探查项中通常包括的所有信息。

使进入的 TCP/IP 连接信息在与通道和地址信息相同的映射表中可用,这会方便实施某些类型的控制,比如强制允许信封发件人地址出现在来自特定 IP 地址在邮件中。这可以限制伪造电子邮件,或者鼓励用户适当的配置他们的 POP 和 IMAP 客户机的发件人地址。例如,一个站点希望只允许信封发件人地址 vip@siroe.com 出现在来自于 IP 地址 1.2.3.1 和 1.2.3.2 的邮件中,并保证来自 1.2.0.0 子网络的任何系统的邮件中的信封发件人地址都来自于 siroe.com,该站点可能使用 MAIL_ACCESS 映射表,如图 10-2 所示。

图 10-2 MAIL_ACCESS 映射表

MAIL_ACCESS

  ! Entries for vip's two systems
  !
  TCP|*|25|1.2.3.1|*|SMTP|MAIL|tcp_*|vip@siroe.com|*|*  $Y
  TCP|*|25|1.2.3.2|*|SMTP|MAIL|tcp_*|vip@siroe.com|*|*  $Y
  !
  ! Disallow attempts to use vip's From: address from other
  ! systems
  !
  TCP|*|25|*|*|SMTP|MAIL|tcp_*|vip@siroe.com|*|*  \
      $N500$ Not$ authorized$ to$ use$ this$ From:$ address
  !
  ! Allow sending from within our subnet with siroe.com From:
  ! addresses
  !
  TCP|*|25|1.2.*.*|*|SMTP|MAIL|tcp_*|*@siroe.com|*|*  $Y
  !
  ! Allow notifications through
  !
  TCP|*|25|1.2.*.*|*|SMTP|MAIL|tcp_*||*|*  $Y
  !
  ! Block sending from within our subnet with non-siroe.com
  ! addresses
  !
  TCP|*|25|1.2.*.*|*|SMTP|MAIL|tcp_*|*|*|*  \
      $NOnly$ siroe.com$ From:$ addresses$ authorized



FROM_ACCESS 映射表

FROM_ACCESS 映射表可能用于控制哪些人可以发送邮件,或者用已认证的地址覆盖虚设的发件人地址,或者同时实现这两种功能。

用于 FROM_ACCESS 映射表的输入探查字符串与 MAIL_ACCESS 映射表类似,但没有目标通道和地址,增加的部分有经验证的发件人信息(如果有的话)。因此,如果 FROM_ACCESS 映射表存在,Messaging Server 则用下列格式的字符串对每一邮件提交企图在表中进行搜索(请注意使用的竖杠字符|):

port-access-probe-info|app-info|submit-type|src-channel|from-address|auth-from

此处的 port-access-probe-info 中,包含有在 SMTP 来电情况下通常于 PORT_ACCESS 映射表探查项中包括的所有信息,否则是空的。在通过 SMTP 提交邮件的情况下,app-info 通常为 SMTP,否则是空的。submit-type 可为 MAIL、SEND、SAML 或 SOML 中的任何一项,与邮件被提交到 MTA 的方法相一致。该值通常为 MAIL,表示是以邮件形式提交的;在有向 SMTP 服务器提交广播请求(或综合广播/邮件请求)的情况下,则会出现 SEND、SAML 或 SOML。src-channel 是原发邮件使用的通道(即排列邮件的通道);from-address 是邮件所指的发件人地址;auth-from 是经验证的发件人地址(如果可获得该信息的话),如果没有经认证的信息则为空白。

如果搜索字符串与某一模式相匹配(即表中项目左侧者),系统则对随后生成的映射输出进行检查。如果输出包括 $Y 或 $y 标志,那么针对该特定的收件人地址的入队是允许的。如果输出含任何 $N、$n、$F 或 $f 标志,则拒绝该特定地址入队。在出现被拒绝的情况时,系统可在映射输出中提供一则任选讯息,以说明被拒原因。该字符串将包括在 Messaging Server 发出的拒收错误讯息之中。如果输出中没有字符串($N、$n、$F 或 $f 标志以外的),系统将使用默认的拒收讯息。有关其它标志的说明,请见“访问控制映射表标志”

除了可以根据发件方决定是否允许提交邮件以外,FROM_ACCESS 还可以通过 $J 标志来改变信封发件人地址,或者通过 $K 标志修改 authrewrite 通道关键字的效果(在接受的邮件中添加发件人标题地址)。例如,这个映射表可用来使已认证的地址代替原信封发件人地址:

FROM_ACCESS

  *|SMTP|*|tcp_local|*|       $Y
  *|SMTP|*|tcp_local|*|*      $Y$J$3

在使用 FROM_ACCESS 映射表修改使用效果,以使 authrewrite 在某些源通道上设置为非零值时,如果经认证的地址将逐字引用,则无需使用 FROM_ACCESS

例如,当在 tcp_local 通道上设置了 authrewrite 2 后,便无需使用下列 FROM_ACCESS 映射表,因为 authrewrite 本身就足以取得这一效果(逐字添加经认证的地址):


FROM_ACCESS

  *|SMTP|*|tcp_local|*|     $Y
  *|SMTP|*|tcp_local|*|*    $Y$K$3

然而,正如图 10-3 所示,FROM_ACCESS 的真正目的是允许您进行更复杂、更细微的改动。如果要将 From 标题行(显示 SMTP AUTH 已认证的提交人地址)添加到进入的邮件,只需 authrewrite 关键字就可以了。然而,假设只有在 SMTP AUTH 已认证提交人的地址与信封发件人地址不一致时,才要强制添加一个发件人标题行到进入的邮件中(也即,如果地址一致就不必费心添加发送人标题行了),进一步假设希望 SMTP AUTH 和信封发件人地址不会仅仅因为信封发件人包含了可选的子地址信息就被认为不一致。

图 10-3 FROM_ACCESS 映射表

FROM_ACCESS

  ! If no authenticated address is available, do nothing
  *|SMTP|*|tcp_local|*|              $Y
  ! If authenticated address matches envelope From:, do nothing
  *|SMTP|*|tcp_local|*|$2*           $Y
  ! If authenticated address matches envelope From: sans
  ! subaddress, do nothing
  *|SMTP|*|tcp_local|*+*@*|$2*@$4*    $Y
  ! Fall though to...
  ! ...authenticated address present, but didn't match, so force
  ! Sender: header
  *|SMTP|*|tcp_local|*|*              $Y$K$3



PORT_ACCESS 映射表

Dispatcher 能够根据 IP 地址和端口号,有选择地接受或拒绝外来连接。当 Dispatcher 启动时,Dispatcher 将寻找一个名为 PORT_ACCESS 的映射表。如果该表存在,Dispatcher 将按下列格式对连接信息进行格式化处理:

TCP|server-address|server-port|client-address|client-port

Dispatcher 将针对所有 PORT_ACCESS 映射表项进行匹配。如果映射结果中包含 $N 或 $F,该连接就此被关闭。若有任何其它映射结果,则表明该连接将被接受。$N 或 $F 后面可随附一则拒收讯息(选项)。如果有的话,该邮件将在关闭前顺连接被送回。请注意,在顺连接被送回前,字符串上将附加一个 CRLF 终止符。

如果映射探查项相匹配,则后面附有可选字符串的 $< 标志将指示 Messaging Server 把该字符串发至系统日志(UNIX)或事件日志(NT)。如果访问被拒,后面附有可选字符串的 $> 标志亦将指示 Messaging Server 把该字符串发至系统日志(UNIX)或事件日志(NT)。如果 LOG_CONNECTION MTA 选项的位 1 已设置,而且 $N 标志亦经设置以拒绝连接,则再指定 $T 标志将致使“T”项被写入连接日志。如果 LOG_CONNECTION MTA 选项的位 4 已设置,由网站提供的文字部分则可能已在 PORT_ACCESS 表项中提供,以将其包括在“C”项连接日志表项之中。若需指定此类文字,可在该表项右侧输入两个竖杠字符,表 10-2 然后即可在后面输入所需的文字。


表 10-2 PORT_ACCESS 映射标志


标志

说明

$Y

允许访问。

带参数的标志,以参数读取顺序+

$< 字符串

如果探查项相匹配,则将字符串发送至系统日志(UNIX)或事件日志(NT)。

$> 字符串

如果访问被拒,则将字符串发送至系统日志(UNIX)或事件日志(NT)。

$N 字符串

以供选用的错误文字字符串拒绝访问

$F 字符串

$N 字符串的同义词;即以供选用的错误文字字符串拒绝访问

$T 文本

如果 LOG_CONNECTION MTA 选项的位 1 已设置,而且 $N 标志亦经设置以拒绝连接,$T 将致使“T”项被写入连接日志;供选用的文字(须在两条竖杠字符后显示)可能已包括在连接日志表项之中。

+ 使用带参数的多重标志时,请用竖杠字符 | 将参数隔开,并按照表中所列顺序放置参数。

例如,下列映射将只接受来自单一网络的 SMTP 连接(至端口 25 者,正常 SMTP 端口),被选出予以拒绝连接且不提供解释文字的特定主机除外:


PORT_ACCESS

  TCP|*|25|192.123.10.70|*  $N500
  TCP|*|25|192.123.10.*|*   $Y
  TCP|*|25|*|*             $N500$ Bzzzt$ thank$ you$ for$ \
     playing.

请注意,在对 PORT_ACCESS 映射表做了任何更改后,您都须重新启动 Dispatcher,以使 Dispatcher 看到所做变更。(如果使用的是经过编译的 MTA 配置,则须先重新编译您的配置,以将变更情况纳入编译配置。)

PORT_ACCESS 是专门用于执行基于 IP 拒收任务的映射表。对于在电子邮件地址级上进行的较通用的控制,最好使用 SEND_ACCESSMAIL_ACCESS 映射表。


限制指定的 IP 地址到 MTA 的连接

使用端口访问映射表中的共享库 conn_throttle.so 可以限制特定的 IP 地址与 MTA 连接的频度。对特定 IP 地址的连接限制对于防止在拒绝服务攻击中的过渡连接是十分有用的。

conn_throttle.so 是一个在 PORT_ACCESS 映射表中用来限制特定 IP 地址与 MTA 过多连接的的共享库。所有配置选项均被指定为连接节流共享库的参数,如下所示:

$[server_root/lib/conn_throttle.so,throttle,IP-address,max-rate]

IP-address 是远程系统的点分隔十进制地址。max-rate 是 IP 地址作为强制最高频率的每分钟连接数。

对于例程的惩罚版本,例程名 throttle_p 可以用来代替 throttlethrottle_p 将会拒绝连接,如果过去已进行过太多的连接。如果最高频率为 100 次,而在过去的一分钟内有 250 次连接尝试,那么不仅在过去的一分钟内的前 100 次连接后远程站点会被阻塞,而且这种阻塞会持续到第 2 分钟。或者说,每分钟后,最高频率从连接尝试的总数中扣除,只要连接尝试的总次数大于最高频率就会阻塞远程系统。

如果指定的 IP 地址没有超过每分钟连接的最高频率,共享库调用将失败。

如果超过最高频率,调用将成功但不会有任何内容返回。这是在 $C/$E 结合体中实现的,如例子中那样:

PORT_ACCESS

  TCP|*|25|*|* \
$C$[
server_root/lib/conn_throttle.so,throttle,$1,10]\
$N421$ Connection$ not$ accepted$ at$ this$ time$E

其中,

$C 继续从下一个表条目开始的映射处理;将该条目的输出字符串作为映射处理的新的输入字符串使用。

$[server_root/lib/conn_throttle.so,throttle,$1,10]作为将 throttle 作为库例程调用的库,$1 为服务器 IP 地址,10 为每分钟节流的连接极限。

$N421$ Connection$ not$ accepted$ at$ this$ time 拒绝访问并且返回 421 SMTP 代码(transient negative completion)并伴随着“连接此时未被接受”的讯息。

$E 马上停止映射处理。将此条目的输出字符串用作映射处理的最终结果。


实施访问控制的时机



Messaging Server 应尽量早地对访问控制映射进行检查。这种现象发生的确切时间依赖于使用中的电子邮件协议 - 当必须检查的信息可用时。

对于 SMTP 协议,FROM_ACCESS 拒收情况的发生是对 MAIL FROM: 命令所作出的响应,即在发送端发送收件人信息或邮件数据之前。SEND_ACCESSMAIL_ACCESS 拒收情况的发生是对 RCPT TO: 命令所作出的响应,即在发送端开始发送邮件数据之前。如果 SMTP 邮件被拒收,Messaging Server 则根本不接受或看不到该邮件数据,因此可最大限度地减少因执行此类拒收任务而增加的系统开销。

如果有多个访问控制映射表,Messaging Server 将对其一一进行检查。也就是说,FROM_ACCESSSEND_ACCESSORIG_SEND_ACCESSMAIL_ACCESSORIG_MAIL_ACCESS 五个映射表可能全部有效。


测试访问控制映射



imsimta test -rewrite 实用程序 - 尤其是带有 --from- source_channel-destination_channel 等选项时 - 可用于测试访问控制映射。例如,图 10-4 所示为 SEND_ACCESS 映射表和探查结果的一个样本。

图 10-4 样本 SEND_ACCESS 映射表和探查项

映射表

SEND_ACCESS

  tcp_local|friendly@siroe.com|l|User@sesta.com     $Y
  tcp_local|unwelcome@varrius.com|l|User@sesta.com  $NGo$ away!

探查项

$ TEST/REWRITE/FROM="friendly@siroe.com" -
_$ /SOURCE=tcp_local/DESTINATION=l User@sesta.com
...
Submitted address list:
  l
    User (SESTA.COM) *NOTIFY FAILURES* *NOTIFY DELAYS* Submitted notifications list:


$ TEST/REWRITE/FROM="unwelcome@varrius.com" -
_$ /SOURCE=tcp_local/DESTINATION=l User@sesta.com
...
Submitted address list:
Address list error -- 5.7.1 Go away! User@sesta.com

Submitted notifications list:



添加 SMTP 转发



按照默认设置,iPlanet Messaging Server 被配置为阻塞 SMTP 转发的尝试;也即,拒绝将邮件提交至来自未认证外部源(外部系统指除服务器所驻留的主机之外的任何其他系统)的外部地址。这样的默认配置在阻塞 SMTP 转发中十分苛刻,因为它将所有其它系统都作为外部系统。

尝试通过 iPlanet Messaging Server 系统的 SMTP 服务器,以外部地址或不使用 SMTP AUTH (SASL) 认证之处为目标提交邮件的 IMAP 和 POP 客户程序,将会发现提交尝试被拒绝。因此,可能希望修改配置,从而可以识别自己内部的系统和子网络,使得从这些地方转发邮件总被接受。

至于哪些系统和子网络被识别为内部的,这通常由 INTERNAL_IP 映射表控制,该表可以在文件 < InstanceRoot>/imta/config/mappings 中找到。

例如,其 IP 地址为 123.45.67.789 的 iPlanet Messaging Server 系统中,默认 INTERNAL_IP 映射表应如下所示:

INTERNAL_IP

   $(123.45.67.89/32)   $Y
   127.0.0.1   $Y
   *   $N


在这里,使用语法 $(IP- 模式/有效前缀二进制位) 的初始条目指定:任何与 123.45.67.89 的所有 32 位相匹配的 IP 地址都应该是匹配成功的,并被认作内部。第 2 个条目将循环返回 IP 地址 127.0.0.1 认作内部。最后条目指定:所有其它 IP 地址均不认作内部。注意:所有条目前至少要有一个空格。

可以通过在最后 $N 条目前指定另外的 IP 地址或子网络来添加更多的条目。这些条目必须在左侧指定一个 IP 地址或子网络(使用 $(.../...) 语法指定子网络),在右侧指定 $Y。或者修改现存的 $(.../...) 条目以接受一个更一般化的子网络。

例如,如果同样的样本站点有一个 class-C 网络,也即,它拥有所有的 123.45.67.0 子网络,那么该站点可能需要修改初始条目以改变用于匹配地址的位数。在下面的映射表中,将 32 位改为 24 位。这样就允许 class-C 网络上的所有客户程序都可通过 SMTP 转发服务器转发邮件。

INTERNAL_IP

   $(123.45.67.89/24)   $Y
   127.0.0.1   $Y
   *   $N


或者,如果该站点只有 123.45.67.80 到 123.45.67.99 范围内的那些 IP 地址,则该站点可能需要使用:

INTERNAL_IP

! Match IP addresses in the range 123.45.67.80-123.45.67.95
   $(123.45.67.80/28)   $Y
! Match IP addresses in the range 123.45.67.96-123.45.67.99
   $(123.45.67.96/30)   $Y
   127.0.0.1   $Y
   *   $N


注意:<InstanceRoot>/imsimta test -match 实用程序可以用于检查 IP 地址是否与特定的 $(.../...) 测试条件匹配。<InstanceRoot>/imsimta test -mapping 实用程序在检查 INTERNAL_IP 映射表对各种 IP 地址输入的返回结果是否是预期结果方面,既有更广泛的用途。

在修改 INTERNAL_IP 映射表之后,一定要执行 <InstanceRoot>/imsimta restart 命令(如果运行使用的配置是已编译的),或者 <InstanceRoot>/imsimta refresh 命令(如果运行使用的配置是未编译的),以使修改生效。

有关映射文件和一般映射表格式的信息,以及有关 imsimta 命令行实用程序的信息,可以在 iPlanet Messaging Server Reference Manual 中找到。


允许对外部站点进行 SMTP 转发

所有内部 IP 地址都应当如前面讨论的那样添加到 INTERNAL_IP 映射表。如果希望允许从友好或同伴系统/站点进行 SMTP 转发,最简单的方法就是将它们与你的真实内部 IP 地址一起包含在 INTERNAL_IP 映射表中。

如果不希望将这些系统/站点作为真实的内部系统/站点,(例如,如果为了日志记录或者其他控制目的,希望区分真实内部系统拥有分程转发特权的友好非内部系统),可以用其他方法配置系统。

一种方法就是建立一个特殊通道来接受来自友好系统的邮件。具体做法是:创建一个 tcp_friendly 通道,类似于现存的带有正式主机名 tcp_friendly-daemontcp_internal 通道,并创建一个 FRIENDLY_IP 映射表,类似于列出友好系统 IP 地址的 INTERNAL_IP 映射表。然后在当前重写规则的后面:

! Do mapping lookup for internal IP addresses
[]    $E$R${INTERNAL_IP,$L}$U%[$L]@tcp_intranet-daemon

添加一条新的重写规则:

! Do mapping lookup for "friendly", non-internal IP addresses []
$E$R${FRIENDLY_IP,$L}$U%[$L]@tcp_friendly-daemon

另一种选择是将新条目添加到 ORIG_SEND_ACCESS 映射表中最后 $N 条目的上面,新条目的格式为:

  tcp_local|*@siroe.com|tcp_local|*    $Y

其中 siroe.com 是一个友好域的名称,并以如下格式添加一个 ORIG_MAIL_ACCESS 映射表:

ORIG_MAIL_ACCESS

   TCP|*|25|$(match-siroe.com-IP-addresses)|*|SMTP|MAIL|    \
tcp_local|*@siroe.com|tcp_local|*    $Y
   TCP|*|*|*|*|SMTP|MAIL|tcp_local|*|tcp_local|*    $N

表,其中 $(...) 这样的 IP 地址语法和前一节描述的语法相同。只要地址正确,ORIG_SEND_ACCESS 检查就能成功,因此可以继续进行 ORIG_MAIL_ACCESS 检查,这一检查更加严格:只有 IP 地址也对应于一个 siroe.com IP 地址时才成功。


配置 SMTP 转发阻塞



您可用访问控制映射功能防止别人通过您的 Messaging Server 系统转发 SMTP 邮件。例如,您可通过该功能防止别人使用您的邮件系统向百计或以千计的互联网邮箱转发垃圾邮件。

Messaging Server 的默认配置是预防所有的 SMTP 转发活动,其中包括本地 POP 和 IMAP 用户的转发活动。

若需在阻塞未授权的转发活动的同时又允许合法的本地用户使用转发功能,则需对 Messaging Server 进行配置,以使其知道如何区分这两类用户。例如,使用 POP 或 IMAP 的本地用户所依靠的是用 Messaging Server 进行 SMTP 转发。

若需预防 SMTP 转发,您必须能:

要启用内部主机和客户程序的 SMTP 转发,必须将“内部”IP 地址或者子网络添加到 INTERNAL_IP 映射表中。


MTA 如何区分内部邮件和外部邮件

为了阻塞邮件转发活动,您首先必须能够区分您所在网站来的内部邮件和从互联网来的并通过您的系统回到互联网上的外部邮件。在这两类邮件中,前者是您需要准许通行的邮件;后者是您需要阻塞的邮件。区分是通过将 switchchannel 关键字用于入站 SMTP 通道上而实现的,该通道通常就是 tcp_local 通道,并且是默认的。

switchchannel 关键字可使 SMTP 服务器对与外来 SMTP 连接相关的实际 IP 地址进行检查。Messaging Server 可通过该 IP 地址,加上您制定的重写规则,二者可结合起来对域内来的 SMTP 连接和域外来的连接进行区分。这一信息随后便可用来隔离内部和外部邮件信量。

以下说明的 MTA 配置是默认设置的,在这样的配置下服务器可以区分内部和外部邮件传送。

在做了上述配置变更后,您所在域中生成的 SMTP 邮件都将通过 tcp_intranet 通道入站。所有其它 SMTP 邮件都将通过 tcp_local 通道入站。根据邮件入站的通道区分内部和外部邮件。

这是如何实现的?关键在于 switchchannel 这个关键字。该关键字被用于 tcp_local 通道。当一封来件送达到 SMTP 服务器时,该关键字可使服务器查找与外来连接相关的源 IP 地址。服务器此时将尝试对外来连接的实际 IP 地址以反指向进行信封重写,以期查找相关的通道。如果源 IP 地址与 INTERNAL_IP 映射表中的 IP 地址或子网络匹配,应用于该映射表的重写规则将使地址重写到 tcp_intranet 通道。

因为 tcp_intranet 通道标有 allowswitchchannel 关键字,所以该邮件将被转换到 tcp_internal 通道,并从该通道入站。如果邮件来自于其 IP 地址不在 INTERNAL_IP 映射表中的某个系统,反向信封重写可能重写到 tcp_local 或其他通道。但绝不会在 tcp_intranet 通道里重写;同时,由于所有其它通道都在第 1 步中被标志为 noswitchchannel,所以邮件只能保留在 tcp_local 通道而不会转换到另一通道。


备注: 注意,任何使用“tcp_local”字符串的映射表或转换文件条目可能需要根据其用途被改变为“tcp_*”或者“tcp_intranet”。




区分已认证用户邮件

您所在站点可能有一些并非属于实际网络一部分的“本地”客户机用户。当这些用户提交邮件时,其邮件将通过某一外部 IP 地址提交,如:任意 Internet 服务供应商。如果用户使用的邮件客户程序能执行 SASL 认证,他们的认证连接则可与任意的其它外部连接区分开来。至此,您便可在拒收未经认证的转发邮件的提交企图之同时,允许认证的邮件通过。您可通过 saslswitchchannel 关键字在入站 SMTP 通道上区分认证的和未经认证的连接,该通道通常为 tcp_local 通道。

saslswitchchannel 关键字将取用一个参数(或变元),用以指定待转入之通道;如果 SMTP 发件人认证成功,则可考虑允许他们提交的邮件入站并将其置入指定的交换通道。

若需添加认证提交之邮件的区分功能,请按下列步骤操作:

  1. 在配置文件中,以一独特的名称添加一个新的 TCP/IP 通道定义;例如:

    tcp_auth smtp single_sys mx mustsaslserver noswitchchannel
    TCP-INTERNAL

    该通道不应允许正常的通道交换(也就是说,该通道上应该有 noswitchchannel 之定义,不论是直接添加的还是以前默认行所隐含的)。该通道上应该有 mustsaslserver

  2. 如下面的范例所示,修改 tcp_local 通道时,请在其中添加 maysaslserversaslswitchchannel tcp_auth

    tcp_local smtp mx single_sys maysaslserver saslswitchchannel tcp_auth \
    switchchannel
    |TCP-DAEMON

有了这一配置后,那些能用本地口令通过认证的用户,他们发送的 SMTP 邮件便可通过 tcp_auth 通道入站。从内部主机发送的未经认证的 SMTP 邮件仍将通过 tcp_internal 入站。所有其它 SMTP 邮件都将通过 tcp_local 入站。


防止邮件分程转发

下面介绍本范例的另一个题目:怎样防止未经认证的人通过您管理的系统转发 SMTP 邮件。首先应记住的一点是:要允许本地用户转发 SMTP 邮件。例如,POP 和 IMAP 用户是依靠 Messaging Server 发送邮件的。需注意的一点是:本地用户既可以是身在本地的用户(在这种情况下,其邮件通过一内部 IP 地址入站),也可以是身在远端的用户,但能够以本地用户身份通过认证者。

您想防止互联网上的闲散之人把您管理的服务器当作转发站使用。通过下节说明的配置步骤,您不仅能够区分这类用户,而且能阻塞您想阻塞的类别。具体而言,您需要的是阻塞邮件从 tcp_local 通道入站,并从同一通道出站。您可通过 ORIG_SEND_ACCESS 映射表达到此目的。

ORIG_SEND_ACCESS 映射表可根据来源和目的地通道阻塞通信流。在本例中,被阻塞的是源于和发往 tcp_local 通道的通信流。这乃是通过下面的 ORIG_SEND_ACCESS 映射表实现的:

ORIG_SEND_ACCESS

   tcp_local|*|tcp_local|*        $NRelaying$ not$ permitted

此例中的条目规定:邮件不得通过 tcp_local 通道入站和出站。也就是说,该条目不允许外部邮件进入您的 SMTP 服务器,然后再转发回到互联网。

使用 ORIG_SEND_ACCESS 映射表而不使用 SEND_ACCESS 映射表的原因在于,阻塞将不会因此而套用到原来与 ims-ms 通道匹配的地址上(但却可通过别名或邮件发送列表定义经扩展而回到外部地址)。若使用 SEND_ACCESS 映射表,则需费很大的周折才能允许外来的人向邮件发送列表发送邮件,因为邮件发送列表可向外扩展至外部用户,并可将邮件发送给那些能向外部地址转发邮件的用户。


使用 DNS 查找,其中包括针对 SMTP 转发阻塞的 RBL 检查

在 iPlanet Messaging Server 中存在着多种不同的方法可确保所有传递或转发自一个具有有效 DNS 名的地址的邮件都被接受。最简单的方法就是将 mailfromdnsverify 通道关键字放置于 tcp_local 通道上。

iPlanet Messaging Server 还提供了 dns_verify 程序,该程序可确保所有传递或转发自一个具有有效 DNS 名的地址的邮件都被接受,这需要使用 ORIG_MAIL_ACCESS 中的以下规则:

ORIG_MAIL_ACCESS

  TCP|*|*|*|*|SMTP|MAIL|*|*@*|*|*\
$[<server_root>/bin/msg/imta/lib/dns_verify.so,\
dns_verify,$6|$$y|$$NInvalid$ host:$ $$6$ -$ %e]


上面例子中的断行对于这样的映射表条目具有语法意义。反斜杠字符是续行的一种合法方法。

dns_verify 映像还可用通过参照 RBL(实时黑洞列表)、MAPS(防止滥发邮件系统)、DUL(拨号上网用户列表)以及 ORBS(开放转发行为修正系统)等列表检查进入的连接,从而成为保护系统免受 UBE(垃圾邮件)影响的另一种尝试。利用新的 mailfromdnsverify 关键字,针对上述检查可以采用另外的“更易于配置”的方法,而不必进行 dns_verify 调用。这种更简单的方法就是使用 dispatcher.cnf 文件中的 DNS_VERIFY_DOMAIN 选项。例如,在 [SERVICE=SMTP] 节,将选项的实例设置为检查时需要参照的各种列表。

[SERVICE=SMTP]
PORT=25
! ...rest of normal options...
DNS_VERIFY_DOMAIN=rbl.maps.vix.com
DNS_VERIFY_DOMAIN=dul.maps.vix.com
!...etc...

这种简单方法的缺点是它检查所有正常进入的 SMTP 邮件,包括内部用户发送的邮件。这可能使网络的连通性下降,导致效率降低或其他潜在问题。另一种选择就是从 PORT_ACCESS 映射表或 ORIG_MAIL_ACCESS 映射表调用dns_verify。在 PORT_ACCESS 映射表中,可以使初始条目或其他条目不对本地内部的 IP 地址或邮件提交人进行检查,而使其后的条目对其他情况进行所需要的检查。或者,在一个 ORIG_MAIL_ACCESS 映射表中,如果只检查通过 tcp_local 通道进入的邮件,就可以避开对来自内部系统/客户机的邮件的检查。使用指向 dns_verify 的条目的例子如下。

PORT_ACCESS

! Allow internal connections in unconditionally
  *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E
! Check other connections against RBL list
  TCP|*|25|*|*\
$C$[
server_root>/bin/msg/imta/lib/dns_verify.so,\
dns_verify_domain_port,$1,rbl.maps.vix.com.]EXTERNAL$E

ORIG_MAIL_ACCESS

  TCP|*|25|*|*|SMTP|*|tcp_local|*@*|*|*\
$C$[
<server_root>/bin/msg/imta/lib/dns_verify.so,\
dns_verify_domain,$1,rbl.maps.vix.com.]$E


支持基于 DNS 的数据库

从 iPlanet Messaging Server 5.2 开始,dns_verify 程序支持基于 DNS 的数据库,用以确定可能发送垃圾邮件的 SMTP 连接。某些向公共提供的 DNS 数据库不包含通常用于此目的 TXT 记录。取而代之的是,它们只包含 A 记录。

在一个典型的安装中,为一特定的 IP 地址而在 DNS 中找到的 TXT 记录包含一个出错消息,用于在拒收邮件时返回到 SMTP 客户机。但是,如果没有找到 TXT 记录,而是找到一个 A 记录,那么在 iPlanet Messaging Server 5.2 之前的 dns_verify 的版本返回的消息是“无可用的出错消息

dns_verify 现在支持一选项用于指定在没有可用的 TXT 记录的情况下使用的默认文本。例如,如下的 PORT_ACCESS 映射表展示如何启动这一选项:

PORT_ACCESS

    *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E
    TCP|*|25|*|*
$C$[/export/home/iplanet/server51/msg/bin/imta/lib/dns_verify.so ,dns_verify_domain_port,$1,dnsblock.siroe.com,Your$ host$ ($1)$ found$ on$ dnsblock$ list]$E
    * $YEXTERNAL

在这个例子中,如果在 dnsblock.siroe.com 域的查询中找到远程系统,但是没有可用 TXT 记录,那么将会返回如下信息,“Your host a.b.c.d found on dnsblock list.


处理大量访问条目



那些在映射表中使用大量条目的网站应该考虑在其映射表中设立几个带同配符的通用条目。这些通用条目可调用通用数据库查找具体项目。与直接在映射表中使用大量条目之作法相比,在映射表中设置几个可调用通用数据库查找具体项目的条目之作法效率更高。

对那些想控制每一个用户以限制哪些用户能从互联网上收发电子邮件的站点而言,后一种作法尤其可取。这种控制可轻而易举地用 ORIG_SEND_ACCESS 一类的访问映射表实现。对于此类用途而言,将大批量的具体信息(如具体地址)储存在通用数据库并可用映射表条目随时调用通用数据库之作法可大幅度地提高操作效率和系统性能。

例如,您可考虑使用图 10-5 所示的映射表结构。

图 10-5 ORIG_SEND_ACCESS 映射表

ORIG_SEND_ACCESS

  ! Users allowed to send to Internet
  !
  *|adam@siroe.com|*|tcp_local    $Y
  *|betty@siroe.com|*|tcp_local   $Y
  ! ...etc...
  !
  ! Users not allowed to send to Internet
  !
  *|norman@siroe.com|*|tcp_local  $NInternet$ access$ not$
      permitted
  *|opal@siroe.com|*|tcp_local    $NInternet$ access$ not$
      permitted
  ! ...etc...
  !
  ! Users allowed to receive from the Internet
  !
  tcp_*|*|*|adam@siroe.com        $Y
  tcp_*|*|*|betty@siroe.com       $Y
  ! ...etc...
  !
  ! Users not allowed to receive from the Internet
  !
  tcp_*|*|*|norman@siroe.com      $NInternet$ e-mail$ not$
      accepted
  tcp_*|*|*|opal@siroe.com        $NInternet$ e-mail$ not$
      accepted
  ! ...etc...



这种映射表需在表中逐个输入每一名用户,如果您认为这种方式工作量过大,则可使用图 10-6 所示的一种更有效的设置方法(如果有成千上万的用户条目,此种方法效率最高)。该图表所示为一通用数据库条目样本和 ORIG_SEND_ACCESS 映射表样本。

图 10-6 数据库条目和映射表样本

数据库条目

SEND|adam@domain.com    $Y
SEND|betty@domain.com   $Y
! ...etc...
SEND|norman@domain.com  $NInternet$ access$ not$ permitted
SEND|opal@domain.com    $NInternet$ access$ not$ permitted
! ...etc...
RECV|adam@domain.com    $Y
RECV|betty@domain.com   $Y
! ...etc...
RECV|norman@domain.com  $NInternet$ e-mail$ not$ accepted
RECV|opal@domain.com    $NInternet$ e-mail$ not$ accepted


映射表

ORIG_SEND_ACCESS

  ! Check if may send to Internet
  !
  *|*|*|tcp_local       $C${SEND|$1}$E
  !
  ! Check if may receive from Internet
  !
  tcp_*|*|*|*           $C${RECV|$3}$E


此例中,通用数据库左侧使用的任意字符串 SEND| 和 RECV|(及由此而在通用数据库中由映射表生成的探查)提供了一种可区分所生成的两类探查项的方法。如上表所示,用 $C 和 $E 标志包裹通用数据库探察项之作法是典型的映射表向通用数据库请求的调出项。

上例所示为一简单的映射表探察项对应通用数据库条目进行检查的情况。如果映射表带有更复杂的探察项,亦可通过通用数据库获得许多使用上的便利。


访问控制映射表标志



表 10-3 显示与 SEND_ACCESSORIG_SEND_ACCESSMAIL_ACCESSORIG_MAIL_ACCESSFROM_ACCESS 等映射表相关的访问映射标志。请注意,PORT_ACCESS 映射表所支持的标志组有所不同(参见表 10-2)。

表 10-3 访问映射标志


标志

说明

$B

将邮件重定向到位存储桶(bitbucket)。

$H

将邮件保存为 .HELD 文件。

$Y

允许访问。

带参数的标志,以参数读取顺序 +

$J 地址

将原信封 From 地址替换为指定的地址。*

$K 地址

用指定 的地址取代原“From”地址。* ++

$I 用户 | 标识符

检查指定用户的用户组 ID。

$< 字符串

字符串发送至 syslog(UNIX,user.notice 实用程序和 severity)或者若探查匹配成功则发送至 event log(NT)。+++

$> 字符串

字符串发送至 syslog(UNIX,user.notice 实用程序和 severity)或者若访问被拒绝则发送至 event log(NT)。+++

$D 延迟

延迟应答为百分之一秒的延迟间隔;正值将致使延迟时间施加于事务处理中的每一个命令;负值将致使延迟时间只施加于地址移交(SMTP MAIL FROM: 用于 FROM_ACCESS 表的命令; SMTP RCPT TO: 用于其它表的命令)。

$T 标志

前缀之以标志

$A 标题

将标题行标题添加到邮件中。

$X 错误代码

如果拒收邮件,则发出指定的错误代码扩展的 SMTP 错误代码。

$N 字符串

拒绝访问并给出可选的出错信息文本字符串

$F 字符串

$N 字符串的同义语;也即,拒绝访问并给出可选的出错信息文本字符串

* 仅用于 FROM_ACCESS 表。

+ 使用带参数的多重标志时,请用竖杠字符 | 将参数隔开,并按照表中所列顺序放置参数。

++ 为了让 $K 标志在 FROM_ACCESS 映射表中生效,源通道必须包括 authrewrite 关键字。

+++ 在对付不守规矩的发件人时,最好使用 $D 标志,以防他们的攻击瘫痪整个服务。尤其是,最好将 $D 用于任何 $> 条目中,否则 $< 条目拒绝访问。


第二部分:邮箱过滤器



第二部分包括下列章节:


绪论

过滤器由可作用于电子邮件的一项或多项制约性操作组成。Messaging Server 的过滤器通常储存在服务器上,并由服务器进行估算。因此,过滤器有时被称为服务器端规则(SSR)。Messaging Server 的过滤器基于 SIEVE 过滤语言(Draft 9 of the SIEVE Internet Draft)。

作为管理员,您可创建通道级过滤器和 MTA 级过滤器,以防范无用邮件的传递。可以通过 iPlanet Delegated Administrator for Messaging 界面创建过滤器模板并让所有最终用户使用。最终用户可用这些模板为其个人邮箱设立过滤器,以防无用邮件传递到他们的邮箱。

服务器以下列优先级施用过滤器:

  1. 用户级过滤器(Per-user filter)

    如果某个人邮箱过滤器可直接接收或拒收邮件,则该邮件的过滤处理到此结束。但是如果收件用户没用邮箱过滤器,或者用户的邮箱过滤器未能直接应用于有问题的邮件,则 Messaging Server 下一步就应用通道级过滤器。

  2. 通道级过滤器(channel-level filter)。

    如果通道级过滤器可直接接收或拒收邮件,则该邮件的过滤处理到此结束。否则 Messaging Server 将随即施用 MTA 级过滤器(如果有的话)。

  3. MTA 级过滤器(MTA-wide filter)

根据默认设置,用户都没有邮箱过滤器。当用户通过 Delegated Administrator 界面创建了一个或多个过滤器时,这些过滤器将储存在目录中,并在目录同步处理期间由 MTA 进行检索。


针对每个用户创建过滤器



用户级过滤器适用于目的地为特定用户邮箱的邮件。作为管理员,可以通过 iPlanet Delegated Administrator for Messaging 界面创建过滤器模板并让所有最终用户使用。最终用户可用这些模板建立个人服务器过滤器以控制向其邮箱传递的邮件;也就是说,最终用户可拒收无用的邮件,重定向邮件,将邮件筛选到邮箱的文件夹等。

过滤器模板可归纳 Sieve 脚本,其方法是用提示符和输入字段替代 Sieve 脚本的“硬代码”元素。然后用 Java servlet 分析筛选模板并在浏览器中生成 UI 页面。当最终用户在输入字段中键入值时,servlet 将取这些值并将其储存到用户目录配置文件条目的某个筛选脚本中。提示和输入字段通过 Delegated Administrator 界面向最终用户显示。

提供了一套样本模板并随 Delegated Administrator 一起安装。模板文件位于下列目录:

nda-path/nda/nda/default/lang/templates/enduser/ssr/*.txt

您可用 Sieve 语言修改过滤器模板或创建新的过滤器模板。如果创建了新的过滤器模板,必须将其保存在上述 ssr 目录的文本文件中。必须保证该文件的字可读,并为过滤器模板添加一个 LDAP 条目,如下面的例子所示:

dn: cn=Subject Discard,cn=ssrconf,cn=en,
              cn=domainConfiguration,ou=config,o=isp
objectclass: top
objectclass: nsValueItem
cn: Subject Discard
nsvaluetype: nsValueCIS
nsvaluecis: ../templates/enduser/ssr/subject-discard.txt

图 10-7 显示样本模板。

图 10-7 样本 Sieve 模板

     #RULE: $Template="File To Folder"
     require "fileinto";
     if header :contains # Q1
          # Q2
     {
          fileinto # Q3
         ;
     }

     #PRE: "This rule files messages into a folder."
     #PRE: "Choose the header line to search on"
     #PRE: "And specify the phrase you wish to search for"
     #Q1: header "If the header line"
     #Q2: value "Contains the phrase"
     #Q3: folder "Then file into the folder"


上例中,Q1、Q2 和 Q3 用作输入值的占位符,以便 UI 能够找到替换值的位置。每一标志都将映射到某个问题和输入值的某一数据类型。

每一标志的注释行中都对数据类型和相关问题有所定义。定义形式为 token:data-type-variable,后面有一加引号的字符串,包含实际的问题。上例中的 header value 以及 folder 均是数据类型,它们都可显示一个下拉列表、编辑框,或其它工具。UI 可通过这些数据类型变量得知需从用户处获取的信息种类。

对模板进行语法分析后,将为用户生成并显示一个对话,如图 10-8 所示。此例中的括号表示下拉列表。

图 10-8 模板输出样本

+--------------------------------------------------------------+
| Template: File To Folder Name: _________________             |
+--------------------------------------------------------------+
|           This rule files messages to a folder               |
|           Choose the header line to search on                |
|       And specify the phrase you wish to search for          |
|                                                              |
|   If the header line: [From       ]                          |
|   Contains the phrase: _____________________________         |
|   Then file into the folder: _________________               |
+--------------------------------------------------------------+


用户输入数据后,该项规则将储存在用户的 mailSieveRuleSource 属性中。

模板语法有下列限制条件:

Sieve 模板支持下列数据类型变量:


创建通道级过滤器

通道级过滤器可施用于某通道中排列的每一封邮件。此类过滤器的典型用途是在特定通道中阻塞穿行的邮件。

创建通道级过滤器:

  1. 使用 SIEVE 编写过滤器。

  2. 然后将过滤器储存到下列目录的一个文件中:

    msg-instance/imta/config/file.filter

    该文件须为文字可读文件并为 MTA 的 uid 所有。

  3. 请在通道配置中包括下列:

    destinationfilter file:IMTA_TABLE:file.filter

  4. 重新编译配置文件,然后重新启动 Dispatcher。

    请注意:过滤器文件更改后,无需重新编译或重新启动 Dispatcher。

destinationfilter 通道关键字此时启用邮件过滤功能,筛选发至过滤通道中排列的邮件。sourcefilter 通道关键字此时启用邮件过滤功能,筛选来自过滤通道中排列的邮件。按要求,这些关键字都有一个参数。该参数用于指定通往相关通道过滤器文件的路径(即与该通道相关过滤器文件)。

destinationfilter 通道关键字的语法为:

destinationfilter URL-pattern

sourcefilter 通道关键字的语法为:

sourcefilter URL-pattern

其中,URL-pattern 是一个 URL,用于指定相关通道过滤器文件的路径。在下面的例子中,channel-name 为通道名称。

目标过滤器文件 :///usr/tmp/filters/channel-name.filter

filter 通道关键字此时启用该过滤器所施加的通道上的邮件过滤功能。按要求,该关键字有一个参数,用于指定与每一信封收件人(通过该通道接收邮件者)相关的过滤器文件的路径。

filter 通道关键字的语法为:

filter URL-pattern

URL-pattern 是一个 URL,在对特殊的替换顺序进行处理之后可针对给定的收件人地址将路径让给过滤器文件。URL-pattern 可含特殊的替换顺序,而且在遇到此种情况时,可用从相关的收件人地址(即 local-part@host.domain)导出的字符串予以取代。有关替换顺序,请见表 10-4

fileinto 关键字用于指定施加了邮箱过滤器的 fileinto 算符后如何改变地址。下列例子指定:文件夹名称应作为子地址插入到原地址,以此替换原有的子地址:

fileinto $U+$S@$D


表 10-4 置换标志(不区别大小写)


标志

含义

*

执行用户组扩展。请参阅“处理组条目”

**

扩展 mailForwardingAddress 属性。此属性可以是导致几个传递地址产生的多值属性。

$$

在 $ 字符中替换

$\

强制将随后的文本改为小写字母

$^

强制将随后的文本改为大写字母

$_

对随后的文本中不进行大小写转换

$~

在与地址本地部分相关的主目录的文件路径中替换

$1S

$S,但若无可用子地址则不进行任何插入操作。

$2S

$S,但若无可用子地址则不进行任何插入操作,同时删除前导字符。

$3S

$S,但若无可用子地址则不进行任何插入操作,同时忽视后随字符。

$A

在地址 local-part@ host.domain 中替换

$D

在 host.domain 中替换

$E

插入第二备用属性的值,LDAP_SPARE_1

$F

插入传递文件名(mailDeliveryFileURL 属性)

$G

插入第二备用属性的值,LDAP_SPARE_2

$H

在主机中替换

$I

插入托管域(UID 在 domainUidSeparator 指定的分隔符的右侧部分)。如果没有可用的托管域,操作失败。

$1I

$I,但若无可用的托管域则不进行任何插入操作。

$2I

$I,但若无可用的托管域则不要进行任何插入操作,同时删除前导字符。

$3I

$I,但若无可用子地址则不进行任何插入操作,同时忽视后随字符。

$L

在本地部分中替换

$M

插入 UID,删除了任何托管域

$P

插入程序名(mailProgramDeliveryInfo 属性)

$S

插入与当前地址相关的子地址。子地址通常为子地址分隔符(通常就是 +)后原始地址的用户部分,但是可以用 MTA 选项 SUBADDRESS_CHAR 指定。如果不给出子地址,操作失败。

$U

插入当前地址的邮箱部分。可能是符号 @ 左侧部分整体,或者是子地址分隔符 + 前的地址的左侧部分。


创建 MTA 级过滤器



MTA 级过滤器适用于归队于 MTA 的所有邮件。这种过滤器的一个典型用途就是阻塞垃圾邮件或其他无用邮件,无论邮件的目标地是什么。若需创建 MTA 级过滤器,请按下列步骤操作:

  1. 使用 SIEVE 编写过滤器

  2. 将过滤器储存在下列文件:

    msg-instance/imta/config/imta.filter

    该过滤器文件必须为世界可读。如果存在,则可自动使用。

  3. 重新编译配置文件,然后重新启动 Dispatcher。

使用编译的配置时,MTA 级过滤器文件已结合到编译的配置之中。


以路由选择将放弃的邮件排除到 FILTER_DISCARD 通道

根据系统默认设置,被邮箱过滤器放弃的邮件将立即从系统中删除。然而,当用户首次设置邮箱过滤器时(及弄错时)或调试时,最好先不要使用删除作业,以推迟一段时间再用为上策。

若需把邮箱过滤器放弃的邮件临时保留在系统上以待以后删除,可先在 MTA 配置文件中添加一条 filter_discard 通道,添加时需用 notices 通道关键字指定删除前保留邮件的时间长度(通常为天数)。具体作法,请见下面例子:

filter_discard notices 7
FILTER-DISCARD

然后便可设置 MTA 选项文件中的 FILTER_DISCARD=2 选项。filter_discard 队列区域中的邮件应考虑放在用户个人废纸篓文件夹的扩展部分内。在此情况下,需注意的一点是:对于 filter_discard 队列区域内的邮件,系统从不发送警告讯息,而且也不将此类邮件退回给发件人,即使有退回请求也不例外。对于此类邮件的处理方法如下:当最终通知值过期时或有人以 imsimta return 之类的实用程序请求以手动方式退回时,系统所能采取的唯一行动是最终将这些邮件默默地删除。


调试用户过滤器



如果系统上的用户过滤器出现问题,下列信息可帮助您解决问题。

目录同步(dirsync)进程将利用与用户过滤器有关的信息更新 MTA 的 SSR 数据库。短过滤器储存在该数据库中。对长过滤器而言,数据库将储存一个 LDAP dn。请注意,在 dirsync 进程没有更新数据库之前,MTA 看不到用户过滤器的变更情况。

为了便于排除过滤器的问题,请按下列步骤操作:


上一页    目录    索引    下一页
(c) 2002 年 Sun Microsystems, Inc. 版权所有。

更新日期:2002 年 2 月 27 日