為郵件系統安全把關,新增 SPF, DKIM 和 DMARC 設定以避免有心人士的釣魚攻擊

透過以下這張圖片,來解說 SPF/DKIM/DMARC,如何在一封郵件發信與收信中發生作用
寄信人寫完電子郵件按下發送後,這封郵件在發信服務器端進行 DKIM 加簽(加入私鑰),確保過程不會遭到竄改。接下來傳送到收信端服務器,此時會先檢查發信機的 IP 是否可靠,有沒有在濫發郵件黑名單,在國際間有專門組織發佈濫發黑名單 IP 地址。通過之後收信服務器接著檢查 DKIM (公鑰),看是否跟原本加簽的私鑰相符。之後驗證 SPF,這是檢查寄信者的網域,是否有同意這個發信 IP 去發信。

接著進行 DMARC,也就是說前面的 SPF/DKIM 檢查若有錯誤,這封郵件可以依舊發送、隔離(通常就是標注為垃圾郵件),或是拒收。然後郵件才傳給收信程式

原圖來自 DMARC 官網 https://dmarc.org/,此為中譯方便理解

SPF (Sender Policy Framework) 寄件者政策框架

SPF 用來規範在選定的郵件發送服務器位址,可以用來發送寄件人的網域郵件。這樣機制可以避免垃圾信濫發業者,偽裝網域發送假冒郵件。SPF 的設定裡面,列出明確許可的郵件發信機網域名稱,郵件收信服務器透過檢查發信人網域的 SPF,就知道這封電子郵件是否來自被允許的發信機位址。

DKIM (DomainKeys Identified Mail),網域驗證郵件,用來防止郵件內容遭到竄改

DKIM 是一種電腦數位簽章,採用公鑰與私鑰這種加密驗證法進行。在發送郵件時由發信服務器對郵件以私鑰進行簽章,而在郵件接收服務器上,會透過 DNS 到發信者的網域查詢 DKIM 紀錄,擷取上面記載的公鑰資料,然後對這封郵件做簽章解碼,如果公鑰與私鑰能配對成功,代表郵件確實為原始發信機所發出。

DMARC 是用來輔助 SPF 與 DKIM 的不足

用來讓發信端網域通知收件端郵件服務器,當遇到 SPF 與 DKIM 的設定檢查不過時,進行的處理方式。最知名的案例就是 Yahoo 在2014年,宣布 DMARC 設為「拒絕」,也就是說所有不是從 Yahoo 郵件服務器發出的郵件,寄信人都不能用 Yahoo 郵件地址。

SPF (Sender Policy Framework) 的作用、語法和設定方式。 簡單來說就是讓人家知道收到你的網域的電子郵件時, 只有其 IP 來自於 SPF 中有寫到的 IP 才是認可的來源這樣。 其實就是一筆特殊格式的 DNS TXT 紀錄

SPF 是一個防止網域冒名發信的機制,透過設定自己網域的 TXT 紀錄來指定發信主機,如果接收 Email 的主機找不到信件網域的 SPF 記錄,在無法驗證的情況下退信機率極高!要加入 SPF 很簡單,請在 DNS 新增一筆記錄如下:

Type: TXT
Host: @
Value: v=spf1 include:_spf.google.com ~all
如果您的 DNS 主機有支援 SPF 設定,也可以另外加入 SPF Type,但是原本的 TXT Record 還是一定要新增會比較保險。如果您除了使用 GMail 還有在其他主機透過程式發信,也一定要加入發信主機的 IP Address,SPF Record 如下:

Type: SPF
Host: @
Value: v=spf1 include:_spf.google.com ip4:1.0.0.2 ip4:1.0.0.1 ~all

