WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

Google Apps で DKIM を設定する方法

インターネットの黎明期からしぶとく生き残り続けている迷惑メールですが、その対策として送信ドメイン認証が徐々に普及しているようです。とくに、このブログでも過去に設定方法を解説した SPF は独自ドメインの Google Apps で唯一利用できる技術(だった)ので、設定している方も多いかと思います。

しかし、一般向けの Gmail では、より強力な DKIM (「ディーキム」と読むらしい)という技術が以前からサポートされています。 DKIM は電子署名ベースの高度な送信ドメイン認証技術で(SPF などは IP アドレスベース)、国内でも業界団体が発足するなど、同技術の本命として認識されているようです。

そして今年はじめ、ついに独自ドメイン Google Apps でも DKIM サポートが開始されました。多少の設定作業が必要ですが、無料版も含めてすべてのエディションで追加コスト無しに利用できます。今後も確実にメールを配信するために、ぜひとも有効にしておきたいところです。

発表からだいぶ時間が経ってしまいましたが、私のドメインでも DKIM を設定してみたので、本日はその設定方法をご紹介したいと思います。

DKIM とは

前述のとおり、 DKIM はなりすましによる迷惑メールを防ぐための送信ドメイン認証技術のひとつです。 SPF が送信元サーバーの IP アドレスで正当性を検証していたのに対して、 DKIM はメールヘッダや本文に対して電子署名を施します。これには以下のような利点があります。

  • 配送経路での内容の改ざんを検出できる。
  • メールが他のサーバーで中継されても正しく検証できる。
  • 多数のメールサーバーがある場合でも、 DNS リソースレコードにはひとつの公開鍵を記述するだけでよい。

SPF よりも信頼性が高く、大規模なシステムでの運用も考慮されているのがわかります。しかし欠点もあって、例えばメーリングリストへの投稿などで件名が変更された場合、メール内容と署名にズレが生じて、なりすましと判定されてしまいます。このような場合はメーリングリストのサーバーが署名しなおすことになっているのですが、正しく処理しないシステムも多く存在するかと思います。

逆に SPF はメール内容が変化しても検証できるので、両者を併用するのがベターなようです。もちろん Google Apps でも併用が可能です。

さらに詳しい情報については、以下のページがとても参考になります。

電子署名方式の最新技術「DKIM」とは - @IT -
http://www.atmarkit.co.jp/fsecurity/special/89dkim...

Google Apps で DKIM を有効にする

それでは、前置きはこのくらいにして DKIM の設定をはじめます。 Google Apps で DKIM を有効にするには、以下の 4 つの作業を行う必要があります。

  • 署名用の鍵の生成
  • DNS レコードの変更
  • DNS 変更の確認
  • DKIM の有効化

ひとつずつ作業していきましょう。

署名用の鍵の生成

まずは Google Apps の管理者向けコントロールパネルで署名用の鍵を作成します。コントロールパネルを開いたら、上部のメニューから「高度なツール」を選択し、「メールを認証」の「メール認証(DKIM)を設定」をクリックしてください。以下のような画面が表示されます。

グレーのブロックにある「新しいレコードを生成」をクリックすると鍵が生成されます。その際、「プレフィックス セレクタ」というものを尋ねてきますが、デフォルト(google)のままで「生成」ボタンをクリックしてください。鍵が生成されると、グレーのブロック内が以下のような表示になります。

DNS ホストの名前(TXT レコード名):
google._domainkey

TXT レコード値:
v=DKIM1; k=rsa; p=ランダムな文字列…

「DNS ホストの名前(TXT レコード名)」が TXT レコードを追加するサブドメインで、「TXT レコード値」が TXT レコードに追加するべき値です(おそらく p= の前で改行されているでしょうが、すべて一行です)。これらは次のステップで使用します。

この時点では、下にある「認証を開始」のボタンはクリックしないでください。 DNS レコードを変更する前に署名を有効にしてしまうと、正当なメールがスパムと誤判定されてしまいます。

DNS レコードの変更

