Y!mobileからMMSでDMARCによるなりすましメールの対策を導入すると来ていて、
これ自体は特に問題はないが、そういえば自分のメールサーバーはどうだっけと。
Yahoo!メールヘルプ/DMARCとは (Yahoo!)
すでにSPFもDKIMも導入しているから設定を加えればOKですね。
そもそもSPFとDKIMも含めたわかりやすい説明はここに書いてある。
ドメイン認証技術「DMARC」について (Yahoo!)
DMARCはSPF, DKIMの判定でNGとなったメールの処理方法を決めることを主目的としている。
だから、基礎としてSPFまたはDKIMを導入していれば、処理方法を記載するだけでよい。
SPFとDKIMで迷惑メールよけ
SPFは送信するメールサーバーをDNSのTXTレコードに記載する方法。
MXレコードのサーバー以外から届いた場合は怪しい(softfail)という記載例を書いている。
特に送り側のメールサーバーには細工がいらないのでかなり普及している。
DKIMは電子署名を付けて送信し、DNSのTXTレコードに記載した公開鍵で検証できるようにする。
今までこれらの技術でNGとなったメールの扱いは不明瞭なところがあった。
DKIMについてはADSPというNG時の動作を決める仕組みがあったが、廃止されている。
で、Gmailに大量送信するメールサーバーについては、DMARCへの対応が要求されている。
大手の送信ドメイン認証「DMARC」導入率が8割超に、Gmailのガイドラインが奏功 (日経XTECH)
SPFとDKIMの両方を導入した上でDMARCに対応することが求められている。
というわけで、僕の場合は、DNSに下記の設定をするだけで済む。
_dmarc TXT "v=DMARC1; p=reject"
p=rejectはSPFもDKIMもダメなら拒否してねという意味になる。
すでにSPF, DKIMともに実績が十分あるのでこの設定だが、rejectはあまり一般的ではないかも。
Yahoo!メールのヘルプにも書いてあるのだが、p=quarantineで迷惑メールに分類の意味で、これが一般的である。
p=noneにするとそのまま受信してという意味にはなるのだが、
その場合はなりすまし対策に弱いドメインとみなされ、結果として迷惑メールに分類されやすくなる場合があるという。
そういう意味では最低でもSPFは導入した上で、p=quarantineでDMARCを導入するとよさそうだ。
DMARCにはもう1つ目的があって、それがレポート機能である。
受信サーバー側で当該ドメインからのメールの判定結果を送ってくれる。
上記の設定に rua=mailto:… を書き加えると、統計データが送られてくる。
DMARCでは設定必須なのかと思ったのだが、必須というわけではない。
送られてきても使い道がないと思えば書かなくてもよい。
ただ、これを受け取ることでなりすましメールの実情を知ることが出来る。
さて、これでGmailとかYahoo!メールに送って届いたメールのヘッダを見る。
Authentication-Results: mx.google.com;
dkim=pass header.i=@hdmr.org header.s=xxxx header.b=XXXXXXX;
spf=pass (google.com: domain of h@hdmr.org designates xxx.xxx.xxx.xxx as permitted sender) smtp.mailfrom=xxxxx@hdmr.org;
dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=hdmr.org
dkim=pass, spf=pass, dmarc=pass ということで合格ですね。
DMARCの設定をする以前はdmarc=passが付かなかったはず。
逆に受信側なのだが、OpenDMARCを導入してみた。
もともとpolicyd-spfを導入していたのを、OpenDMARCでSPFとDMARCの判定をする形に改めた。
なお、OpenDKIMについてはDKIMの署名・判定のために併用する。
送信メールについてはOpenDKIMで署名→OpenDMARCでは何もせず、
受信メールについてはOpenDKIMで署名検証→OpenDMARCではSPF判定、DKIM・SPFの結果を総合してDMARCの結果を記載という流れになる。
OpenDMARCは/etc/opendmarc.confで設定するが、
IgnoreMailFrom hdmr.org
RejectFailures false
SPFIgnoreResults true
SPFSelfValidate true
IgnoreMailFromで自分のドメインを書かないと、これから送信するメールを検証してしまう。
RejectFailuresは標準でfalseだが念のため。こう書くとp=rejectでも受信する。
後で書くのだが端的に言えばDMARCには期待していないということである。
SPFIgnoreResults, SPFSelfValidateはOpenDMARCでSPFの検証を行うための設定。
これをした上で従来のpolicyd-spfの設定を削除することとする。
で、これをPostfixに設定するわけだが、OpenDKIM→OpenDMARCの順にmiltersに記載すればよい。
smtpd_milters = unix:/run/opendkim/opendkim.sock,
unix:/run/opendmarc/opendmarc.sock
non_smtpd_milters = $smtpd_milters
ただ、Permission deniedのエラーが出てしまう。
これはpostfixユーザーにsockファイルのアクセス権がないのが原因で、
opendkimグループとopendmarcグループにpostfixユーザーを参加させればよい。
# usermod -aG opendkim postfix
# usermod -aG opendmarc postfix
これでDMARCの判定が適切に行われる。
DMARC-Filter: OpenDMARC Filter v1.4.2 hdmr.org 1BBC5DBA40
Authentication-Results: hdmr.org; dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: hdmr.org; spf=pass smtp.mailfrom=gmail.com
DKIM-Filter: OpenDKIM Filter v2.11.0 hdmr.org 1BBC5DBA40
Authentication-Results: hdmr.org;
dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=....
3つのAuthentication-Resultsヘッダで書かれるんだな。
このAuthentication-Resultsのdmarc=pass または dmarc=fail を見て、
マーキングやフォルダ振り分けなど行うことが出来るわけである。
とりあえずはThunderbirdでdmarcの結果によってタグを付けるようにした。
(元々SPFとDKIMの結果でタグを付けるようにしていたのを変更した)
ただ、これが迷惑メール対策として効果的なのかはよくわからない。
というのもSPFもDKIMも他人のドメインへのなりすまし対策であって、
ドメインをなりすました迷惑メールというのはそう多くない印象である。
昔はSPFもDKIMもNGなら迷惑メールに分類する対策をしていたが、
迷惑メールでもない誤設定のためかメールがNGになる割には、迷惑メールがOKとなることも多く不便だった。
このためマーキングに留めるようにしたのである。
最近はGmailがDMARC対応を求めたためかNGになるメールは減りましたが。
なぜあまり効果的ではないのかという話だが、ドメインのなりすましがそう多くないからである。
例えば、最近は りそな銀行 へのなりすましメールが何通か届いたが、
risonabank.co.jpから送信したように見せようとはしてないんですよね。
自分で取得した適当なドメインにSPF・DKIM・DMARCの設定をした上で送ってきているのである。
そしたらそのドメインでSPF・DKIM・DMARCが全てPASSになってしまう。
確かにドメインをりそな銀行に偽装はしていないのだが、
タイトルや本文でりそな銀行から送ったように見せていれば、それは立派ななりすましメールですよね。
こういうことがあるのでメールは注意して見なければならないのだが、
結果としてSPF・DKIM・DMARCはこのタイプのなりすましメールの対策にはなっていないのである。
各所で迷惑メール対策が進む中で、行儀のよい迷惑メールが増えた印象で、
こうするとなかなか正当なメールとの識別が難しいのが実情である。
Gmailが大量にメールを送るところにDMARC対応を求めたのは、
迷惑メールの報告が少なく信頼できるドメインを明確にするためなのではないか。
- xxx.exampleからのメールは迷惑メールの報告が少ないがDMARC非対応
- yyy.exampleからのメールは迷惑メールの報告が多いがDMARC対応
- zzz.exampleからのメールは迷惑メールの報告が少なくDMARC対応
yyy.exampleのような迷惑メールの報告が多いドメインは、DMARCの有無によらず迷惑メールへの分類を進める。
xxx.exampleは今は迷惑メールの報告は少ないが、DMARC非対応だとなりすましが容易である。
すなわち迷惑メールの温床になる危険があるのでやめてくれと言っている。
zzz.exampleのような迷惑メールの報告が少なくDMARC対応となっていれば、
DMARCがpassであれば迷惑メールの可能性は低く信頼度が高い。
DMARCがfailになれば なりすまし で迷惑メールと判断できる。
Gmailのような大量のメールが届く事業者ならこういう対策もあるだろうけど、
ビッグデータなしにDMARCを迷惑メール対策に使うのは難しいのかなと。
DMARCがfailする迷惑メールがたくさん届くなら考えるんだけど、全然来ませんからね。
それでも何か役に立つかもしれないとマーキングだけはしていると。