自建電子郵件伺服器

DNS解析記錄基礎知識

自建電子郵件伺服器(Email Server)DNS解析記錄基礎知識

我們利用vps來自建電子郵件伺服器經常會需要設定很多的DNS解析記錄,非專業人士總是在這塊很頭疼,這裡Chinavps將常見的DNS設定記錄(MX、spf、DKIM和DMARC)以及郵件收發伺服器整理出來算是一個備忘。

什麼是 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埠號