You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何缓解Postfix+Amavis+Dovecot邮件服务器中绕过过滤的合法样式垃圾邮件泛滥问题

如何缓解Postfix+Amavis+Dovecot邮件服务器中绕过过滤的合法样式垃圾邮件泛滥问题

这种情况我之前处理过好几次,确实挺棘手的——毕竟都是过了SPF/DKIM的合法源,常规的IP封锁和内容过滤基本没用。结合你用的Postfix+Amavis+Dovecot栈,给你几个实际可行的解决思路,从服务器端到收件箱端层层拦截:

  • 启用Postgrey灰名单拦截批量群发邮件
    灰名单的核心逻辑是给首次联系的发件IP设置一个5-10分钟的冷却期,正规邮件服务器会自动重试,而批量群发的垃圾邮件大多不会花时间处理延迟请求,刚好能命中你遇到的这种"被批量订阅newsletter"的场景。

    1. 先安装postgrey(不同系统命令略有差异,比如Debian/Ubuntu用apt install postgrey
    2. 编辑Postfix的main.cf配置文件,在smtpd_recipient_restrictions中添加灰名单检查规则:
      smtpd_recipient_restrictions =
          permit_mynetworks
          permit_sasl_authenticated
          ... # 保留你原有的其他规则
          check_policy_service unix:private/postgrey
      
    3. 重启相关服务生效:systemctl restart postfix postgrey
  • 用Amavis自定义特征评分标记垃圾邮件
    虽然邮件内容不同,但这类newsletter垃圾邮件几乎都带有List-UnsubscribeList-ID头部,你可以在Amavis中针对这些特征添加额外垃圾分,让它们触发拦截或标记。
    打开Amavis的用户自定义配置文件(比如/etc/amavis/conf.d/50-user),添加以下Perl规则:

    # 给带List-Unsubscribe头部的邮件加垃圾分
    $sa_local_tests{LIST_UNSUBSCRIBE} = {
        description => 'Contains List-Unsubscribe header',
        score => 3.0, # 分数可根据你现有垃圾阈值调整
        test => sub { return exists $_[0]->{'headers'}->{'list-unsubscribe'}; },
    };
    # 给带List-ID头部的邮件加垃圾分
    $sa_local_tests{LIST_ID} = {
        description => 'Contains List-ID header',
        score => 2.5,
        test => sub { return exists $_[0]->{'headers'}->{'list-id'}; },
    };
    

    保存后重启Amavis:systemctl restart amavis

  • 用Dovecot Sieve做收件箱端精准分流
    如果不想直接拦截,而是把这类邮件自动归档,Sieve脚本是非常灵活的选择。创建或编辑用户的Sieve脚本(比如~/.dovecot.sieve):

    require ["fileinto", "header", "regex"];
    
    # 把带订阅类头部的邮件自动归档到Newsletter文件夹
    if anyof(
        header :exists "List-Unsubscribe",
        header :exists "List-ID"
    ) {
        fileinto "Newsletter";
        stop;
    }
    
    # 结合Amavis的垃圾得分,直接标记为垃圾邮件
    if header :contains "X-Spam-Score" "5.0" { # 分数匹配你的Amavis垃圾阈值
        fileinto "Junk";
        stop;
    }
    

    重启Dovecot生效:systemctl restart dovecot,这样收件箱就不会被这类邮件占满,你可以定期清理归档文件夹。

  • 应急:临时限制收件频率
    如果当前轰炸情况特别紧急,可以先通过Postfix限制单收件人或单IP的邮件接收频率,快速降低垃圾邮件数量:
    main.cf中添加:

    smtpd_recipient_rate_limit = 100 # 单个收件人每小时最多接收100封邮件,按需调整
    smtpd_client_message_rate_limit = 50 # 单个IP每小时最多发送50封邮件,按需调整
    

    重启Postfix后即可生效,给你留出时间配置更精细的过滤规则。

备注:内容来源于stack exchange,提问作者Nick Wiltshire

火山引擎 最新活动