利用 SpamAssassin 打击垃圾邮件指南
1. 不同邮件客户端与 SpamAssassin 的配置
1.1 Microsoft Outlook Express 配置
Outlook Express 随大多数 Windows 版本(直至并包括 Windows XP)一起提供,它具备 POP3 连接功能和诸多特性,如 HTML 邮件。不过,部分邮件客户端(包括 Outlook Express)仅允许对特定邮件头(如发件人“From:”和主题“Subject:”)进行过滤。
默认情况下,SpamAssassin 仅写入额外的邮件头,但可对其进行配置以更改邮件的主题、发件人或收件人邮件头。具体操作是修改 /etc/spamassassin/local.cf 文件,也可通过编辑 ~user/.spamassassin/user_prefs 为每个用户单独设置。
在文件中添加以下行:
rewrite_header Subject *****SPAM*****
这会将邮件主题头更改为 *****SPAM***** ,若有需要,可更改该标签。
完成 SpamAssassin 配置后,可按以下步骤配置 Outlook Express 对修改后的邮件主题进行处理:
1. 创建一个用于存放垃圾邮件的文件夹。选择“文件”菜单,点击“文件夹”,再点击“新建”。输入“Spam”或其他描述性名称作为文件夹名,然后点击“确定”。
2. 选择“工具”菜单,接着选择“邮件规则”,再点击“新建”。在弹出窗口中,确保条件包含“主题行包含特定单词”,操作包含“将其移动到指定文件夹”。
3. 点击“包含特定单词”,输入 *****SPAM***** 或在配置 SpamAssassin 时选择的替代短语,然后点击“确定”。
4. 点击规则描述下一行的“指定”,选择之前创建的文件夹,然后点击“确定”。
5. 规则会进行总结,为其赋予一个有意义的名称(如“Spam”),然后点击“确定”保存规则。
1.2 Mozilla Thunderbird 配置
Mozilla Thunderbird 是一款免费的开源邮件客户端,具备微软 Outlook 的大部分功能,可从 www.mozilla.org/products/thunderbird/ 免费获取,它拥有完整的过滤功能。配置步骤如下:
1. 创建一个用于存储垃圾邮件的文件夹。点击“文件”菜单,选择“新建 | 文件夹”。选择一个位置(收件箱即可)和一个名称(如“Spam”),然后点击“确定”。
2. 点击“工具”菜单,选择“邮件过滤器”,点击“新建”按钮创建新过滤器。
3. 在弹出对话框中,为过滤器命名(如“Spam”),然后选择“匹配以下任何一项”按钮。在左侧列表中输入“X - Spam - Status”,在中间列表中选择“是”,在右侧选择“Yes”。在下方框中,点击“将邮件移动到”,选择第一步创建的文件夹。
4. 点击“确定”,规则总结将显示该规则,按下“立即运行”测试规则。
2. 定制 SpamAssassin
2.1 定制原因
SpamAssassin 默认(即安装但未定制)通常能检测出超过 80% 的垃圾邮件,添加一些定制后,检测率可超过 95%。每个人收到的垃圾邮件不同,一个用户的垃圾邮件可能对另一个用户来说是正常邮件,通用设置可能无法为每个用户有效过滤垃圾邮件。此外,SpamAssassin 的部分功能默认是禁用的,启用这些功能可提高垃圾邮件识别率。
2.2 配置选项
- 更改规则分数 :可禁用规则、降低表现不佳规则的权重、提高优质规则的权重;
- 获取和使用新规则 :有助于提高垃圾邮件检测能力;
- 添加邮件地址到白名单和黑名单 :可确保指定发件人的邮件始终被视为正常邮件或垃圾邮件;
- 启用 SpamAssassin 的贝叶斯过滤器 :可将过滤准确率从 80% 提高到 95% 以上。
2.3 规则和分数
不同类型的配置文件存储在不同目录:
| 配置类型 | 存储目录 |
| ---- | ---- |
| 标准配置设置 | /usr/share/spamassassin |
| 全站自定义设置 | /etc/mail/spamassassin/ (SpamAssassin 会检查所有匹配 *.cf 的文件) |
| 用户特定设置 | ~/.spamassassin/local.cf |
标准配置文件主要包含简单规则及其分数。规则通常是对字母、数字或其他打印字符的匹配,使用正则表达式编写。默认文件存储在 /usr/share/spamassassin ,升级 SpamAssassin 时可能会覆盖这些文件,因此不建议修改或在该目录添加新文件。全站配置文件可覆盖默认设置,用户特定设置可覆盖全站和默认设置。
SpamAssassin 按字母数字顺序读取 /usr/share/spamassassin 中的所有文件,接着读取 /etc/mail/spamassassin/ 中的 .cf 文件,最后读取 ~user/.spamassassin/user_prefs 。若一个规则或分数在两个文件中都有定义,将使用最后读取文件中的设置。
规则文件中的每行可以为空、包含注释或命令,使用 # 符号进行注释。规则一般包含规则定义、文本描述和分数或一系列分数,SpamAssassin 提供的规则分数通常集中在 /usr/share/spamassassin/50_scores.cf 文件中。
2.4 更改规则分数
更改规则分数的原因主要有两个:一是规则检测垃圾邮件能力强但分数低,导致触发该规则的邮件未被识别为垃圾邮件;二是规则对正常邮件起作用,使触发该规则的邮件被误判为垃圾邮件。
运行 SpamAssassin 时给出肯定结果的规则会列在邮件的 X - Spam - Status: 头中,例如:
X-Spam-Status: Yes, score=5.8 required=5.0 tests=BAYES_05,HTML_00_10,
HTML_MESSAGE,MPART_ALT_DIFF autolearn=no
version=3.1.0-r54722
tests= 之后列出的是应用于该邮件的规则。若某个规则在应标记为垃圾邮件但未标记的邮件中频繁出现,应提高该规则的分数;若规则在被误分类为垃圾邮件的邮件中经常触发,应降低其分数。
可使用 grep 工具在所有可能定义分数的位置查找当前分数,例如:
grep score.*RULE_NAME
$ grep score.*BAYES /usr/share/spamassassin/* /etc/mail/spamassassin/*
~/.spamassassin/local.cf
规则的原始分数可能有四个值,SpamAssassin 根据是否使用网络测试(如测试开放中继)和贝叶斯过滤器来改变使用的分数,具体情况如下表:
| 情况 | 贝叶斯过滤器未使用 | 贝叶斯过滤器使用 |
| ---- | ---- | ---- |
| 外部测试未使用 | 第 1 个分数 | 第 3 个分数 |
| 外部测试使用 | 第 2 个分数 | 第 4 个分数 |
若只给出一个分数(如在 /etc/mail/spamassassin/local_scores.cf 中覆盖的情况),则在所有情况下都使用该分数。例如,系统管理员在 /etc/mail/spamassassin/local_scores.cf 中用单个值覆盖了默认分数,若要为特定用户更改该值,可在其 ~/.spamassassin/local.cf 中写入:
score RULE_NAME 1.2
这将分数从 /etc/mail/spamassassin/local_scores.cf 中设置的 4.34 更改为 1.2。若要完全禁用规则,可将分数设为零:
score RULE_NAME 0
2.5 使用其他规则集
SpamAssassin 有大量用户,其设计便于添加新规则集(规则和默认分数的集合)。有许多不同的规则集可供选择,大多基于特定主题,如查找垃圾邮件中常出现的药品名称或电话号码。大多数自定义规则集列在 SpamAssassin 维基的 Custom Rulesets 页面 。
由于反垃圾邮件斗争激烈,规则集可能每天更新,SpamAssassin 提供了 sa - update 实用工具来实现此功能。可选择定期使用 sa - update ,或下载特定规则集并保留,也可手动更新所选规则集。为获得最佳过滤效果,建议使用 sa - update 。
若要手动安装规则集,可按以下步骤操作:
1. 在浏览器中,点击 SpamAssassin 维基页面上的链接,多数情况下链接指向一个名称匹配 *.cf 的文件,浏览器会将其作为文本文件打开;
2. 使用浏览器保存该文件(通常“文件”菜单中有“另存为”选项);
3. 将文件复制到 /etc/mail/spamassassin ,放置在此处规则将自动运行;
4. 检查文件中是否有分数,否则规则将不会被使用;
5. 监控垃圾邮件过滤效果,确保正常邮件不被误判为垃圾邮件。
添加规则集会增加 SpamAssassin 的内存使用和邮件处理时间,建议谨慎并逐步添加新规则集,以了解对机器的影响。也可手动监控规则集并按相同流程在系统上更新。
若选择使用 sa - update ,需进行规划。 sa - update 可使用多个频道(规则集的来源),默认使用 updates.spamassassin.org 频道,另一个流行的频道是 OpenProtect 频道 saupdates.openprotect.com 。
要启用 sa - update ,需定期运行(如通过 cron),在系统中添加 cron 条目调用以下命令更新基本规则集:
sa-update
若使用额外频道,命令可能如下:
sa-update –channel saupdates.openprotect.com
为防止 DNS 中毒和假冒,SpamAssassin 允许对规则集进行数字签名。若要使用签名规则集,需在 sa - update 中使用 –gpgkey 参数,该参数的正确值会在规则集的 SpamAssassin 维基页面中说明。
2.6 白名单和黑名单
SpamAssassin 检测垃圾邮件能力较强,但仍有出错风险。使用已知垃圾邮件发送者的邮件地址列表(黑名单)可过滤出持续使用相同邮件地址或域名的垃圾邮件发送者的邮件;使用合法邮件发送者的邮件地址列表(白名单)可确保重要联系人的邮件始终被视为正常邮件,避免重要邮件被误判为垃圾邮件而延迟或无法送达。
列出单个邮件地址的黑名单作用有限,因为垃圾邮件发送者通常每次发送垃圾邮件时使用不同或随机的邮件地址,但部分发送者会多次使用相同域名。SpamAssassin 允许在黑名单中使用通配符,可将整个域名列入黑名单,这对过滤垃圾邮件更有用。
手动添加白名单和黑名单需在全局配置文件 /etc/mail/spamassassin/local.cf 和/或 ~/.spamassassin/user_prefs 中添加配置指令。白名单和黑名单条目允许使用 ? 和 * 字符分别匹配单个字符或多个字符。
例如,白名单条目 *@domain.com 可匹配 joe@domain.com 和 bill@domain.com ; *@yahoo?.com 可匹配 joe@yahoo1.com 和 bill@yahoo2.com ,但不匹配 billy@yahoo22.com ; *@yahoo*.com 可匹配上述三个示例。
白名单和黑名单规则不会立即将邮件标记为垃圾邮件或正常邮件,尽管分数权重很大。 USER_IN_WHITELIST 规则的默认分数为 -100.0,理论上,一封邮件可能匹配白名单条目,但仍触发其他足够多的测试而被标记为垃圾邮件,不过实际中,除非分数已从默认值更改,否则这种情况不太可能发生。
要将邮件地址或整个域名列入黑名单,使用 blacklist_from 指令:
blacklist_from user@spammer.com
blacklist_from *@spamdomain.com
要将邮件地址或域名列入白名单,使用 whitelist_from 指令:
whitelist_from user@mycompany.com
whitelist_from *@mytradingpartner.com
2.7 贝叶斯过滤
贝叶斯过滤使用统计技术,根据之前两种类型的邮件来判断一封邮件是否为垃圾邮件。在使用前,需要用已知的垃圾邮件和正常邮件对其进行训练,正确分类邮件很重要,否则会降低过滤器的有效性。
学习过程在邮件服务器上进行,样本邮件应存储在可访问的位置。使用 sa - learn 命令用已知的正常邮件或垃圾邮件训练贝叶斯过滤器,SpamAssassin 安装程序会将 sa - learn 放置在路径中,通常在 /usr/bin/sa - learn 。
该命令在命令行使用,可传入目录、文件或一系列文件。邮件需存储在服务器上或以合适格式从客户端导出,SpamAssassin 识别 mbox 格式,许多邮件客户端使用兼容格式。使用 sa - learn 时,可传入一个或多个目录:
$ sa-learn --ham ~/.maildir/.Trash/cur/ ~/.maildir/cur
Learned from 75 message(s) (175 message(s) examined).
若使用 mbox 格式,需使用 mbox 标志,以便 SpamAssassin 在文件中搜索多封邮件:
$ sa-learn -mbox --spam ~/mbox/spam ~/mbox/bad-spam
Learned from 75 message(s) (175 message(s) examined).
若 sa - learn 已处理过某封邮件,它会检测到并避免重复处理。在上述示例中,175 封邮件中有 100 封之前已处理过,本次运行时被忽略,其余 75 封是首次处理。
若 sa - learn 处理多封邮件,可能一段时间内无反馈,使用 --showdots 标志可在处理每封邮件时以点号( . )形式提供反馈:
$ sa-learn --spam --showdots ~/.SPAM/cur ~/.SPAM/new
.........................
Learned from 20 message(s) (25 message(s) examined).
当 SpamAssassin 学习了足够多的邮件后,会自动开始使用贝叶斯过滤器,可通过自动学习功能保持其更新。
不过,自动学习功能需额外用户输入,原因有二:一是 SpamAssassin 偶尔会误判垃圾邮件,将垃圾邮件当作正常邮件学习,自动学习会使贝叶斯过滤器混乱并降低其有效性;二是邮件自动学习的分数阈值高于检测为垃圾邮件的阈值,即邮件可能被检测为垃圾邮件但未被自动学习,此时 SpamAssassin 的其他部分能较好地检测临界垃圾邮件,但贝叶斯过滤器未学习这些邮件。
要使用自动学习功能,需将 bayes_auto_learn 标志设置为 1,可在全站配置文件 /etc/mail/spamassassin/local.cf 中配置,也可在用户的 ~/.spamassassin/user_prefs 文件中覆盖。另外两个配置标志也会影响自动学习,分别是学习正常邮件和垃圾邮件的阈值,这些值与 SpamAssassin 为每封邮件分配的分数单位相同:
bayes_auto_learn 1
bayes_auto_learn_threshold_nonspam 0.1
bayes_auto_learn_threshold_spam 12.0
启用自动学习后,分数低于 bayes_auto_learn_threshold_nonspam 的邮件将被视为正常邮件学习,分数高于 bayes_auto_learn_threshold_spam 的邮件将被视为垃圾邮件学习。
建议将 bayes_auto_learn_threshold_nonspam 阈值保持较低(接近或低于零),以避免未被检测到的垃圾邮件被用作训练贝叶斯过滤器的正常邮件示例。将 bayes_auto_learn_threshold_spam 阈值设置较高在一定程度上是个人选择,但应高于过去被误判为垃圾邮件的邮件分数。默认垃圾邮件阈值为 5 时,分数可能达到 10,因此使用低于 10 的垃圾邮件自动学习阈值可能导致正常邮件被误学为垃圾邮件,若发生这种情况,贝叶斯数据库将失去有效性,未来的贝叶斯过滤结果也会受到影响。
3. 总结与最佳实践
3.1 配置总结
为了更清晰地梳理前面提到的 SpamAssassin 配置要点,以下是一个总结表格:
| 配置项 | 操作说明 | 配置文件 |
| ---- | ---- | ---- |
| 更改邮件主题头 | 在 /etc/spamassassin/local.cf 或 ~user/.spamassassin/user_prefs 中添加 rewrite_header Subject *****SPAM***** | /etc/spamassassin/local.cf 、 ~user/.spamassassin/user_prefs |
| 更改规则分数 | 使用 grep 查找当前分数,在相应配置文件中修改分数 | /usr/share/spamassassin/* 、 /etc/mail/spamassassin/* 、 ~/.spamassassin/local.cf |
| 使用新规则集 | 手动安装或使用 sa - update 更新 | /etc/mail/spamassassin |
| 添加白名单和黑名单 | 在 /etc/mail/spamassassin/local.cf 或 ~/.spamassassin/user_prefs 中添加 blacklist_from 或 whitelist_from 指令 | /etc/mail/spamassassin/local.cf 、 ~/.spamassassin/user_prefs |
| 训练贝叶斯过滤器 | 使用 sa - learn 命令传入目录或文件 | 无(依赖邮件存储位置) |
| 启用自动学习 | 设置 bayes_auto_learn 标志为 1,并设置学习阈值 | /etc/mail/spamassassin/local.cf 、 ~/.spamassassin/user_prefs |
3.2 最佳实践流程图
graph LR
A[开始配置 SpamAssassin] --> B[配置邮件客户端过滤规则]
B --> C[定制规则和分数]
C --> D[获取和使用新规则集]
D --> E[添加白名单和黑名单]
E --> F[训练贝叶斯过滤器]
F --> G[启用自动学习(谨慎使用)]
G --> H[监控和调整配置]
H --> I[持续优化过滤效果]
3.3 操作建议
- 规则分数调整 :定期检查邮件的
X - Spam - Status头,根据规则在正常邮件和垃圾邮件中的触发情况,合理调整规则分数。避免过度调整,以免影响过滤的准确性。 - 新规则集使用 :使用
sa - update时,选择可靠的规则集频道,如默认的updates.spamassassin.org或saupdates.openprotect.com。手动添加规则集时,要逐步添加并监控系统性能和过滤效果。 - 白名单和黑名单管理 :定期清理和更新白名单和黑名单,确保其有效性。使用通配符时要谨慎,避免误判正常邮件。
- 贝叶斯过滤训练 :收集足够多的正常邮件和垃圾邮件进行训练,以提高贝叶斯过滤器的准确性。使用
--showdots标志监控训练过程。 - 自动学习启用 :在使用自动学习功能时,设置合理的学习阈值,避免误学正常邮件或垃圾邮件。定期检查自动学习的效果,如有问题及时调整。
4. 常见问题及解决方法
4.1 规则分数调整后无效果
- 可能原因 :配置文件未正确加载,或者规则分数被其他配置文件覆盖。
- 解决方法 :检查 SpamAssassin 读取配置文件的顺序,确保修改的配置文件在正确的位置。使用
grep命令再次确认规则分数是否已正确修改。
4.2 新规则集添加后系统性能下降
- 可能原因 :新规则集增加了 SpamAssassin 的内存使用和邮件处理时间。
- 解决方法 :逐步添加新规则集,观察系统性能变化。如果性能下降明显,考虑删除一些不必要的规则集。
4.3 白名单和黑名单未生效
- 可能原因 :配置指令格式错误,或者通配符使用不当。
- 解决方法 :检查配置文件中的
blacklist_from和whitelist_from指令,确保格式正确。测试通配符的匹配效果,避免误判。
4.4 贝叶斯过滤器效果不佳
- 可能原因 :训练数据不足,或者训练数据分类错误。
- 解决方法 :收集更多的正常邮件和垃圾邮件进行训练,确保训练数据的分类准确。定期更新训练数据,以适应垃圾邮件的变化。
4.5 自动学习导致误判增加
- 可能原因 :学习阈值设置不合理,或者 SpamAssassin 误判邮件。
- 解决方法 :调整
bayes_auto_learn_threshold_nonspam和bayes_auto_learn_threshold_spam阈值,避免误学正常邮件或垃圾邮件。手动检查自动学习的邮件,如有误判及时纠正。
5. 总结
通过对 SpamAssassin 的配置和定制,可以显著提高垃圾邮件的过滤效果。合理调整规则分数、使用新规则集、添加白名单和黑名单、训练贝叶斯过滤器以及谨慎使用自动学习功能,都能帮助我们更好地应对垃圾邮件的挑战。同时,定期监控和调整配置,及时解决常见问题,也是保持过滤效果稳定和准确的关键。希望这些内容能帮助你有效地利用 SpamAssassin 保护你的邮件环境。
超级会员免费看
5

被折叠的 条评论
为什么被折叠?



