sasl-auth 客户端的垃圾邮件过滤方法不同吗?

sasl-auth 客户端的垃圾邮件过滤方法不同吗?

使用标准 Ubuntu postfix 设置(Ubuntu 22.04),我想按如下方式过滤邮件:

  1. 传入提交和 smtps(绝大多数邮件):SPF 和 RBL 检查(我正在使用policyd.pl),然后使用 Amavis 来检查 spamassassin 和 clamav。
  2. 来自外部网络客户端的经过 Sasl 验证的邮件:速率限制/检查(我正在使用postfwd这个),然后 Amavis 检查,但是不是SPF 和 RBL(因为我们不想根据客户端的发送网络而拒绝)。

我这样想对吗?如果我让 Amavis 检查链中的最后一个检查,并且在 master.cf“重新进入”侦听器中只允许使用允许的选项,我就能确保来自经过 sasl 身份验证的用户的邮件不会与其他邮件受到相同的检查?例如:

smtpd_client_restrictions =
    permit_mynetworks,
    # Rate limiting with postfwd: 
    check_policy_service inet:127.0.0.1:10040,
    permit_sasl_authenticated,
    # RBLs, SPF with policyd.pl:
    check_policy_service unix:private/senderCheck

smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    ...,
    [various reject_* lines here],
    ...,
    # Amavis checks last:
    content_filter = smtp-amavis:[127.0.0.1]:10024,
    permit

然后在 master.cf 中将 Amavis “重新进入” 配置为:

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
        -o syslog_name=amavis-reentry
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_data_restrictions=
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

编辑:作为参考,这是我目前在 master.cf 中的 smtpd 配置:

smtp      inet  n       -       n       -       -       smtpd
  -o smtpd_sasl_auth_enable=no
  -o smtpd_discard_ehlo_keywords=silent-discard,dsn

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_key_file=/etc/letsencrypt/live/smtp.xxx/privkey.pem
  -o smtpd_tls_cert_file=/etc/letsencrypt/live/smtp.xxx/fullchain.pem
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_security_level=may
  -o smtpd_tls_key_file=/etc/letsencrypt/live/smtp.xxx/privkey.pem
  -o smtpd_tls_cert_file=/etc/letsencrypt/live/smtp.xxx/fullchain.pem
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

答案1

通常,守护进程会为不同目的设置多个实例,就像您为 Amavis 配置smptd的实例一样。可以覆盖所述实例的设置。127.0.0.1:10025master.cfmain.cf

content_filter不是一个smtpd_recipient_restrictions限制,而是一个单独的配置参数。

tcp/465以下是使用smtps() 实例的示例多夫科特为了Postfix SASL验证:

smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o { smtpd_client_restrictions = 
         check_policy_service inet:127.0.0.1:10040,
         permit_sasl_authenticated,
         reject
     }
  -o { smtpd_recipient_restrictions = 
         reject_non_fqdn_recipient, 
         reject_unknown_recipient_domain, 
         permit_sasl_authenticated,
         reject
     }
  -o content_filter=smtp-amavis:[127.0.0.1]:10024

这里的限制将覆盖以下限制main.cf

  • 删除smtpd_client_restrictionspolicyd.pl基于的策略但保留了postfwd速率限制。
  • 仅有smtpd_recipient_restrictions一小部分reject_与出站邮件相关的限制。
  • permit_mynetworks由于这明确针对经过身份验证的用户,因此将其从两者中删除。

我将添加类似的内容来防止用户使用彼此的地址:

  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch

Postfix 和 Dovecot SASL文档中有一个例子提交协议,但是RFC 8314已经过时了,并且隐式 TLS3.3) IE提交465应该使用端口。

相关内容