我之前配置过邮件服务器几次,我相信当时我认为答案是“是”。
但我正要配置另一台,看来我错了。假设顶级域 ( example.com
) 和(唯一的)MX 记录指向同一服务器 ( mail.example.com
)。然后我可以做:
example.com
指向服务器 IP (aa.aaa.aa.aaa
) 并将其返回 (PTR) 到example.com
- 邮件服务器 (
postfix
,exim
, ...) 响应example.com
(HELO
,MAILFROM
)
那么 SPF、DKIM 和 DMARC 记录名称为:@
、mail._domainkey
(如果选择器为mail
)和_dmarc
。或者简单地说:
@ A aa.aaa.aa.aaa
@ MX 10 mail
mail A aa.aaa.aa.aaa
aa.aaa.aa.aaa PTR @
@ TXT (SPF)
mail._domainkey TXT (DKIM)
_dmarc TXT (DMARC)
但是如果我有 2 条 MX 记录(mail1
和mail2
)怎么办?那么我就不能example.com
指向 2 个不同的 IP 并将它们指向example.com
,可以吗?但即使我可以,我也可以看到 Gmail 不gmail.com
使用HELO
, MAILFROM
。每个服务器用自己的名称响应似乎更明智,不是吗?但那又怎么样,我应该有 2 条 SPF 记录吗?毕竟:
当前版本的 SPF(称为 SPFv1 或 SPF Classic)可保护信封发件人地址
http://www.open-spf.org/Introduction/
@ A (whatever)
@ MX 10 mail1
mail1 A aa.aaa.aa.aaa
aa.aaa.aa.aaa PTR mail1
@ MX 20 mail2
mail2 A bb.bbb.bb.bbb
bb.bbb.bb.bbb PTR mail2
mail1 TXT (SPF)
mail2 TXT (SPF)
mail._domainkey TXT (DKIM)
_dmarc TXT (DMARC)
坦白说,在阅读有关配置邮件服务器的不同文章和答案后,我感到很困惑。什么是正确或更好的设置?
HELO 主机名可以与发件人不同
主机名
HELO
应该有一个匹配的A
&PTR
,但它们不必与RFC 5321MAIL FROM
和RFC 5322 发起者字段From
标头中使用的域匹配,甚至不必共享组织域。例如,
mail1.example.com
&mail2.example.com
可以为example.com
,example.net
&发送邮件example.org
。否则,每个域都需要一个自己的 IP 地址和匹配的PTR
记录。想想大型电子邮件服务提供商正在处理的域数量,他们当然为所有域使用通用的基础设施。MX 记录用于传入邮件
这些
MX
记录与发送邮件无关,而是与接收邮件有关。在你的问题范围内,它们之间没有任何关系。入站邮件可以完全由一组不同的服务器处理。例如,来自域的新闻通讯可以使用 SendGrid 或 MailChimp 发送,而传入邮件则由 M365 或 Gmail 处理。HELO/DNS 不匹配的根源
使用
HELO
//不匹配作为垃圾邮件的指示是很常见A
的PTR
,如 MXToolBox 中所述:SMTP 横幅检查:
SMTP 反向 DNS 不匹配:
这种做法可能来自对RFC 5321, 2.3.5的解释:
然而,正如4.1.4进一步定义的那样,这并不是硬性要求:
在这里,SMTP协议似乎遵循稳健性原则,即“对你所做的事情保持保守,对你从别人那里接受的事情保持自由”。
SPF
发件人策略框架(SPF) 实施必须保护
MAIL FROM
身份(RFC 7208, 2.4),并且也可以选择保护HELO
身份(RFC 7208, 2.3):由于这是独立完成的,SPF 也不要求它们匹配。
SPF 保护主机名不被未经许可用作信封发件人,并且它不会被子域继承。
A
因此,您应该使用相应的 SPF 记录来保护您拥有的每条记录TXT
,而不仅仅是用于发送电子邮件的记录。DMARC
基于域的消息身份验证、报告和一致性(DMARC) 需要RFC5322.From与RFC 7439, 3.1中定义的标识符对齐之间的匹配。这些标识符可以是 DKIM 验证(3.1.1 ) 或 SPF 验证 ( 3.1.2 ),并且根据模式,可能需要完全匹配或共享组织域( 3.2 )。与 SPF 不同,DMARC 是继承的;域顶端的 DMARC 策略
From
也可以保护所有子域免于在标头中使用。SPF对齐需要匹配
MAIL FROM
,但DKIM对齐不需要;拥有有效且授权的 DKIM 签名以及匹配的签名域标识符(SDID)(d=
字段)就足够了。最重要的是,这些都不需要匹配的HELO
/EHLO
主机名。