Sun Java System Messaging Server 6 2005Q4 管理指南

第 14 章 将垃圾邮件和病毒过滤程序集成至 Messaging Server

本章介绍如何使用 Messaging Server 来集成和配置垃圾邮件和病毒过滤软件。本章介绍的垃圾邮件/病毒过滤技术比转换通道(请参见转换通道)所提供的技术更加强大。Messaging Server 支持 Symantec Brightmail AntiSpam、SpamAssassin 和支持 Internet Content Adaptation Protocol (ICAP, RFC 3507)(特别是 Symantec AntiVirus Scan Engine)的反垃圾邮件/反病毒程序。


注 –

本章中有关反垃圾邮件垃圾邮件过滤功能的信息也可用于反病毒病毒过滤功能(如果适用)。某些产品可以提供这两种功能 (Brightmail),而其他产品可能仅提供垃圾邮件过滤功能 (SpamAssassin) 或仅提供病毒过滤功能 (Symantec AntiVirus Scan Engine)。另请注意,spam 通常用于配置参数。


本章分为以下几节:

将垃圾邮件过滤程序集成至 Messaging Server—操作原理

从 Messaging Server 的角度来看,反垃圾邮件解决方案的实现机制大多相同:

  1. Messaging Server 将邮件的副本发送至垃圾邮件过滤软件。

  2. 垃圾邮件过滤软件分析邮件并返回结论说明是否为垃圾邮件。某些程序,如 SpamAssassin 可能还返回垃圾邮件分数,该分数是对邮件可能为垃圾邮件的数字评定。

  3. Messaging Server 读取结论并对邮件进行 Sieve 操作(请参见指定要对垃圾邮件执行的操作)。

垃圾邮件过滤程序通过协议与 MTA 进行交互。协议可能为标准(在 Symantec AntiVirus Scan Engine 等基于 ICAP 的程序中)、专用(在 Brightmail 中)或仅仅非标准(在 SpamAssassin 中)。每个协议都要求软件使用 MTA 挂钩至界面。Brightmail 和 SpamAssassin 是最早的两个可以与 Messaging Server 集成的垃圾邮件过滤程序。MTA 现在支持使用 ICAP 的程序。

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

Messaging Server 上部署第三方过滤软件需要五个操作:


注 –

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


装入和配置垃圾邮件过滤软件客户机库

每个垃圾邮件过滤程序都应为 Messaging Server 提供客户机库文件和配置文件。装入和配置客户机库包括以下两个操作:

指定垃圾邮件过滤软件库的路径

Messaging Server 最多可为邮件调用四种不同的过滤系统。例如,您可以通过 Symantec AntiVirus Scan Engine 和 SpamAssassin 运行邮件。每个过滤软件均由 1 到 4 之间的数字进行标识。这些数字将显示为各种垃圾邮件过滤选项、LDAP 属性和通道关键字的一部分,X 用作过滤标识号。例如,sourcespamfilterXoptinspamfilterX_config_file。如果关键字或选项名称中遗漏了标识号,则将默认为 1。

以下 option.dat 设置可指定 Messaging Server 同时通过 Symantec AntiVirus Scan Engine 和 SpamAssassin 来过滤邮件:


spamfilter1_library=Symantec_Library_File
spamfilter1_config_file=Symantec_Config_File
spamfilter2_library=SpamAssassin_Library_File
spamfilter2_config_file=SpamAssassin_Config_File

使用其他选项或关键字配置系统时,请使用该选项或关键字末尾的相应号码。例如,sourcespamfilter2optin 将引用 SpamAssassin。sourcespamfilter1optin 将引用 Symantec AntiVirus Scan Engine。没有必要按顺序使用编号。例如,如果要暂时禁用 Symantec AntiVirus Scan Engine,您可以只注释掉 spamfilter1_library 配置文件。

指定要过滤的邮件

一旦安装了垃圾邮件过滤软件并准备使用 Messaging Server 运行时,您需要指定要过滤的邮件。Messaging Server 可以配置为基于用户、域或通道过滤邮件。以下每节介绍了一种方案:


注 –

表达式 optin 表示选择用户、域或通道来接收邮件过滤。


Procedure指定用户级别的过滤

可能需要为每个用户指定过滤。例如,如果将垃圾邮件过滤或病毒过滤作为高级服务提供给 ISP 用户,则您可以指定哪些用户可以和不可以接收该服务。用户过滤的一般步骤如下所示:

