SpamAssassin 3.2.x 配置文档中文版 02
2010-04-06 18:14

    规则定义与特权设置

这些设置与上面的设置不同,它们被称之为“特权设置”。只有用户在通过 procmailrc 文件或 forward 文件调用 SpamAssassin 时,或在系统管理员编辑 /etc/mail/spamassassin 下的配置文件时才能使用它们。出于安全性及效率的考虑,通过 spamc 来访问 spamd 的用户是不允许在他们的 user_prefs 文件中使用这些“特权设置”,除非设置了 allow_user_rules 选项(而且,也只能使用下面列出的这些特权设置)。

allow_user_rules ( 0 | 1 ) (默认值: 0)
这个选项允许用户在他们的 user_prefs 中创建可以用于 spamd 的规则(也只能创建规则)。默认是不允许用户创建规则的,因为这样可能会造成一些安全漏洞,如果 spamd 是以 root 身份运行的话,就有可能授予了用户 root 级别的访问权限。这并不是一个好的做法,除非你能够通过别的方法确保用户的规则是安全的。如果不是很有把握,不要打开这个选项。 此外,这个选项会导致每当一封邮件递交给用户时,如果他的 user_prefs 里面有自己定义的规则,那么 SpamAssassin 每次都会重新编译所有的规则,这会显著的增大服务器的负载。所以强烈建议不要允许用户自己定义规则!

注意,现在即便打开了这个选项, spamd 也不会使用 user_prefs 中的规则来修改系统现存的规则定义。

redirector_pattern /模式/修饰符
用来匹配 URI 中的重定向站点部分和目标站点部分的正则表达式。

注意:目标 URI 必须使用小括号包含起来,模式的其它部分可以创建一个反向引用。

范例: http://chkpt.zdnet.com/chkpt/whatever/spammer.domain/yo/dude

redirector_pattern    /^https?:\/\/(?:opt\.)?chkpt\.zdnet\.com\/chkpt\/\w+\/(.*)$/i

header 测试规则名 信头名 操作符 /模式/修饰符 [if-unset: 字符串]
这个选项用于定义一个信头测试规则。测试规则名 是一个测试规则的名称,如“FROM_ENDS_IN_NUMS”。信头名是一个邮件信头的名称,如 “Subject”、“To”等。

信头后面加上“:raw”后缀可以防止使用 quoted-printable 或 base-64 编码的字符串自动进行解码。

信头后面加上“:addr”后缀可以去掉除了信头中的第一个邮件地址外的其他部分。例如,以下所有信头处理后都只剩下“example@foo” 了:

example@foo
example@foo (Foo Blah)
example@foo, example@bar
display: example@foo (Foo Blah), example@bar ;
Foo Blah <example@foo>
``Foo Blah'' <example@foo>
``'Foo Blah''' <example@foo>

信头后面加上“:name”后缀可以去掉除了信头中第一个真实名字外的其他部分。例如, 以下所有信头处理后只剩下“Foo Blah”了:

example@foo (Foo Blah)
example@foo (Foo Blah), example@bar
display: example@foo (Foo Blah), example@bar ;
Foo Blah <example@foo>
``Foo Blah'' <example@foo>
``'Foo Blah''' <example@foo>

可以使用以下的几个“伪”信头:

ALL 表示任何信头的文字。
ToCc 表示“To”和“Cc”信头。
EnvelopeFrom 是在递交邮件的 SMTP 通讯过程中,“MAIL FROM:”中的地址(如果可用)。如何设置的更多信息参见 envelope_sender_header。
MESSAGEID 表示信件中所有的 Message-Id 信头。一些邮件列表软件会将原来的 Message-Id 信头改名为 Resent-Message-Id 或 X-Message-Id ,然后使用自己的 Message-Id 信头。这个“伪”信头返回以上全部三种信头,使用回车符分隔开。
X-Spam-Relays-Untrusted, X-Spam-Relays-Trusted, X-Spam-Relays-Internal 和 X-Spam-Relays-External 表示一个可移植的、预解析的邮件网络路径。像 Received 信头的信息一样,分别是“可信”与“不可信”和“内部”与“外部”。更多细节参见 http://wiki.apache.org/spamassassin/TrustedRelays。

