我正在转发来自我的域的邮件[电子邮件保护]到[电子邮件保护]。
我已遵循此:为什么 Google 拒绝从我的 Postfix 服务器转发的邮件?
安装 pfix-srs。
为我的邮件服务器域创建一个 spf 记录,允许我的 ip4 和 ip6 发送。
(例如 v=spf1 ip4:1.1.1.1 ip6:abcd:abc:123:4567::8 ~all)
为我的邮件服务器域创建一个 rdns 条目,指向其 IP。
我的不同之处在于我使用的是postsrsd
而不是pfix-srs
,并且我使用的是我的服务器的域名,而不是列出 ipv4 和 ipv6 地址。我有 ipv4 和 ipv6 的 rdns。
Gmail 拒绝该邮件
550-5.7.1 Unauthenticated email from netflix.com is not accepted due to domain's 550-5.7.1 DMARC policy.
好像 gmail 没有查看 SRS 重写的地址,根据日志,地址确实被重写了。我遗漏了什么?
我正在使用 MailScanner,因此日志中的消息 ID 从接收到发送的方式发生了变化。
Jan 17 22:09:10 mail postfix/smtpd[9438]: connect from a41-48.smtp-out.amazonses.com[54.240.41.48]
Jan 17 22:09:11 mail postfix/smtpd[9438]: 3396B328CF: client=a41-48.smtp-out.amazonses.com[54.240.41.48]
Jan 17 22:09:11 mail postsrsd[9443]: srs_forward: <010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@mailer.netflix.com> rewritten as
<SRS0=YrTC=PZ=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>
Jan 17 22:09:11 mail postfix/cleanup[9442]: 3396B328CF: hold: header
Received: from a41-48.smtp-out.amazonses.com (a41-48.smtp-out.amazonses.com [54.240.41.48])??
by mail.example.org (Postfix) with ESMTPS id 3396B328CF??for <[email protected]>; Thu, 17 Jan 2019 22:09:11 +0100
from a41-48.smtp-out.amazonses.com[54.240.41.48];
from=<srs0=yrtc=pz=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>
to=<[email protected]> proto=ESMTP helo=<a41-48.smtp-out.amazonses.com>
Jan 17 22:09:11 mail postfix/cleanup[9442]: 3396B328CF: message-id=<010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@email.amazonses.com>
Jan 17 22:09:11 mail opendkim[812]: 3396B328CF: a41-48.smtp-out.amazonses.com [54.240.41.48] not internal
Jan 17 22:09:11 mail opendkim[812]: 3396B328CF: not authenticated
Jan 17 22:09:12 mail opendkim[812]: 3396B328CF: message has signatures from netflix.com, amazonses.com
Jan 17 22:09:12 mail opendkim[812]: 3396B328CF: signature=c9tTKm4w domain=netflix.com selector=emotixlbezkp6gpvmko5lunmgwd5syff result="no signature error";
signature=VmSNlFSx domain=amazonses.com selector=ug7nbtf4gccmlpwj322ax3p6ow6yfsug result="no signature error"
Jan 17 22:09:12 mail opendkim[812]: 3396B328CF: DKIM verification successful
Jan 17 22:09:12 mail opendkim[812]: 3396B328CF: s=emotixlbezkp6gpvmko5lunmgwd5syff d=netflix.com SSL
Jan 17 22:09:13 mail MailScanner[31292]: Requeue: 3396B328CF.A0D92 to C662E32963
Jan 17 22:09:13 mail postfix/qmgr[9218]: C662E32963: from=<srs0=yrtc=pz=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>,
size=89685, nrcpt=1 (queue active)
Jan 17 22:09:13 mail MailScanner[31292]: Uninfected: Delivered 1 messages
Jan 17 22:09:13 mail MailScanner[31292]: Deleted 1 messages from processing-database
Jan 17 22:09:13 mail postfix/qmgr[9218]: 97B26328CF: from=<srs0=yrtc=pz=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>,
size=90760, nrcpt=1 (queue active)
Jan 17 22:09:13 mail postfix/smtp[9497]: Trusted TLS connection established to gmail-smtp-in.l.google.com[2a00:1450:400c:c02::1b]:25:
TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)
Jan 17 22:09:14 mail postfix/smtp[9497]: 97B26328CF: to=<[email protected]>, orig_to=<[email protected]>, relay=gmail-smtp-in.l.google.com[2a00:1450:400c:c02::1b]:25,
delay=0.5, delays=0.01/0/0.26/0.23, dsn=5.7.1, status=bounced
(host gmail-smtp-in.l.google.com[2a00:1450:400c:c02::1b] said:
550-5.7.1 Unauthenticated email from netflix.com is not accepted due to domain's
550-5.7.1 DMARC policy. Please contact the administrator of netflix.com domain
550-5.7.1 if this was a legitimate mail. Please visit
550-5.7.1 https://support.google.com/mail/answer/2451690 to learn about the
550 5.7.1 DMARC initiative. j17si56462544wri.283 - gsmtp (in reply to end of DATA command))
Jan 17 22:09:14 mail postsrsd[9443]: srs_forward: <""> not rewritten: No at sign in sender address
Jan 17 22:09:14 mail postsrsd[9444]:
srs_reverse: <srs0=yrtc=pz=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>
rewritten as <010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@mailer.netflix.com>
Jan 17 22:09:14 mail postsrsd[9444]: srs_reverse:
<srs0=yrtc=pz=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>
rewritten as <010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@mailer.netflix.com>
Jan 17 22:09:14 mail postfix/cleanup[9442]: 20BA932965: message-id=<[email protected]>
Jan 17 22:09:14 mail postfix/bounce[9596]: 97B26328CF: sender non-delivery notification: 20BA932965
Jan 17 22:09:14 mail postfix/qmgr[9218]: 20BA932965: from=<>, size=6444, nrcpt=1 (queue active)
Jan 17 22:09:14 mail postfix/qmgr[9218]: 97B26328CF: removed
Jan 17 22:09:14 mail postfix/smtp[9497]: Trusted TLS connection established to feedback-smtp.us-east-1.amazonses.com[72.21.206.91]:25:
TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Jan 17 22:09:15 mail postfix/smtp[9497]: 20BA932965: to=<010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@mailer.netflix.com>,
orig_to=<srs0=yrtc=pz=mailer.netflix.com=010001685da56f5d-8bfccbd3-896e-4700-b9a0-66e94467cab3-000000@example.org>,
relay=feedback-smtp.us-east-1.amazonses.com[72.21.206.91]:25, delay=1.4, delays=0.01/0/0.93/0.5, dsn=2.0.0, status=sent (250 Ok XCS73MIlZ28B7iH7tzWF-1)
Jan 17 22:09:15 mail postfix/qmgr[9218]: 20BA932965: removed
Jan 17 22:09:34 mail postfix/smtpd[9438]: disconnect from a41-48.smtp-out.amazonses.com[54.240.41.48] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
答案1
我也将自己域名的电子邮件转发到 Gmail 帐户,仅 OpenDKIM + OpenARC 不足以完成此设置。您需要 DKIM + ARC + SRS(“发件人重写方案”)才能完成此设置。这里对此进行了很好的解释:https://forum.howtoforge.com/threads/postfix-rspamd-do-not-dkim-sign-forwarded-messages-solved.87742/
此外,OpenARC 没有得到维护,因此我选择了 Rspamd(处理 DKIM 和 ARC)+ postsrsd(用于 SRS)的组合,它们很容易部署在我的 Ubuntu 18.04(bionic)盒子上。
Rspamd 安装:
wget -O- https://rspamd.com/apt-stable/gpg.key | sudo apt-key add -
echo "deb http://rspamd.com/apt-stable/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/rspamd.list
sudo apt update
sudo apt install rspamd
Rspamd 配置:
sudo -u _rspamd rspamadm configwizard
然后只需回答“配置 Rspamd”部分中的问题即可https://pieterhollander.nl/post/mailserver/。这将正确配置 DKIM 签名。记下您必须作为 DNS 记录发布的公钥(每个域一个),然后相应地更新您的 DNS。
至于 ARC,只需将domain {..}
部分复制/etc/rspamd/local.d/dkim_signing.conf
到 中即可/etc/rspamd/local.d/arc.conf
。
让 postfix 使用 Rspamd:
将这些添加到您的/etc/postfix/main.cf
文件中(如“配置 Postfix”部分中所述https://linuxize.com/post/install-and-integrate-rspamd/):
milter_protocol = 6
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}
milter_default_action = accept
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
接下来,只需重新启动 rspamd 和 postfix 守护进程。
postsrsd 安装:
sudo apt install postsrsd
postsrsd 配置:
通常默认配置就可以了。只需确保它SRS_DOMAIN
是/etc/default/postsrsd
您的一个域(即使您管理多个域的电子邮件,也可以使用其中一个域进行 SRS,如上所述这里)。
让 postfix 使用 postsrsd:
将这些添加到您的/etc/postfix/main.cf
文件中(例如https://github.com/roehling/postsrsd):
sender_canonical_maps = tcp:localhost:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:localhost:10002
recipient_canonical_classes= envelope_recipient,header_recipient
重新启动 postfix(如果需要,还重新启动 postsrsd),现在一切都应该正常工作。
通过从 Gmail 帐户向您的某个域帐户发送电子邮件来测试设置。这封邮件应转发(SRS 和 ARC 签名)到相应的 Gmail 帐户。收到邮件后,在 Gmail 中打开它并选择“显示原始邮件”。如果您的设置正确,并且您的 SPF、DKIM 和 DMARC DNS 记录设置正确,您应该会看到 SPF、DKIM 和 DMARC 全部显示为“PASS”。否则,将出现 FAIL 或 SOFTFAIL。
如果你需要调试 Rspamd,您可以创建一个/etc/rspamd/override.d/logging.inc
包含以下内容的文件:
debug_modules = ["dkim_signing","arc"];
重新启动 rspamd 并监控以下日志:/var/log/rspamd/rspamd.log
答案2
SRS 可帮助您重写To:
地址并附加Mail From:
标题,但不会更改原始地址From:
在上述示例中,当邮件到达 Google 的服务器时,他们会From:
在邮件中看到原始邮件,并根据发件人地址中使用的域名的政策处理 DMARC、SPF 和 DKIM。这很可能违反原始域名的 SPF 和/或 DMARC 政策,因此导致 Google 的 Gmail 拒绝该邮件。
解决方案是实施经过身份验证的接收链 (ARC),RFC 8617。
ARC 可帮助解决此问题,因为它为中间服务器提供了一种签署原始邮件验证结果的方法。即使 SPF 和 DKIM 验证失败,接收服务也可以选择验证 ARC。如果 ARC 表明原始邮件通过了 SPF 和 DKIM 检查,并且唯一的修改是由接收服务信任的中间人进行的,则接收服务可以选择接受该电子邮件。
您可以使用 milter开放的ARC允许 sendmail 和 postfix MTA 在转发邮件之前使用 ARC 对其进行签名。这为接收邮件服务器提供了一种方法来验证您的中继服务器在转发邮件之前是否确认了 SPF 和 DKIM 的结果。现在,接收邮件服务器可以验证您的中继服务器添加的 ARC 签名,然后根据其配置采取任何操作。
归根结底,我们无法控制第三方接收邮件服务器。我们所能做的就是尝试让我们的电子邮件尽可能值得信赖。通过添加有效的 ARC 标头,我们至少可以为接收邮件服务器提供另一个数据点来证明邮件的合法性,但这仍然不能绝对保证邮件会被接受、传递并且不会被标记为垃圾邮件。