仅在转发时启用 SRS 以启用 DMARC

仅在转发时启用 SRS 以启用 DMARC

我正在我的 VPS 上设置邮件服务器,为了防止垃圾邮件和被标记为垃圾邮件,我启用了 SPF、DKIM 和 DMARC。但是,我不想托管自己的邮箱,所以我将收到的邮件转发到外部邮件帐户,例如 Gmail。转发的问题是它会破坏 SPF 检查。可以使用 SRS 修复此问题,它会重写发件人的地址以匹配邮件服务器的地址。

发送邮件时,我已将 Gmail 配置为通过我的邮件服务器发送邮件。在这种情况下,SPF、DKIM 和 DMARC 将通过,但前提是禁用 SRS,否则 SRS 将导致发送地址域不再与 FROM 标头域匹配,这是 DMARC 通过的必要条件。

我的问题是,如何在转发时启用 SRS,但阻止在发送时启用它?

以下是更多背景信息。邮件服务器运行的是 Ubuntu 12.04 LTS,并使用以下软件:

  • Postfix 2.9.6
  • OpenDKIM 2.6.8
  • OpenDMARC 1.3.1
  • PostSRSD(来自 GitHub 的最新主版本)

据我了解,有些邮件客户端需要 PTR、MX、EHLO 和邮件横幅引用同一个域。由于我不仅仅将 VPS 用作邮件服务器,所以我选择将这些设置为我的 VPS 的主机名,比如说 vps.tld。

要启用 PostSRSD,您必须添加以下几行/etc/postfix/main.cf

sender_canonical_maps = tcp:127.0.0.1:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:127.0.0.1:10002
recipient_canonical_classes = envelope_recipient, header_recipient

但这会在一般情况下启用 SRS,而不仅仅是在转发时启用。这似乎是邮件服务器的常见用例,所以我希望有一个解决方案。

编辑:

postconf -n以下是所要求的输出:

alias_maps = hash:/etc/postfix/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
milter_default_action = accept
mydestination = vps.tld, localhost
mydomain = vps.tld
myhostname = vps.tld
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
non_smtpd_milters = $smtpd_milters
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = tcp:127.0.0.1:10002
recipient_delimiter = +
sender_canonical_classes = envelope_sender
sender_canonical_maps = tcp:127.0.0.1:10001
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893
virtual_alias_domains = domain1.tld domain2.tld domain3.tld
virtual_alias_maps = hash:/etc/postfix/virtual

答案1

解决我的问题的一个方法是让SRS_EXCLUDE_DOMAINSPostSRSD 的设置包含我发送邮件的所有域。我之前已经尝试过这个,甚至在发布这个问题之前,但在定义这个设置后,PostSRSD 将不再启动,所以我希望有一个不同的解决方案。显然 PostSRSD 有一个关于这个设置的错误,因为上面的评论清楚地表明可以使用空格分隔域:用空格或逗号分隔多个域。但这样做会导致它无法启动。用逗号替换空格可以解决这个问题。

我没有解决这个问题,因为我对其他解决方案非常感兴趣。

答案2

除了(或除了)SRS_EXCLUDE_DOMAINS您可以按照以下方式动态排除域:

sender_canonical_maps = mysql:/etc/postfix/no-srs.cf,tcp:127.0.0.1:10001
recipient_canonical_maps = mysql:/etc/postfix/no-srs.cf, tcp:127.0.0.1:10002

我发现这些信息非常有用,这里有更多详细信息和示例:https://github.com/roehling/postsrsd/issues/42#issuecomment-149690471

相关内容