DMARC 報告打開是一坨 XML?帶你看懂 RUA 聚合報告在說什麼
你照著教學設好了 DMARC,p=none、rua= 也指到自己的信箱,想說「好,開始收報告吧」。
過幾天信箱真的收到了。你滿懷期待打開附件——結果是一個 .gz 或 .zip,解開來是一大坨密密麻麻的 XML。
<record>
<row>
<source_ip>209.85.220.41</source_ip>
<count>1247</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
...
</record>
看到這個,八成的人就默默把信關掉,再也沒打開過。
這篇就是要救這種情況。如果你還不確定 DMARC、SPF、DKIM 是什麼,建議先看這篇入門;已經設好、只是看不懂報告的,繼續往下看。
先搞清楚:你收到的是「聚合報告」(RUA)
DMARC 會產生兩種報告,你收到的幾乎都是第一種:
- RUA(Aggregate Report,聚合報告):每天一次,把「所有用你網域寄信的來源」統計起來——哪個 IP、寄了幾封、SPF/DKIM 過不過。不含任何信件內容、不含個資,純粹是統計數字。
- RUF(Forensic Report,鑑識報告):個別失敗信件的細節。有隱私爭議,現在大廠幾乎都不寄了,你可以先當它不存在。
所以我們要看懂的,就是那份每天一封、由 Google、Yahoo、Microsoft 這些收件方寄給你的 聚合報告。
一個關鍵觀念先講在前面:這份報告是「收件方」的視角。它不是你的寄信系統產生的,是 Gmail、Yahoo 這些「收到你信的人」回頭告訴你:「今天我收到 N 封聲稱來自你網域的信,其中哪些我驗證通過、哪些沒過。」
一份報告,拆成三層來看
不要被整份 XML 嚇到。它的結構其實只有三層。
第一層:這份報告是誰寄的、涵蓋哪段時間
報告開頭的 <report_metadata> 和 <date_range>:
- org_name:寄這份報告的收件方,例如
google.com、Yahoo、Enterprise Outlook。所以你會每天收到好幾份,一家收件方一份。 - date_range:這份報告涵蓋的時間,通常是前一天完整的一天(UTC)。
換句話說,你今天收到的 Google 報告,講的是「昨天 Gmail 收到你網域信件」的統計。
第二層:政策,也就是你自己設的那串
<policy_published> 就是把你 DNS 上那筆 DMARC 記錄照抄回來給你看——p=none、pct=100 之類。用途是讓你確認「收件方讀到的政策,跟我以為我設的,是不是同一個」。設錯、被覆蓋、還沒生效,這裡一比對就知道。
第三層:真正的重點——每一組來源的成績單
<record> 才是精華,一份報告裡會有很多筆。每一筆代表一個寄件 IP(來源)當天的統計:
| 欄位 | 白話意思 |
|---|---|
source_ip |
這批信是從哪個 IP 寄出的 |
count |
這個來源當天寄了幾封 |
disposition |
收件方最後怎麼處置(none/quarantine/reject) |
dkim |
DKIM 對齊後的結果(pass/fail) |
spf |
SPF 對齊後的結果(pass/fail) |
header_from |
信上顯示的寄件網域 |
讀一筆 record 的方法,就是把它翻成一句話:
「IP
209.85.220.41(Google)昨天用我的網域寄了 1247 封信,DKIM 過了、SPF 沒過,最後收件方沒有特別處置(none)。」
一句話就讀完一筆了。整份報告就是把這種句子疊很多遍而已。
讀報告時,真正要抓的三件事
欄位看懂只是第一步。實際上你在找的是這三件事:
1. 有沒有「我不認識的來源」在用我的網域寄信?
把所有 source_ip 對照一下你已知的寄信來源(你的 ESP、你公司的郵件伺服器、你用的各種 SaaS)。
- 認得的、而且驗證有過 → 很好,正常。
- 認得的、但驗證一直 fail → 你有個合法來源沒設好 SPF/DKIM,信正在冒被擋的風險,要去補設定。
- 完全不認得的 IP,還一直在寄 → 兩種可能:一是某個你忘了的第三方服務在替你發信,二是有人在偽造你的網域寄釣魚信。這正是 DMARC 最大的價值——讓你看見這件事。
2. 我的通過率到底多少?
把「驗證通過的封數」除以「總封數」,就是你的 DMARC 通過率。這個數字決定了你什麼時候敢把政策從 p=none 往 quarantine、reject 收緊。通過率沒到夠高就貿然收緊,會誤擋自己的正常信。
3. 趨勢有沒有惡化?
單獨一天的報告看不出什麼,要連著看。某個來源的通過率突然掉、冒出一個新的高流量陌生 IP——這些都是看趨勢才抓得到的,看單日一片模糊。
問題來了:這些事,靠手動讀 XML 根本做不到
你應該已經感覺到了。上面那三件事,沒有一件是「打開一封 XML 附件」就能做到的:
- IP 是一串數字,你得自己一個個查那是 Google、SendGrid 還是某個你沒聽過的服務。
- 通過率要自己把每筆 count 加起來再算比例。
- 趨勢更慘——你得把好幾天、好幾家收件方的報告攤開來對照,人腦根本疊不起來。
市面上是有一些免費工具(入門那篇提過 dmarcian、MXToolbox 之類),能幫你把報告視覺化。它們能解決「看懂單份報告」,但通常免費額度有限、或介面資訊量很大,對只想「快速知道我網域現在健不健康」的人,門檻還是偏高。
我正在做一個更簡單的 DMARC 監控工具,找你當免費 beta
因為自己和客戶都被這件事煩過,我正在做一個專門解決「看懂 DMARC 報告」的小工具:
- 你把
rua=指到我配給你的一個地址,報告進來後自動解析,你不用再碰 XML。 - 寄件 IP 自動標成服務商名稱(Google、Microsoft 365、SendGrid、Amazon SES…),一眼看出是誰在寄,不用自己查 IP。
- 通過率、寄件來源清單、時間趨勢幫你算好、畫好。
現在還在開發,第一批免費開放給少數人用,目的是把功能磨順、聽早期使用者的真實回饋(不是付費、沒有金流,就是單純的 free beta)。
如果你手上有網域、平常就為 DMARC 報告頭痛,歡迎登記,開放時我會優先通知你:
👉 加入 DMARC 監控工具免費 beta 等候名單(只要留 email 和你想監控的網域,30 秒)
名額有限(第一批大概 10–20 位),想卡位的話早點登記。
在工具開放前,你可以先做的行動清單
不想等?這幾件事現在就能自己動手:
- 確認你的 DMARC 有設
rua=,開始收報告(沒設就等於完全沒資料) - 打開最近一份報告,練習把一筆
record翻成「某 IP 寄了幾封、SPF/DKIM 過不過」的白話句子 - 把報告裡的
source_ip對照你已知的寄信來源,圈出你不認識的 - 對認得但一直 fail 的來源,回去補 SPF/DKIM(參考驗證三兄弟那篇)
- 通過率穩定夠高之前,先別急著把
p=none收緊到quarantine/reject
想確認自己網域的 SPF/DKIM/DMARC 到底設對了沒,可以先用我的網域健康度檢查工具自動驗一遍;有具體問題也歡迎找我聊聊。