次は DNS の TXT レコードに生成した情報を記述します。ただし、 DKIM の場合はメールのドメインそのものではなく、「プレフィックス セレクタ._domainkey」というサブドメインを使うことになっています。先ほどプレフィックス セレクタにはデフォルトの「google」を指定したので、 google._domainkey になりますね。例としてメールのドメインが webos-goodies.jp であれば、 google._domainkey.webos-goodies.jp に TXT レコードを追加するわけです。

DNS レコードの編集方法はレジストラごとに異なります。私は Amazon Route 53 を Google Spreadsheets で管理しているので、スプレッドシートに以下のように記述しました。

NameTypeValueTTL
google._domainkeyTXT"v=DKIM1; k=rsa; p=ランダムな文字列…"86400

他の DNS サービスではフォームで入力することが多いでしょうが、とにかく設定するサブドメインに「google._domainkey」、 DNS レコードの種類に「TXT」、レコードの値に「TXT レコード値」の値を指定すれば大丈夫なはずです。

なお、 SPF も同時に有効にしたい場合は、別々の TXT レコードとして追加すれば OK です。こんな感じで。

NameTypeValueTTL
@TXT"v=spf1 include:_spf.google.com ~all"86400
google._domainkeyTXT"v=DKIM1; k=rsa; p=ランダムな文字列…"86400

これで設定を保存すれば、 DNS レコードの変更は終了です。

DNS 変更の確認

あとは Google Apps 側でメールへの署名を開始するだけなのですが、記述ミスで TXT レコードが正しく反映されていない可能性もあるので、実際に問い合わせを行って確認したいところです。コマンドラインに慣れているなら nslookup や dig などを使うだけですが、そうでないなら以下のサイトを使うのがお勧めです。

KLOTH.net
http://www.kloth.net/services/nslookup.php

「Domain」に「google._domainkey.<ドメイン名>」を、 「Query」に「TXT (text)」を指定して「Look it up」ボタンをクリックすれば、 TXT レコードの値が表示されます。先ほど DNS サーバーに設定したのと同じものが表示されれば OK です。ただし、これも一箇所のサンプリングでしかないので、急がないのであれば 2 日程度は待ったほうが良いと思います(TTL の設定によります)。

DKIM の有効化

DNS レコードの変更がエッジの DNS サーバーまで行き渡った頃を見計らって、メールに対する署名を開始します。 Google Apps のコントロールパネルで鍵の生成に使ったページ(高度なツール>メールを認証>メール認証(DKIM)を設定)を開きます。そして、まだ押していない「認証を開始」をクリックすれば、メールへの署名の付与が開始されます。

上図のように、ドメイン名の横に緑で「メールを認証」と表示されれば、署名が開始されています。

動作確認

ここまでの設定で DKIM によるメールの署名が動作しているはずなので、正しく検証をパスしているか確認してみましょう。 Google Apps のアカウントから通常の Gmail アカウントにメールを出すのが簡単です。受信したメールの詳細を表示し、 signed-by にドメイン名が表示されれば OK です。

さらに詳しい検証結果を得るには、 SPF の記事でも使った Email Service Provider Coalition というサイトが便利です。 check-auth [at] verifier.port25.com というアドレスにメールを送れば、詳しい検証結果を記載したメールを返信してくれます。メールの署名が正しければ、返信メールの最初の方に以下のように記載されているはずです。

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   pass
DKIM check:         pass
Sender-ID check:    pass

これを見ると、 SPF と DKIM だけでなく Sender-ID や DomainKeys もパスしていますね。メールヘッダを見ると、たしかに DomainKeys 用の署名も施されています。どうやら DKIM 用の鍵を使って DomainKeys の署名も自動で行ってくれるようです。素晴らしい。

以上、本日は Google Apps で送信メールに DKIM 署名を施す設定方法をご紹介しました。前述のとおり国内では DKIM の普及率はあまり高くありませんが、多くのドメインをホストする Google Apps が対応した以上、急速に普及するのは間違いないでしょう。早めに設定しておいて、迷惑メールの濡れ衣を回避したいところですね。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles