主题: 反垃圾邮件阈值问题

反垃圾邮件阈值问题

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.0
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):MySQL
- 使用的 Linux/BSD 发行版名称及版本号:centos6.5
- 与您的问题相关的日志信息:
====

张工,请教下几个关于垃圾邮件阈值设置的问题

下面是 amavisd.conf配置文件中目前的几个阈值设置
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 4.2;  # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.9;  # triggers spam evasive actions (e.g. blocks mail)
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent
$sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From

1.amavisd中有上面4个阈值,其中sa_kill_level_deflt和sa_dsn_cutoff_level的阈值认为没有生效,我理解分数大于6.9时邮件应该被阻塞,大于10时邮件发送失败,但是用户仍然能收到分数大于6.9以上的垃圾邮件(用户能收到的其中一个原因是我注释了sieve_before = /var/vmail/sieve/dovecot.sieve),不知道是不是这两个阈值没有生效?

2.我现在想实现5以上的分数,打上[SPAM]标记,10以上邮件直接投递到服务器junk邮箱,初步设想是下面这么配置:
$sa_tag_level_deflt  = 5.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 10;  # add 'spam detected' headers at that level
然后启用sieve_before的投递规则
但是对于$sa_kill_level_deflt和$sa_dsn_cutoff_level这些参数该怎么配置,会有什么影响吗?

3.如果我想新增一个阈值,比如说7.5-10的分数投递到一个邮箱中该如何配置?是dovecot匹配规则中就能实现分数范围判断后投递还是说需要在amavisd配置7.5-10分数区间内新增另外一个标签,再由dovecot去判断这个标签来分类?

请张工依次帮我解答这三个问题,谢谢!

回复: 反垃圾邮件阈值问题

张工,我想通过配置全局参数将X-Spam-Score分数大于10的邮件投递到垃圾邮箱,在/var/vmail/sieve/dovecot.sieve配置以下脚本,但是没有效果,不知道是不是我的代码写的有问题,该如何定位。
dovecot.conf中sieve_before = /var/vmail/sieve/dovecot.sieve参数已启用
下面是我做了个分数小于0的测试,但是不成功。
require "fileinto";
require "comparator-i;ascii-numeric";
if header :value "lt" :comparator "i;ascii-numeric" "X-Spam-Score" "0"
{
    fileinto "Junk";
    stop;
}
或者
require "fileinto";
if header :value "lt" "X-Spam-Score" "0"
{
    fileinto "Junk";
    stop;
}

回复: 反垃圾邮件阈值问题

叶嘉文 写道:

$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 4.2;  # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.9;  # triggers spam evasive actions (e.g. blocks mail)

Amavisd 里用到这三个就够了。
第一个分值判定为可疑 spam,会加邮件头,但还不是 spam。第二个判定为 spam,第三个触发其它操作(没有用到过)。

在你的需求列表,需要先理清的是:amavisd + spamassassin 只打分和加邮件头,而投递到 Junk 邮箱是 sieve 干的事。至于你的 sieve 规则怎么来使用邮件头里的信息,就看你自己组合了。

回复: 反垃圾邮件阈值问题

sieve 规则支持提取数据后保存为一个变量,在后续的 sieve 规则里调用。参考一个脚本:

require ["reject","variables","date","fileinto","mailbox","envelope","subaddress","regex","copy","include"];

# Extract date info
if currentdate :matches "year" "*" { set "year" "${1}"; }
if currentdate :matches "month" "*" { set "month" "${1}"; }
if currentdate :matches "day" "*" { set "day" "${1}"; }
if envelope :detail :matches "to" "*" { set :lower "to" "${1}"; }

if true {
    if header :contains "Return-Path" "${to}@domain.de" {
        fileinto :create "user-backup/${year}/${month}/${day}/${to}/out";
    } else {
        fileinto :create "user-backup/${year}/${month}/${day}/${to}/in";
    }
    stop;
}

回复: 反垃圾邮件阈值问题

这是我参考了http://wiki2.dovecot.org/Pigeonhole/Sieve/Examples写的脚本
require ["fileinto","comparator-i;ascii-numeric","variables","relational"];

if allof (
    not header :matches "X-Spam-Score" "-*",
    header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "1")
{
    fileinto "Junk";
    stop;
}
前面我调成了分数小于0时进入junk邮箱不生效,不确定是不是因为sieve不支持负数的比较,我现在想调成大于1的比较,但是不知道该如何设置spamassasin才能将打分提高。

回复: 反垃圾邮件阈值问题

普通发邮件时的打分项只有下面这些
X-Spam-Status: No, score=-2.9 tagged_above=-999 required=6.2
    tests=[ALL_TRUSTED=-1, BAYES_00=-1.9] autolearn=ham

我在local.cf中增加了这样一条配置
score ALL_TRUSTED 6.0000
但是发邮件时分值仍然没有提高

回复: 反垃圾邮件阈值问题

已经找到分数无法提高的原因,是由于amavisd配置中设置成了不检查自己的域名。
但是测试后还是发现下面的脚本有问题,header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "1"这个条件仍然不正确,还是不太明白如何写判断条件判断分数
if allof (
    not header :matches "X-Spam-Score" "-*",
    header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "1")
{
    fileinto "Junk";
    stop;
}

回复: 反垃圾邮件阈值问题

问题已解决,谢谢!