操作符是 =~ (匹配其后的正则表达式)或 !~ (不匹配其后的正则表达式)。模式是一个 Perl 风格的正则表达式,修饰符是对正则表达式的修饰(请参见 Perl 中有关正则表达式的部分)。 注意,即便你使用了 x 修饰符,也不支持多行的正则表达式。还要注意,“#”字符必须转义成“\#”,否则会被认为是一行注释。

如果使用了 [if-unset: 字符串] 标记,那么如果邮件中没有发现该信头,就会使用该字符串来进行模式匹配。

测试规则名不能用数字开头,只能使用英文字母、数字和下划线。按照惯例不要使用小写字母、名字不要超过22个字符。也不能使用中划线。

注意,以“__”(两个下划线)开头的测试规则被保留用于元规则,他们不会被计分和列在“命中的测试”报告中。以“T_”开头的测试规则被保留用于 QA测试,它们应该给予很低的评分。

如果你增加或修改一个测试规则,请使用 spamassassin --lint 来测试一下是否有语法错误。这可以避免出现错误消息或导致其它的测试被忽略。
header 测试规则名 exists:信头名
定义一个“信头存在”测试规则。信头是一个要测试存在与否的信头名。这是上面的信头测试规则的一个简化版本。

header 测试规则名 eval:评估行数([参数])
定义一个邮件信头的评估测试。评估函数是Mail::SpamAssassin::EvalTests 中定义的测试函数。参数是可选的。

header 测试规则名 eval:check_rbl('名单名称', '名单地址' [, '返回码'])
检查一个 DNSBL (以 DNS 方式运行的黑名单或白名单)。它会从邮件的 Received: 信头中取出所有的IP地址,如果IP地址不在 trusted_networks 中,那么对这些IP地址进行DNSBL查询。以下几点需要注意:

重复或保留的 IP 地址
重复的IP地址仅仅被查询一次。保留的IP地址(如192.168.0.1、127.0.0.1等)不查询。保留的IP地址列在 <http://www.iana.org/assignments/ipv4-address-space>, <http://duxcw.com/faq/network/privip.htm>, <http://duxcw.com/faq/network/autoip.htm>, 或 <ftp://ftp.rfc-editor.org/in-notes/rfc3330.txt> 中

名单名称
它也称作“zone ID”(译者注:即给所查询的DNSBL的一个名字,如用 CBLPLUS 代表 cblplus.anti-spam.org.cn. )。如果你要查询像 NJABL 或 SORBS 这样的由多个黑名单合并而成的多重 DNSBL ,你可以通过 check_rbl_sub() 来比较查询返回的结果。

如果上面取出的多个IP地址的DNSBL查询不止一个返回了命中结果,并不会重复计分,因为对于每封邮件来说,该规则只被触发一次(译者注:即只要有一个 IP 地址在黑名单中就算触发了该规则)。

黑白名单地址
这是DNSBL的根区(译者注:即DNSBL的服务地址,如cblplus.anti-spam.org.cn.),使用点结尾。

返回码
这是一个和下面的 check_rbl_sub() 一样的返回码,它是可选的。

查询除了第一跳外的所有 IP 地址
可以在“名单名称”后加上“-notfirsthop”后缀来查询除了第一跳外的所有IP地址。它被用于在查询动态地址黑名单(译者注:动态地址是用于动 态的分配给拨号、ISDN、ADSL等连接的IP地址)。邮件的第一跳也许是动态地址,但是至少应该有一跳以上(通过他们的 SMTP 服务器)的邮件递交跳数,这是合理的,所以在这种情况下不应该因第一跳在动态地址黑名单里面而增加评分。但是如果只有一跳,那么无论如何都会被查询的,因 为邮件应该通过它的外发邮件服务器进行递交,而不是直接投递到你的邮件服务器。

按 IP 是否可信查询
当查询一个“正向”的DNSBL(DNS白名单)时,你不能盲目信任那些“Received”信头中的没有被列在可信任的中继服务器名单中的IP地址(译 者注:除了你的可信中继服务器及连接到它们的IP以外,其它地址有可能是伪造的;连接到你的可信中继服务器的 IP 地址是无法伪造的,该地址的真实可靠的)。为了查询第一个可信的 IP 地址,可以在“黑白名单名称”后加上“-firsttrusted”后缀,这会查询连接到最远的一个可信中继服务器的IP地址。

注意,这需要 SpamAssassin 能知道那个中继服务器是可信任的。在简单的环境里, SpamAssassin 能够很好的自行推测。在复杂的环境,你可以通过手工设定 trusted_networks 可以得到更好的结果。