步骤
  1. 指定激活垃圾邮件过滤软件的用户 LDAP 属性。

    option.dat 中设置 LDAP_OPTINX 选项。示例:


    LDAP_OPTIN1=SymantecAV
    LDAP_OPTIN2=SpamAssassin
  2. 在接收垃圾邮件过滤的用户条目中设置过滤属性。

    过滤属性的值为多个值并取决于服务器。使用步骤 1 所示的示例,条目为:


    SymantecAV: virus
    SpamAssassin: spam

    对于像 Brightmail 这种既可以过滤病毒又可以过滤垃圾邮件的程序,有效值为 spamvirus。用作多值属性时,每个值均需要一个单独的属性条目。例如,如果将 Brightmail 的过滤器属性设置为 Brightmail,则条目为:


    Brightmail: spam
    Brightmail: virus

用户级别的过滤示例

本示例假定使用的是 Brightmail。还假定在 option.dat 文件中将 LDAP_OPTIN1 设置为 Brightmail。用户 Otis Fanning 在其用户条目中将 Brightmail 属性设置为 spamvirus。Brightmail 将对他的邮件进行垃圾邮件和病毒过滤。用户级别的过滤示例显示了 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
Brightmail: virus
Brightmail: spam

如果使用的是 Symantec AntiVirus Scan Engine 和 SpamAssassin,则条目将类似于如下所示:


SymantecAV: virus
SpamAssassin: spam

请参见使用 Symantec Brightmail Anti-Spam使用 SpamAssassin使用 Symantec Anti-Virus Scanning Engine (SAVSE)

Procedure指定域级别的过滤

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

步骤
  1. 指定激活过滤软件的域 LDAP 属性。

    option.dat 中设置 LDAP_DOMAIN_ATTR_OPTINX 选项。示例:


    LDAP_DOMAIN_ATTR_OPTIN1=SymantecAV
    LDAP_DOMAIN_ATTR_OPTIN2=SpamAssassin
    
  2. 在接收垃圾邮件过滤的域条目中设置过滤属性。

    过滤属性的值为多个值并取决于服务器。使用步骤 1 所示的示例,条目将如下所示:


    SymantecAV: virus
    SpamAssassin: spam

    对于像 Brightmail 这种既可以过滤病毒又可以过滤垃圾邮件的程序,有效值为 spamvirus。用作多值属性时,每个值均需要一个单独的属性值条目。例如,如果将 LDAP_DOMAIN_ATTR_OPTIN1 设置为 Brightmail,则条目为:


    Brightmail: spam
    Brightmail: virus

域级别过滤示例

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

Brightmail 将对所有发送到 sesta.com 的邮件进行垃圾邮件和病毒过滤。下面显示了域级别过滤示例


示例 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
Brightmail: spam
Brightmail: virus
 

如果使用的是 Symantec AntiVirus Scan Engine 和 SpamAssassin,则条目将类似于如下所示:


SymantecAV: virus
SpamAssassin: spam

有关更多示例和详细信息,请参见使用 Symantec Brightmail Anti-Spam使用 SpamAssassin使用 Symantec Anti-Virus Scanning Engine (SAVSE)

Procedure指定通道级别的过滤

按照源通道或目标通道的过滤为垃圾邮件过滤提供了更高的灵活性和粒度。例如,您可能希望按以下方式进行过滤:

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

步骤
  1. 在所有入站 SMTP 服务器(负责向后端邮件存储主机发送邮件)的 imta.cnf 文件中添加重写规则。示例:

    msg_store1.siroe.com $U@msg_store1.siroe.com

  2. 使用 destinationspamfilterXoptin 关键字添加与该重写规则对应的通道。示例:


    tcp_msg_store1 smtp subdirs 20 backoff "pt5m" "pt10" "pt30" \
    "pt1h" “pt2h” “pt4h” maxjobs 1 pool IMS_POOL \
    fileinto $U+$S@$D destinationspamfilter1optin spam
    msg_store1.siroe.com
    

通道级别过滤示例

这些示例假定一个由数字 1 指定的过滤程序。它们使用下表中所示的关键字。

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

通道关键字 

说明 

destinationspamfilterXoptin

指定发送到该通道的所有邮件均由反垃圾邮件软件 X 进行过滤,即使那些服务未由用户或域使用 LDAP_OPTIN LDAP 属性指定。(过滤软件 X 由 option.dat 中的 spamfilterX_library 定义。)过滤器参数取决于过滤程序,并且跟在关键字后面。例如,Brightmail 的参数通常为 spamvirusspam,virus。SpamAssassin 的参数为 spam

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

ims-ms destinationspamfilter1optin spam,virus. . .

sourcespamfilterXoptin

指定所有源自此通道的邮件将由反垃圾邮件软件 X 进行过滤,即使那些服务未由用户或域使用 LDAP_OPTIN LDAP 属性指定。关键字后面跟系统范围的默认参数,可用的参数取决于过滤程序。例如,对于 Brightmail,参数为 spamvirusspam,virus。对于 SpamAssassin,参数为 spam。如果 switchchannel 有效,则应将此关键字放置在 switched-to 通道上。