說明:
(1) v=spf1 表示 spf 所使用的版本。
(2) include 表示授權給該郵件伺服器。
(3) a 表示比對 DNS 紀錄中的"A"紀錄,允許在"A"紀錄裡面的 IP 為發送郵件來源 IP。
(4) mx 表示比對 DNS 紀錄中的"MX"紀錄,允許在"MX"紀錄裡面的網域為發送郵件來源網域。
(5) ptr 表示比對 DNS 紀錄中的"PTR",允許在"PTR"紀錄裡面的網域為發送郵件來源網域。
(6) ?all 表示還有其它可能傳送的郵件伺服器。

DKIM 則是用來簽署由此網域發出去的電子郵件, 設定步驟直接參考 G suite 官方教學:產生網域金鑰 - G Suite 管理員說明 這個部份要在 G suite 管理介面做些設定, 所以會需要有 G suite 管理員權限的帳號。

DKIM 則是用來簽署由此網域發出去的電子郵件
想要用自己的DKIM,可以在以下DKIM官方網站自行建立:https://dkimcore.org/tools/

DKIM在郵件上面加入郵件伺服器的專屬私鑰簽章,收信端的郵件伺服器可以將郵件內含的簽章與寄信端網域DNS紀錄中提供的DKIM公鑰做解碼配對。如果批配,表示此封郵件來源是沒有問題的
DKIM逐漸受到Gmail, Yahoo, Outlook.com等等大型郵件服務商重視,建置完可以降低發出郵件被當做垃圾郵件


設定 DKIM 以防止電子郵件遭到假冒

「假冒電子郵件」意指變更電子郵件內容,讓郵件顯示非真實寄件來源的寄件者或寄件地址。假冒是在未經授權的情況下使用電子郵件,這種情形十分常見,因此部分電子郵件伺服器會要求設定 DKIM,以免電子郵件遭到假冒。
DKIM 會在所有外寄郵件的標頭加上加密簽名,收到簽名郵件的電子郵件伺服器則會使用 DKIM 來解密郵件標頭,驗證郵件寄出後並未遭人竄改。
設定 DKIM 的步驟
產生您網域的網域金鑰。
在網域的 DNS 記錄中加入公開金鑰。電子郵件伺服器會使用這個金鑰來讀取郵件的 DKIM 標頭。
開啟 DKIM 簽署功能,開始為所有外寄郵件新增 DKIM 簽名。

設定 DKIM

產生您網域的 DKIM 金鑰 :前往 G Suite 產生網域DKIM
https://support.google.com/a/answer/174126 

說明:
p= , 整串不能有斷行。
k 為加密演算法,預設為 rsa。
p 為公鑰內容(public key)。

DMARC
需先設定好 SPF 和 DKIM,DMARC 才有用。
簡單來說就是讓網域擁有者可以決定該如何處理從自己的網域寄出但未經驗證的郵件,
可以設定三種動作:不採取動作、隔離、拒絕,
並可設定要檢查的比例,預設是 100% 都要檢查。
然後可以設定要把這些未經過驗證的信件寄信到管理員的電子郵件,
讓網域管理員瞭解自己的網域有多少未經驗證的電子郵件發出。

您可以在網域的 DNS 記錄中新增「網域型郵件驗證、報告與一致性」(DMARC) 政策,藉此啟用 DMARC 驗證機制。這項政策為 DNS TXT 記錄格式,可供您定義網域對可疑電子郵件的處理方式。
DMARC 政策支援三種處理可疑電子郵件的方式:
不對郵件採取任何處置,僅將郵件記錄於每日報告中。
將郵件標示為垃圾郵件,讓 Gmail 將這些郵件移至收件者的垃圾郵件資料夾中。
要求收件伺服器拒絕郵件。這也會導致 SMTP 拒收郵件並將郵件退回給寄件者。

設定好 SPF 之後我們先設定 DMARC,因為這個比較簡單,但是實際上 DMARC 驗證機制是基於 SPF 與 DKIM 兩個驗證方法。DMARC 直接在 DNS Server 設定即可,請加入以下 TXT Record:

DMARC 政策範例