此外,你能够通过在“名单名称”后加上“-untrusted”后缀来查询所有不可信的IP地址。重要提示:这不包括最近的一个“不可信行”,如上述的 “-firsttrusted”所指的地址。因为我们在这里讨论的是IP地址是否是可信任的,而不是信头的来源;而且最近的一个信头(即 “firsttrusted”),其包含的数据是可信的。更多细节参见 http://wiki.apache.org/spamassassin/TrustedRelays。

只查询最后的外部 IP
在“名单名称”后加上“-lastexternal”后缀,你可以只查询连接到你的内部网络的外部主机或使用公开 IP 地址的最后一个外部主机。


译者注:中国反垃圾邮件联盟所推出的DNSBL服务的设置如下,它们可以放到 /etc/mail/spamassassin/local.cf 中,但是不必全部放入和使用,通常根据需要使用其中一个就可以了,推荐使用CBL-。设定的评分可以自己的情况自行调整:

CBL(返回值是127.0.8.2):
header   RCVD_IN_CASA_CBL eval:check_rbl('CBL','cbl.anti-spam.org.cn.','127.0.8.2')
describe RCVD_IN_CASA_CBL Relay has be listed in CASA CBL, http://anti-spam.org.cn/
tflags   RCVD_IN_CASA_CBL net
score    RCVD_IN_CASA_CBL 3.0
CDL(返回值是127.0.8.4):
header   RCVD_IN_CASA_CDL eval:check_rbl('CDL','cdl.anti-spam.org.cn.','127.0.8.4')
describe RCVD_IN_CASA_CDL Relay has be listed in CASA CDL, http://anti-spam.org.cn/
tflags   RCVD_IN_CASA_CDL net
score    RCVD_IN_CASA_CDL 4.0
CBL+(返回值是127.0.8.6):
header   RCVD_IN_CASA_CBLPLUS eval:check_rbl('CBLPLUS','cblplus.anti-spam.org.cn.','127.0.8.6')
describe RCVD_IN_CASA_CBLPLUS Relay has be listed in CASA CBL+, http://anti-spam.org.cn/
tflags   RCVD_IN_CASA_CBLPLUS net
score    RCVD_IN_CASA_CBLPLUS 4.0

虽然CBL+是CBL和CDL的综合,但是CBL+不是一个多重列表,其返回值是固定的一个 127.0.8.6。
CBL-(返回值是127.0.8.5):
header   RCVD_IN_CASA_CBLLESS eval:check_rbl('CBLLESS','cblless.anti-spam.org.cn.','127.0.8.5')
describe RCVD_IN_CASA_CBLLESS Relay has be listed in CASA CBL-, http://anti-spam.org.cn/
tflags   RCVD_IN_CASA_CBLLESS net
score    RCVD_IN_CASA_CBLLESS 4.0
CML(返回值是127.0.8.1):
header   RCVD_IN_CASA_CML eval:check_rbl('CML','cml.anti-spam.org.cn.','127.0.8.1')
describe RCVD_IN_CASA_CML Relay has be listed in CASA CML (whitelist), http://anti-spam.org.cn/
tflags   RCVD_IN_CASA_CML net nice
score    RCVD_IN_CASA_CML -5.0

这是一个白名单,评分是负值,可以降低计分。

此外,由于国内一些 ISP 的 DNS 存在劫持问题(即在查询一个不存在的地址时候,总是返回一个特定的地址,用于将用户错误的访问导向到一个特定网站),这种情况下,用户会发现其所查询的任 何地址都被列入到了 RBL 中。因此,我们建议,尽可能的情况下都设置返回码验证,以避免这个问题。当然,更换一个没有被劫持的 DNS 也可以。

header 测试规则名 eval:check_rbl_txt('名单名称', '名单地址')
类似于 check_rbl() ,只是查询的是 TXT 类型的 DNS 记录而不是 A 类型的 DNS 记录。如果所查询的DNSBL支持TXT查询,返回的结果是一行文字,用来说明该地址被列入黑名单的原因,通常是一个可以查询黑名单数据库的链接。