示例 1。对所有从 MTA 中继发送到称为 msg_store1.siroe.com 的后端邮件存储的邮件进行垃圾邮件和病毒过滤。

Procedure过滤从 MTA 中继发送到后端邮件存储的邮件

步骤
  1. imta.cnf 文件(负责向后端邮件存储主机发送邮件)中添加重写规则。示例:

    msg_store1.siroe.com   $U@msg_store1.siroe.com
  2. 使用 destinationspamfilterXoptin 关键字添加与该重写规则对应的通道。示例:

    tcp_msg_store1 smtp subdirs 20 backoff “pt5m” “pt10” “pt30” “pt1h” \
    “pt2h” “pt4h” maxjobs 1 pool IMS_POOL fileinto $U+$S@$D \
    destinationspamfilter 1optin spam,virus
    msg_store1.siroe.com

    示例 2。对所有通过 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 \
    sourcespamfilter1optin spam
    tcp-daemon

    示例 3。过滤所有通过 MTA 外发到 Internet 的邮件。(通常情况下,所有外发到 Internet 的邮件都通过 tcp_local 通道。)

    tcp_local smtp mx single_sys remotehost inner switchchannel \
    identnonelimited subdirs 20 maxjobs 7 pool SMTP_POOL \
    maytlsserver maysaslserver saslswitchchannel tcp_auth \
    destinationspamfilter1optin 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 \
    sourcespamfilter1optin spam destinationspamfilter1optin spam
    tcp-daemon

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

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

    示例 6。对所有外来和外发邮件进行垃圾邮件和病毒过滤(假定软件可以进行垃圾邮件和病毒过滤):

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

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

垃圾邮件过滤程序分析邮件,并向 Messaging Server 的当前版本返回结论说明邮件是否为垃圾邮件。然后 Messaging Server 将对邮件采取操作。使用 Sieve 邮件过滤语言指定操作。可能的操作包括放弃邮件、将邮件归档到文件夹、添加标题、向主题行添加标记等等。也可以使用具有 if-then-else 语句的复杂 Sieve 脚本。


注 –

有关完整的 Sieve 语法,请参见 Sieve 规范 3028。另请参见


使用表 14–2 中所述的 MTA 垃圾邮件过滤器选项 (option.dat) 来指定 Sieve 脚本。主垃圾邮件过滤器操作选项包括 SpamfilterX_null_action(指定返回的垃圾邮件结论为空值时要执行的 Sieve 规则)和 SpamfilterX_string_action(指定返回的垃圾邮件结论为字符串时要执行的 Sieve 规则)。

垃圾邮件过滤程序通常向 MTA 返回一个字符串或一个空值以表示邮件为垃圾邮件。有些程序还会返回垃圾邮件分数—该分数是对邮件可能为垃圾邮件的数字评定。此分数可用于整个操作的一部分。以下示例显示了如何指定对已过滤的邮件的操作。每个示例均假定过滤程序由数字 1 指定。

示例 1:将结论为空值的垃圾邮件归档到文件 SPAM_CAN 中。

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

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

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

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

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

示例 3:放弃结论为字符串值的垃圾邮件。

spamfilter1_string_action=data:,discard

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

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

示例 4。此行将向通过字符串结论值确定为垃圾邮件的每封邮件中添加标题 Spam-test: FAIL

spamfilter1_string_action=data:,require ["addheader"];addheader "Spam-test: FAI";

示例 5。此行将向返回字符串的垃圾邮件的主题行添加字符串 [PROBABLE SPAM]。

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

示例 6。如果标题包含 resent-fromUser-1,则此行假定结论值为字符串,并且将垃圾邮件归档到邮箱 testspam 中。如果邮件不包含此标题,则此行将邮件归档到 spam 中。

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

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

示例 7。这些匹配的选项对将放弃返回的结论字符串为 remove 的垃圾邮件。


spamfilter1_verdict_0=remove
spamfilter1_action_0=data:,discard

有关如何指定垃圾邮件结论字符串的说明,请参阅特定的垃圾邮件过滤软件各节。

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

用于 Spam Assassin 的 MTA 选项 

说明 

SpamfilterX_config_file

指定过滤软件 X 配置文件的完整文件路径和名称。默认值:无 

SpamfilterX_library

指定过滤软件 X 共享库的完整文件路径和名称。默认值:无 

SpamfilterX_optional

用于控制是将过滤库 X 报告的某些失败视为临时进程失败还是忽略这些失败。默认值 0 指定垃圾邮件过滤问题将导致临时处理故障。如果将此值更改为 1,则在某些(可能并非全部)过滤库发生故障的情况下,系统将跳过垃圾邮件过滤过程。特别是,如果系统阻塞,库代码中没有返回值,则 MTA 的某些部分也可能会阻塞。也可以将此值设置为 -2 和 2。分别与 0 和 1 相同,只是在垃圾邮件过滤器插件报告问题时,这样设置会导致发送系统日志消息。

默认值:0

LDAP_optinX

指定基于用户激活过滤软件 X 所使用的 LDAP 属性名称。这应该是 inetMailUser 对象类中的属性。

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

默认值:无 

LDAP_domain_attr_optinX

指定基于域激活过滤软件 X 所使用的 LDAP 属性名称。它适用于目标域。除了应位于对象类 mailDomain 中之外,它与 LDAP_optin 类似。

默认值:无 

SpamfilterX_null_optin

指定一个字符串,如果发现该字符串为 LDAP_optinXLDAP_domain_attr_optinX 定义的属性值,将导致 MTA 如该属性不存在那样运行。也就是说,该字符串禁用了此条目的过滤。请参见指定要过滤的邮件

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

SpamfilterX_null_action

定义 Sieve 规则,指定当过滤软件 X 返回空值结论时如何处理邮件。使用文件 URL 可以从外部存储 Sieve 表达式。例如:file:///var/opt/SUNWmsgsr/config/null_action.sieve。此外,请勿使用 Sieve reject 操作拒绝垃圾邮件,因为这样做会向无辜的一方(其地址被用于发送垃圾邮件)发送不能传递的通知。默认值:data:,discard;

SpamfilterX_string_action

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

默认值:data:,require "fileinto"; fileinto "$U;

其中 $Uverdict 返回的字符串。

spamfilterX_verdict_n

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


spamfilter1_verdict_0=reject
spamfilter1_action_0=data:,require "reject";
reject "Rejected by spam filter";

所有 spamfilterX_verdict_n 选项和对应的操作选项的默认值均为空字符串。

默认值:无 

spamfilterX_action_n

请参见 spamfilterX_verdict_n。默认值:无

spamfilterX_final

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

默认值:0

optin_user_carryover

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

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

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

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

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

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

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

使用 Symantec Brightmail Anti-Spam

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 配置选项

表 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 设置中的设置正常传送邮件。

使用与 MTA 分开的 Brightmail 服务器时,可以通过使用 Brightmail_verdict_nBrightmail_action_nBrightmail_null_actionBrightmail_string_action MTA 选项自定义每个 MTA 执行的操作,以覆盖 Brightmail 服务器返回的操作和结论。在此示例中,您可以使用 MTA 中不同的 Brightmail_null_action 来覆盖 Virus 操作(放弃邮件),或使用 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 是一种用于识别垃圾邮件的免费邮件过滤器软件。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 服务器。Messaging Server 中提供的模块称为 libspamass.so

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 仅返回分数和结论。邮件本身不会被修改。也就是说,必须由 Sieve 脚本来设置诸如添加标题和修改主题行这样的选项。此外,mode 选项允许您指定表示结论的返回字符串。此字符串选项为空字符串、默认字符串、SpamAssassin 结果字符串或 verdict 字符串。有关详细信息,请参见SpamAssassin 选项

SpamAssassin 要求和使用注意事项

在哪里运行 SpamAssassin?

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

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

部署 SpamAssassin

执行以下步骤部署 SpamAssassin。

SpamAssassin 配置示例

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


注 –

这些示例使用了许多选项和关键字。请参阅表 14–1表 14–2


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

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

步骤
  1. 创建 SpamAssassin 配置文件。

    步骤 2 中指定了此文件的名称和位置。spamassassin.opt 是个很好的名称。本文件包含以下各行:


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

    hostport 分别指定运行 spamd 的系统的名称,以及 spamd 侦听外来请求的端口。mode=0 指定如果系统将邮件识别为垃圾邮件,则返回一个由 verdict 指定的字符串。debug=1 指定在 SpamAssassin 库中启用调试。请参见表 14–4

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


    ! for Spamassassin
    spamfilter1_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,require "fileinto"; fileinto "$U";
                      

    spamfilter1_config_file 指定 SpamAssassin 配置文件。

    spamfilter1_library 指定 SpamAssassin 共享库。

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

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

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

  3. 指定要过滤的邮件。

    要过滤传入到本地邮件存储的所有邮件,请通过在 ims-ms 通道中添加 destinationspamfilterXoptin 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 destinationspamfilter1optin spam
    ims-ms-daemon
  4. 重新编译配置并重新启动服务器。只需要重新启动 MTA。无需执行 stop-msg


    # imsimta cnbuild
    # imsimta restart
    
  5. 启动 spamd 守护进程。通常使用以下格式的命令执行此操作:

    spamd -d

    spamd 默认为只接受来自本地系统的连接。如果 SpamAssassin 和 Messaging Server 是在不同的系统中运行,则需要此语法:

    spamd -d -i listen_ip_address -A allowed_hosts

    其中 listen_ip_address 是要侦听的地址,allowed_hosts 是可以连接到此 spamd 实例的授权主机或网络(使用 IP 地址)的列表。


    注 –

    0.0.0.0 可以与 -i listen_ip_address 结合使用,以使 spamd 侦听所有地址。最好侦听所有地址,因为 spamfilterX_verdict_n 可以避免在更改系统的 IP 地址时必须更改命令脚本。


