转发时只启用 SRS 以启用 DMARC

Mat*_*een 3 postfix spf dkim dmarc

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

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

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

这里有更多的上下文。邮件服务器运行 Ubuntu 12.04 LTS 并使用以下软件:

  • 后缀 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
Run Code Online (Sandbox Code Playgroud)

但这将在一般情况下启用 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
Run Code Online (Sandbox Code Playgroud)

Mat*_*een 5

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

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