header 测试规则名 eval:check_rbl_sub('名单名称', '返回码')
创建某个 DNSBL 查询的子测试。如果你要查询一个像 relays.osirusoft.com 那样的多重DNSBL,你可以使用对应的“名单名称”来比较 chek_rbl 查询得到结果。如果DNSBL查询返回多个 A 记录时,“返回码”可以设置为一个用点分隔的 IPv4 地址;如果DNSBL查询返回一个包含掩码的IP地址时,“返回码”可以是一个代表掩码的正十进制整数;如果是一个SenderBase查询(对 sa.senderbase.org 的TXT查询),“测试结果”是一个以“sb:”开头的表达式;如果前面的都不符合,它还可以是一个正则表达式。

注意:这个“名单名称”必须和前面的 check_rbl() 中的名字完全一样,包括后缀的“-notfirsthop”等。

body 测试规则名 /模式/修饰符
定义一个信体模式测试。模式是一个Perl的正则表达式。注意,“#”字符必须转义成“\#”,否则会被认为是一行注释。

这里“body”指的是邮件信体里面的普通文本;任何非文本的MIME部分都会去掉,如果需要的话, Quoted-Printable 或 Base 64 编码的文本都会被解码。邮件的主题信头也作为了邮件信体的第一个段落处理。在模式匹配前,所有的HTML标记和换行都会被去掉。

body 测试规则名 eval:评估函数([参数])
定义一个邮件信体的评估测试,参见上面。

uri 测试规则名 /模式/修饰符
定义一个uri的模式测试。模式是一个Perl的正则表达式。注意,“#”字符必须转义成“\#”,否则会被认为是一行注释。

这里“uri”指的是邮件信体中所有的URI,测试会对每一个URI进行测试,如果发现了匹配,增加其对应的评分。当需要测试URI时,可以用这个测试来 替代使用“body”测试来匹配信体中的URI,它会更精确的匹配在URL的两端,同时也速度更快。

rawbody 测试规则名 /模式/修饰符
定义一个原始信体模式测试。模式是一个Perl的正则表达式。注意,“#”字符必须转义成“\#”,否则会被认为是一行注释。

这里“raw body”指的是邮件信体里面所有的文本。Quoted-Printable 或 Base 64 编码的文本都会被解码,但是HTML代码和换行仍旧保留。模式是逐行进行匹配的。

rawbody 测试规则名 eval:评估函数([参数])
定义一个原始邮件信体的评估测试,参见上面。

full 测试规则名 /模式/修饰符
定义一个整个邮件的模式测试。模式是一个Perl的正则表达式。注意,“#”字符必须转义成“\#”,否则会被认为是一行注释。

整个邮件包括完整的信头和信体,其中包括MIME编码的数据,如图像、其它附件、MIME边界等等。

full 测试规则名 eval:评估函数([参数])
定义一个整个邮件的评估测试,参见上面。

meta 测试规则名 逻辑表达式
定义一个逻辑表达式来测试其他的测试是否命中或未命中。例如:

meta META1 TEST1 && !(TEST2 || TEST3)

注意,英语的操作符(“and”、“or”)会被作为测试规则名处理,另外,不支持异或(XOR)操作。

meta 测试规则名 逻辑运算表达式
还能够定义一个逻辑运算表达式来计算其他的测试结果的运算结果,未命中的值是“0”,命中的值是非零值。命中的元测试的值是它的运算表达式;命中的评估函 数测试的值是它返回的值;测试标志设置为“multiple”的命中的信头、信体、原始信体、uri或整个邮件的测试的值是测试命中的次数;其它的命中测 试的值是“1”.

例如:

meta META2 (3 * TEST1 - 2 * TEST2) > 0

注意,不能使用Perl内建的运算符和函数,如abs()等,它们会被作为测试规则名处理。

如果你要定义一个元规则,但是不希望在测试每个子规则时将其评分计算到总的评分上,只在整个元规则匹配时才将元规则的评分计算到总的评分上时,可以给子规 则名前加上“__”(两个下划线),SpamAssassin 不会计入这些子规则的评分。

tflags 测试规则名 [ {net|nice|learn|userconf|noautolearn|multiple} ]
用于设置一个测试规则的标志。这些标志用于评分驱动的后台系统的测试行为细节。关于这些标志对那些系统的作用的更多信息请参见 bayes_auto_learn 。有下列标志:

net
该测试是一个网络测试,在大量测试的系统或使用 -L 参数时,他们不会被运行,所以它的评分不会被计算进总的评分。

nice
该测试被用于补偿误判的邮件评分,它应该被指定为负值。

userconf
该测试在使用前需要用户配置(如 language- 类的测试)。