Procedure向垃圾邮件中添加包含 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. 指定要过滤的邮件。将垃圾邮件归档到单独的文件夹中的步骤 3 说明了此操作

  2. 创建 SpamAssassin 配置文件。

    使用 spamfilter_configX_file 指定此文件的名称和位置(见下一步)。其中包含以下各行:


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

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

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


    !for Spamassassin
    spamfilte1r_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,require 
    ["addheader"];addheader "Spam-test: $U";
                      
    

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

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

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

  4. 重新编译配置,重新启动服务器,然后启动 spamd 守护进程。

    请参见SpamAssassin 配置示例

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

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

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

请注意,如果将 USE_CHECK 设置为 0,则可以将结论字符串与匹配的 SpamAssassin 测试列表一同返回(请参见SpamAssassin 选项中的SpamAssassin 选项)。因为此列表可能会很长,所以最好将 USE_CHECK 设置为 1

步骤
  1. 指定要过滤的邮件。

    请参见将垃圾邮件归档到单独的文件夹中的步骤 3

  2. 创建 SpamAssassin 配置文件。

    将垃圾邮件归档到单独的文件夹中介绍了此步骤。mode=1 指定如果系统发现邮件为垃圾邮件,则返回 SpamAssassin 结果字符串。


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

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

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


    !for Spamassassin
    spamfilter1_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,addtag “[SPAM detected: $U]”;
                      
    

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

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

    指定要向 Subject: 行添加标记。此标记的文字前缀为 SPAM detected,后跟 field 字符串(默认值为:Spam-Test),再后跟由 SpamAssassin 返回的 "[result string]"。因为已在SpamAssassin 配置示例中指定 mode=1,所以将返回 SpamAssassin 结果字符串。因此,主题行将类似以下内容:

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

    也可以同时使用 addheaderaddtag

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

    以获得如下邮件:

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

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

    Subject: [SPAM True ; 91.3 / 5.0] Vigaro Now!Spamscore: True ; 91.3 / 5.0

  4. 重新编译配置,重新启动服务器,然后启动 spamd 守护进程。

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

测试 SpamAssassin

要测试 SpamAssassin,请首先在 spamassassion.opt 文件中设置 debug=1。您不必在 imta.cnf 中启用特定于通道的 master_debugslave_debug。然后,将测试邮件发送给测试用户。msg_svr_base/data/log/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

此外,如果在 option.dat 中设置了 spamfilter1_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 选项

本节包含了 SpamAssassin 选项表。

表 14–4 SpamAssassin 选项 (spamassassin.opt)

选项 

说明 

默认值 

debug

指定是否在 libspamass.so 中启用调试。对 spamd 本身的调试由调用 spamd 的命令行控制。设置为 0 或 1。

field

指定 SpamAssassin 结果的字符串前缀。SpamAssassin 结果类似于如下所示: 

Spam-Test: False ; 0.0 / 5.0 Spam-Test: True ; 27.7 / 5.0

field 选项提供更改结果中 Spam-Test: 部分的方法。请注意,如果指定 field 的值为空,则将删除 ":"。

如果将 USE_CHECK 设置为 0,则结果字符串将类似于以下字符串:

Spam-test: False ; 0.3 / 4.5 ; HTML_MESSAGE,NO_REAL_NAME 

Spam-test: True ; 8.8 / 4.5 ; NIGERIAN_BODY, NO_REAL_NAME,PLING_PLING,RCVD_IN_SBL,SUBJ_ALL_CAPS 

"Spam-test" 

host

运行 spamd 的系统的名称。

localhost 

mode

控制 SpamAssassin 过滤器结果向结论信息的转换。即指定在处理邮件之后要返回的结论信息。可以使用以下四种模式。有关详细说明,请参见SpamAssassin mode 选项

0—如果邮件为垃圾邮件,则返回结论字符串(由 verdict 选项指定)。MTA 选项 spamfilterX_string_action 可用于指定返回 verdict 字符串时要执行的操作。如果 verdict 选项(定义如下)为空或未指定,并且邮件为垃圾邮件,则返回空结论。MTA 选项 spamfilterX_null_action 可用于指定返回空结论时要执行的操作。

