![Spamassassin 工作但不学习?贝叶斯过滤器准确率没有提高](https://linux22.com/image/761187/Spamassassin%20%E5%B7%A5%E4%BD%9C%E4%BD%86%E4%B8%8D%E5%AD%A6%E4%B9%A0%EF%BC%9F%E8%B4%9D%E5%8F%B6%E6%96%AF%E8%BF%87%E6%BB%A4%E5%99%A8%E5%87%86%E7%A1%AE%E7%8E%87%E6%B2%A1%E6%9C%89%E6%8F%90%E9%AB%98.png)
我有一个安装了可正常运行的 spamassassin 的邮件服务器(debian 上的 postfix、dovecot、amavis、clamav、spamassassin)。
一切运行良好。Spamassassin 正在过滤垃圾邮件,我收到了以下标头:
X-Virus-Scanned: Debian amavisd-new at xxx.yyy.de
X-Spam-Flag: YES
X-Spam-Score: 8.025
X-Spam-Level: ********
X-Spam-Status: Yes, score=8.025 tagged_above=-9999 required=3
tests=[BAYES_50=0.8, DKIM_INVALID=0.1, DKIM_SIGNED=0.1,
HTML_IMAGE_ONLY_24=1.618, HTML_MESSAGE=0.001,
RAZOR2_CF_RANGE_51_100=1.886, RAZOR2_CHECK=0.922,
RCVD_IN_BL_SPAMCOP_NET=1.347, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
URIBL_ABUSE_SURBL=1.25, URIBL_BLOCKED=0.001]
autolearn=no autolearn_force=no
我正在用新的垃圾邮件和普通邮件训练 Spamassassin(目前是手动的),当它们进来时:
Tue Dec 15 22:22:14 2020
Spam training for [email protected]
Learned tokens from 12 message(s) (159 message(s) examined)
Ham training for [email protected]
Learned tokens from 4 message(s) (49 message(s) examined)
Deleting spam for [email protected] older than 30 days
Syncing the SpamAssassin journal
bayes: synced databases from journal in 0 seconds: 2711 unique entries (2711 total entries)
Statistics for this run:
0.000 0 3 0 non-token data: bayes db version
0.000 0 5288 0 non-token data: nspam
0.000 0 855 0 non-token data: nham
0.000 0 124148 0 non-token data: ntokens
0.000 0 1602145027 0 non-token data: oldest atime
0.000 0 1608066788 0 non-token data: newest atime
0.000 0 1608067345 0 non-token data: last journal sync atime
0.000 0 1607672985 0 non-token data: last expiry atime
0.000 0 5529600 0 non-token data: last expire atime delta
0.000 0 50552 0 non-token data: last expire reduction count
Run finished Tue Dec 15 22:22:27 2020
一切似乎都正常。但是,我最近发现,一些看起来总是相同的垃圾邮件仍然会进入收件箱。它们是同一类型的垃圾邮件,经过几周的训练后,它们仍然会进入。贝叶斯分数没有变化。
X-Virus-Scanned: Debian amavisd-new at xxx.yyy.de
X-Spam-Flag: NO
X-Spam-Score: 1.852
X-Spam-Level: *
X-Spam-Status: No, score=1.852 tagged_above=-9999 required=3
tests=[BAYES_00=-1.9, DIGEST_MULTIPLE=0.293, DKIMWL_WL_MED=-0.001,
DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249,
HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, PYZOR_CHECK=1.392,
RAZOR2_CF_RANGE_51_100=1.886, RAZOR2_CHECK=0.922, SPF_HELO_NONE=0.001,
SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01]
autolearn=no autolearn_force=no
我似乎找不到任何问题,到目前为止我检查过的所有东西似乎都正常工作。显然已经通过了 200 个垃圾邮件/非垃圾邮件的最低默认值。所以这应该不是问题。我正在使用以下命令训练 Spamassassin:
/usr/bin/sa-learn --no-sync --spam /var/vmail/$domain/$user/Maildir/.Junk/{cur,new} >> /var/log/sa-learn.log 2>&1
/usr/bin/sa-learn --no-sync --ham /var/vmail/$domain/$user/Maildir/{cur} >> /var/log/sa-learn.log 2>&1
/usr/bin/sa-learn --sync >> /var/log/sa-learn.log 2>&1
问题可能出在哪里?我不知道该去哪里查找。
如有任何帮助我将不胜感激。
答案1
结果垃圾邮件刺客贝叶斯训练存储在由一些文件组成的数据库中,通常存储在运行它的用户的主目录中。如果您与其他用户通话,则您将无法访问/更新相同的数据集。
(先前评论的扩展版本)
为了实现特权分离,垃圾邮件刺客通常在单独的用户下运行,例如debian-spamd
或amavis
,因此在自动学习期间,该用户的数据库将被更新。如果您希望手动更新数据库,则可能需要指定正确的用户,否则您只会将训练数据保存到另一个不相关的数据库中。
怎么分辨?如果你有两个训练数据文件实例(备份除外),你一直在调用垃圾邮件刺客在两个不同的用户下(可能一个来自您的邮件服务器,一个来自您的shell):
# find / -name bayes_toks
/var/lib/amavis/.spamassassin/bayes_toks
/root/.spamassassin/bayes_toks
这两个文件可能都有最近的修改时间戳,因为一旦数据库有足够的种子,spamassassin 可能选择足够明确标识的邮件自动列车即无需手动操作即可从收到的邮件中学习令牌(此行为可以配置,并且通常您希望启用它)。
怎么修?将相同的邮件提供给正确的数据库 - 通过sa-learn
从邮件服务器调用时使用的用户/homedir 进行调用(核实这样,文件夹名称可能与用户名不匹配!):
sudo -H -u amavis sa-learn --no-sync --spam /var/vmail/$domain/$user/Maildir/.Junk/{cur,new} >> /var/log/sa-learn.log 2>&1
sudo -H -u amavis sa-learn --no-sync --ham /var/vmail/$domain/$user/Maildir/{cur} >> /var/log/sa-learn.log 2>&1
sudo -H -u amavis sa-learn --sync >> /var/log/sa-learn.log 2>&1
我不建议合并无意中拆分的数据集,因为内部文件格式可能有点混乱(尽管它能--backup
使用和倾倒破坏性地使用 覆盖--restore
),而对相同的垃圾邮件数据进行重新训练则要简单得多,并且sa-learn
旨在处理一遍又一遍地发送相同的邮件而不会产生不利影响。