(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ'ω`) < DMARCでメーリングリストがやばい

(ヽ'ω`) < メーリングリストからメールが届かんのよ…

という声がそのうち届きそうな予感。未だ実際に、DMARCの副作用による報告は受けていない。

(ヽ'ω`) < いきなり何いってんの?

メール関連技術に関する最近の動向を色々しらべていたら、DMARCというメール送信元偽装による、なりすまし対策の技術が出てきてるらしい。

(ヽ'ω`) < どんな技術か?

現在のメールシステムでは、ヘッダFromの欄はユーザが任意の値を設定できるので、送信者メールアドレスのドメイン名はいくらでも偽装可能な状態。

こういった偽装メールへの対策としてSPFやDKIM等の技術が既に存在し、それなりに普及が進んでいる。DMARCはそれらの技術で「送信元が偽装されている」と疑われたメールに対して、その送信元のドメインの所有者が、そのメールをどのように処理して欲しいかを通達するための技術となる。

このあたりの解説は多分他の図とかを使った解説ページのほうがわかりやすいと思うので、以下を参照。

DMARC - Overview

(ヽ'ω`) < んで、その設定方法は?

DMARCの設定場所としては、ISPのメールサーバとドメイン所有者のDNSサーバの2つ。

ドメイン所有者側での設定作業は

  1. 自分のドメインに偽装して送信されたメールをどういうふうに処理して欲しいかポリシーを決める。ポリシーの選択肢としては
    • 受け取ってほしい
    • 隔離して欲しい
    • 拒否して欲しい
  2. 自分のドメインのDNSに_dmarc.<mydomain>というホストエントリを追加する
  3. 上記で作成したエントリのTXTレコードに、下記のページを参考にしてポリシー設定を流し込む DMARC レコードを作成する - Google Apps ヘルプ

次に、ISPのメールサーバ側での設定…とつなげたいところだが、2014/11/11現在でPostfixでDMARCに対応するためには色々とややこしい手順が必要な様子。うち程度の規模なら、もう少しこなれて来てからの対応でいいかなーという甘え。

[opendmarc-users] OpenDMARC useless with Postfix

で、話を元に戻すとこのDMARCでメーリングリストがやばい、という話題。

(ヽ'ω`) < 何がやばいの?

上述の通り、DMARCは送信元が偽装されたメールの取り扱いを、そのドメインの所有者がどうして欲しいのかを通知する仕組みなのだが、明確な副作用として挙げられているのがメーリングリストから配送されたメールは送信元偽装メールとしてマークされるという点。

通常、メーリングリストから配送されてくるメールの送信元アドレスは投稿者のメールアドレスとなる。しかし、実際にリストのメンバーにメールの送信を行うのはメーリングリストのシステムが動いているドメインのサーバとなり、これは必ずしも送信者のドメインと一致するとは限らない(というより、一致しないケースがほとんどだと思う)

そうなると、メーリングリストから配送されたメールは送信元偽装疑いのメールとして扱われ、DMARCに対応したISPがそのメールを受け取ると、ポリシーが拒否に設定されているドメインの場合はメールが破棄されてしまう。

実際に2014年4月、アメリカのYahooとAOL(@yahoo.com, @aol.com)がDMARCのポリシーを拒否にしたことで、大きな混乱が発生したとのこと。(某冊子ソース)

日本では未だそれほど大きな問題にはなっていないが、DMARCのコントリビュータ一覧を見てみると、いつポリシーの変更による影響を受けてもおかしくはない。

DMARC.org - Domain-based Message Authentication, Reporting and Conformance

(ヽ'ω`) < ん?どうして欲しいかポリシーを公開するだけでなんで破棄確定なん?

ここがちょっとややこしいんだけど、

例えばyahoo.comがDMARCのポリシーとしてrejectを設定しているという事は、yahoo.comのMTAはDMARC対応していれば、当然そのポリシーに従いますよね、と。

DMARCのコントリビュータで、ポリシーも明記しているyahoo.comのMTAがDMARCに対応していないとは考えにくい。

現時点でDMARCポリシーを公開しているドメインは、おおよそMTAがDMARCに対応していると考えられる。結果的に、そのドメインへの正規のメール以外は破棄される可能性が(現状では)非常に高い。

ただ、DMARCの設定のうちDNS側の作業に比べて、MTA側の作業は複雑なので、普及期では「とりあえずDNS側の設定だけをしておいた」というところも出てくるかもしれない。

(ヽ'ω`) < おい、対策方法

まずは問い合わせがあったドメイン名がDMARCのポリシーを拒否にしていないかを確認する。確認方法は、上記の通り、DNSで_dmarcのTXTレコードの値を確認すれば良い。Windowsであればコマンドプロンプトから

C:\> nslookup
> set type=txt
> _dmarc.yahoo.com
サーバー:  *****.*******.***
Address:  ***.***.***.***

権限のない回答:
_dmarc.yahoo.com        text =

        "v=DMARC1; p=reject; sp=none; pct=100; rua=mailto:dmarc-yahoo-rua@yahoo-
inc.com, mailto:dmarc_y_rua@yahoo.com;"

(以下省略)

p=rejectとあればアウト。p=の取りうる値は

  • none - 何もしない(=受け取って欲しい)
  • quarantine - 迷惑メールのマークを付与
  • reject - メール配送を拒否

某冊子の記事の通り、_dmarc.yahoo.com_dmarc.aol.comではp=rejectとなっていた。

_dmarc.gmail.comではp=noneだったが、これがrejectになる日が来るかは不明。あまり想像したくない。

(ヽ'ω`) < 事前に取れる対策はなんかないの?

mailmanではver2.1.16からfrom_is_listというオプションで、投稿されたメールのヘッダFromをメーリングリストに書き換える機能を用意しており、ver2.1.18からはデフォルトでOnとなっている。書き換えられると同時に、Reply-toにオリジナルのFromが付与されるとのこと。

http://wiki.list.org/plugins/viewsource/viewpagesrc.action?pageId=17891477

FMLでは、流石、筑波大学が上記のmailman対策方法と並んで案内をしている。

http://ml.cc.tsukuba.ac.jp/pdf/dmarc-with-mlservice-from.pdf (PDFファイル)

(ヽ'ω`) < Majordomoさん…

That said, perhaps it's time to switch users to Mailman.

Majordomo, DMARC and Yahoo