如果不为垃圾邮件,则返回 SpamAssassin 默认结果字符串。(默认结论始终意味着不采取任何操作并照常传送。)

1—如果发现邮件为垃圾邮件,则返回 SpamAssassin 结果字符串。如果不为垃圾邮件,则返回 SpamAssassin 默认结果字符串。(再次说明,默认结论始终意味着不采取任何操作并照常传送。)SpamAssassin 结果字符串与下面字符串类似:True; 6.5 / 7.3

2—与 mode 1 相同,但是返回 SpamAssassin 结果字符串(不管邮件是否为垃圾邮件)。不返回默认结论或空结论,并且从未使用 verdict 选项。

3—如果发现邮件为垃圾邮件,则返回 SpamAssassin 结果字符串;如果不是,则返回由 verdict 选项指定的 verdict 字符串。可以通过使用 spamfilterX_verdict_nspamfilterX _action_n 匹配对来控制针对 SpamAssassin 结果字符串所采取的操作。可以通过使用 spamfilterX_string_action 来控制针对 verdict 字符串所采取的操作。

port

指定 spamd 侦听外来请求的端口号。

783 

USE_CHECK

1—spamd CHECK 命令用于返回 SpamAssassin 分数。

0—启用 SYMBOLS 命令,此命令将返回分数和匹配的 SpamAssassin 测试列表。在 2.55 以前的 SpamAssassin 版本中,使用此选项可能会导致系统挂起或其他问题。请参见上述 field

 

SOCKS_HOST

字符串。指定中间 SOCKS 服务器的名称。如果指定了此选项,则间接通过指定的 SOCKS 服务器建立 ICAP 连接。 

"" 

SOCKS_PORT

指定运行中间 SOCKS 服务器的端口。 

1080 

SOCKS_PASSWORD

指定通过 SOCKS 服务器建立连接所使用的密码(字符串)。是否需要用户名/密码取决于 SOCKS 服务器配置。 

"" 

SOCKS_USERNAME

指定通过 SOCKS 服务器建立连接所使用的用户名(字符串)。 

"" 

verdict

指定用于 MODE 0 的结论字符串。 

"" 

SpamAssassin mode 选项

处理完邮件后,SpamAssassin 将确定邮件是否为垃圾邮件。mode 允许您指定表示结论的返回字符串。此字符串选项为空字符串、默认字符串、SpamAssassin 结果字符串或使用 verdict 选项指定的 verdict 字符串。(请注意,默认字符串既不是空字符串、SpamAssassin 结果字符串,也不是由 verdict 指定的字符串,而是其他的不可配置的结果字符串。)下表概述了 mode 操作。

表 14–5 针对 SpamAssassin mode 选项返回的字符串

verdict\ 设置

是否为垃圾邮件? 

mode=0

mode=1

mode=2

mode=3

verdict=""(未设置)

是 

空 

SpamAssassin 结果 

SpamAssassin 结果 

SpamAssassin 结果 

否 

默认 

默认 

SpamAssassin 结果 

默认 

verdict=string

是 

verdict string

SpamAssassin 结果 

SpamAssassin 结果 

SpamAssassin 结果 

否 

默认 

默认 

SpamAssassin 结果 

verdict string

第一列表示是否设置了 verdict 选项。第二列表示邮件是否为垃圾邮件。mode 列表示针对各种 mode 返回的字符串。例如,如果未设置 verdict,并将 mode 设置为 0,且邮件不是垃圾邮件,则返回默认字符串。如果将 verdict 设置为 YO SPAM!,并将 mode 设置为 0,且邮件是垃圾邮件,则返回 YO SPAM! 字符串。

使用 Symantec Anti-Virus Scanning Engine (SAVSE)

本节除了介绍如何部署 SAVSE 之外,对部署其他支持 ICAP 的反垃圾邮件/反病毒程序也很有用。本节包含以下几个部分:

SAVSE 概述

SAVSE 是 TCP/IP 服务器应用程序和通信应用程序编程接口 (API),它提供了病毒扫描服务。SAVSE 是专门为保护通过网络基础设施设备来服务或存储在网络基础设施设备中的通信而设计的,它将检测并防止包括移动代码和压缩文件格式在内的所有主要文件类型中的病毒、蠕虫和特洛伊木马。有关详细信息,请参阅 Symantec 的 Web 站点。


注 –

Messaging Server 的当前版本仅支持 SAVSE 的扫描功能。不支持修复或删除功能。


SAVSE 要求和使用注意事项

SAVSE 是获得 Symantec 的单独许可的产品。

仅支持扫描模式,而不支持 SAVSE 配置中的扫描与修复模式或者扫描与删除模式。

在哪些系统中运行 SAVSE?

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

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

部署 SAVSE

执行以下步骤以部署 SAVSE。

SAVSE 配置示例

