亲爱的有礼貌的人在这个论坛上,
我最近已经迁移到一个新的邮件服务器。 由于硬件“年龄差距”太大,同时简单地从Debian Squeeze升级到Jessie也是很困难的(也可能无法解决我的问题)。 所以我刚刚安装了一个干净的Jessie,并手动移动了用户帐号,旧电子邮件等。 至less我对内部知道的更多。
我似乎正在努力的一件事是Spamassassin操作的贝叶斯数据库 – 由amavisd-new奴役 。 (Heh已经知道什么时候我想要得到每封电子邮件中包含的垃圾邮件评分标题:$ sa_tag_level_deflt居住在amavisconfiguration文件中。)
我有
use_bayes 1 bayes_path /var/lib/spamassassin/.spamassassin/bayes
在spamassassin / local.cf中。 我觉得好奇的是,path以“bayes”结尾,但最后一个string不是实际的目录,它似乎只是_toks和_seen文件的前缀。
如果我尝试“spamassassin -D –lint 2>&1 | less”我可以看到一些赞美:
Jul 9 11:21:15.091 [5076] dbg: bayes: tie-ing to DB file R/O /var/lib/spamassassin/.spamassassin/bayes_toks Jul 9 11:21:15.091 [5076] dbg: bayes: tie-ing to DB file R/O /var/lib/spamassassin/.spamassassin/bayes_seen
可能取决于我运行它的目录,我曾在该列表中看过BAYES_20。
另外sa-learn-cyrus似乎正在更新数据库,sa-sync也不会抱怨。
实际上,我已经使用旧的服务器迁移了bayes DB文件
sa-learn --backup sa-learn --restore=...
我必须调整内存服务的一些权限… sa-learn-cyrus.conf包含它应该运行的用户和组,它应该匹配数据库的所有权。
现在好奇一点:
我看不到任何通过邮件传递的贝叶斯filter的痕迹。 Amavis确实有效,我可以在/var/log/amavis.log中看到它的行为,有时它会根据其他启发式规则捕获垃圾邮件。 但是,我还没有设法在收到的电子邮件(现在包含预期的X-Spam-Status标头)中获得BAYES分数,也没有在/ var / virusmails中隔离的高度积极分子中获得分数。
换句话说,如果我在/ var / log /和/ var / virusmails /中运行“grep -ri bayes *”,那我什么也得不到:-(
是否有可能贝叶斯filter工作,我只是不知道?
如果bayesfilter实际上不工作(在amavisd-new下的spamassassin中),还有什么地方需要寻找相关的configuration?
如果它可能工作得很好,有没有办法增加它的详细程度? 为了让分数始终打印在某个日志中,或者最好包含在X-Spam-Status头中?
另外,有没有办法让我将Bayes分数映射到Spamassassin分数增量? 我的意思是 – 看到并可能configurationAmavis或SA如何添加贝叶斯贡献…
我也想知道是否在系统中丢失了一些东西,比如没有安装的软件包。 但“智能search湾”只返回“spambayes”,这是一些基于python的项目,竞争到spamassassin的贝叶斯filter…
任何想法都欢迎:-)
坦率
好像我find了答案:在/etc/spamassassin/local.cf中,您需要:
use_bayes 1 bayes_auto_learn 1 use_bayes_rules 1
这是我的情况下失踪的第三行。
顺便说一句,在寻找问题时,我设法在Spamassassin Perl模块中插入一个“日志logging探针”,它为我打印了一个Perl调用栈回溯:
在/usr/share/perl5/Mail/SpamAssassin/BayesStore/DBM.pm:
sub tie_db_readonly { ... my $iii = 1; print dbg("Stack Trace:"); while ( (my @call_details = (caller($iii++))) ){ dbg( $call_details[1].":".$call_details[2]." in function" . \ $call_details[3] ); }
几乎逐字从Thariama的张贴在这里 。
显然我需要一些debugging切换,以显示debugging消息:
在/etc/amavis/conf.d/50-user中:
$DO_SYSLOG = 0; $LOGFILE = "/var/log/amavis.log"; $sa_tag_level_deflt = -9999; # always add spam info headers $log_level = 2; $sa_debug = 1;
实际上这只是Amavis和SpamAssassin中debugging关键的最后两行。 以上的行只是FYI。
====编辑一小时后:====
…但是,等等,还有更多,看起来这不是游戏的结束呢:-)
就在我发出前一个乐观的消息之后,我得到了一个冷水澡:BAYES的分数又一次消失了。 所以我回到了一些严重的debugging阶段,尝试删除一些与我同时在玩的auto-expiry有关的configuration,但是即使我把configuration恢复到原来的工作状态,Bayes也不见了。 同样的症状。
当我在debugging日志中悲伤地摸索时,我注意到另一个有希望的警告:
_WARN:插件:eval失败:在/usr/share/perl5/Mail/SpamAssassin/Logger.pm第241行使用-T开关运行时sprintf中的不安全依赖项。
现在到底什么是T开关…
人perl
在那里找不到它(希望我知道正确的章节)。
spamassassin源代码也没有太大的帮助。
但经过一些Googlesearch后,我缩小了查询范围,我得到了这个:
http://search.cpan.org/~bdfoy/PerlPowerTools-1.012/bin/printf
和其他几个指针
“运行setuid时eval中的不安全依赖”
一样? 大概。 -T开关用于“污点模式”。
https://perldoc.perl.org/perlsec.html#Taint-mode
而且这是一个安全措施,所以你的随便的“内部的printf evals”不容易被劫持的“代码注入”。
现在到哪儿去了 – T开关就进场了。
SpamAssassin作为Amavis的一个模块运行。
我已经知道Amavis确实是一个Perl脚本。
Perl解释器可能会使用#! 在/ usr / sbin / amavisd-new的第一行指定shell规范。
完全正确。
从那里,解决方法很简单。
但是… OOPS! 我可能不应该告诉任何人: – >
仍然…我不明白为什么突然间工作了一段时间,然后突然不再,现在不再。 隐藏状态在哪里? 每次在configuration文件中进行更改后,我都重新启动了Amavis,这意味着我每次都重新启动Perl解释器。
“这是我们到这儿来的一些怪异的东西,
(在失落的高速公路中解释亨利·罗林斯)
坦率