Sun Java logo     上一个      目录      索引      下一个     

Sun logo
Sun Java System Messaging Server 6 2004Q2 管理指南 

第 14 章
集成反垃圾邮件程序和反病毒程序

本章介绍了如何使用 Messaging Server 提供的软件挂钩来集成和配置 Brightmail 和 SpamAssassin 的反垃圾邮件/反病毒程序。


本章中有关反垃圾邮件功能的信息也适用于反病毒功能(如果有)。Brightmail 提供反垃圾邮件功能和反病毒功能。SpamAssassin 仅提供反垃圾邮件功能。


从 Messaging Server 的角度来看,大多数反垃圾邮件解决方案的实现机制均相同。Messaging Server 将邮件的副本发送到反垃圾邮件软件,反垃圾邮件软件分析邮件并返回是否为垃圾邮件的结论。(SpamAssassin 返回结论的同时还返回垃圾邮件分数,该分数是对邮件可能为垃圾邮件的数字评定。)Messaging Server 辨认结论并使用 Sieve 脚本采取某种类型的操作。本章介绍了 Messaging Server 提供的挂钩以使用这些商业反垃圾邮件程序以及配置实例。

本章分为以下各节:


部署和配置第三方反垃圾邮件程序

依据第三方反垃圾邮件程序的部署和配置,管理员只需做出少数决策。这些决策如下:


由于以前版本的 Messaging Server 仅支持 Brightmail 过滤技术,因此关键字和选项具有诸如 sourcebrightmailBrightmail_config_file 这样的名称。这些关键字和选项的名称已更改为更加通用的名称,例如 sourcespamfilterspamfilter_config_file(如果有)。为了兼容,保留了以前的 Brightmail 名称。


指定要过滤的邮件

Messaging Server 提供了许多用于指定哪些邮件应当被过滤的方法。可以将系统配置为按照用户、域或通道来过滤邮件。本节包含以下内容:

指定用户级别的过滤

可以指定接受垃圾邮件过滤的用户。此类型用法的实例是:是否将反垃圾邮件或反病毒过滤作为高级服务提供给 ISP 用户。指定用户级别过滤的一般步骤如下所示:

  1. option.dat 文件中使用 LDAP_OPTIN 来指定将激活指定用户上的垃圾邮件过滤进程的 LDAP 属性:
  2. LDAP_OPTIN=mailAntiUBEService

  3. 在用户条目中设置 mailAntiUBEService,以接受垃圾邮件过滤。
  4. mailAntiUBEService 的值将取决于服务器。对于 Brightmail,有效值为 spam(进行垃圾邮件过滤)和 virus(进行病毒过滤)。对于 SpamAssassin,值可以是任何字符串,但是为了明确,建议设置为 spam。用作多值属性时 (Brightmail),每个值均需要一个单独的属性值条目。例如:

    mailAntiUBEService: spam
    mailAntiUBEService: virus

实例

本实例假定使用的是 Brightmail。还假定在 option.dat 文件中将 LDAP_OPTIN 设置为 mailAntiUBEService。用户 Otis Fanning 在其用户条目中将 mailAntiUBEService 属性设置为 spamvirus。系统将对他的邮件进行垃圾邮件和病毒过滤。代码示例 14-3 显示了 Otis Fanning 的启用了 Brightmail 的用户条目。

代码示例 14-1 Brightmail 的实例 LDAP 用户条目

dn: uid=fanning,ou=people,o=sesta.com,o=ISP

objectClass: person

objectClass: organizationalPerson

objectClass: inetOrgPerson

objectClass: inetUser

objectClass: ipUser

objectClass: inetMailUser

objectClass: inetLocalMailRecipient

objectClass: nsManagedPerson

objectClass: userPresenceProfile

cn: Otis Fanning

sn: fanning

initials: OTF

givenName: Otis

pabURI: ldap://ldap.siroe.com:389/ou=fanning,ou=people,o=sesta.com,o=isp,o=pab

mail: Otis.Fanning@sesta.com

mailAlternateAddress: ofanning@sesta.com

mailDeliveryOption: mailbox

mailHost: manatee.siroe.com

uid: fanning