learn
该测试使用前要求经过学习。

noautolearn
该测试的评分不会被学习系统所学习。

multiple
该测试将被运行多次,用于元规则测试。只影响信头、信体、原始信体、uri和整个邮件的测试规则。

priority 测试规则名 n
指定一个测试的优先级。除了DNS和元测试外的所有测试都按照优先级的顺序进行测试(负优先级的测试运行在所有正优先级测试之前)。默认值是0。

不能使用 -99999999999999 和 -99999999999998 ,它们在内部有特殊用途。

管理员设置

这些设置与上面的设置不同,它们甚至比上面的“特权设置”还要“更特权”。无论 allow_user_rules 是否设置,它们不能用于供 spamc/spamd 所读取的用户的 user_prefs 文件中。不过,所有的设置都可用在用户直接运行的本地程序中。

version_tag 版本标签
版本标签会后缀到 X-Spam-Status 中的 SA 的版本号后面。你应该在修改规则集的同时也修改这个版本标签,特别是你计划公开发布你的规则集时。可以考虑用你的姓或名字缩写并加上一个递增的表示修改次 数的数字来组合成这个字符串。

这个字符串会转换成小写的,任何的非字母/数字和标点符号会被转换成下划线。

范例:

version_tag myrules1    # version=2.41-myrules1

test 测试规则名 (ok|fail) 用于测试的字符串
定义一个回归测试字符串。你能给每个测试规则定义一个以上的回归测试字符串。简单的说,就是定义一个测试规则所匹配的字符串。

这些测试仅仅在测试环境中使用,它们不会影响到 SpamAssassin 的正常使用。

rbl_timeout n (默认值: 15)
所有的DNS查询都是在整个测试开始的时候进行,并且在整个测试结束时候读取结果。这个选项设置了最大的DNS查询等待时间。在大多数 DNS查询都成功完成的情况下, SpamAssassin 将不会浪费时间来等待剩下的那些查询,可能它们根本没有回应了。当剩余没有完成的请求越少时,等待的时候也越短。对于默认的15秒的等待时间,下面是一个 表格说明了当剩余请求有多少时会等待多少时间:



剩余的查询     
100%

90%

80%

70%

60%

50%

40%

30%

20%

10%

0%
等待时间     
15

15

14

14

13

11

10

8

5

3

0

此外,当更多的查询结果返回时,剩余时间会变得更短,在超时前,未完成的查询会给至少1秒钟的查询时间,但是等待时间总不会超过 rbl_timeout 所指定的时间。

举个例子,如果邮件检查开始时候有20个查询,当有16个(剩下20%)返回了结果后,剩下的4个查询必须在开始后的5秒钟内完成,否则就会放弃这几个查 询。

util_rb_tld 顶级域 顶级域 ...
用于给 RegistrarBoundaries 列表里增加新的顶级域(TLD)。这个列表的更新通常与 SpamAssassin 发布新版本时一同更新,不过可以用该选项在新版本发布前就更新这个列表。顶级域如 com 、 net 、 org 等等。

util_rb_2tld 二级域 二级域 ...
用于给 RegistrarBoundaries 列表里增加新的二级域(2TLD)。这个列表的更新通常与 SpamAssassin 发布新版本时一同更新,不过可以用该选项在新版本发布前就更新这个列表。二级域如 co.uk 、 fed.us 等等。

bayes_path 路径 (默认值: ~/.spamassassin/bayes)
指定贝叶斯数据库的目录和文件名。使用这个路径,并加上“_toks”、“_seen”等后缀创建几个数据库:默认情况下就是 ~/.spamassassin/bayes_seen 、 ~/.spamassassin/bayes_toks 等。

默认情况下,每个用户都在自己的 ~/.spamassassin 目录里面存放这些数据库,权限模式为0700或0600。如果整个站点应用 SpamAssassin ,你可以让所有用户共享同一个数据库,从而降低磁盘的占用。(不过,贝叶斯过滤器在用户使用自己单独的数据库时更加有效。)

bayes_file_mode (默认值: 0700)
指定贝叶斯数据库的权限模式。

确保你指定的权限包含“x”(执行)权限,因为在创建目录时,它需要执行权限才能正常使用。不过,如果创建的是文件,该文件并不会有任何执行权限 (umask 被设置为111)。