以下示例将测试传入到本地邮件存储的邮件并放弃附带病毒的邮件。可以按照任何顺序来执行前三个步骤。

Procedure配置 SAVSE

步骤
  1. 创建 SAVSE 配置文件。

    下一步骤中指定了此文件的名称和位置。此处使用的名称为 SAVSE.opt。此文件的示例如下所示:


    host=127.0.0.1
    port=1344
    mode=0
    verdict=virus
    debug=1
                      

    hostport 分别指定运行 SAVSE 程序的系统的名称和侦听外来请求的端口(SAVSE 的默认端口为 1344)。mode=0 指定如果系统认为邮件带有病毒,则返回一个由 verdict 指定的字符串(此示例中该字符串为 virus)。debug=1 启用调试。有关 ICAP 配置参数的说明,请参见SAVSE 选项

  2. 创建 option.dat 文件。示例:


    ! for Symantex Anti-virus Scan Engine
    spamfilter1_config_file=/opt/SUNWmsgsr/config/SAVSE.opt
    spamfilter1_library=/opt/SUNWmsgsr/lib/libicap.so
    spamfilter1_optional=1
    spamfilter1_string_action=data:,discard
                      

    spamfilter1_config_files 指定 SAVSE 配置文件。

    spamfilter1_library 指定 SAVSE 共享库的位置。

    spamfilter1_optional=1 指定 SAVSE 程序失败时,MTA 将继续运行。

    spamfilter1_string_action 指定对垃圾邮件采取的 Sieve 操作。该值指定带有病毒的邮件将被放弃。因为这是默认值,所以无需指定,除非您要更改此值。

  3. 指定要过滤的邮件。

    要过滤传入到本地邮件存储的所有邮件,请通过在 ims-ms 通道中添加 destinationspamfilter1optin 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 destinationspamfilter1optin virus
    ims-ms-daemon
  4. 重新编译配置并重新启动服务器。只需要重新启动 MTA。无需执行 stop-msg


    # imsimta cnbuild
    # imsimta restart
    
  5. 请确保已启动 SAVSE。

    SAVSE 应已自动启动,但是如果没有自动启动,则可使用与下面的命令类似的命令:/etc/init.d/symcscna start

其他可能的配置

mode 设置为 0 可以与 spamfilterX_null_option 一起使用,以进行其他操作(例如,将被确定为垃圾邮件的邮件归档至特定文件夹)。例如:

spamfilter1_null_option=data:,require "fileinto"; fileinto "VIRUS";

请注意,大多数情况下最好不要将被感染的邮件归档到一个文件夹中。

mode 设置为 1 可用于启动一个操作。例如,可以将垃圾邮件结果包含到拒绝邮件中,方法是将 mode 设置为 1,并将 MTA 中的 spamfilterX_string_action 选项设置如下:

spamfilter1_string_action=data:,require "reject"; reject "Message contained a virus [$U]";

fileinto 一样,使用 reject 操作来处理病毒并不是一个好的方法,因为它会将病毒发回给发件人。

还可以通过在 option.dat 文件中添加一行,来向垃圾邮件标题中添加标记。示例:

spamfilter1_string_action=data:,addtag "[SPAM detected!]";

无需考虑邮件是否被确认带有病毒而尽管采取操作的情况下,可以将 mode 设置为 2。随后可以被测试的标题字段的添加是明显的 mode 2 应用程序:

spamfilterX_string_action=data:,require ["addheader"];addheader "$U"

SAVSE 选项

SAVSE 选项文件是更为通用的 ICAP 选项文件。其名称和位置由 option.dat 中的 spamfilterX_config_file 进行设置。它由形式为 option=value 的行组成。必需的一个选项为 HOST。必须将其设置为运行 ICAP 过滤服务器的系统的名称。必须设置此选项,即使 ICAP 服务器正在本地主机上运行。选项文件如下所示:

表 14–6 ICAP 选项

选项 

说明 

默认值 

debug

从 ICAP 界面模块启用或禁用调试输出。0 或 1。 

field

指定 ICAP 结果的前缀。SAVSE 结果字符串类似于如下所示: 

Virus-Test: False Virus-Test: True; W32.Mydoom.A@mm.enc

此选项提供一种更改结果中 Virus-Test: 部分的方法。请注意,如果指定 field 的值为空,则将删除 ":"。

Virus-test 

host

运行 ICAP 过滤服务器的系统的名称 

localhost 

mode

控制 ICAP 过滤器结果向结论信息的转换。即,指定在处理邮件后要返回的字符串信息。可以使用以下四种模式。有关详细说明,请参见ICAP mode 选项

