送信ドメイン認証技術(SPF, DKIM,DMARC)の認証結果を可視化してみた

# はじめに
電子メールのスパム対策として開発された、送信ドメイン認証技術として、SPF, DKIM, DMARCがあります。これらの普及が進んでいるところですが、自分が受け取るメールから、その普及度合いが分からないかなと思っていたところ、可視化できてきたので、共有します。なお、送信ドメイン認証技術については、まだまだ勉強中です。誤りがあるかもしれませんがご容赦をお願いします。無保証です。

# どこを見れば良いのか
SPF, DKIM, DMARCの実行結果(と言って良いのか確信にはまだ至っておらず、誤りかもしれませんが)は、電子メールのヘッダを見ればわかるようです。
具体的には、Authentication-Results:で記載される領域があり、

spf=pass
dkim=pass
dmarc=pass

などの情報が記載されています。

このように電子メールのヘッダを見れば、わかることはわかるのですが、電子メールのヘッダを見ること自体が、簡単な場合もあれば、なかなか面倒で見る気を失わさせられるようなものもあります。Thunderbirdは比較的容易と思いますし、gmailだと、SPF, DKIM, DMARCの結果が表示され、わざわざ対応しているとわかります。
そんなことをしつつ、ぱっと見で、簡単に分からないかなあと、思い続けて数ヶ月という感じでした。

# Thunderbirdのタグ付け機能
あるとき、Thunderbirdにタグ付けの機能があることに気づき、メッセージフィルターの機能で、タグ付けすることにしました。
具体的には、フィルターの設定で、Authentication-Resultに、spf=passを含むといった条件に一致した場合、spf=passというタグを付ける、というものです。
同様に、dkim=passや、dmarc=passなどのフィルター設定も行なっていきます。

フィルタの実行結果はこんな感じです。
![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/f504c254-c608-0488-b568-1d69d661680d.png)

さらに、spf=none, dkim=none, dmarc=noneなども追加しました。
あとは、実際のメールを見ながら、メールヘッダで見つけたエラーを、フィルタ設定に追加しています。sender-idが付けられているメールもありましたので、sender-id=pass, sender-id=none, sender-id=softfailなども追加しました。
これにより、メールの表示画面で、タグ情報が追記され、spf, dkim, sender-idなどの結果が一目瞭然にできました。



# タグへの色付け
タグにはデフォルトで、「重要」、「仕事」、「プライベート」などのタグが定義済みで、色付けされています。spf=pass, dkim=passなど、認証が成功している場合はそのままの黒で良いと思いますが、エラーしたメールは、色付けして可視化したくなりました。そこで色付けしてみました。

以下は、全てエラーしている例です。
![fig2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/1d7b7377-0971-977c-b775-2e7eb79e19bf.png)

また、こちらは、一部だけパスしている例です。
![fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/406aef90-b7d8-3871-e38d-a004fc3ff271.png)

この設定により、メール一覧で、エラーメールが一目瞭然で見えるようにできました。
ところが、エラーしたメールにもかかわらず、色付けされないメールがあることに気づきました。どうも、タグの上位で認証成功した場合、黒になるようで、いろに優先順位がありそうです。そこで、タグの上位でエラーを示すタグを追加して、エラーした場合、このタグも付けることにしたところ、以下のように、エラーしたメール全てが色付けされるようになりました。

![fig4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/1dabf575-b1bf-fdcc-2532-acda9948e1ee.png)

やりたかったことが実現できました。



# スパムメールの傾向
このような設定をして、しばらく様子を見ていたのですが、あたりまえといえばあたりまえですが、以下のように分類して、メールを見るようになりました。
(1)スパムではないメールで、送信ドメイン認証技術にきちんと対応しているメールと、(2)スパムではないメールで、送信ドメイン認証技術の一部でエラーが出ているメールがあることに気づきました。後者は、対応しきれていないのか、一時的なのか、あたりが気になるところで、理解を深める切り口になりそうです。そう思うと、過去に遡ってメールを見ていって、送信ドメイン認証技術に対応した変化点(タイミング)を見つけられるのではないかと思ったりします。また、この後者のメールは、gmail宛では届かないのではないかと思ったりもしています(試していません)。
一方、(3)スパムなメールで、送信ドメイン認証技術のエラーで発見できるようなメールと、(4)スパムなメールにもかかわらず、送信ドメイン認証技術にきちんと対応しているメールがあることに気づき、感覚的には、後者が増えていっている感触を持ちました。この後者のメールは、色付けされないので、パッと見てスパムとはわかりません。このメールにも色付けできないかな、と思うようになりました。

# 送信ドメイン認証技術にパスしたスパムメールの可視化
送信ドメイン認証技術に対応したスパムメールとは、例えば銀行からのメールで、Fromアドレスを見ると、全くその銀行とは関係ないようなメールです。Fromアドレスを見れば見当はつきますが、いちいち見ていくのも面倒です。
これらのメールのヘッダをいくつか見ての現時点での対応は、X-Spam-Flag: YESの表記です。この設定で、このようなメールの恐らく大部分はカバーできていそうな印象を持っています。ただ、誤判定、すなわち、X-Spam-Flag: YESだが、スパムメールではないものもあり、より精度の高い方法を模索中ですが、ずいぶん見通しが良くなったと思っています。

# DMARCはどうなってる?
上記のメールアドレスでは、DMARCの処理の痕跡が見当たりませんでした。そこで、DMARCについても処理している別のメールアドレスについて、同様の可視化を行ってみました。すると、dmarc=pass, dmarc=none, dmarc=failも見えるようになりました。dmarcの処理が普及すれば、上記した、X-Spam-Flagによるタグ付けは不要になりそうです。この、可視化を始めたメールアドレスの処理でも、DMARCの処理が行われ始めることに、近いうちに気づくことができればいいなと思っています。

以下は、dmarcがパスしている例(あ、tagがdmarkと、typoしてるのに気づきました。)
![fig5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/54f52840-036e-710e-255b-89741c16ae59.png)

以下は、spf, dkimはパスしているものの、dmarcがfailしている例
![fig6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/992486f5-a732-4025-246c-dc8586772b37.png)

以下は、spfはパスしているものの、dmarcがfailしている例で、dkim=failでした。(今確認したところ、実は、フィルタに、dkim=failが抜けてました)
![fig7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101153/2e51a5b0-7c7e-de7d-37fb-1f2188e47c6a.png)

こちらは、設定等手抜きで、これを書いていて、typoや設定抜けに気づいていますが、気づいたタイミングで修正追加している感じです。

# 今後
今後は、しばらく様子を見ながら、上記した抽出方法を微調整しつつ、送信ドメイン認証技術の理解を深めたいと思っています。
スパムについては、ずいぶん昔から、相当悩まさせられましたが、このような対策技術が開発され、普及してきていることは素晴らしいと思います。この状況を、自分が受け取るメールで実感できることについても、素晴らしいと思います。恐らくですが、スパム対策の進展を肌で感じられるのではと期待しています。
上記の可視化手法で新たな手法に気付いた場合は追加修正していこうと思っています。よろしくお願いいたします。

# 修正履歴
* 2024/10/10 新規作成
* 2024/10/13 「DMARCはどうなっている?」、「修正履歴」を追加、その他修正
* 2024/10/14 キャプチャを追加