bayes_store_module 模块名称
如果设置了该选项,该模块用于提供替换默认的贝叶斯存储方式。该模块必须遵循公布的存储规范。(参见 Mail::SpamAssassin::BayesStore )。例如,可以设置为 Mail::SpamAssassin::BayesStore::SQL 来使用通用的 SQL 存储模块。

bayes_sql_dsn DBI::数据库类型:数据库名:主机名:端口
该选项用于 BayesStore::SQL 存储方式。

这个选项指定的DSN用于连接到基于SQL方式的贝叶斯数据库。

bayes_sql_username 用户名
该选项用于 BayesStore::SQL 存储方式。

这个选项指定上述的DSN的连接用户名。

bayes_sql_password 密码
该选项用于 BayesStore::SQL 存储方式。

这个选项指定上述的DSN的连接密码。

bayes_sql_username_authorized ( 0 | 1 ) (默认值: 0)
设置是否在 BayesSQL 中调用 services_authorized_for_username 插件。如果这个插件没有检测到用户被授权使用贝叶斯功能或该模块不可用,数据库不会进行初始化。

注意:默认情况下用户是未授权的,除非插件返回真值。如果使用该插件,但是插件不能正确载入执行,所有的用户都被认为是未授权的。

传递到插件用于检测的用户名能使用 bayes_sql_override_username 选项来覆盖。

user_scores_dsn (LDAP连接 | DBI:数据库类型:数据库名:主机名:端口)
如果你从一个 SQL 数据库中载入用户自定义的评分,那么在这里定义连接的DSN。例如: DBI:mysql:spamassassin:localhost

如果你从一个 LDAP 目录服务里面载入用户自定义的评分,那么也在这里定义连接的DSN。你需要写成LADP的URL格式,包含下列部分:LDAP主机、端口、用于查找的基 DN、搜索范围(base、one 或 sub)、一个用来存储配置的多值属性(空格分隔开的键值对,像在文件中一样),最后是一个过滤表达式来过滤出所要的用户名。注意,过滤表达式用在 sprintf 语句中,只有一个用户名参数 :“__USERNAME__”,它会替换成实际的用户名。

例子: ldap://localhost:389/dc=koehntopp,dc=de?spamassassinconfig?uid=__USERNAME__

user_scores_sql_username 用户名
连接到上述DSN的用户名。

user_scores_sql_password 密码
连接到上述DSN的密码。

user_scores_sql_custom_query 查询语句
这个选项可以让你定制查询用户的评分和配置的SQL查询语句。 查询结果需要按顺序返回配置名、配置值这两个字段才行。此外,你可以在SQL中使用以下的“变量”,它们会在查询时候被替代成当前值。当前支持以下变量:

_TABLE_
存储用户评分和配置的表名。当前它的值指定为“userpref”,如果需要,可以在定制查询里使用另外的表名。

_USERNAME_
当前用户的用户名。

_MAILBOX_
当前用户的用户名的“@”前的部分。

_DOMAIN_
当前用户的用户名的“@”后的部分。这个值也许是空的。

查询语句必须是一个连续的行,以便能正常工作。

下面是几个查询语句的例子。注意,有一些为了阅读方便进行了换行,但是在你的配置中应该是一行。

当前的默认查询语句:
SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' ORDER BY username ASC

使用全局和域级别的默认值:
SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' OR username = '@~'||_DOMAIN_ ORDER BY username ASC

使用用户配置来覆盖全局配置:
SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' ORDER BY username DESC

user_scores_ldap_username 用户名
指定用于连接到 LDAP 服务器的绑定 DN。默认是空字符串(“”),即允许匿名绑定。

例子:cn=master,dc=koehntopp,dc=de

user_scores_ldap_password 密码
指定用于连接到 LDAP 服务器的密码,默认是空字符串(“”)。

loadplugin 插件模块名 [模块路径]
装入一个 SpamAssassin 插件模块。模块名是一个Perl的模块名,用于创建插件模块对象。

模块路径是装入模块的路径,包含模块的 Perl 代码。如果指定的是一个相对路径,那是相对于当前配置文件的位置而言的。如果省略了路径参数,会从Perl的查找路径(@INC数组)中找到并载入。

参见 Mail::SpamAssassin::Plugin中的更多细节来写自己的插件。

tryplugin 插件模块名 [模块路径]
同 loadplugin 一样,但是当不能找到模块文件(.pm)时会直接忽略。

预处理选项

include 文件名
包含文件中的配置选项。相对路径是相对于当前配置文件或用户的配置文件的位置。