0—如果邮件包含病毒,则返回结论字符串(由 verdict 选项指定)。MTA 选项 spamfilterX_string_action 可用于指定返回 verdict 字符串时要执行的操作。如果 verdict 选项为空或未指定,则返回空结论。MTA 选项 spamfilterX_null_action 可用于指定返回结论为空并要覆盖“放弃邮件”的默认操作时所要采取的操作。

如果邮件不带有病毒,则返回默认字符串。默认字符串是不可配置的,并且始终意味着不采取任何操作并照常传送。 

1—如果发现邮件包含病毒,则返回 ICAP 结果字符串。如果邮件不带有病毒,则返回默认字符串。默认字符串始终意味着不采取任何操作并照常传送。以下是两个 ICAP 结果字符串的示例:

VIRUS TEST: FALSEVIRUS-TEST: TRUE; W32.Mydoom.A@mm.enc

2—无条件返回 ICAP 结果字符串;不返回默认结论或空结论,并且从不使用 verdict 选项。此设置可用于只需要进行操作而无需考虑邮件是否已被确定为带有病毒。随后可以被测试的标题字段的添加是明显的 mode 2 应用程序:

spamfilterX_string_action=data:,require ["addheader"];addheader "$U"

3—如果发现邮件包含病毒,则返回 ICAP 结果字符串;否则,返回由 verdict 选项指定的 verdict 字符串。此设置用于在发现病毒时进行一种操作;而在未发现病毒时进行另一种操作。可以通过使用 spamfilterX_verdict_nspamfilterX_action_n 匹配对来控制针对 ICAP 结果字符串所采取的操作。可以通过使用 spamfilterX_string_action 来控制针对 verdict 字符串所采取的操作。

port

指定运行 ICAP 服务器的端口号。

1344 

SOCKS_HOST

字符串。指定中间 SOCKS 服务器的名称。如果指定了此选项,则间接通过指定的 SOCKS 服务器建立 ICAP 连接。 

"" 

SOCKS_PORT

整数。指定运行中间 SOCKS 服务器的端口。 

1080 

SOCKS_PASSWORD

字符串。指定通过 SOCKS 服务器建立连接所使用的密码。是否需要用户名/密码取决于 SOCKS 服务器配置。 

"" 

SOCKS_USERNAME

字符串。指定通过 SOCKS 服务器建立连接所使用的用户名。 

"" 

verdict

指定用于 MODE 0 和 3 的结论字符串。 

"" 

ICAP mode 选项

处理完邮件后,与 SASVE 相同,ICAP 反病毒程序将确定邮件是否带有病毒。mode 允许您指定由 ICAP 程序返回的表示结论的字符串。字符串选项为空字符串默认字符串ICAP 结果字符串verdict 字符串(使用 verdict 选项指定)。请注意,默认字符串既不是空字符串、ICAP 结果字符串,也不是由 verdict 指定的字符串,而是由程序返回的其他不可配置的字符串。下表概述了 mode 操作。

表 14–7 针对 ICAP mode 选项返回的结论字符串

verdict\ 设置

是否包含病毒? 

mode=0

mode=1

mode=2

mode=3

verdict=""(未设置)

是 

空 

ICAP 结果 

ICAP 结果 

ICAP 结果 

否 

默认 

默认 

ICAP 结果 

默认 

verdict=字符串

是 

verdict string

ICAP 结果 

ICAP 结果 

ICAP 结果 

否 

默认 

默认 

ICAP 结果 

verdict string

第一列表示是否设置了 verdict 选项。第二列表示邮件是否包含病毒。mode 列表示针对各种 mode 返回的字符串。例如,如果未设置 verdict,并将 mode 设置为 0,且邮件不带有病毒,则 ICAP 程序返回默认字符串。如果将 verdict 设置为 WARNING VIRUS!,并将 mode 设置为 0,且邮件带有病毒,则 ICAP 程序返回字符串 WARNING VIRUS!

支持 Sieve 扩展

除了标准的 Sieve 功能之外,Messaging Server 还提供了许多扩展支持,包括 addheaderaddtagspamtestspamadjust向垃圾邮件中添加包含 SpamAssassin 分数的标题向主题行添加 SpamAssassin 结果字符串中介绍了 addheaderaddtag

这些扩展操作使管理员可以设置不同的阈值,并可以设置将覆盖 SpamAssassin 结论的空白列表。甚至可以将二者组合以产生不同的阈值,这取决于谁发送了特定邮件。spamadjust 是非标准操作。ftp://ftp.isi.edu/in-notes/rfc3685.txt 中介绍了 spamtest

使用带有 "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 与设置为 2 的 SpamAssassin MODE 结合使用,如下所示:

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

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


spamfilter1_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 脚本可以测试结果值、放弃确定为垃圾邮件的邮件、归档可能为垃圾邮件的邮件,并且使来自本地域地址的邮件可以通过以下语句传递:


spamfilter1_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;}