dataSource: iMS 5.0 @(#)ims50users.sh 1.5a 02/3/00

userPassword: password

inetUserStatus: active

mailUserStatus: active

mailQuota: -1

mailMsgQuota: 100

mailAntiUBEService: virus

mailAntiUBEService: spam

如果使用 SpamAssassin,则除了没有 mailAntiUBEService: virus 以外,条目是相同的。请参见本章中介绍第三方软件的一节以获得更多的实例和详细信息。

指定域级别的过滤

可以指定接受垃圾邮件过滤的域。此功能的实例是:是否将反垃圾邮件或反病毒过滤作为高级服务提供给 ISP 域用户。指定域级别过滤的一般步骤如下所示:

  1. option.dat 文件中使用 LDAP_OPTIN 来指定将激活指定域上的垃圾邮件过滤进程的 LDAP 属性。
  2. LDAP_DOMAIN_ATTR_OPTIN=mailAntiUBEService

  3. 在域条目中设置 mailAntiUBEService,以接受垃圾邮件过滤。
  4. mailAntiUBEService 的有效值取决于服务器。对于 Brightmail,有效值为 spam(进行垃圾邮件过滤)和 virus(进行病毒过滤)。对于 SpamAssassin,值可以是任何字符串,但是为了明确,建议设置为 spam。用作多值属性时 (Brightmail),每个值均需要一个单独的属性值条目。例如:

    mailAntiUBEService: spam
    mailAntiUBEService: virus

域级别过滤实例

本实例假定使用的是 Brightmail。还假定在 option.dat 文件中将 LDAP_DOMAIN_ATTR_OPTIN 设置为 mailAntiUBEService。对于 Sun LDAP Schema 1,在 DC 树的域条目 sesta.com 中将 mailAntiUBEService 属性设置为 spamvirus。对于 Sun LDAP Schema 2,也将域条目中的 mailAntiUBEService 设置为可以接受垃圾邮件过滤。

Brightmail 将对所有发送到 sesta.com 的邮件进行垃圾邮件和病毒过滤。代码示例 14-4 显示了域条目。

代码示例 14-2 Brightmail 的实例 LDAP 域条目

dn: dc=sesta,dc=com,o=internet

objectClass: domain

objectClass: inetDomain

objectClass: mailDomain

objectClass: nsManagedDomain

objectClass: icsCalendarDomain

description: DC node for sesta.com hosted domain

dc: sesta

inetDomainBaseDN: o=sesta.com,o=isp

inetDomainStatus: active

mailDomainStatus: active

mailDomainAllowedServiceAccess: +imap, pop3, http:*

mailRoutingHosts: manatee.siroe.com

preferredMailHost: manatee.siroe.com

mailDomainDiskQuota: 100000000

mailDomainMsgQuota: -1

mailClientAttachmentQuota: 5

mailAntiUBEService: spam

mailAntiUBEService: virus

如果使用 SpamAssassin,则除了没有 mailAntiUBEService: virus 以外,条目是相同的。请参见本章中介绍特定的第三方软件的一节以获得更多的实例和详细信息。

指定通道级别的过滤

按照用户或域指定垃圾邮件过滤是一个很明显的条件,而按照通道来指定的条件却不是很明显。按照源通道或目标通道来指定过滤旨在为垃圾邮件过滤提供更高的灵活性和粒度。

Messaging Server 使您可以按照源通道或目标通道指定过滤。表 14-1 中所述的通道关键字是实现过滤的机制。以下实例说明如何设置通道级别的过滤。

  1. 在向特定后端邮件存储主机发送邮件的所有外来 SMTP 服务器的 imta.cnf 文件中添加重写规则。示例:
  2. msg_store1.siroe.com   $U@msg_store1.siroe.com

  3. 使用 destinationspamfilteroptin 关键字添加与该重写规则对应的通道。示例:
  4. tcp_msg_store1 subdirs 20 backoff "pt5m" "pt10" "pt30" "pt1h" \
    "pt2h" "pt4h" maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
    destinationspamfilteroptin spam
    msg_store1.siroe.com

表 14-1 垃圾邮件过滤器的 MTA 通道关键字

通道关键字

说明

destinationspamfilteroptin

指定将过滤所有发送到该通道的邮件(即使没有使用 LDAP_OPTIN LDAP 属性按照用户或域来指定那些服务)。此关键字后面跟过滤器参数。可用的参数取决于过滤程序。例如,Brightmail 的参数为 spamvirusspam,virus。SpamAssassin 的参数为 spam


在本实例中,Brightmail 将对发送到邮件存储中的所有邮件进行垃圾邮件和病毒扫描:

ims-ms destinationspamfilteroptin spam,virus. . .

sourcespamfilteroptin

指定将过滤所有源自此通道的邮件(即使没有使用 LDAP_OPTIN LDAP 属性按照用户或域来指定那些服务)。此关键字后面跟系统范围内的缺省参数,可用的参数取决于过滤程序。例如,对于 Brightmail,参数为 spamvirusspam,virus。对于 SpamAssassin,参数为 spam。如果 switchchannel 有效,请将此关键字放置在 switched-to 通道上。

通道级别过滤实例

实例 1。使用 Brightmail 对所有从 MTA 中继发送到称为 siroemail 的后端邮件存储的邮件进行垃圾邮件和病毒过滤。设置重写规则以通过名为 tcp_siroemail 的 MTA 通道发送这些邮件。

  1. 在向后端邮件存储主机发送邮件的 imta.cnf 文件中添加重写规则。示例:
  2. msg_store1.siroe.com   $U@msg_store1.siroe.com

  3. 使用 destinationspamfilteroptin 关键字添加与该重写规则对应的通道。示例:
  4. tcp_msg_store1 subdirs 20 backoff "pt5m" "pt10" "pt30" "pt1h" \
    "pt2h" "pt4h" maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
    destinationspamfilteroptin spam, virus
    msg_store1.siroe.com

实例 2。过滤所有通过 MTA 的外来邮件:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
maytlsserver maysaslserver saslswitchchannel tcp_auth \
sourcespamfilteroptin spam
tcp-daemon

实例 3。过滤所有通过 MTA 的外发(到 Internet)邮件:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
maytlsserver maysaslserver saslswitchchannel tcp_auth \
destinationspamfilteroptin spam
tcp-daemon

实例 4。过滤所有通过 MTA 的外来和外发邮件:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
maytlsserver maysaslserver saslswitchchannel tcp_auth \
sourcespamfilteroptin spam destinationspamfilteroptin spam
tcp-daemon

实例 5。使用 mailAntiUBEService 属性过滤发送到本地邮件存储的用户或域的邮件:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
maytlsserver maysaslserver saslswitchchannel tcp_auth \
destinationspamfilteroptin spam
tcp-daemon

实例 6。过滤所有发送到两层系统中本地邮件存储的邮件,不使用基于每个用户的选定:

ims-ms smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
maytlsserver maysaslserver saslswitchchannel tcp_auth \
destinationspamfilteroptin spam
tcp-daemon

实例 7。使用 Brightmail 对所有外来和外发邮件进行垃圾邮件和病毒过滤:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
maytlsserver maysaslserver saslswitchchannel tcp_auth \
destinationspamfilteroptin spam,virus sourcespamfilteroptin \
spam,virus
tcp-daemon

指定要对垃圾邮件执行的操作

按照前面的说明,反垃圾邮件程序将分析邮件并向 Messaging Server 返回邮件是否为垃圾邮件的结论。然后 Messaging Server 将对邮件采取操作。反垃圾邮件程序通常向 MTA 返回一个字符串或一个空值以表示邮件为垃圾邮件。某些程序还会返回垃圾邮件分数 — 评定邮件为垃圾邮件的可能性的数字。此分数可用于整个操作的一部分。

使用 Sieve 邮件过滤语言指定操作。可能的 Sieve 操作包括放弃邮件、将邮件归档到文件夹、添加标题、向主题行添加标记,等等。也可以使用具有 if-then-else 语句的复杂 Sieve 脚本。有关完整的 Sieve 语法,请参见 RFC 3028。

使用表 14-2 中所述的 MTA 垃圾邮件过滤器选项来指定 Sieve 脚本。主垃圾邮件过滤器操作选项包括 Spamfilter_null_action(指定 Sieve 规则在返回的垃圾邮件结论为空值时执行)和 Spamfilter_null_action(指定 Sieve 规则在返回的垃圾邮件结论为字符串时执行)。必须将两个值均存储在 option.dat 中。

实例 1:此选项行将结论为空值的垃圾邮件归档到文件 SPAM_CAN 中。

spamfilter_null_action=data:,require "fileinto"; fileinto "SPAM_CAN";

也可以对返回的结论为字符串的垃圾邮件执行相同的操作:

spamfilter_string_action=data:,require "fileinto"; fileinto "SPAM_CAN";

实例 2:此选项行将结论为字符串的垃圾邮件归档到结论字符串返回到 MTA(即 $U 所执行的操作)后命名的文件中。也就是说,如果返回的结论字符串为 spam,则邮件将存储在名为 spam 的文件中。

spamfilter_null_action=data:,require "fileinto"; fileinto "$U";

实例 3:此选项行将放弃结论为字符串值的垃圾邮件。

spamfilter_string_action=data:,discard

实例 4。下面的一行将向结论为字符串的确定为垃圾邮件的邮件添加标题 Spam-test: FAIL

spamfilter_string_action=data:,require ["addheader"];addheader "Spam-test: FAIL";

实例 5。下面的一行将向垃圾邮件的主题行添加字符串 [PROBABLE SPAM]。

spamfilter_string_action=data:,addtag "[PROBABLE SPAM]";

实例 6。此选项行假定返回的结论为字符串值,并且如果标题包含 resent-fromUser-1,则将垃圾邮件归档到邮箱 testspam 中。如果邮件没有此标题,则该选项行只将邮件归档到 spam 中。

spamfilter_string_action=data:,require "fileinto";\
  if header :contains ["resent-from"] ["User-1"] {\
  fileinto "testspam";\
  } else {\
  fileinto "spam";};

因为可以使用大多数垃圾邮件过滤器软件对结论字符串进行配置,所以您可以根据返回的字符串来指定不同的操作。使用匹配的 spamfilter_verdict_nspamfilter_action_n 选项对可以完成此操作。

实例 7。这些匹配的选项对将放弃返回的结论字符串为 remove 的垃圾邮件。有关如何指定垃圾邮件结论字符串的说明,请参见特定的垃圾邮件过滤器各节。

spamfilter_verdict_0=kill
spamfilter_action_0
=data:,discard

表 14-2 MTA 垃圾邮件过滤器选项 (options.dat)

用于 Spam Assassin 的 MTA 选项

说明

Spamfilter_config_file

SpamAssassin 配置文件的完整文件路径和名称。
缺省值:无

Spamfilter_library

SpamAssassin 共享库的完整文件路径和名称。
缺省值:无

Spamfilter_optional

用于控制是将过滤库报告的某些失败视为临时进程失败还是忽略这些失败。缺省值 0 指定垃圾邮件过滤问题将导致临时进程失败。如果将此值更改为 1,则在某些(可能不是全部)过滤库失败的情况下,系统将跳过垃圾邮件过滤进程。(特别是,如果系统阻塞,库代码中没有返回值,则 MTA 的某些部分也可能会阻塞。)

缺省值: 0

LDAP_optin

基于每个用户激活 SpamAssassin 所使用的 LDAP 属性名称。这应该是 inetMailUser 对象类中的属性。如果没有预定义的属性,请使用 mailAntiUBEService

属性本身(例如:mailAntiUBEService)可以具有多个值并区分大小写。对于 SpamAssassin,该属性值应为小写的 spam

缺省值:无

LDAP_domain_attr_optin

基于每个域激活 SpamAssassin 所使用的 LDAP 属性名称。它适用于目标域。它与上述 LDAP_optin 类似,但是应该位于对象类 mailDomain 中。

缺省值:无

Spamfilter_null_optin

指定一个字符串,如果发现该字符串为属性 mailantiUBEservice 的值,将导致 MTA 运行(就象没有该属性)。也就是说,该字符串禁用了此条目的过滤。有关用法的详细信息,请参见指定将由 SpamAssassin 过滤的邮件

缺省值:空字符串。缺省情况下,系统将忽略空选定属性。(这是自 iPlanet Messaging Server 5.2 以来的更改,在 iPlanet Messaging Server 5.2 中,空选定属性使用空选定列表触发过滤。可以通过将 SPAMFILTER_NULL_OPTIN 设置为实际中始终不会出现的字符串来恢复 5.2 版的这种行为。)

Spamfilter_null_action

Sieve 规则,指定当 SpamAssassin 返回空值结论时如何处理邮件。使用文件 URL 可以从外部存储 Sieve 表达式。例如:file:///var/opt/SUNWmsgsr/config/null_action.sieve。此外,请勿使用 Sieve 拒收操作拒绝垃圾邮件,因为这样做会向无辜的团体(其服务器曾被用于发送垃圾邮件)发送未传送通知。
缺省值:data:,discard;

Spamfilter_string_action

Sieve 规则,指定当结论为字符串时如何处理邮件。使用文件 URL 可以从外部存储 Sieve 表达式。例如:file:///var/opt/SUNWmsgsr/config/null_action.sieve。此外,请勿使用 Sieve 拒收操作拒绝垃圾邮件,因为这样做会向无辜的团体(其服务器曾被用于发送垃圾邮件)发送未传送通知。

缺省值:data:,require "fileinto"; fileinto "$U;

其中,$Uverdict 返回的字符串。

spamfilter_verdict_n

spamfilter_verdict_nspamfilter_action_n 是匹配的选项对,其中,n 是 0 到 9 之间的数字。这些选项使您可以为任意结论字符串指定 Sieve 过滤器。分别将 spamfilter_verdict_nspamfilter_action_n 设置为结论字符串和 Sieve 过滤器,从而可以实现此操作。其中,n 是 0 到 9 之间的整数。例如,通过指定以下选项,某个站点可以使“reject”结论导致 sieve 拒收操作:

spamfilter_verdict_0=reject
spamfilter_action_0=data:,require "reject"; reject "Rejected by spam filter";

所有 spamfilter_verdict_0 选项的缺省值和对应的操作选项的缺省值均为空字符串。

缺省值:无

spamfilter_action_n

请参见 spamfilter_action_n。

缺省值:无

spamfilter_final

某些过滤库可以执行基于收件人地址的一组操作。spamfilter_final 可以指定传递到过滤库的收件人地址的类别。设为 0 将使用所谓的中间地址;设为 1 将发送最终格式的收件人地址。

缺省值: 0

optin_user_carryover

转发是对垃圾邮件过滤进程的挑战。设想一个用户条目,该条目指定了 forward 传送选项,并且指定了其他用户的转发地址。此外,用户条目还选定了某种特定类别的过滤。那么,是否应将过滤应用到已转发的邮件呢?一方面,一个特定用户的正确过滤选择对于另外一个用户来说不一定是正确的选择。另一方面,取消过滤操作可能被视为违反了站点的安全策略。

没有一个在所有情况下均正确的答案。因此,转发邮件时,OPTIN_USER_CARRYOVER 将控制如何将垃圾邮件过滤选定列表从一个用户/别名条目传送到另外一个用户/别名条目。该选项是按位编码的值。不同的位值具有的含义如下:

位 0(值 1)。每个 LDAP 用户条目无条件地覆盖所有先前活动的用户/域选定。

位 1(值 2)。如果用户的域具有选定属性,则该属性将覆盖所有先前处于活动状态的用户/域/别名选定。

位 2(值 4)。如果用户具有选定属性,则该属性将覆盖所有先前处于活动状态的用户/域/别名选定。

位 3(值 8)。由 [optin] 非位置参数指定的选定将覆盖所有先前处于活动状态的用户/域/别名选定。

缺省值:0(如果一个用户具有可以转发到另一个用户的传送选项,则选定将累积起来。此缺省值确保了转发时站点安全策略的有效性;其他设置可能不具有此种功能。)


使用 Brightmail

Brightmail Inc. 是为电子邮件服务器提供反垃圾邮件和反病毒软件解决方案的公司。Brightmail 解决方案由 Brightmail 服务器连同下载到电子邮件服务器的实时反垃圾邮件和反病毒规则更新组成。

Brightmail 的工作方式

Brightmail 服务器部署在用户站点上。Brightmail 在 Internet 周围设置了电子邮件探测,用于检测新的垃圾邮件。Brightmail 技术人员创建了实时阻止此垃圾邮件的自定义规则。还要实时地将这些规则下载到 Brightmail 服务器。Brightmail 数据库保持更新,Brightmail 服务器将为指定用户或域运行此数据库电子邮件过滤器。

Brightmail 的体系结构

图 14-1 说明了 Brightmail 的体系结构。

图 14-1

此图形显示了 Brightmail 和 Messaging Server 的体系结构。

Brightmail 和 Messaging Server 体系结构

当 Brightmail 支援和运作中心 (BLOC) 从电子邮件探测接收到垃圾邮件时,操作员将立即创建相应的反垃圾邮件规则,该规则将被下载到 Brightmail 用户计算机上。同样,Brightmail 也将发送 Symantec 安全响应实时病毒规则。用户的 Brightmail 服务器将使用这些规则捕捉垃圾邮件和病毒。

MTA 使用 Brightmail SDK 与 Brightmail 服务器通信。MTA 根据 Brightmail 返回的响应分发邮件。MTA 收到邮件 (1a) 或 (1b) 后,将把邮件发送到 Brightmail 服务器 (2)。Brightmail 服务器使用其规则和数据来确定邮件是否为垃圾邮件或病毒 (3),并向 MTA 返回结论。根据该结论,MTA 将 (4a) 放弃邮件或将邮件作为文件保存到文件夹,或 (4b) 将其正常传送到目的地。

由于 Brightmail SDK 是第三方软件,因此我们未将其包含在安装工具包中。必须从 Brightmail Inc. 获得 Brightmail SDK 和服务器软件。MTA 的配置设置可以判断是否装入 Brightmail SDK 以及装入的位置,以启用 Brightmail 集成。

装入 SDK 后,Brightmail 邮件处理将由若干因素和粒度级别来确定(Brightmail 用于指定有效处理的术语为选定)。这由以下条件指定:

对于任何特定的邮件收件人,上述选定项和缺省项是相互组合的,即如果已经指定用于垃圾邮件和病毒的缺省通道,则无需使用基于每个用户的选定。也就是说,如果系统管理员决定为所有人进行垃圾邮件和病毒的过滤,则无需向用户显示用于垃圾邮件或病毒的选定功能。无法选择退出处理,也就是说,如果用户已经通过系统选项或域选项选定某项服务,则不能说不需要该服务。这还意味着,如果您选定了服务,并且您已经将邮件转发给另一个地址,则该地址将在以您的名义执行完过滤后获得该邮件。

仅提供两种服务,即病毒检测或垃圾邮件检测。Brightmail 还提供“内容过滤”服务,但此功能是使用 Sieve 提供的,因此让 Brightmail 进行 Sieve 过滤不具有增值效果。

确定邮件包含病毒后,可以将 Brightmail 服务器配置为清除病毒并将干净的邮件重新提交回 MTA。(由于丢失有关重新提交的干净邮件中的原邮件信息会造成某些不良的负面影响,因此我们建议您不要将 Brightmail 配置为将干净的邮件重新提交回 MTA。)当邮件为垃圾邮件时,从 Brightmail 返回的结论和 Brightmail 中的配置使 MTA 能够确定如何处理该邮件。可以放弃该邮件、归档到文件夹、在主题行上将其标记为垃圾邮件或病毒、传递给 Sieve 规则、正常传送到 INBOX 中,等等。

Brightmail 服务器可以与 MTA 位于同一系统中,也可以位于单独的系统中。事实上,您可以让多个 Brightmail 服务器服务于一个或多个 MTA。Brightmail SDK 使用 Brightmail 配置文件来确定要使用的 Brightmail 服务器。

Brightmail 要求和性能注意事项

部署 Brightmail

本节介绍如何为以下配置部署 Brightmail:

BrightMail 过滤功能是使用通道或 LDAP 属性在 Messaging Server 中启用的。系统中的过滤方法是累加而成的。也就是说,它是关键字和属性的结合。

在目标通道或源通道中为用户激活 Brightmail 处理

  1. 安装并配置 Brightmail 服务器。
  2. 要在系统中安装 Brightmail,请咨询您的 Brightmail 代表。

  3. 通过向 options.dat 文件添加以下两个 MTA 选项来设置 Brightmail 库和配置文件参数:
  4. spamfilter_Library=path_and_filename_of_libbmiclient.so
    spamfilter_config_file=path_and_filename_of_brightmail_config_file

  5. 在 MTA 选项文件(表 14-2)和 Brightmail 配置文件(表 14-3)中指定所需的 Brightmail 选项。
  6. 指定进行 Brightmail 处理时通道和电子邮件的方向(源或目标)。
  7. 在通道块中设置关键字 sourcespamfilteroptindestinationspamfilteroptin(请参见指定通道级别的过滤MTA 配置文件

    sourcespamfilteroptin 指定 Brightmail 软件将处理来自通道的所有邮件。

    destinationspamfilteroptin 指定 Brightmail 软件将处理进入通道的所有邮件。

    这些属性的有效值如下:

    spam — 进行垃圾邮件过滤
    virus — 进行病毒过滤
    spam,virus — 进行垃圾邮件和病毒过滤

实例

实例 1。对来自 MTA 中继并传入称为 siroe 的特定后端邮件存储的邮件进行垃圾邮件和病毒过滤。邮件将通过名为 tcp_siroemail 的 MTA 通道:

实例 2。过滤所有通过 MTA 的外来邮件。Brightmail 将对 tcp_local 通道进行垃圾邮件过滤:

为选定用户激活 Brightmail 处理

  1. 安装并配置 Brightmail 软件。
  2. 要在系统中安装 Brightmail,请咨询您的 Brightmail 代表。

  3. 设置 Brightmail 库和配置文件参数。
  4. 请使用 options.dat 文件中的以下两个 MTA 选项:

    spamfilter_Library=path_and_filename_of_libbmiclient.so
    spamfilter_config_file=path_and_filename_of_brightmail_config_file

  5. 在 MTA 选项文件(表 14-2)和 Brightmail 配置文件(表 14-3)中指定所需的 Brightmail 选项。
  6. 指定用来对指定用户激活 Brightmail 处理的 LDAP 属性。
  7. option.dat 文件中设置 LDAP_OPTIN=mailAntiUBEService。可以指定除 mailAntiUBEService 之外的 LDAP 属性,但是我们建议使用此名称。

  8. 在用户条目中设置 LDAP 属性 mailAntiUBEService,以接受 Brightmail 处理。
  9. mailAntiUBEService 的有效值为 spam(进行垃圾邮件过滤)和 virus(进行病毒过滤)。

实例

假定在 option.dat 文件中将 LDAP_OPTIN 设置为 mailAntiUBEService。如果用户 Otis Fanning 在其用户条目中将 mailAntiUBEService 属性设置为 spamvirus,Brightmail 将对其邮件进行垃圾邮件和病毒过滤。代码示例 14-3 显示了 Otis Fanning 的启用了 Brightmail 的用户条目。

代码示例 14-3 Brightmail 的实例 LDAP 用户条目

dn: uid=fanning,ou=people,o=sesta.com,o=ISP

objectClass: person

objectClass: organizationalPerson

objectClass: inetOrgPerson

objectClass: inetUser

objectClass: ipUser

objectClass: inetMailUser

objectClass: inetLocalMailRecipient

objectClass: nsManagedPerson

objectClass: userPresenceProfile

cn: Otis Fanning

sn: fanning

initials: OTF

givenName: Otis

pabURI: ldap://ldap.siroe.com:389/ou=fanning,ou=people,o=sesta.com,o=isp,o=pab

mail: Otis.Fanning@sesta.com

mailAlternateAddress: ofanning@sesta.com

mailDeliveryOption: mailbox

mailHost: manatee.siroe.com

uid: fanning

dataSource: iMS 5.0 @(#)ims50users.sh 1.5a 02/3/00

userPassword: password

inetUserStatus: active

mailUserStatus: active

mailQuota: -1

mailMsgQuota: 100

mailAntiUBEService: virus

mailAntiUBEService: spam

为系统中的选定域激活 Brightmail 处理

  1. 安装并配置 Brightmail 软件。
  2. 要在系统中安装 Brightmail,请咨询您的 Brightmail 代表。

  3. 设置 Brightmail 库和配置文件参数。
  4. options.dat 文件中设置以下两个 MTA 选项:

    spamfilter_Library=path_and_filename_of_libbmiclient.so
    spamfilter_config_file=path_and_filename_of_brightmail_config_file

  5. 在 MTA 选项文件(表 14-2)和 Brightmail 配置文件(表 14-3)中指定所需的 Brightmail 选项。
  6. 指定用来在指定域上激活 Brightmail 处理的 LDAP 属性。
  7. option.dat 文件中设置 LDAP_DOMAIN_ATTR_OPTIN=mailAntiUBEService。可以指定其他 LDAP 属性名称,但是我们建议使用此名称,以使 Messaging Server 模式保持一致。

  8. 在域条目(DC 树中)中设置 LDAP 属性 mailAntiUBEService,该域条目的电子邮件将接受 Brightmail 处理。
  9. mailAntiUBEService 的有效值为 spam(进行垃圾邮件过滤)和 virus(进行病毒过滤)。

实例

假定在 option.dat 文件中将 LDAP_DOMAIN_ATTR_OPTIN 设置为 mailAntiUBEService。在 DC 树的 example.com 域条目中,将 mailAntiUBEService 属性设置为 spamvirus代码示例 14-4 显示了启用了 Brightmail 的域条目。

代码示例 14-4 Brightmail 的实例 LDAP 域条目

dn: dc=sesta,dc=com,o=internet

objectClass: domain

objectClass: inetDomain

objectClass: mailDomain

objectClass: nsManagedDomain

objectClass: icsCalendarDomain

description: DC node for sesta.com hosted domain

dc: sesta

inetDomainBaseDN: o=sesta.com,o=isp

inetDomainStatus: active

mailDomainStatus: active

mailDomainAllowedServiceAccess: +imap, pop3, http:*

mailRoutingHosts: manatee.siroe.com

preferredMailHost: manatee.siroe.com

mailDomainDiskQuota: 100000000

mailDomainMsgQuota: -1

mailClientAttachmentQuota: 5

mailAntiUBEService: spam

mailAntiUBEService: virus

Brightmail 部署方案实例

本节将介绍几种通用的部署 Brightmail 的方案。在每种方案中,您将执行标准 Brightmail 配置步骤,例如,安装 Brightmail、指定库和配置文件(请参见前面各节)。本节介绍了以下部署方案:

Brightmail 处理本地外来邮件

您可能希望将系统配置为对本地传送的所有邮件进行垃圾邮件和病毒的过滤。要将 Brightmail 设置为处理进入本地邮件存储(即进入 imta.cnf 中的 ims-ms 通道)的所有外来邮件,请将 destinationspamfilteroptin 关键字添加到 ims-ms 通道定义中。示例:

ims-ms defragment subdirs 20 backoff "pt5m" "pt10" "pt30" "pt1h" \
"pt2h" "pt4h" maxjobs 1 pool IMS_POOL fileinto $U+$S@$D filter \
ssrd:$A ims-ms-daemon
destinationspamfilteroptin spam,virus
ims-ms-daemon

Brightmail 处理来自 Internet 的外来邮件

您可能希望将系统配置为对来自 Internet 的所有邮件进行垃圾邮件过滤。要将 Brightmail 设置为处理来自 Internet 的所有外来邮件,请将 sourcespamfilteroptin 关键字添加到 tcp-local 通道定义中。示例:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth
sourcespamfilteroptin spam
tcp-daemon


Brightmail 允许您放弃垃圾邮件,或将其保存在指定的垃圾邮件文件夹中。如果接收系统不具有指定垃圾邮件文件夹的功能,则垃圾邮件文件夹的地址语法对于该系统将没有意义。


Brightmail 处理外发到 Internet 的邮件

您可能希望将系统配置为对外发到 Internet 的所有邮件进行垃圾邮件过滤。要将 Brightmail 设置为处理外发到 Internet 的所有邮件,请将 destinationspamfilteroptin 关键字添加到外发 MTA 中的 tcp-local 通道定义中。示例:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth \
destinationspamfilteroptin spam
tcp-daemon

Brightmail 处理进入特定后端邮件存储主机的外来邮件

要将系统配置为对进入特定后端邮件存储主机的所有邮件进行病毒和垃圾邮件过滤,请执行以下操作:

  1. 在向后端邮件存储主机发送邮件的所有外来 SMTP 服务器的 imta.cnf 文件中添加重写规则。示例:
  2. msg_store1.siroe.com   $U@msg_store1.siroe.com

  3. 使用 destinationspamfilteroptin 关键字添加与该重写规则对应的通道。示例:
  4. tcp_msg_store1 subdirs 20 backoff "pt5m" "pt10" "pt30" "pt1h" \
    "pt2h" "pt4h" maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
    destinationspamfilteroptin spam,virus
    msg_store1.siroe.com

向垃圾邮件添加标题

您可以向垃圾邮件添加任意标题。要向 Brightmail 软件捕捉到的邮件添加标题 spam-result: Brightmail says this is spam,请将以下内容添加到 option.dat 文件中:

spamfilter_string_action=data:,require ["addheader" "spamtest"];addheader "spam-result:Brightmail says this is spam";

只有 "spamtest"]; 之后的文本可以自定义。

Brightmail 配置选项

表 14-3 显示了选定的 Brightmail 配置文件选项。可以从 Brightmail 获得最新的 Brightmail 配置文件选项的完整列表。

表 14-3 选定的 Brightmail 配置文件选项

Brightmail 选项(不区分大小写)

说明(属性值区分大小写)

blSWPrecedence

给定的邮件可以有多个结论。此选项指定优先级顺序。因此,如果将此选项指定为 virus-spam(结论由连字符 [-] 隔开),则首先对邮件进行病毒处理,然后进行垃圾邮件处理。这是将 Brightmail 和 Sun Java System Messaging Server 结合使用时的推荐设置。

blSWClientDestinationDefault

指定如何传送正常邮件(也就是说,不是垃圾邮件也不是病毒,因此没有结论)。通常您希望正常传送此邮件,因此应指定 inbox 作为值。无缺省值。

blSWLocalDomain

此属性指定被当作本地域的域。此属性可以有多个行,指定多个被当作本地域的域。本地域和外地域用于指定对结论的两种不同处理方法。

请参见以下的 blSWClientDestinationLocalblSWClientDestinationForeign。例如,您可以指定

blSWLocalDomain=siroe.com

blSWClientDestinationLocal

此选项指定用于本地域的结论和操作对。通常此选项有两个行,一行用于垃圾邮件,一行用于病毒。值的格式为 verdict|action,例如,

blSWClientDestinationLocal=spam|spambox

blSWClientDestinationLocal=virus|

Brightmail 对“空”操作(即“|”右侧没有值)的缺省解释是放弃邮件。因此如果以上实例具有结论 virus,将放弃邮件。如果结论为 spam,以上实例将把邮件作为文件保存到名为 spambox 的文件夹。如果邮件不是垃圾邮件或病毒,则结论不匹配,将根据上述 blSWClientDestinationDefault 设置中的设置正常传送邮件。

使用单独的 Brightmail 服务器或 MTA 服务器时,可以通过使用 Brightmail_verdict_n/Brightmail_action_n/Brightmail_null_action/Brightmail_string_action MTA 选项自定义每个 MTA 进行的操作,以覆盖 Brightmail 服务器返回的操作和结论。在此实例中,可以使用 MTA 中不同的 Brightmail_null_action 来覆盖病毒操作(放弃病毒邮件),或使用 Brightmail_verdict_0=spamboxBrightmail_action_0=data:,require "fileinto";fileinto "Junk"; 将邮件作为文件保存到名为 Junk 而不是 spambox 的文件夹中。

blSWClientDesintationForeign

格式和解释与上述 blSWClientDestinationLocal 相同,但应用于非本地域中的用户。

blSWUseClientOptin

与 Sun Java System Messaging Server 结合使用时,请始终将此选项设置为 TRUE。

blswcServerAddress

格式为 ip:port[,ip:port,...],用于指定一个或多个 Brightmail 服务器的 IP 地址和端口号


使用 SpamAssassin

本节包含以下小节:

SpamAssassin 概述

Messaging Server 支持使用 SpamAssassin,它是一种用于识别垃圾邮件的邮件过滤器免费软件。SpamAssassin 由一个使用 Perl 编写的库和一组可用于将 SpamAssassin 集成到邮件传送系统的应用程序和实用程序组成。

SpamAssassin 为每个邮件计算一个分数。该分数是通过对邮件标题和主体信息执行一系列测试来计算的。测试成功,则返回结论真(垃圾邮件);测试失败,则返回结论假(非垃圾邮件)。该分数为实数,可能为正,也可能为负。分数超过了指定阈值(通常为 5.0)的邮件被认为是垃圾邮件。以下为 SpamAssassin 结论字符串的实例:

True ; 18.3 / 5.0

True 表示邮件为垃圾邮件。18.3 为 SpamAssassin 分数。5.0 为阈值。

SpamAssassin 的可配置程度很高。可以随时添加或删除测试,也可以调整现有测试的分数。这都是通过各种配置文件进行的。在 SpamAssassin Web 站点中可以找到有关 SpamAssassin 的详细信息。

调用 Brightmail 垃圾邮件和病毒扫描库的同一机制也可以用于连接到 SpamAssassin spamd 服务器。Sun Java System Messaging Server 中提供的模块的名称为 libspamass.so


在以前版本的 Messaging Server 中,选项名称和通道关键字包含单词 brightmail(例如,sourcebrightmail 或 brightmail_library)。现在,brightmail 被更通用的 spamfilter 替换,但是为了向下兼容,原来的名称仍然有效。


SpamAssassin/Messaging Server 操作原理

spamd 是 SpamAssassin 的守护程序版本,可以从 MTA 中调用。spamd 侦听套接字上的请求并产生子程序以测试邮件。子程序在处理邮件并返回结果后结束。从理论上讲,分叉应当是有效率的进程,因为代码本身可以在子进程间实现共享。

没有使用 SpamAssassin 安装中的客户机部分 spamc。相反,客户机部分的功能是通过名为 libspamass.so 的共享库(Messaging Server 的一部分)来实现的。加载 libspamass.so 的方法与加载 Brightmail SDK 的方法相同。

从 MTA 的角度来看,几乎可以在用于垃圾邮件过滤的 SpamAssassin 和 Brightmail 之间进行透明切换。但是并非完全透明,因为这两种程序的功能不同。例如,Brightmail 还可以进行病毒过滤,但是 SpamAssassin 仅用于垃圾邮件过滤。两种软件包返回的结果(或结论)也不同。SpamAssassin 可以提供分数,而 Brightmail 仅可以提供结论名称,因此这两种软件的配置也有一些差别。

使用与 MTA 集成的 SpamAssassin 时,SpamAssassin 仅返回分数和结论。邮件本身不会被 SpamAssassin 修改。也就是说,必须由 Sieve 脚本来设置诸如添加标题和修改主题行这样的选项。

SpamAssassin 要求和使用注意事项

在哪里运行 SpamAssassin?

SpamAssassin 可以在其自己的单独系统上、单一系统部署中与 Messaging Server 相同的系统上或两层部署中与 MTA 相同的系统上运行。如果在 MTA 和邮件存储之间使用本地邮件传输协议 (LMTP),则必须从 MTA 中调用过滤。不能从邮件存储中调用过滤。如果在 MTA 和邮件存储之间使用 SMTP,则既可以从 MTA 也可以从邮件存储中调用过滤,并且 SpamAssassin 可以在上述系统或单独的第三方系统中运行。

如果要使用运行了 SpamAssassin 的多个服务器,则必须在这些服务器的前面使用负载平衡器。配置 MTA,使其仅有一个 SpamAssassin 服务器地址。

配置 SpamAssassin

本节介绍如何在 Messaging Server 上配置 SpamAssassin。假定安装了 Perl 5.6 或更高版本以及 SpamAssassin。配置 SpamAssassin 包括以下两部分:

    可以为整个系统、通道、用户或域进行邮件过滤。

    您可能需要返回垃圾邮件、删除垃圾邮件、将垃圾邮件归档单独的文件夹中或用新标题或 Subject 行来为垃圾邮件做标记。

指定将由 SpamAssassin 过滤的邮件

配置 SpamAssassin 的第一部分为指定要过滤的邮件。可以按照以下方式来指定过滤:

过滤进入本地邮件存储的所有邮件

您可能希望对系统进行配置,以便 SpamAssassin 可以对本地传送的所有邮件进行过滤。要过滤进入本地邮件存储的所有外来邮件,请向 ims-ms 通道中添加 destinationspamfilteroptin spam。例如:

ims-ms defragment subdirs 20 backoff "pt5m" "pt10" "pt30" "pt1h" \
"pt2h" "pt4h" maxjobs 1 pool IMS_POOL fileinto $U+$S@$D filter \
ssrd:$A ims-ms-daemon
destinationspamfilteroptin spam
ims-ms-daemon

过滤来自 Internet 的所有邮件

要过滤从 Internet 进入系统的所有邮件,请向 tcp-local 通道中添加 sourcespamfilteroptin 关键字。例如:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth
sourcespamfilteroptin spam
tcp-daemon

过滤外发到 Internet 的所有邮件

要过滤从系统外发到 Internet 的所有邮件,请向外发 MTA 上的 tcp-local 通道定义中添加 destinationspamfilteroptin 关键字。例如:

tcp_local smtp mx single_sys remotehost inner switchchannel \
identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL maytlsserver \
maysaslserver saslswitchchannel tcp_auth \
destinationspamfilteroptin spam
tcp-daemon

过滤发到特定邮件存储的邮件

要将系统配置为对进入后端邮件存储主机的所有邮件进行垃圾邮件过滤,请执行以下操作:

  1. 在向特定后端邮件存储主机发送邮件的所有外来 SMTP 服务器的 imta.cnf 文件中添加重写规则。示例:
  2. msg_store1.siroe.com   $U@msg_store1.siroe.com

  3. 使用 destinationspamfilteroptin 关键字添加与该重写规则对应的通道。示例:
  4. tcp_msg_store1 subdirs 20 backoff "pt5m" "pt10" "pt30" "pt1h" \
    "pt2h" "pt4h" maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
    destinationspamfilteroptin spam
    msg_store1.siroe.com

过滤发到特定用户或域的邮件

要为特定用户或域过滤邮件,请向用户和域的 LDAP 条目中添加以下属性 - 值对:

MailAntiUBEService: spam

另外,请在 option.dat 文件中指定相应的 LDAP_optin 值。对于用户级别的过滤,请添加以下条目:

LDAP_optin=mailantiUBEservice

对于域级别的过滤,请添加以下条目:

LDAP_domain_attr_optin=mailAntiUBEService

以此方式激活 SpamAssassin 时,无需在通道定义中放入 destinationspamfilter。属性名不区分大小写。


要启用过滤,MailAntiUBEService 需要任一字符串值。为了一致和明确,请使用值 spam。某些部署可能要求所有条目均具有一组相同的属性,并且为每个属性设置一个值。在此类型的部署中,所有条目均启用了 spam 过滤。但是,您可以将 MTA 选项 SPAMFILTER_NULL_OPTIN 设置为一个字符串,该字符串设置为值 MailAntiUBEService 时,将禁用过滤。


指定如何处理垃圾邮件

配置 SpamAssassin 的第二部分是决定如何处理垃圾邮件。可以放弃垃圾邮件、拒绝垃圾邮件、将垃圾邮件归档或为垃圾邮件标记一个标题。此操作是由 MTA 选项 spamfilter_null_actionspamfilter_string_action 指定的 Sieve 脚本来控制的。此外,SpamAssassin 选项 modeverdictfield 可以用于指定文件夹名称、标题标记,等等。以下各节将对此进行详细介绍。


Sieve 是用于为电子邮件创建过滤器的一种计算机语言。可以使用本节中显示的实例来创建自己的自定义 Sieve 脚本。有关完整的语法信息,请参见可以在线查看的 Sieve 规范。对于初学者来说,http://www.cyrusoft.com/sieve/ 是一个很好的站点。


SpamAssassin 配置实例

本节介绍了一些通用的 SpamAssassin 配置实例:

将垃圾邮件归档到单独的文件夹

本实例将测试传入到本地邮件存储的邮件并将垃圾邮件归档到名为 spam 的文件夹中。请注意,可以按照任何顺序来执行前三个步骤。

  1. 指定要过滤的邮件。
  2. 要过滤传入到本地邮件存储的所有邮件,请通过在 ims-ms 通道中添加 destinationspamfilteroptin spam 关键字来更改 imta.cnf 文件。

    !
    ! ims-ms
    ims-ms defragment subdirs 20 notices 1 7 14 21 28 backoff "pt5m" "pt10m" "pt30m" "pt1h"  "pt2h" "pt4h" maxjobs 4 pool IMS_POOL fileinto
    $U+$S@$D destinationspamfilteroptin spam
    ims-ms-daemon

  3. 创建 SpamAssassin 配置文件。
  4. 步骤 3 中指定了此文件的名称和位置。spamassassin.opt 是一个很好的文件名。本文件包含以下各行:

    host=127.0.0.1
    port=2000
    mode=0
    verdict=spam
    debug=1

    hostport 分别指定运行了 spamd 的系统的名称和 spamd 侦听外来请求的端口。mode=0 指定如果系统认为邮件为垃圾邮件,则返回一个由 verdict指定的字符串(本实例中该字符串为 spam)。debug=1 就在 SpamAssassin 库中启用调试。

  5. option.dat 文件添加以下各行:

    ! for Spamassassin
    spamfilter_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter_optional=1
    spamfilter_string_action=data:,require "fileinto"; fileinto "$U;

  6. spamfilter_config_files 指定了 SpamAssassin 配置文件。

    spamfilter_library 指定了 SpamAssassin 共享库。

    spamfilter_optional=1 指定 spamd 失败时,MTA 继续运行。

    spamfilter_string_action 指定对垃圾邮件采取 Sieve 操作。

    请注意,在本实例中,因为缺省值已为 data:,require "fileinto"; fileinto "$U;,所以无需 spamfilter_string_action。该行指定将垃圾邮件发送到某个文件夹。文件夹的名称是 SpamAssassin 返回的垃圾邮件结论值。spamassassin.opt 中的 verdict 选项指定了 SpamAssassin 返回的值。(请参见步骤 2。)在此实例中,文件夹名称为 spam。

  7. 重新编译配置并重新启动服务器。只需要重新启动 MTA。无需执行 stop-msg
  1. 启动 spamd 守护程序。通常使用以下通用格式的命令执行此操作:

放弃垃圾邮件

要放弃垃圾邮件而非将其归档到文件夹,请按照将垃圾邮件归档到单独的文件夹中说明的步骤 1步骤 2 进行操作,但是要更改 option.dat 中的Spamfilter_string_action 选项,如下所示:

! for Spamassassin
spamfilter_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
spamfilter_library=/opt/SUNWmsgsr/lib/libspamass.so
spamfilter_optional=1
spamfilter_string_action=data:,discard;

完成此操作后,重新编译配置并重新启动服务器。(请参见将垃圾邮件归档到单独的文件夹中的步骤 4。)

向垃圾邮件添加简单的标题

本实例将向确定为垃圾邮件的每封邮件添加标题 Spam-test: spam。仍然按照将垃圾邮件归档到单独的文件夹步骤 1步骤 2 中所述的说明进行操作,但是要在 option.dat 中添加 Spamfilter_string_action,如下所示:

! for Spamassassin
spamfilter_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
spamfilter_library=/opt/SUNWmsgsr/lib/libspamass.so
spamfilter_optional=1
spamfilter_string_action=data:,require ["addheader"];addheader "Spam-test:$U";

上面列出的前三个选项指定了 SpamAssassin 配置文件 (spamfilter_config_file)、SpamAssassin 共享库 (spamfilter_library) 以及共享库失败时 MTA 继续运行 (spamfilter_optional=1)。下面的行指定将格式为 Spam-test: spam 的标题添加到邮件中: 

spamfilter_string_action=data:,require ["addheader"];addheader "Spam-test:$U";

data:,require ["addheader"];addheader 是向邮件添加标题的 Sieve 语法。

"Spam-test: $U" 为标题字符串。其中,“Spam-test:”是文字,$U 指定了由 SpamAssassin 返回的字符串值。(spammassassin.opt 中的 verdict 选项指定了此字符串值,在本实例中,该字符串值为 spam。)

完成此操作后,重新编译配置并重新启动服务器。(请参见将垃圾邮件归档到单独的文件夹中的步骤 4。)

向垃圾邮件添加包含 SpamAssassin 分数的标题

本实例将标题 Spam-test: result string 添加到已由 SpamAssassin 确定为垃圾邮件的邮件。以下为标题实例:

Spam-test: True ; 7.3 / 5.0

其中,Spam-test; 是文字,其后的内容为结果字符串。True 表示邮件为垃圾邮件(false 表示邮件不是垃圾邮件)。7.3 是 SpamAssassin 分数。5.0 是阈值。该结果对于设置 Sieve 过滤器非常有用,该过滤器可以对高于某一分数或介于某分数之间的邮件进行归档或放弃。

此外,将 USE_CHECK 设置为 0 会将结论字符串与匹配的 SpamAssassin 测试列表一同返回。请参见表 14-4 中的 USE_CHECK

  1. 指定要过滤的邮件。将垃圾邮件归档到单独的文件夹中的步骤 1 说明了此操作。
  2. 创建 SpamAssassin 配置文件。
  3. 步骤 3 中指定了此文件的名称和位置。spamassassin.opt 是一个很好的文件名。本文件将包含以下各行:

    host=127.0.0.1
    port=2000
    mode=1
    field=
    verdict=spam
    debug=1

    hostport 指定运行了 spamd 的系统的名称和 spamd 侦听外来请求的端口。mode=1 指定如果系统发现邮件为垃圾邮件,则返回 SpamAssassin 结果字符串。field= 为 SpamAssassin 结果字符串指定了字符串前缀。在此实例中,由于我们要在 Sieve 脚本中指定字符串前缀,所以无需前缀。debug=1 用于将在 SpamAssassin 库中启用调试。

  4. option.dat 文件添加以下各行:

    !for Spamassassin
    spamfilter_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter_optional=1
    spamfilter_string_action=data:,require ["addheader"];addheader "Spam-test: $U";

  5. 如前面实例所述,前三个选项指定了 SpamAssassin 配置文件、共享库以及共享库失败时 MTA 继续运行。下面一行

    spamfilter_string_action=data:,require ["addheader"];addheader "Spam-test: $U";

    指定了要向垃圾邮件添加的标题。标题将带有文字前缀 Spam-text:,后跟 SpamAssassin 返回的字符串。因为已在步骤 2 中指定了 mode=1,所以将返回 SpamAssassin 结果字符串。例如:True; 7.3/5.0

  6. 重新编译配置并重新启动服务器。因为只需要重新启动 MTA,所以无需执行 stop-msg
  7. # imsimta cnbuild
    # imsimta restart

  8. 启动 spamd 守护程序。请参见将垃圾邮件归档到单独的文件夹中的步骤 5

向主题行添加 SpamAssassin 结果字符串

通过向主题行添加 SpamAssassin 结果字符串,用户可以确定是否要阅读带有 SpamAssassin 分数的邮件。例如:

Subject: [SPAM True ; 99.3 / 5.0] Free Money At Home with Prescription Xanirex!

请注意,如果将 USE_CHECK 设置为 0,则可以将结论字符串与匹配的 SpamAssassin 测试列表一同返回(请参见表 14-4 中的 USE_CHECK)。因为此列表可能会非常长,所以建议您将 USE_CHECK 设置为 1

  1. 指定要过滤的邮件。请参见将垃圾邮件归档到单独的文件夹中的步骤 1
  2. 创建 SpamAssassin 配置文件。
  3. 步骤 3 中指定了此文件的名称和位置。spamassassin.opt 是一个很好的文件名。本文件包含以下各行:

    host=127.0.0.1
    port=2000
    mode=1
    verdict=spam
    debug=1

    hostport 指定运行了 spamd 的系统的名称和 spamd 侦听外来请求的端口。mode=1 指定如果系统发现邮件为垃圾邮件,则返回 SpamAssassin 结果字符串。debug=1 将在 SpamAssassin 库中启用调试。

  4. option.dat 文件添加以下各行:

    !for Spamassassin
    spamfilter_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter_optional=1
    spamfilter_string_action=data:,addtag "[SPAM detected: $U]";

  5. 如前面实例所述,前三个选项指定了 SpamAssassin 配置文件、共享库以及共享库失败时 MTA 继续运行。下面一行

    spamfilter_string_action=data:,addtag "[SPAM detected $U]";

    指定了要向 Subject: 行添加标记。此标记的文字前缀为 SPAM detected,后跟 field 字符串(缺省值为 Spam-Test),再后跟 SpamAssassin 返回的“[result string]”。因为已在步骤 2 中指定了 mode=1,所以将返回 SpamAssassin 结果字符串。因此,主题行将类似以下内容:

    Subject: [SPAM detected Spam-Test: True ; 11.3 / 5.0] Make Money at Home!

    也可以同时使用 addheaderaddtag

    spamfilter_string_action=data:,require ["addheader"];addtag "[SPAM detected $U]";addheader "Spamscore: $U";

    以获得如下邮件:

    Subject: [SPAM detected Spam-Test: True ; 12.3 / 5.0] Vigara Now!
    Spamscore: Spam-Test: True ; 12.3 / 5.0

    设置 spamassassin.opt 中的 field= 可以删除缺省值 Spam-Test。将返回以下较干净的邮件:

    Subject: [SPAM True ; 91.3 / 5.0] Viagra again!
    Spamscore: True ; 91.3 / 5.0

  6. 重新编译配置并重新启动服务器。因为只需要重新启动 MTA,所以无需执行 stop-msg
  7. # imsimta cnbuild
    # imsimta restart

  8. 启动 spamd 守护程序。请参见将垃圾邮件归档到单独的文件夹中的步骤 5

支持 Sieve 扩展操作 spamtest 和 spamadjust

Messaging Server 对可以由 SpamAssassin 使用的 spamtestspamadjust 提供支持。ftp://ftp.isi.edu/in-notes/rfc3685.txt 中说明了 spamtestspamadjust 是一个非标准操作。这些扩展操作使管理员可以设置不同的阈值,并可以设置将覆盖 SpamAssassin 结论的空白列表。您还可以组合使用这两种操作,以根据发送特定邮件的用户来使用不同的阈值。

使用带有“i;ascii-numeric”比较器的 Sieve [RELATIONAL] 扩展操作,spamtest 可以用于将 SpamAssassin 分数与特定值进行比较。SpamAssassin 分数通常为实数,但是 spamtest 首先将分数舍入到最接近的整数,从而将强制此分数为介于 0 和 10 之间的整数值。0 以下的值被强制为 0,10 以上的值被强制为 10。最后,附加上由 Messaging Server 维护的文本字符串就可以产生 spamtest 测试可以理解的测试字符串。

spamadjust 用于调整当前的垃圾邮件分数。此操作采用了一个字符串参数,该参数已扫描为实数值。此值用于调整当前的垃圾邮件分数。整个字符串也将附加到当前的分数文本字符串。在以下所示的实例中,该字符串为“undisclosed recipients”。可以执行多次 spamadjust 操作;每次操作的结果都将添加到当前分数中。再次说明,分数值始终从 0 开始。允许使用已签名的数字值,可以降低当前的分数,也可以增加当前的分数。spamadjust 没有 require 分句;但是应当列出 spamtest 扩展操作。

例如,下面一行是 spamadjust 的可能用法,spamadjust 的 SpamAssassin MODE 设置为 2:

SPAMFILTER_STRING_ACTION=data:,require ["spamtest"];spamadjust "$U";

系统级别的 Sieve 过滤器将检查特定类型的标题,如果找到,则将 SpamAssassin 值增加 5,从而可以修改 SpamAssassin 分数。

spamfilter_string_action=require "spamtest";
if header :contains ["to", "cc", "bcc", "resent-to", "resent-cc", "resent-bcc"]
                    ["<undisclosed recipients>", "undisclosed.recipients"]
{spamadjust "+5 undisclosed recipients";}

最后,用户级别的 Sieve 脚本可以测试结果值、放弃确定为垃圾邮件的邮件、归档可能为垃圾邮件的邮件,并且使来自本地域地址的邮件可以通过以下语句传递:

spamfilter_string_action=require ["spamtest", "relational",  \
"comparator-i;ascii-numeric", "fileinto"];                   \
if anyof (address :matches "from" ["*@siroe.com",            \
                                   "*@*.siroe.com"])         \
    {keep;}                                                  \
elsif spamtest :value "ge" :comparator "i;ascii-numeric" "8" \
    {discard;}                                               \
elsif spamtest :value "ge" :comparator "i;ascii-numeric" "5" \
    {fileinfo "spam-likely";}                                \
else                                                         \
   {keep;}                                                   \

测试 SpamAssassin

要测试 SpamAssassin,请首先在 spamassassion.opt 文件中设置 debug=1。您不必在 imta.cnf 中启用特定于通道的 master_debugslave_debug。然后,将测试邮件发送给测试用户。msg_svr_base/data/tcp_local_slave.log* 文件应当具有类似于以下内容的行:

15:15:45.44: SpamAssassin callout debugging enabled; config /opt/SUNWmsgsr/config/spamassassin.opt

15:15:45.44: IP address 127.0.0.1 specified

15:15:45.44: Port 2000 selected

15:15:45.44: Mode 0 selected

15:15:45.44: Field "Spam-Test: " selected

15:15:45.44: Verdict "spam" selected

15:15:45.44: Using CHECK rather than SYMBOLS

15:15:45.44: Initializing SpamAssassin message context

...

15:15:51.42: Creating socket to connect to SpamAssassin

15:15:51.42: Binding SpamAssassin socket

15:15:51.42: Connecting to SpamAssassin

15:15:51.42: Sending SpamAssassin announcement

15:15:51.42: Sending SpamAssassin the message

15:15:51.42: Performing SpamAssassin half close

15:15:51.42: Reading SpamAssassin status

15:15:51.67: Status line: SPAMD/1.1 0 EX_OK

15:15:51.67: Reading SpamAssassin result

15:15:51.67: Result line: Spam: False ; 1.3 / 5.0

15:15:51.67: Verdict line: Spam-Test: False ; 1.3 / 5.0

15:15:51.67: Closing connection to SpamAssassin

15:15:51.73: Freeing SpamAssassin message context

如果日志文件没有包含与以上内容类似的行,或者未运行 spamd,则将最后的“.”发送到 SMTP 服务器后,SMTP 对话框中将返回以下错误消息:

452 4.4.5 Error writing message temporaries - Temporary scan failure: End message status = -1

此外,如果在 options.dat 中设置了 spamfilter_optional=1(强烈推荐),则将接受邮件而不会过滤邮件。就好像没有启用垃圾邮件过滤一样,并且 tcp_local_slave.log* 中将显示以下内容:

15:35:15.69: Creating socket to connect to SpamAssassin
15:35:15.69: Binding SpamAssassin socket
15:35:15.69: Connecting to SpamAssassin
15:35:15.69: Error connecting socket: Connection refused
15:35:15.72: Freeing SpamAssassin message context

在 SMTP 服务器接收到整个邮件之后(也即,最后的“.”发送到 SMTP 服务器之后),在 SMTP 服务器向发件人确认它已收到邮件之前,系统将调用 SpamAssassin。

另一项测试是使用诸如 Mail-SpamAssassin-2.60 目录中的 sample-spam.txt 来发送范例垃圾邮件。 此邮件中包含以下特殊的文本字符串:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

对应的 tcp_local_slave.log* 包含了类似下面的内容:

16:00:08.15: Creating socket to connect to SpamAssassin

16:00:08.15: Binding SpamAssassin socket

16:00:08.15: Connecting to SpamAssassin

16:00:08.15: Sending SpamAssassin announcement

16:00:08.15: Sending SpamAssassin the message

16:00:08.15: Performing SpamAssassin half close

16:00:08.15: Reading SpamAssassin status

16:00:08.43: Status line: SPAMD/1.1 0 EX_OK

16:00:08.43: Reading SpamAssassin result

16:00:08.43: Result line: Spam: True ; 1002.9 / 5.0

16:00:08.43: Verdict line: Spam-Test: True ; 1002.9 / 5.0

16:00:08.43: Closing connection to SpamAssassin

16:00:08.43: Mode 0 verdict of spam

16:00:08.43: Mode 0 verdict of spam

16:00:08.47: Freeing SpamAssassin message context

mail.log_current 文件中的对应条目如下所示。请注意目标地址的 +spam 部分,该部分表示将邮件归档到名为 spam 的文件夹中。

15-Dec-2003 15:32:17.44 tcp_intranet ims-ms E 1 morchia@siroe.com rfc822;morchia
morchia+spam@ims-ms-daemon
15-Dec-2003 15:32:18.53 ims-ms D 1 morchia@siroe.com rfc822;morchia morchia+spam@ims-ms-daemon

SpamAssassin 选项



上一个      目录      索引      下一个     


版权所有 2004 Sun Microsystems, Inc.。保留所有权利。