本文最后更新时间 2023年1月16日
我们利用vps来自建电子邮件服务器经常会需要设置很多的DNS解析记录,非专业人士总是在这块很头疼,这里Chinavps将常见的DNS设置记录(MX、spf、DKIM和DMARC)以及邮件收发服务器整理出来算是一个备忘。
Table of Contents
什么是 MX 记录,它们如何工作
图片来自于:https://workaround.org/ispmail/stretch/dns-mx-records
DNS 基础知识
MX 代表“邮件交换器”。MX 记录是 DNS 记录的一种,因此对 MX 记录的任何理解都必须从了解域名系统 (DNS) 的基础知识开始。
对于我们大多数人来说,DNS 最重要的作用是将名称转换为 IP 地址,以便进行网络通信。
例如,当您在 Web 浏览器中键入 www.chinavps.ne t时,DNS 用于查找该名称以确定要连接的服务器的 IP 地址。本例中的域名是 chinavps.net。
因此,如果这就是一个简单的网络浏览器连接的方式,那么当有人向@chinavps.net 地址发送电子邮件时呢?
DNS 再次发挥作用,但这次查找略有不同。发送邮件服务器将按照以下顺序在 DNS 中查找 MX 记录:
- 查找 chinavps.net 的DNS服务器
- 查询 chinavps.net DNS服务器以获取 MX 记录
- 在 DNS 中查找 MX 记录的名称以获取其 IP 地址
- 如果您要运行自己的手动 DNS 查找 chinavps.net 的 MX 记录,它看起来像这样:
C:\Users\admin>nslookup
默认服务器: public1.alidns.com
Address: 223.5.5.5
> set type=mx
> chinavps.net
服务器: public1.alidns.com
Address: 223.5.5.5
非权威应答:
chinavps.net MX preference = 10, mail exchanger = mail.chinavps.net
MX 偏好(MX Preference)
您可能会注意到上面输出中的“MX preference”,并想知道它指的是什么。为了更好地解释它,这里是 qq.com 域的另一个 DNS 查找。
> qq.com
服务器: public1.alidns.com
Address: 223.5.5.5
非权威应答:
qq.com MX preference = 10, mail exchanger = mx3.qq.com
qq.com MX preference = 20, mail exchanger = mx2.qq.com
qq.com MX preference = 30, mail exchanger = mx1.qq.com
请注意,有多个 MX 记录,每个记录具有不同的优先级(priority)值。MX preference
基本上是一种设置每个 MX 记录优先级的方法。最低优先级是具有最高优先级的 MX,即发送邮件服务器应首先尝试的 MX。
多个 MX 记录的目的是:
- 通过使用具有相同首选项集的多个 MX 记录来提供一些负载平衡
- 提供一个备用 MX,如果主要的 MX 不可用,可以使用该 MX
总结
当你往域@qq.com 发送一封邮件的时候,首先会查找该域名的 MX 记录(如上面),@qq.com 的邮件服务器有三个,优先级最高的那个(mx3.qq.com)
什么是 SPF、DKIM、DMARC
DKIM、DMARC 和 SPF 是维护电子邮件安全的三种主要机制。相关协议可让您防止未经授权的服务器作为您的域发送,并为收件人提供一种验证电子邮件确实来自您的方法。
在本指南中,我们将探讨每种技术的作用、为什么需要它以及您应该如何设置它。您将需要所有三个部分来最大限度地提高电子邮件服务器的可传递性和声誉。
SPF
SPF 记录通常如下所示:
v=spf1 ip4:123.123.123.123 ~all
如果此记录设置为example.com,则只有 的服务器123.123.123.123才能发送带有FROM: user@example.com标题的电子邮件。在~all不包括除列表中的所有其他IP地址。
SPF 由接收电子邮件服务器强制执行。它将检查发送服务器的 IP 地址、电子邮件FROM标题中的域以及该域的 SPF DNS 记录中允许的发件人列表。如果发送服务器的 IP 不在列表中,则传递将失败。
SPF 区分“软”和“硬”失败。~all在您的标题中写入表示遇到未经授权的发件人时软失败;-all指示接收服务器使用硬故障。
在硬故障情况下,电子邮件将被完全丢弃。软失败可能允许将电子邮件传送到收件人的垃圾文件夹。现在 DMARC 已广泛使用,我们将在下面看到,通常建议使用~all(软失败)。这避免了对合法电子邮件的误报,将更多控制权交给 DMARC,并有助于在后期验证阶段进行调试。
设置 SPF
为您的域配置 SPF 很容易。前往您域的控制面板,找到设置 DNS 记录的部分,然后添加新TXT记录。写入一个有效的 SPF 字符串作为值并保存您的记录。
SPF 记录支持多种白名单令牌
ip4:123.123.123.123 – 允许指定的 IPv4 地址。
ip6:abcd:1234:90ab:cdef:5678:90de:fabc – 允许指定的 IPv6 地址。
a:example.com– 允许 DNSA记录给出的 IP 地址example.com。
mx:example.com– 允许由 DNSMX记录之一给出的 IP 地址example.com。
include:example.com– 查询该域的 SPF 记录,除直接定义外,还使用其白名单。简化流行的第三方电子邮件服务的集成。
redirect:example.com– 忽略其他令牌并使用example.com.
您可以通过向标头添加多个令牌来组合多个来源:
v=spf1 ip4:123.123.123.123 include:example.com ~all
SPF它的作用可以用下图抽象出来。当定义了域名的SPF记录之后,邮件接收方的服务器在接收到邮件后,使用检查域名SPF记录的方式来确定发件人是否是合法的。例如检查IP地址是否被包含在域名SPF记录里面,如果在,就认为是一封合法的邮件,否则认为是一封伪造的邮件进行退回或丢弃处理。
但是这样检测垃圾邮件的方式有一定的局限性,举个栗子,域名 aaa.com 设置了SPF记录,并发送了一封邮件给 beiwo@bbb.com 用户,这个用户又想把邮件转给 yhck@ccc.com 看看,ccc.com 的邮件服务器发现这封邮件来自 aaa.com,但是SPF记录中没有发送方 bbb.com 邮服的IP地址,就会将这封邮件误认为是垃圾邮件。一些邮件服务商解决SPF记录局限性的方法是,在转发邮件时修改邮件的发件人,但这在理论上并不优雅,于是诞生了DKIM技术。
DKIM
图片来源于:emailonacid
DKIM是 DomainKeys Identified Mail 的缩写,中文译作“域名密钥识别邮件”。这是一套电子邮件认证机制,使用公开密钥加密的基础提供了数字签名与身份验证的功能,以检测寄件者、主旨、内文、附件等部分有否被伪冒或窜改。一般来说,发送方会在电子邮件的标头插入 DKIM-Signature 及电子签名信息。而接收方则通过DNS查询得到公开密钥后进行验证。
查看一个域名的DKIM记录命令:
nslookup -type=txt dkim._domainkey.example.com //windows
dig -t txt dkim._domainkey.example.com //linux
接着第二节SPF中的情景举栗子,DKIM要求域名 aaa.com 在邮件服务器中生成一个密钥对,私钥保存在 aaa.com 的邮服内,公钥通过DNS记录公开。域名 aaa.com 的服务器在向 bbb.com 发送邮件时,使用私钥对邮件内容签名,并将签名与邮件内容一起发送给 bbb.com 的服务器。bbb.com 收到 aaa.com 的邮件时,查询 aaa.com 的DNS记录,拿到公钥,再使用公钥和签名验证邮件内容,如果验证不通过,则将邮件判定为伪造的邮件。
在第二节SPF记录会产生局限性的邮件转发情形内(aaa.com->bbb.com->ccc.com),ccc.com 只需查询 aaa.com DNS记录中的DKIM公钥即可认证邮件是否为伪造邮件了,并且由于 aaa.com 使用了DKIM私钥对邮件内容签名,在转发的过程中也不会出现中间人篡改邮件内容的问题了。
但是,这种方式还是可以绕过的!!
因为SPF记录定义的发送方地址是 RFC5321.MailFrom 中规定的字段(Return-Path),DKIM则是直接在邮件头里携带了域名字段(DKIM-Signature: d=),借用在知乎看到的一个师傅的解释:邮件存在信封和信笺两个不同的概念,信封上的信息是给邮递员看的,包含了从哪里来到哪里去的寻址信息,而信笺内的信息是给收件人看的,所以信封和信笺上写的收发件人可以完全没有关系。套用在电子邮件上,电子邮件的“信封”对于普通用户通常是不可见的,只对中转过程中的各种服务器可见。Return-Path 即是信封上的发送方,信封上还标注了DKIM验证的域名字段 DKIM-Signature: d=fake.com ,只要 fake.com 域名发送邮件并使用 fake.com 的公钥进行验证即可通过SPF和DKIM检查,将该邮件发送到收件人的邮箱,而邮件服务展示给普通收件人的发件地址却为“信笺”内的 From 字段的内容,实现了伪造邮件的目的,于是诞生了DMARC技术。
Return-Path: admin@fake.com DKIM-Signature: d=fake.com, b=xxxxxxxxxxxxxx From: <admin@aaa.com> To: <beiwo@bbb.com>
DMARC
图片来自于:dmarc360
DMARC是 Domain-based Message Authentication, Reporting and Conformance 的缩写,中文译作“基于域的消息认证,报告和一致性”。
举栗子,它并没有规定具体的验证措施,而是基于SPF和DKIM(或二者之一)。它规定,SPF记录的发件人(Return-Path)或DKIM记录的发件人(DKIM-Signature: d=)二者至少需有其一与 From 头对应,即信封上的两个发件人最少要有一个与信笺中的发件人一致。当然DMARC技术在实际实现过程中还会有很多细节,这里只是抽象出了一部分易于理解的概念。
查看一个域名的DMARC记录命令:
nslookup -type=txt _dmarc.example.com //windows
dig -t txt _dmarc.example.com //linux
设置DMARC
DMARC 是“基于域的消息身份验证、报告和一致性”。它是另一种通过发送电子邮件服务器来防止未经授权使用域名的协议。
DMARC 为域所有者提供了一种方法来指定当电子邮件服务器收到未经适当身份验证的消息时会发生什么。支持三种操作:
none – 服务器可以继续传递消息。
quarantine – 将邮件发送到垃圾邮件或垃圾邮件。
reject – 拒绝并退回邮件。
DMARC 还提供报告机制。您可以指定接收邮件服务器在收到声称来自您的域的电子邮件时调用的服务器端点。这为您提供了作为您的域发送的服务器的跨 Internet 视图。
这是一个示例 DMARC DNS 记录。它应该添加为针对_dmarc.example.com主机名的 TXT 记录:
v=DMARC1; p=none; rua=mailto:user@example.com
p=none–p标签告诉邮件服务器在未经身份验证的邮件到达时要做什么。它的值必须是上面指定的操作之一。
rua=mailto...–rua标签指示服务器将报告数据发送到何处。在这种情况下,它会通过电子邮件发送给您。报告通常每天发送一次,让您可以监控未经授权的发送活动。
什么是SMTP端口号(25、587、465、2525)
SMTP或简单邮件传输协议用于在客户端,收件人和电子邮件服务器之间传输电子邮件。 SMTP服务通常通过不同的端口提供,用于网络通信和传输。 IMAP和POP3是用于电子邮件传输的其他协议,但是它们主要供电子邮件客户端使用,其中SMTP用于电子邮件服务器。 为了使用电子邮件服务发送少量或批量电子邮件,我们应正确配置电子邮件服务器的SMTP端口。
什么是SMTP(简单邮件传输协议)? (What Is SMTP(Simple Mail Transfer Protocol)?)
SMTP或Simple Mail Transfer Protocol是一种邮件传输协议,主要用于以基于简单文本的机制在服务器之间传输电子邮件。 电子邮件服务器和某些电子邮件客户端使用SMTP进行电子邮件传输和通信。
图片来自于百度百科
SMTP端口 (SMTP Ports)
SMTP作为一种古老而流行的协议,出于不同的原因和用例,提供了不同的端口号。 SMTP中有两个主要操作。
Submission是将电子邮件和数据提交到外发电子邮件服务器的行为。 电子邮件客户端连接到该传出电子邮件服务器,并提交电子邮件和数据。
Relay是从电子邮件服务器接收电子邮件消息和数据并传输到另一个电子邮件服务器的行为。 通常,最新的电子邮件服务器将是接收电子邮件服务器。
为了完成这些操作,SMTP使用了以下不同的端口。 下面我们将详细解释这些不同的端口。
25
587
465
2525
SMTP端口25 (SMTP Port 25)
端口25是SMTP的第一个正式端口。 1982年,端口25专用于SMTP。SMTP端口25使用TCP作为传输协议。 另外,端口25是SMTP最著名和最受欢迎的端口。 端口25作为一个古老,流行且知名的端口,被广泛滥用,并且某些ISP,网络和云提供程序自动或默认情况下阻止TCP 25 SMTP端口,以防止滥用和安全攻击。
SMTP端口587 (SMTP Port 587)
SMTP端口587是电子邮件提交的默认端口,并被许多各方使用。 如果您不知道远程电子邮件服务器的默认端口,则使用SMTP端口587作为开始检查提交的最佳选择。端口587作为TCP端口提供。 同样,端口597通过使用TLS加密提供了安全的电子邮件提交。
SMTP端口465 (SMTP Port 465)
SMTP端口是第一个使用SMTP over SSL方法的安全加密电子邮件提交端口。 在端口587出现一段时间后,SMTP端口465正式被弃用,并提供使用其他协议。 但是今天,许多ISP和云托管提供商都支持并提供465端口用于SMTP提交。
SMTP端口2525 (SMTP Port 2525)
SMTP端口2525是一个棘手的端口,通过键入25两次来创建,因为端口25是SMTP的第一个端口号。 未正式为SMTP使用分配端口2525,因为IETF或IANA当局无法识别该端口。 但是数字的相似性使2525端口变得流行,并且大多数ISP,云服务提供商和电子邮件服务器都支持并允许访问2525端口SMTP服务。 如果端口587被阻塞,则特别是2525端口将是一个很好的选择。
受欢迎的邮件服务提供商SMTP端口号
SMTP Provider | SMTP Server Address | SMTP Ports |
---|---|---|
Google or Gmail | smtp.gmail.com | 465, 587 |
Outlook | smtp.live.com | 587 |
Office 365 | smtp.office365.com | 587 |
Yahoo Mail | smtp.mail.yahoo.com | 465 |
Yahoo Mail Plus | plus.smtp.mail.yahoo.com | 465 |
Yahoo UK | smtp.mail.yahoo.co.uk | 465 |
Yahoo Germany/Deutschland | smtp.mail.yahoo.com | 465 |
Yahoo Austraila/New Zelland | smtp.mail.yahoo.com.au | 465 |
O2 | smtp.o2.ie | 25 |
O2 UK | smtp.o2.co.uk | 25 |
AOL.com | smtp.aol.com | 587 |
AT&T | smtp.att.yahoo.com | 465 |
Hotmail | smtp.live.com | 465 |
zoho Mail | smtp.zoho.com | 465 |
Mail.com | smtp.mail.com | 587 |
QQ.com | smtp.qq.com | 465 |
163.com(其它后缀) | smtp.163.com | 25 |