转发时启用SRS才能启用DMARC

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

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

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

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

  • 后缀2.9.6
  • OpenDKIM 2.6.8
  • OpenDMARC 1.3.1
  • PostSRSD(最新的GitHub高手)

据我所知,有邮件客户端需要PTR,MX,EHLO和邮件横幅引用相同的域 。 而且因为我使用我的VPS不仅仅是一个邮件服务器,我select将它们设置为我的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,不仅在转发时。 看来,这是一个邮件服务器的常见用例,所以我希望有一个解决scheme。

编辑:

这是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 

解决我的问题是让SRS_EXCLUDE_DOMAINS设置包含我发送邮件的所有域。 我之前已经试过这个,甚至在发布这个问题之前,但是在定义了这个设置后,PostSRSD不会再启动了,所以我希望有一个不同的解决scheme。 显然PostSRSD有一个关于这个设置的bug,因为上面的注释清楚地表明域可以用空格分隔:用空格或逗号分隔多个域。 但是这样做会使它无法启动。 用逗号replace空格修复了这个问题。

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

如果按照这种方式,可以dynamic地排除域,而不是(或者除了) 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