if (Perl 的条件表达式)
用于支持按条件选择的配置。在它到 else 或 endif 之间的配置仅在条件表达式为真值时有效(对于Perl而言,就是该值是有定义的且非0)。

由于安全的原因,条件表达式只接受 Perl 的限定的部分,只能进行基本的算术比较。 允许下列输入:

数字、空白、算术运算符和括号
即以下字符:

( ) - + * / _ . , < = > ! ~ 0-9 空白

version
它被替换为当前运行的 SpamAssassin 的版本号。注意,SpamAssassin 内部使用的版本号是 x.yyyzzz 格式,这里 x 是主版本号, y 是辅版本号, z 是修订号。 所以3.0.0是3.000000,3.4.80是3.004080。

plugin(插件名)
如果该插件被载入,那么该函数返回1,否则返回 undef。

如果一个文件直到结束也没有使用 endif 来结束 if 语句,那么会触发一个警告,但是下一个配置文件将会继续进行处理(译者注:相当于在上个文件中末尾自动用 endif 结束了)。

例子:

if (version > 3.000000)
header MY_FOO ...
endif

loadplugin MyPlugin plugintest.pm

if plugin (MyPlugin)
header MY_PLUGIN_FOO  eval:check_for_foo()
score  MY_PLUGIN_FOO  0.1
endif

ifplugin 插件模块名
同 if plugin(PluginModuleName) 一样。

else
用于支持按条件选择的配置。在它到 endif 之间的配置仅在条件表达式为假值时有效(对于Perl而言,就是该值是未定义的和0)。

require_version 版本号
指定包含该配置的文件需要运行在特定版本的 SpamAssassin 下。如果不同版本(旧的或者新的)试图从这个文件中读取配置,它会输出一个警告并忽略该配置文件。

注意,SpamAssassin 内部使用的版本号是 x.yyyzzz 格式,这里 x 是主版本号, y 是辅版本号, z 是修订号。 所以3.0.0是3.000000,3.4.80是3.004080。

模板标记

下列标记可以作为变量在几个选项中使用。它们会被替换为相应的值。

一些标记可以使用扩号包括参数。参数是可选的,下面列出了它们的默认值。
_YESNOCAPS_     根据是否是垃圾邮件返回:“YES”/“NO”
_YESNO_     根据是否是垃圾邮件返回:“Yes”/“No”
_SCORE(PAD)_     邮件的评分。如果指定了PAD参数,且是空格或数字0时,评分会用
空格或数字0进行填充(默认情况下是不填充)。例如 _SCORE(0)_
将2.4填充成02.4,而 _SCORE(00)_ 将其填充成002.4。12.3则会
分别填充成12.3和012.3
_REQD_     垃圾邮件评分标准线(译者注:即 require 的值)
_VERSION_     版本号(如:3.0.0或3.1.0-r26142-foo1)
_SUBVERSION_     子版本号或代码修订日期(如:2004-01-10)
_HOSTNAME_     处理邮件的主机的主机名
_REMOTEHOSTNAME_     发送邮件的主机的主机名,只在 spamd 中可用
_REMOTEHOSTADDR_     发送邮件的主机的IP地址,只在 spamd 中可用
_BAYES_     贝叶斯评分
_TOKENSUMMARY_     所找到的新的、中立的、垃圾邮件的、正常邮件的字串数量
_BAYESTC_     所找到的新的字串数量
_BAYESTCLEARNED_     所找到的出现过的字串数量
_BAYESTCSPAMMY_     所找到的垃圾邮件倾向的字串数量
_BAYESTCHAMMY_     所找到的正常邮件倾向的字串数量
_HAMMYTOKENS(N)_     前N个最重要的正常邮件字串(默认是5个)
_SPAMMYTOKENS(N)_     前N个最重要的垃圾邮件字串(默认是5个)
_DATE_     扫描时间,使用 rfc-2822 格式
_STARS(*)_     每一分的评分分值使用一个“*”代表(可以使用任何字符)
(限制最多有50个星号)
_RELAYSTRUSTED_     使用的可信任中继服务器(参见 X-Spam-Relays-Trusted)
_RELAYSUNTRUSTED_     使用的非信任中继服务器(参见 X-Spam-Relays-Untrusted)
_RELAYSINTERNAL_     使用的内部中继服务器(参见 X-Spam-Relays-Internal)
_RELAYSEXTERNAL_     使用的外部中继服务器(参见 X-Spam-Relays-External)
_LASTEXTERNALIP_     从外部投递到内部的客户端的 IP 地址
_LASTEXTERNALRDNS_     从外部投递到内部的客户端的反向DNS解析名称
_LASTEXTERNALHELO_     从外部投递到内部的客户端的 HELO 字符串
_AUTOLEARN_     自动学习状态(“ham”、“no”、“spam”、“disabled”、
“failed”或“unavailable”)
_AUTOLEARNSCORE_     用于自动学习的邮件分值
_TESTS(,)_     使用逗号(或其它字符)分隔开的命中的测试列表
_TESTSSCORES(,)_     如上,只是加上了相应的分值(如:AWL=-3.0,...)
_SUBTESTS(,)_     使用逗号(或其它字符)分隔开的命中的子测试列表
_DCCB_     DCC 的“Brand”
_DCCR_     DCC 的结果
_PYZOR_     Pyzor 的结果
_RBL_     正向RBL查询的完整的原始结果(使用DNS URI格式)
_LANGUAGES_     邮件中可能使用的语言
_PREVIEW_     内容预览
_REPORT_     命中的测试规则的简要报告(用于信头报告中)
_SUMMARY_     命中的测试规则的标准报告(用于邮件报告中)
_CONTACTADDRESS_     report_contact 的值
_HEADER(NAME)_     包括信头的值。值与信头规则中匹配的一样(参见文档中其它部分)

