今更?な話なんですが。
昨今のスパムやフィッシング等の不正メールの増大を受けて、大手IT事業者が主導する形で、メールの送受信時のDNS経由でのサーバーと個々のメールの認証が事実上必須になっていますが、今回はその仕組みについてまとめたメモです。
認証の手段はDKIM,SPF,DMARCの3つの要素から構成されます。概要をは次のような感じです。
DKIM(DomainKeys Identified Mail): RSA暗号ペア(送信側秘密鍵とDNSに登録された公開鍵)による個々のメールへの署名付与・検証による送信元の認証
SPF(Sender Policy Framework): メール送信サーバーのDNSレコードへの登録による検証
DMARC(Doain-based Message Authentication, Reporting and Conformance): 送信側DNSへのDKIM,SPFの失敗時の処理方法及び集計結果の送付先等の登録
一般的な表現に言い直すと、DKIMは送信側が個別のメールについて電子署名を施し、受信側がそれを検証して正しい送信元から送られてきたものかどうかチェックするもの、SPFはメールの送信元サーバーが正規のものかどうかを受信側でDNSを参照して確認出来るようにするもの、DMARCはDKIMもしくはSPFでのチェックが失敗した時にどういう処理をすべきか、送信側が推奨する処理を提示するもの、という感じでしょうか。
DKIMとSPFはメール及び送信サーバーの真正をチェックするための仕組みで、DMARCはそれらとは毛色が違い、チェックの結果や失敗時の処理の方針を送信元と送信先で共有するための仕組みです。
DKIMとSPFは比較的わかりやすいと思います。メールや送信サーバーをチェックするだけの話ですから。
これに対して、DMARCは初見だとその意味というか意義というか、何故そんな仕組みを使うのかがわかりにくいかもしれません。認証に失敗した場合に送信元側がメールをどう扱って欲しいかを提示する、というのはどういう事なのかと。認証に失敗するというのは不正の可能性が高いんだから排除して終わりじゃないのか、と疑問に思うかもしれませんね。
なぜ送信元が失敗した時の事を想定するのか?というと、DKIMやSPFの認証失敗は、必ずしも不正が原因で起こるとは限らないからです。
DKIMやSPFでは、DNS上に登録された送信元が提供する情報とメールのメタデータ等を突き合わせてその真正を検証するわけですが、メールの送信経路が複雑な場合等には、DNS上の登録情報と実際の送信経路上のサーバーとが齟齬を来す事も起こります。そうすると、正規の送信元から送信しているにも関わらず、認証に失敗してしまう。でも不正ではないのだから、弾かれるとシステム障害になってしまう。それは困るわけです。例えばプロバイダー等でいちいち事故・障害事案になったりすると顧客との関係では信用問題になるし、事業が立ち行かなくなります。
特にシステムの変更等をする場合には一時的にせよ認証に失敗する状況が避けられない事もあるわけで、そういう場合には送信元が認証に失敗するかもしれないけど必ずしも不正によるものというわけではない(ので弾かないでほしい)といった情報を伝える必要があり、その手段としてDMARCが使用されている、というわけです。
ちなみに、DMARCには失敗の頻度等をまとめたレポートメールを送信先のサーバーから送信元のサーバーに送付するためのメールアドレスを登録する事も出来ます。送信元はそのフィードバックを見て、正常に認証が出来ているのか、不具合が起きているならどの経路で起きているのか、といった状況を知ることが出来、不具合等がある場合にはその是正の契機に出来るのです。
上記のいずれも、それらのチェックを実際に行うかどうか、またチェック後に個々のメールを具体的にどう処理するかは、全て受信側の自由です。不都合がなければ、全て無視しても構いません。
なんですが、googleやmicrosoftのような大手事業者だとそれはもう山ほど偽装メールの類が届くわけで、もはやこれらのチェックなしではサービスが立ち行かない。なので、一定規模のメールを送信するような場合には送信側にこれらの検証手段への対応を義務付けているのですね。
ただ、これらのチェック手段も万能ではありません。攻撃手段はいくつも確立されていますし、法人等で外部のグループウェアを利用してそこから自社ドメインのメールを送信する場合等、複雑な経路を辿ってメールを送信する場合には特にdkimの認証に失敗するケースが多発していたりもします。(大手でもその割合は10%を超えるところも多数あるとか。これがDMARCの存在する所以です)
なので、今現在、それらの現状への対策を施したdkim2の検討・策定が進められている、という話もあります。もっとも、こちらはまだドラフトにすらなっておらず、その実現は早くとも数年後以降になるだろうという見込みだそうですが。そもそもdkimでカバーし切れないようなケースを十全にカバーする仕組みの構築はそう簡単ではないだろうとも思われます。
そもそも、サブドメインがない、またリレーをしない等の単純なケースについてはdkimで十分でもあるので、零細サイト等は当面気にする必要はないでしょう。ただ、将来的に大手がdkim2へ移行した場合はそれに対応すべく移行を迫られることになる可能性はあります。面倒ですね。
なお、具体的な設定の方法は至るところで情報が公開されているし、もとよりシステムの構成によって手順も設定の内容も様々に異なるのだから、ここに詳細を記載する事は控えようと思います。あまりに膨大になるでしょうし。
一応私のサーバー(ubuntu server+postfix+外部DNSサービス)の場合について概要を書くと、DKIMはopendkimによる鍵ペア生成とpostfixの設定とDNSレコードの登録、SPFはDNSへの登録(送信については送信サーバー上でやることはありません。受信時にSPFチェックをする場合はpostfixの設定が必要になります)、DMARCはDNSレコードの登録、がそれぞれ必要になります。
まとめると、メール送信サーバーとして3方式に対応するには、DNSレコードの登録設定は共通で必須、DKIMのみサーバー上の設定が必要になるわけです。これらとは別に受信時のSPFチェックにはサーバー上の設定が必要になりますが、送信時には関係ありません。
やってみればわかりますが、意外と簡単です。ただ、仕組みを理解するまでが結構かかるんですよね。なにせあらゆるシステム構成に対応出来るように作られているので、方式全体を把握しないと自分の場合にどう設定するのが適切なのか判断出来ないのです。まとめてあるサイトは沢山あるのですが、どれも特定のシステム構成に依存していたり色々端折っていたりで今ひとつ分かりにくかったりして。これから挑まれる方におかれましては、健闘を祈ります。
なお、3方式は通常セットで運用されますし、多くの解説ではセットでないとあまり意味がない、というような説明もされますが、各々の方式は仕組みとしては独立していて、DKIM,SPF,DMARCの内一部のみを導入する事も全く差し支えありません。実際私はまずSPFを導入し、次いでDKIM、最後にDMARCという形で段階的に導入しました。もっとも、仕組み上DMARCだけを導入する事に意味はないでしょうけれども。
今回は以上で。それでは。