Sun Java System Messaging Server 6.3 管理指南

18.3.3 FROM_ACCESS 映射表

FROM_ACCESS 映射表可控制哪些人员可以发送邮件,和/或使用已经验证的地址覆盖不确定的 From: 地址。

FROM_ACCESS 映射表的输入探测字符串与 MAIL_ACCESS 映射表的输入探测字符串类似,只是减少了目标通道和地址,但增加了已经验证的发件人信息(如果有)。因此,如果存在 FROM_ACCESS 映射表,则对于每次尝试的邮件提交,Messaging Server 将使用如下格式的字符串搜索表格(请注意垂直条字符 | 的使用):


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

此处,如果邮件为外来 SMTP 邮件,则 port-access-probe-infoPORT_ACCESS 映射表探测中通常包含的所有信息组成;否则为空白。app-info 包含 HELO/EHLO SMTP 命令中所声明的系统名称。此名称显示在字符串末尾,并以斜杠将其与字符串的其余部分 string(通常为 "SMTP*")分隔开。这个声明的系统名称在阻止一些蠕虫和病毒时非常有用。submit-type 可以为 MAIL、SEND、SAML 或 SOML 的其中之一,这取决于将邮件提交给 MTA 的方式。通常情况下该值为 MAIL,表示它是作为邮件提交的;如果是向 SMTP 服务器提交广播请求(或组合的广播/邮件请求),该值可能会是 SEND、SAML 或 SOML。src-channel 是邮件的来源通道(即对邮件进行排队);from-address 是不确定的邮件创始者的地址;auth-from 是已经验证的创始者地址(如果有此信息)或为空白(如果没有已经验证的信息)。

如果探测字符串匹配某个模式(即,表中某个条目的左侧),将检查映射的结果输出。如果输出包含标志 $Y 或 $y,则允许对该特定 To: 地址进行排队。如果输出包含 $N、$n、$F 或 $f 中的任意一个标志,则对该特定地址进行排队将被拒绝。在被拒绝的情况下,映射输出中可能提供可选的拒绝文本。此字符串将包括在 Messaging Server 发布的拒绝错误中。如果没有输出字符串(除 $N、$n、$F 或 $f 标志以外),则将使用默认的拒绝文本。有关其他标志的说明,请参见18.3 访问控制映射表标志

除了基于创始者确定是否允许提交邮件以外,FROM_ACCESS 还可用于通过 $J 标志更改信封 From: 地址,或通过 $K 标志修改 authrewrite 通道关键字的效果(在接受的邮件上添加 Sender: 标题地址)。例如,使用此映射表,可以将原始信封 From: 地址简单替换为已验证的地址。


示例 18–3 FROM_ACCESS 映射表


FROM_ACCESS

  *|SMTP*|*|tcp_auth|*|       $Y
  *|SMTP*|*|tcp_auth|*|*      $Y$J$4
            

使用 FROM_ACCESS 映射表修改某些源通道(将 authrewrite 设置为非零值)上的效果时,如果要按原样使用已验证的地址,则无需使用 FROM_ACCESS

例如,如果在 tcp_local 通道上设置了 authrewrite 2,则无需使用以下 FROM_ACCESS 映射表,因为仅使用 authrewrite 就足以获得此效果(按原样添加已经验证的地址):


FROM_ACCESS

   *|SMTP*|*|tcp_auth|*|     $Y
   *|SMTP*|*|tcp_auth|*|*    $Y$K$4
         

但是,FROM_ACCESS 的真正目的在于允许进行更加复杂和细微的更改,如下面示例所示。如果要向外来邮件添加 Sender: 标题行(显示已经验证的 SMTP AUTH 提交者地址),则可以仅使用 authrewrite 关键字。但是,假设只有在已经验证的 SMTP AUTH 提交者地址与信封 From: 地址不同时,才将这样一个 Sender: 标题行添加到外来邮件(即如果地址匹配,则不必添加 Sender: 标题行),并进一步假设您不希望 SMTP AUTH 和信封 From: 地址仅仅因为信封 From: 包含可选子地址信息而被视为有所不同。


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

FROM_ACCESS 中的 $( 元字符指定应该从结果字符串中读取地址,并将其用于替代当前覆盖的邮寄主管地址。$) 的效果相当于添加了一个约束条件,即调用映射前不得设置覆盖的邮寄主管地址。这使特定的邮寄主管地址可以与非本地域中的地址一起使用 - 根据定义,域邮寄主管地址只能与本地定义的域一起使用。覆盖地址(当前)是读取任何 $N/$F 失败结果之前,从 FROM_ACCESS 结果读取的最后一个字符串。