メール配信サービス SendGrid から、独自ドメインのメールアドレスでメールを送信できるように設定し、送信ドメイン認証の SPF(エスピーエフ)と DKIM(ディーキム)を設定した時のメモです。SendGrid の基本的な設定方法は「Google Compute Engine から SendGrid 経由でメール送信」の記事をご参照ください。
この記事を書くのにあたって、SendGrid の日本代理店、構造計画研究所さんのFAQページを参考にさせていただきました。
SPF と DKIM とは?
SPF(Sender Policy Framework)と DKIM(Domainkeys Identified Mail)は共に、送信元メールアドレスのドメインに対して、正当なメールサーバーから送信されている事を証明するための仕組みです。また、DKIMはメール内容が改ざんされていない事を証明することも出来ます。最近では、SPF/DKIMに対応していないメールサーバーから送信されたメールは、迷惑メールと判定されることが多くなりました。
2015年6月時点で、SPFの普及率は約90%に達していますので、もはや必須の設定かと思います。また、DKIMの普及率はまだ約40%ですが、年々普及率が上がっていますので、こちらも合わせて設定するのが良いでしょう。
送信ドメイン認証結果の集計(2015年6月時点)| 総務省
SendGrid はデフォルトで SPF/DKIM 対応済
SendGridは、何も設定していなくても SPF と DKIM に対応しています。
PostfixなどMTAから、SendGrid 経由でメールを送信した場合、Fromアドレスが「root@instance-1.localdomain」などのようにおかしなメールアドレスになっていたとしても、エンベロープFromのメールアドレスは、しっかり「xxx@sendgrid.net」としてくれます。
実際のメール配信では、FromアドレスやToアドレスは使われず、エンベロープFromやエンベロープToが使われます。手紙の配達で例えると、From/Toアドレスは中身の便箋に書く住所(便箋に住所はあまり書きませんが、あくまで例えです)エンベロープFrom/Toは封筒に書く住所となり、郵便屋さんは、封筒(英語で envelope)に書かれた住所を見て配達するのと同じです。
SPF や DKIM の認証も、このエンベロープFromに対して行われます。SendGridが管理する「sendgrid.net」ドメインは、SPF/DKIMに対応しているため、ともに「pass(認証OK)」になります。
SendGrid → Gmailで受信したメールのヘッダ(サンプル)
Authentication-Results: mx.google.com; dkim=pass header.i=@sendgrid.net; spf=pass (google.com: domain of xxx@sendgrid.net designates 192.0.2.1 as permitted sender) smtp.mailfrom=xxx@sendgrid.net (略) From: root@instance-1.localdomain (root)
ただし、サンダーバードの「DKIM Verifier」など、メーラーでDKIM署名の検証を行っている場合、下のような警告が表示されることがあります。
気になる場合は、Postfixの設定で送信元メールアドレスが「xxx@sendgrid.net」となるように設定してしまうのが手軽かと思います。
vi /etc/postfix/main.cf
↓
myorigin = sendgrid.net
独自ドメインと SPF/DKIM の設定
前置きが長くなりましたが、本題の独自ドメインでの SPF と DKIM の設定方法です。
SendGridでは「Whitelabels」という機能を使って、送信元メールアドレスに独自ドメインが使えるように設定すると共に、Whitelabels設定の最後に表示される、SPFとDKIM用のレコードをDNSサーバーに登録するだけで、SPF/DKIMの設定まで出来てしまいます。
裏を返せば、SPFとDKIM用のレコードをDNSサーバーに登録しなければ、独自ドメインを使う事が出来ないようなので(なにか方法があるのかもしれませんが)SendGridでは、独自ドメインとSPF/DKIMの設定はセットだと考えるのが良さそうです。
Whitelabels の設定
今回ドメイン名は「apar.jp」で設定しています。ご自分が所有しているドメイン名に読み替えてください。
SendGridの管理画面にて、Settings → Whitelabels を選択します。
「+ Add Domain」をクリック
ドメインの入力画面が開きます。「+ Use New Domain」をクリック
下記を入力/選択して「Save」をクリックします。サブドメインは、FROMアドレスなど表には出てきませんので(ただし、メールのヘッダには表示されます)、分かりやすい名前であれば良いかと思います。私は mail サブドメインを既に使っているため、単純に mail2 としました。
「SUBDOMAIN」:サブドメインを入力
「DOMAIN」:ドメイン名を入力
「DEFAULT WHITELABEL」:チェック
「AUTOMATED SECURITY」:「ON」
Whitelabelsの設定を完了するには、DNSレコードの検証が必要になります。よければ「Confirm」をクリック
表示されたSPFとDKIM用のレコードをメモしておきます、1つめがSPF用、下の2つがDKIM用です。こちらをDNSサーバーに登録します。
SPF/DKIM用レコードをDNSサーバーに登録
先ほどメモしたSPF/DKIM用レコードを、DNSサーバーに登録します。
named の場合
DNSサーバーが named の場合、ゾーンファイルに登録するレコードは下記のようになります。(シリアルの更新を忘れずに!>自分)
vi /var/named/master/apar.jp
mail2.apar.jp. IN CNAME u3573039.wl040.sendgrid.net s1._domainkey.apar.jp. IN CNAME s1.domainkey.u3573039.wl040.sendgrid.net s2._domainkey.apar.jp. IN CNAME s2.domainkey.u3573039.wl040.sendgrid.net
Amazon Route 53 の場合
Amazon Route 53 をWEBコンソールから設定する場合は、以下のようになります。
確認
登録したDNSレコードの問合せが出来る事を確認します、SPFレコードの内容やDKIMの公開鍵が確認できるかと思います。(こういったCNAMEでの指定方法もありなんですね)
dig mail2.apar.jp TXT(IPアドレスはサンプルです)
;; QUESTION SECTION: ;mail2.apar.jp. IN TXT ;; ANSWER SECTION: mail2.apar.jp. 300 IN CNAME u3573039.wl040.sendgrid.net. u3573039.wl040.sendgrid.net. 900 IN TXT "v=spf1 ip4:192.0.2.1 -all"
dig s1._domainkey.apar.jp TXT
;; QUESTION SECTION: ;s1._domainkey.apar.jp. IN TXT ;; ANSWER SECTION: s1._domainkey.apar.jp. 300 IN CNAME s1.domainkey.u3573039.wl040.sendgrid.net. s1.domainkey.u3573039.wl040.sendgrid.net. 620 IN TXT "k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+vs2FJr4KZV3utKs2Ev7cxUdd/8fcXFcV3CXW1qBl6h/X2FG8VEMe44SLtYDXBMpLgr4lRE8p9anh7fJWGsJw/l3g9n569STZWKrIgD+8RmeXiKDmtffdfp+/7maq16juliCuEx6Bu5h9vi8JWCQ2s/16RQ9yvXDJiq3Ipt13swIDAQAB"
dig s2._domainkey.apar.jp TXT
;; QUESTION SECTION: ;s2._domainkey.apar.jp. IN TXT ;; ANSWER SECTION: s2._domainkey.apar.jp. 300 IN CNAME s2.domainkey.u3573039.wl040.sendgrid.net. s2.domainkey.u3573039.wl040.sendgrid.net. 1800 IN TXT "k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDiFMa1z41Ap5hzdqUj7ao2acaui8DEcx+O9/8TT0cc4maotGZN8XRY+7p8XDHCJvjfTWqmjygfkfy8pVDh73s4Fd5ta5Tjjvk7ro7P9f6qV5+eD/v3CWjcBgivEaPeo+tgE8DqVY9zrqwD3mdC++VKDa8PuPpVn2/tdE058hjqXQIDAQAB"
SendGrid 管理画面でDNSレコードの確認
DNSレコードの登録が確認できたら、SendGridの管理画面に戻って「Validate Record」をクリックします。
VALID列が全て「緑チェック」になれば、SendGridでの独自ドメインとSPF/DKIMの設定は完了です。続いてPostfixの設定を行います。
Postfix の設定
メールサーバのホスト名の設定と、送信元のメールアドレス形式を設定します。
vi /etc/postfix/main.cf
#myhostname = host.domain.tld
↓
myhostname = mail2.apar.jp
# SendGridの管理画面で入力した「ドメイン名」を指定
#mydomain = domain.tld
↓
mydomain = apar.jp
# メールアドレスを「ユーザ名@ドメイン名」の形式にする
#myorigin = $mydomain
↓
myorigin = $mydomain
設定した内容を読込みます。
SPF/DKIM認証の検証確認
Gmailへメールを送信して、メールヘッダに下記のような表示があればOKです。
Authentication-Results: mx.google.com; dkim=pass header.i=@apar.jp; dkim=pass header.i=@sendgrid.info; spf=pass (google.com: domain of xxxx@mail2.apar.jp designates 192.0.2.1 as permitted sender) smtp.mailfrom=xxx@mail2.apar.jp
終わりに
記事の中でも書きましたが、SendGrid では、SPF や DKIM の設定を意識しなくても、当然のように設定してくれます。メール配信サービス業界(そんな業界があるかは分かりませんが)では、もはやSPF/DKIMの設定は当たり前なのかもしれませんね。
コメント