全部博文(178)
分类: LINUX
2008-09-06 09:01:26
译
2007/11/27
Mail::SpamAssassin::Conf - SpamAssassin 配置指南
英文版原地址 -
中文版翻译 -
如果译文中有任何错误,欢迎给我发邮件指出,不胜感激。如果希望讨论 SpamAssassin 的相关内容,请到的讨论。
译文版本 - 2.0 (最后更新日期:2007/11/27)
名词注释:
通常,邮件服务器(MX)和中继服务器是同一个主机,并使用同一个 IP 地址,但是经常也会有分别处于不同主机和 IP 的情况。
本文中,个别情况下,邮件服务器也统称这两种情况,请依据上下文语义判断。
# 注释文本
rewrite_header Subject *****SPAM*****
full PARA_A_2_C_OF_1618 /Paragraph .a.{0,10}2.{0,10}C. of S. 1618/i describe PARA_A_2_C_OF_1618 Claims compliance with senate bill 1618(根据上议院第1618号法令)
header FROM_HAS_MIXED_NUMS From =~ /\d+[a-z]+\d+\S*@/i describe FROM_HAS_MIXED_NUMS From: contains numbers mixed in with letters(From: 信头中混和了数字)
score A_HREF_TO_REMOVE 2.0
lang es describe FROM_FORGED_HOTMAIL Forzado From: simula ser de hotmail.com(西班牙语:“信件假称其来自Hotmail.com”)
lang pt_BR report O programa detetor de Spam ZOE [...] ( 波兰语: 检测到了垃圾邮件)
SpamAssassin 使用传统的UNIX风格的配置文件,并从 /usr/share/spamassassin
和
/etc/mail/spamassassin
目录中读取这些配置文件。
以下地址列出了 SpamAssassin 配置中最重要的选项,建议初次使用者首先阅读:
以 # 开始的一行是注释。注意:如果 # 字符用于规则或配置选项中,必须使用斜线转义,即:\#
文件中的空白字符是无所谓的,但是最好不要放在行首,因为将来可能使用行首空白来表示续行。
不过在当前,每个规则或配置必须放在一行,多行仍然不被支持。
文件和目录的路径中能使用 ~
字符来表示用户的主目录,但是不支持其它的 shell 风格的路径扩展,如通配符或
~user/。
以下在适当的情况下,默认值会被列在括号中。
以下选项能被用于站点级配置(local.cf)和用户级配置(user_prefs)中,通过它们可以定制 SpamAssassin 处理进入的邮件的方式。
n.nn
可以是整数或者实数。
默认值为5.0,这是很严厉的设置了,它适用于单个用户使用;但是对于应用于整个服务器,应该设置得更保守一些(更高一些),比如设置为8.0或10.0等等。通常不推荐设置为自动删除或丢弃那些被判定为垃圾邮件的邮件,否则可能招致用户的强烈抗议;除非评分特别的高,比如15.0或者更高,才可以考虑直接删除。这个选项以前称之为
required_hits
,现在虽然还可以用,但是不推荐使用旧的名称。
如果只列出了一个评分,那么测试后总是返回该评分。
如果列出了4个评分,那么 SpamAssassin 在不同的使用情况下返回不同的评分。第一个评分用于贝叶斯测试和网络测试都被取消的情况下(0号评分集);第二个评分用于贝叶斯测试被取消,但使用网络测试的情况下(1号评分集);第三个评分用于使用贝叶斯测试,但网络测试被取消的情况下(2号评分集);第四个评分用于贝叶斯测试和网络测试都使用的情况下(3号评分集)。
设置一个测试规则的评分为0会取消该规则的测试。
如果评分使用括号“()”括起来,那么该行所有其后的评分都被增加同等的比例。例如,“(3)”表示在所有的评分集中提高该评分3点。“(3) (0) (3) (0)”表示只提高0号和2号评分集3点评分。
如果一个测试规则没有给定评分,它将会被指定一个默认评分1.0;除非是以“T_”开头的测试规则(用于指出该测试规则还在试验中),它会被指定为评分0.01。
注意,以“__”开头的测试规则名是一个间接规则,它被用于组成元匹配规则和作为其它规则的前置测试,这些规则不会被计算评分也不会列在“命中的测试”报告中。注意,虽然间接规则的评分不会被计算,但是设置间接规则的评分为0会取消该规则的测试。
并不推荐使用这个选项,垃圾邮件或钓鱼邮件的发送者非常简单的就可以制造一些让它盲目信任的邮件。推荐的解决方法是使用
whitelist_auth
或其它认证的白名单方式替代,或使用
whitelist_from_rcvd
。
白名单和黑名单都可以使用通配符。如 friend@somewhere.com
、 *@isp.com 或
*.domain.net
都是可以的。需要注意的是只支持 * 和 ?
(匹配单个字符),但是不支持其他的元字符匹配。由于一些安全的原因,这里也不支持正则表达式。
可以在一行中使用空格分隔开写入多个邮件地址,也可以使用多个 whitelist_from
行来指定。
信头的白名单检查按照如下顺序:如果信头设置了 Resent-From 地址,那么就检查它;否则检查来自下列信头的全部地址:
Envelope-Sender Resent-Sender X-Envelope-From From
此外,如果SMTP通讯中的信封信息可用的话,那么“信封发件人(envelope sender)”也会被检查。参见
envelope_sender_header
。
范例:
whitelist_from joe@example.com fred@example.com whitelist_from *@example.com
范例:
unwhitelist_from joe@example.com fred@example.com unwhitelist_from *@example.com
第二个参数用于在邮件从互联网发送到你的内部网的邮件服务器(MX)时进行的反向DNS查询匹配。它可以是一个完全限定的主机名或主机名的域部分,换言之,如果连接到你的邮件服务器(MX)的主机的IP可以被反向解析为“sendinghost.spamassassin.org”,那么你可以写为 sendinghost.spamassassin.org 或 spamassassin.org 。
注意,这需要你的 internal_networks
被正确配置。简言之,除非在一个复杂的网络里,设置这个参数可以得到不错的效果。
同时,也要求你的邮件服务器(MX)可以对连接进来的服务器的IP地址进行反向查询,且将查询结果记录在“Recevied”信头中。
范例:
whitelist_from_rcvd joe@example.com example.com whitelist_from_rcvd *@axkit.org sergeant.org
whitelist_from_rcvd,但是它用于在
SpamAssassin
发行包中指定默认白名单。这个白名单的评分较低,它常常是垃圾邮件发送者假称的地址。
whitelist_from_rcvd
中的哪些邮件地址可以不使用
white_from_rcvd 中对应的邮件中继发信,而使用其它的中继服务器发信。默认情况下,发信地址在
white_from_rcvd 中,但是中继服务器却不是列出的那个,这种情形会触发一个测试伪造的规则。将该地址放入到
white_allows_relay 中防止触发。
白名单和黑名单都可以使用通配符。如 friend@somewhere.com
, *@isp.com ,或
*.domain.net
都是可以的。需要注意的是只支持 * 和 ?
(匹配单个字符),不支持其他的元字符匹配。由于安全的原因,这里不支持正则表达式。
可以在一行中使用空格分隔写入多个邮件地址,也可以使用多个 whitelist_allows_relays
行来指定。
这里列出的邮件地址不必被前面的 whitelist_from_rcvd 所完全匹配,它只需要匹配信头中的地址就行。
范例:
whitelist_allows_relays joe@example.com fred@example.com whitelist_allows_relays *@example.com
所匹配的地址也必须同样被前面的 whitelist_from_rcvd 选项所匹配。
范例:
unwhitelist_from_rcvd joe@example.com fred@example.com unwhitelist_from_rcvd *@axkit.org
whitelist_from
相同。
所匹配的地址也必须同样被前面的 blacklist_from 选项所匹配。
范例:
unblacklist_from joe@example.com fred@example.com unblacklist_from *@spammer.com
whitelist_from
的格式相同。
有三个级别的接收白名单:whitelist_to
、
more_spam_to
和 all_spam_to
。 在第一个接收白名单中的用户仍然可能会被过滤一些垃圾邮件,但是在 all_spam_to
的用户不会被过滤任何垃圾邮件。
白名单信头检查将按照如下顺序,如果设置了 Resent-To
或 Resent-Cc
就使用它们;否则检查来自下列信头中的全部地址:
To Cc Apparently-To Delivered-To Envelope-Recipients Apparently-Resent-To X-Envelope-To Envelope-To X-Delivered-To X-Original-To X-Rcpt-To X-Real-To
与
blacklist_from
的格式相同。
whitelist_from
和
whitelist_from_rcvd
不同的是,在监测白名单前会首先会检查邮件是否是授权的发信人。
授权检查是通过安装的发信人授权检查模块之一进行的: SPF (使用
Mail::SpamAssassin::Plugins::SPF
)、 Domain Keys (使用
Mail::SpamAssassin::Plugins::DomainKeys
) 或 DKIM (使用
Mail::SpamAssassin::Plugins::DKIM
)。注意,使用这个选项前这些插件必须激活并可以正常工作。
使用 whitelist_auth
基本上等同于使用
whitelist_from_spf
、
whitelist_from_dk 和
whitelist_from_dkim
来指定每个发信地址。
范例:
whitelist_auth joe@example.com fred@example.com whitelist_auth *@example.com
whitelist_auth ,但是它用于在
SpamAssassin
发行包中指定默认白名单。这个白名单的评分较低,它常常是垃圾邮件发送者假称的地址。
whitelist_auth
项。所匹配的地址也必须同样被前面的
whitelist_auth
选项所匹配。
范例:
unwhitelist_auth joe@example.com fred@example.com unwhitelist_auth *@example.com
在重写发信人和收信人时,字符串不能包含圆括号(会被转换为方括号)。
如果使用 rewrite_header subject ,但是被重写的邮件没有包含 Subject 信头,会自动添加一个 Subject
信头。
如果标记字符串指定为空,任何已有的重写将从信头里去掉。
字符串中可以包含下面描述的模板标记。如果需要的话,还可以使用\n和\t来增加回车符和制表符。使用\\来表示一个反斜线字符。其它的转义字符无效,只被简单的去掉反斜线。
如果 fold_headers 被设置为1,所有的信头会被折叠起来(即通过行首空格进行续行,以避免较长的行)。但是注意,通过\n手工换行的信头将不会被自动折叠(即可能会出现很长的信头),即使这个信头需要折叠起来。
你能够通过 add_header 来定制已有的信头(仅指定要修改的信件子集)。
清除全部的定制信头请参见 。
以下是一些例子(这些是默认增加的,注意 Checker-Version 不能修改或删除):
add_header spam Flag _YESNOCAPS_ add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_ add_header all Level _STARS(*)_ add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_
X-Spam-
开头的(所以这里指定信头名时应该前缀以 X-Spam-
)。
清除全部的定制信头请参见 。
注意,X-Spam-Checker-Version 信头是不能删除的,因为邮件管理员和开发人员需要使用它来诊断问题。如果没有这个信头,甚至都不知道 SpamAssassin 是否在运行。
注意,X-Spam-Checker-Version 信头是不能被删除的,因为邮件管理员和开发人员需要使用它来诊断问题。如果没有这个信头,甚至都不知道 SpamAssassin 是否运行。
如果这个选项被设置为2,原信件以文本方式附加到报告信件中。之所以采用这个选项是由于安全的原因,某些不完善的邮件客户端会在用户没有要求的情况下自动的载入附件,这可能会带来一些安全问题。这个选项也许会导致附加的信件和原信件保存出来或看起来并不太一样。
如果这个选项设置为0,收到的垃圾邮件只在信头中增加一些 X-Spam-
信头而不修改信体。此外,X-Spam-Report 信头会被增加到垃圾邮件中,你可以设置
report_safe 为0后使用 remove_header 来去掉这些
SpamAssassin 的定制信头。
如果你要复制原信件的信头到被判定的邮件中,参见 report_safe_copy_headers 。
如果你收到了很多外文的垃圾邮件,而且绝不会收到用这种语言写的正常邮件,这个选项也许会有帮助。注意,所有的ISO-8859-*字符集和Windows代码页字符集默认总是允许的。
设置为all可以允许所有的字符集。这是默认值。
这个选项的设置决定了规则 CHARSET_FARAWAY、
CHARSET_FARAWAY_BODY
和
CHARSET_FARAWAY_HEADERS
的触发条件。
范例:
ok_locales all (允许全部地s) ok_locales en (仅允许英文) ok_locales en ja zh (仅允许英文、中文和日文)
注意,如果指定了多个 ok_locales 行则只有最后一个有效。
可用的地区如下:
参见
获取更多信息。
在你的域中的邮件服务器和内部中继服务器应使用 internal_networks 指定。当有除了你的邮件服务器和内部中继服务器外的可信主机时,应该仅在 trusted_networks 指定它们。
如果指定了一个 /
及其后的掩码,这是一个CIDR风格的网络地址;
如果没有指定掩码,但是有少于4个的IP地址单元并后缀以一个点的话,它是指所有前面的IP地址单元相同的网络地址;如果没有指定掩码也没有后缀的点,它是指一个单一IP地址,就像指定了/32掩码一样。
如果在网络或主机地址前前缀 ! ,表示该地址被排除(或包括)在第一个匹配中。
注意:与你的配置无关,127/8 总是包括在可信网络中。
范例:
trusted_networks 192.168/16 # 全部的 192.168.*.* trusted_networks 212.17.35.15 # 仅指该地址 trusted_networks !10.0.1.5 10.0.1/24 # 全部的 10.0.1.*,但是除了 10.0.1.5
trusted_networks 的定义是叠加的,多个选项指定的可信网络都会作为可信网络。可以使用 清除前面定义的可信网络。
如果没有设置这个选项,但是设置了 internal_networks
,那么
internal_networks
的值将作为这个选项的默认值。
如果既没有配置 trusted_networks ,也没有配置
internal_networks
,SpamAssassin 会自行分析判断,流程如下:
trusted_networks 一样。
该选项用于在检查拨号或动态IP地址黑名单时,用来检测“单跳发送(direct-to-MX)”的垃圾邮件。
可信任的中继服务器会直接从拨号连接接受邮件而不需要它们列在 internal_networks 中,它们只需列在 trusted_networks 中。
如果设置了 trusted_networks
而没有设置
internal_networks,那么
trusted_networks
的值将作为这个选项的默认值。
如果既没有指定 trusted_networks
也没有指定
internal_networks
,即没有本地地址。换言之,任何连接到运行
SpamAssassin 的主机的主机都被认为是外部的。
internal_networks 中的地址都会出现在
trusted_networks 中,换言之,
internal_networks
总是可信主机的一个子集。
注意:与你的配置无关,127/8 总是包括在可信网络中。
所有邮件信头中列在 MSA 之后的中继服务器都将同 MSA 一样被看做
trusted_networks
和
internal_networks
中定义的可信网络和内部网络。
举例说,如果 MSA 是可信的和内部的,那么之前的所有中继服务器也应该都是可信的和内部的。
当用 msa_networks 来标识一个 MSA 时,建议也将其放入到可信网络和内部网络中。当一个 MSA 没有被包括在 msa_networks 中时,你应该将其放入可信网络而不是内部网络。无论如何,如果一个 MSA 也作为邮件服务器(MX)或中继服务器时,你总应该将其放入可信网络和内部网络内,并确保 MSA 在 Received 信头中包含认证标识来识别合法的客户。
警告:当一个 MSA 同时也作为邮件服务器(MX)或中继服务器或接受非认证用户邮件时,绝不要将其加入到 msa_networks 中。这样做结果是未知的外部中继也将被视作可信网络。
envelope_sender_header
。
你可以指定你自己的测试列表:
dns_available test: domain1.tld domain2.tld domain3.tld
注意,DNS检查的是NS记录。
SpamAssassin 的网络规则测试是并发进行的。这也许会导致需要打开的文件描述符超过了系统限制,安全起见推荐将文件描述符的限制至少增加到256以上。
关于贝叶斯自动学习默认实现的细节,参见
Mail::SpamAssassin::Plugin::AutoLearnThreshold
插件模块的文档。
bayes_ignore_header X-Upstream-Spamfilter bayes_ignore_header X-Upstream-SomethingElse
sa-learn
使用 --use-ignores
选项的话,也会忽略这些邮件。可以列出一个或多个地址,格式参见 whitelist_from
。
来自特定发件人的垃圾邮件也许包含了许多经常出现在正常邮件中的词汇。举个例子,某个人也许会收到他常光顾的书店发来的邮件,但是不希望收到来自其他书店的类似邮件。如果那些不想收到的信件作为垃圾邮件被学习的话,那么任何讨论书籍的邮件,包括来自他想收到的那个书店发来的邮件也很可能被判定为垃圾邮件。这些让人讨厌的书店的邮件地址应该列在这里。(他们无视你的许可,并且不发任何邮件就将你加入了他们的会员。)
那些发送许可的垃圾邮件的人,或收到了包含了垃圾邮件中常见词汇的正常邮件的人,可能会担心一些垃圾邮件被作为正常邮件处理。那些发送垃圾邮件的邮件列表和地址等可以放到这个列表中。
bayes_ignore_from
。
spamassassin -r
)。你可以设置这个选项为0来关闭学习功能。
如果设置了这个选项, BayesStore::SQL 模块所设置的 username 将被覆盖。这个选项用于实现一个全局或分组的贝叶斯数据库。
这会相对快一些,但是如果同时有一个或多个通过NFS方式访问的客户端访问时,可能会造成数据库文件的破坏。
注意,不同的操作系统使用不同的锁定方式。
支持下列锁定方式:
nfssafe 和 flock 只能用于 UNIX 上,win32 只能用于 Windows 。默认情况下,SpamAssassin 根据操作系统的不同使用 nfssafe 或 win32 锁定方式。
可以通过这个选项来禁止自动折叠,不过要注意可能会生成很长的行。
report_safe,一些原邮件的信头被复制到封装邮件的信头里面(
From,
To, Cc, Subject, Date
等)。如果你希望其他的信头也被复制到这里,你可以使用这个选项。你可以在一行里面使用空格分隔开列出多个信头,或者使用多个此选项。
默认情况下,几种MTA使用不同的信头,如:
X-Envelope-From Envelope-Sender X-Sender Return-Path
如果可以通过查找一些特征(比如邮件的信头,或 fetchmail 的特征等)可以安全的确定这些,那么 SpamAssassin 会使用它们。 然而,某些邮件服务器的配置可能会导致选择了错误的信头。(更多的讨论请参见 SpamAssassin 的 BugZilla 里面的2142号和4747号错误。)
为了避免选择错误,可以使用 envelope_sender_header
来指明这个信头。这个信头包含的是你的 MTA 在 SMTP 对话过程中 MAIL FROM 命令里的邮件地址。
如果信头像在SMTP通讯中一样在右边的邮件地址两端包含了“ < ”或“ > ”字符,这两个字符将被去掉。
如果该信头没有找到或者信头中没有包含“ @ ”符号, SpamAssassin 将在日志中记录一个警告,并采用其默认方式来来确定信封发信人。
(给 MTA 开发者的提示,我们希望将来使用一个单独的与其后的垃圾邮件扫描器不同的信头。
提出了一个更好建议,使用 Received 信头在每一跳中记录信封发信人)
范例:
envelope_sender_header X-SA-Exim-Mail-From
注意,以“__”开始的测试是为元规则所保留,它们不会被计分和列出在“命中的测试”报告中。
同时注意,习惯上描述文本不要超过50个字符。
如果你设置了这个,请不要超过每行78个字符。每个 report 行累加到已有的模板定义上(前面的 report 行),可以使用 来清除前面的模板定义。
能够使用上述的特定标记。
每个 unsafe-report 行累加到已有的模板定义上(前面的 unsafe_report 行),可以使用 来清除前面的模板定义。
能够使用上述的特定标记。
这些设置与上面的设置不同,它们被称之为“特权设置”。只有用户在通过 procmailrc 文件或 forward 文件调用 SpamAssassin
时,或在系统管理员编辑 /etc/mail/spamassassin 下的配置文件时才能使用它们。出于安全性及效率的考虑,通过 spamc 来访问
spamd 的用户是不允许在他们的 user_prefs
文件中使用这些“特权设置”,除非设置了
allow_user_rules 选项(而且,也只能使用下面列出的这些特权设置)。
注意,现在即便打开了这个选项, spamd 也不会使用 user_prefs 中的规则来修改系统现存的规则定义。
注意:目标 URI 必须使用小括号包含起来,模式的其它部分可以创建一个反向引用。
范例:
redirector_pattern /^https?:\/\/(?:opt\.)?chkpt\.zdnet\.com\/chkpt\/\w+\/(.*)$/i
信头后面加上“:raw”后缀可以防止使用
quoted-printable 或 base-64
编码的字符串自动进行解码。
信头后面加上“:addr”后缀可以去掉除了信头中的第一个邮件地址外的其他部分。例如,以下所有信头处理后都只剩下“
example@foo”了:
信头后面加上“:name”后缀可以去掉除了信头中第一个真实名字外的其他部分。例如,
以下所有信头处理后只剩下“Foo
Blah”了:
可以使用以下的几个“伪”信头:
。操作符是
=~
(匹配其后的正则表达式)或 !~
(不匹配其后的正则表达式)。模式是一个 Perl 风格的正则表达式,修饰符是对正则表达式的修饰(请参见 Perl 中有关正则表达式的部分)。 注意,即便你使用了
x 修饰符,也不支持多行的正则表达式。还要注意,“#”字符必须转义成“\#”,否则会被认为是一行注释。
如果使用了 [if-unset: 字符串]
标记,那么如果邮件中没有发现该信头,就会使用该字符串来进行模式匹配。
测试规则名不能用数字开头,只能使用英文字母、数字和下划线。按照惯例不要使用小写字母、名字不要超过22个字符。也不能使用中划线。
注意,以“__”(两个下划线)开头的测试规则被保留用于元规则,他们不会被计分和列在“命中的测试”报告中。以“T_”开头的测试规则被保留用于QA测试,它们应该给予很低的评分。
如果你增加或修改一个测试规则,请使用 spamassassin --lint 来测试一下是否有语法错误。这可以避免出现错误消息或导致其它的测试被忽略。
Mail::SpamAssassin::EvalTests
中定义的测试函数。参数是可选的。
如果上面取出的多个IP地址的DNSBL查询不止一个返回了命中结果,并不会重复计分,因为对于每封邮件来说,该规则只被触发一次(译者注:即只要有一个 IP 地址在黑名单中就算触发了该规则)。
注意,这需要 SpamAssassin 能知道那个中继服务器是可信任的。在简单的环境里, SpamAssassin
能够很好的自行推测。在复杂的环境,你可以通过手工设定 trusted_networks
可以得到更好的结果。
此外,你能够通过在“名单名称”后加上“-untrusted”后缀来查询所有不可信的IP地址。重要提示:这不包括最近的一个“不可信行”,如上述的“-firsttrusted”所指的地址。因为我们在这里讨论的是IP地址是否是可信任的,而不是信头的来源;而且最近的一个信头(即“firsttrusted”),其包含的数据是可信的。更多细节参见
。
注意:这个“名单名称”必须和前面的 check_rbl() 中的名字完全一样,包括后缀的“-notfirsthop”等。
这里“body”指的是邮件信体里面的普通文本;任何非文本的MIME部分都会去掉,如果需要的话, Quoted-Printable 或 Base 64 编码的文本都会被解码。邮件的主题信头也作为了邮件信体的第一个段落处理。在模式匹配前,所有的HTML标记和换行都会被去掉。
这里“uri”指的是邮件信体中所有的URI,测试会对每一个URI进行测试,如果发现了匹配,增加其对应的评分。当需要测试URI时,可以用这个测试来替代使用“body”测试来匹配信体中的URI,它会更精确的匹配在URL的两端,同时也速度更快。
这里“raw body”指的是邮件信体里面所有的文本。Quoted-Printable 或 Base 64 编码的文本都会被解码,但是HTML代码和换行仍旧保留。模式是逐行进行匹配的。
整个邮件包括完整的信头和信体,其中包括MIME编码的数据,如图像、其它附件、MIME边界等等。
meta META1 TEST1 && !(TEST2 || TEST3)
注意,英语的操作符(“and”、“or”)会被作为测试规则名处理,另外,不支持异或(XOR)操作。
例如:
meta META2 (3 * TEST1 - 2 * TEST2) > 0
注意,不能使用Perl内建的运算符和函数,如abs()等,它们会被作为测试规则名处理。
如果你要定义一个元规则,但是不希望在测试每个子规则时将其评分计算到总的评分上,只在整个元规则匹配时才将元规则的评分计算到总的评分上时,可以给子规则名前加上“__”(两个下划线),SpamAssassin 不会计入这些子规则的评分。
不能使用 -99999999999999 和 -99999999999998 ,它们在内部有特殊用途。
这些设置与上面的设置不同,它们甚至比上面的“特权设置”还要“更特权”。无论 allow_user_rules 是否设置,它们不能用于供 spamc/spamd 所读取的用户的 user_prefs 文件中。不过,所有的设置都可用在用户直接运行的本地程序中。
这个字符串会转换成小写的,任何的非字母/数字和标点符号会被转换成下划线。
范例:
version_tag myrules1 # version=2.41-myrules1
这些测试仅仅在测试环境中使用,它们不会影响到 SpamAssassin 的正常使用。
剩余的查询 |
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秒钟内完成,否则就会放弃这几个查询。
~/.spamassassin/bayes_seen
、
~/.spamassassin/bayes_toks
等。
默认情况下,每个用户都在自己的 ~/.spamassassin
目录里面存放这些数据库,权限模式为
0700或0600。如果整个站点应用 SpamAssassin
,你可以让所有用户共享同一个数据库,从而降低磁盘的占用。(不过,贝叶斯过滤器在用户使用自己单独的数据库时更加有效。)
确保你指定的权限包含“x”(执行)权限,因为在创建目录时,它需要执行权限才能正常使用。不过,如果创建的是文件,该文件并不会有任何执行权限(umask 被设置为111)。
这个选项指定的DSN用于连接到基于SQL方式的贝叶斯数据库。
这个选项指定上述的DSN的连接用户名。
这个选项指定上述的DSN的连接密码。
注意:默认情况下用户是未授权的,除非插件返回真值。如果使用该插件,但是插件不能正确载入执行,所有的用户都被认为是未授权的。
传递到插件用于检测的用户名能使用 bayes_sql_override_username 选项来覆盖。
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__
查询语句必须是一个连续的行,以便能正常工作。
下面是几个查询语句的例子。注意,有一些为了阅读方便进行了换行,但是在你的配置中应该是一行。
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
例子:cn=master,dc=koehntopp,dc=de
模块路径是装入模块的路径,包含模块的 Perl
代码。如果指定的是一个相对路径,那是相对于当前配置文件的位置而言的。如果省略了路径参数,会从Perl的查找路径(@INC数组)中找到并载入。
参见 Mail::SpamAssassin::Plugin
中的更多细节来写自己的插件。
loadplugin 一样,但是当不能找到模块文件(.pm)
时会直接忽略。
由于安全的原因,条件表达式只接受 Perl 的限定的部分,只能进行基本的算术比较。 允许下列输入:
( ) - + * / _ . , < = > ! ~ 0-9 空白
x.yyyzzz
格式,这里
x 是主版本号, y 是辅版本号, z 是修订号。
所以3.0.0是3.000000
,3.4.80是3.004080
。
如果一个文件直到结束也没有使用 endif 来结束 语句,那么会触发一个警告,但是下一个配置文件将会继续进行处理(译者注:相当于在上个文件中末尾自动用 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
注意,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)_
。可用格式如下:
add_header all Spammy _SPAMMYTOKENS(2,short)_
信头中会出现:
X-Spam-Spammy: remove.php, UD:jpg
指出了最高的两个垃圾邮件字串:“remove.php”
和
“UD:jpg”。(最后一个冒号后面的是字串,冒号前的标识符表示该字串的一些特性,这里 UD
的意思是“该字串看起来像是域名的一部分”)
add_header all Spammy _SPAMMYTOKENS(2,compact)_
信头中会出现:
0.989-6--remove.php, 0.988-+--UD:jpg
分别指出了最高的两个垃圾邮件字串的概率是 0.989 和 0.988。第一个字串的保留权重的数量是6,意思是这个字串至少在6封没有被判定为垃圾邮件的邮件中出现过。第二个字串中的+表示保留权重的数量超过了9。
例如,在配置文件中加上:
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)。(不像 ,long 显示超过9个的保留权重数量而不是显示一个+。)
使用 lang xx
开始的行仅在用户使用该语言时有效,允许在测试规则的描述和模板中使用特定的语言。
本地化字符串可以使用语言和国家来定义,如 lang pt_BR
; 或仅使用语言,如 lang de
。
Mail::SpamAssassin
spamassassin
spamd