未通過 DMARC 檢查時採取的處理方式
TXT 記錄內容
對於未通過 DMARC 檢查的郵件,不採取任何處置,僅透過電子郵件將每日報告傳送至 Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它v=DMARC1; p=none; rua=mailto:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它
在未通過 DMARC 檢查的郵件中,將 5% 的郵件移至收件者的垃圾郵件資料夾,然後透過電子郵件將每日報告傳送至 Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它v=DMARC1; p=quarantine; pct=5; rua=mailto:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它
拒絕所有未通過 DMARC 檢查的郵件,並透過電子郵件將每日報告傳送至以下 2 個地址:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它
如果郵件未通過檢查,SMTP 就會拒收郵件,並將郵件退回給寄件者。
v=DMARC1; p=reject; rua=mailto:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它, mailto:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它

新增 TXT 記錄以啟用 DMARC

新增 DMARC TXT 記錄
如要為您的網域新增 DMARC TXT 記錄,請按照以下步驟操作。

重要事項:
範例中出現的網域為範例網域,請將 solarmora.com 替換為您的網域。
請將範例值改成您網域的 DMARC 政策值。
登入網域供應商提供的管理控制台。
找出更新 DNS 記錄的網頁。
子網域:如果網域代管商不支援更新子網域的 DNS 記錄,請將記錄新增至上層網域。瞭解如何更新子網域的 DNS 記錄。
在 _dmarc 部分新增 DNS 記錄。
TXT record name (TXT 記錄名稱):在 DNS 主機名稱下方的第一個欄位中輸入以下資訊:
_dmarc.solarmora.com

TXT record value (TXT 記錄值):在第二個欄位中輸入 DMARC 政策的定義值,例如:
v=DMARC1; p=quarantine; rua=mailto:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它; pct=90; sp=none
儲存變更。

標記名稱是否必要說明和值
v必要通訊協定版本。此值必須為 DMARC1。
p必要定義您的網域對可疑郵件的處理方式: none (無):不對郵件採取任何處置,僅將可疑郵件記錄於每日報告中。 quarantine (隔離):將郵件標示為垃圾郵件,並移至收件者的 Gmail 垃圾郵件資料夾中。收件者可以在 Gmail 中查看自己的垃圾郵件。 reject (拒絕):要求收件伺服器拒絕郵件。在這種情況下,收件伺服器應將退回的郵件傳送至寄件伺服器。
pct選用設定要套用 DMARC 政策的可疑郵件百分比值。可疑郵件是指未通過 DMARC 檢查的郵件。
必須是介於 1 和 100 之間的整數,預設值為 100。
rua選用用於接收您網域中 DMARC 活動相關報告的電子郵件地址。您可以使用自己的電子郵件地址,也可以建立新的電子郵件地址來接收報告。
電子郵件地址必須包含 mailto:,例如:mailto:Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它
如要將報告傳送到多個電子郵件地址,請用半形逗號分隔各個地址。
sp選用為主網域中的子網域所寄送的郵件設定政策。如果您想為子網域設定不同的 DMARC 政策,請使用這個選項。
none (無):不對郵件採取任何處置,僅將可疑郵件記錄於每日報告中。
quarantine (隔離):將郵件標示為垃圾郵件,並保留郵件以便進行其他處置。
reject (拒絕):指示收件伺服器拒絕郵件。
adkim選用設定 DKIM 的校正模式,該模式會定義郵件資訊與 DKIM 簽名的相符程度。
s:表示「嚴格」。寄件者的網域名稱與 DKIM 郵件標頭中相應的 d=name 必須完全符合。
r:表示「寬鬆」(預設值)。允許部分比對吻合,可接受 DKIM 郵件標頭中 d=domain 的任何有效子網域。
aspf選用設定 SPF 的校正模式 (ASPF),該模式會定義郵件資訊與 SPF 簽名的相符程度。
s:表示「嚴格」。郵件的 from: 標頭與 SMTP MAIL FROM 指令中的 domain.name 必須完全符合。
r:表示「寬鬆」(預設值)。允許部分比對吻合,可接受 domain.name 的任何有效子網域。