如果引用的标记不在上述列表中,也没有在载入的模块中定义,标记将保持不变。

HAMMYTOKENS 和 SPAMMYTOKENS 标记有一个可选的用于指定特定格式的第二个参数,参见下面的 正常字串/垃圾字串标记格式 部分。

正常字串/垃圾字串标记格式

正常字串(HAMMYTOKENS)和垃圾字串(SPAMMYTOKENS)有一个用于指定特定格式的可选的第二个参 数:_SPAMMYTOKENS(N,FMT)_, _HAMMYTOKENS(N,FMT)_ 。可用格式如下:

short
只列出字串。例如,配置文件中加上:

add_header all Spammy _SPAMMYTOKENS(2,short)_

信头中会出现:

X-Spam-Spammy: remove.php, UD:jpg

指出了最高的两个垃圾邮件字串:“remove.php” 和 “UD:jpg”。(最后一个冒号后面的是字串,冒号前的标识符表示该字串的一些特性,这里 UD 的意思是“该字串看起来像是域名的一部分”)

compact
列出字串的概率、一个缩写的保留权重(declassification distance,译者注:表示在贝叶斯字串库中何时被删除,当该值小于1时,该字串被删除)(参见例子)和字串。例如,在配置文件中加上:

add_header all Spammy _SPAMMYTOKENS(2,compact)_

信头中会出现:

0.989-6--remove.php, 0.988-+--UD:jpg

分别指出了最高的两个垃圾邮件字串的概率是 0.989 和 0.988。第一个字串的保留权重的数量是6,意思是这个字串至少在6封没有被判定为垃圾邮件的邮件中出现过。第二个字串中的+表示保留权重的数量超过了 9。

long
列出字串的概率、保留权重的数量、出现在正常邮件中的次数、出现在垃圾邮件中的次数和字串的存在时间。

例如,在配置文件中加上:

add_header all Spammy _SPAMMYTOKENS(2,long)_

信头中会出现:

X-Spam-Spammy: 0.989-6--0h-4s--4d--remove.php, 0.988-33--2h-25s--1d--UD:jpg

long 比 compact 提供了更多的信息,第一个字串出现在0个正常邮件中(0 ham)和4个垃圾邮件中(4 spam),最后出现是在4天前(4 day);第二个字串出现在两个正常邮件中(2 ham)和25个垃圾邮件中(25 spam ),最后出现是在1天前(1 day)。(不像 compact ,long 显示超过9个的保留权重数量而不是显示一个+。)

本地化

使用 lang xx 开始的行仅在用户使用该语言时有效,允许在测试规则的描述和模板中使用特定的语言。

本地化字符串可以使用语言和国家来定义,如 lang pt_BR; 或仅使用语言,如 lang de 。

参见

Mail::SpamAssassin spamassassin spamd

http://hi.baidu.com/shengit/blog/item/53986f4db82298f5d72afcf8.html