SendGrid と Amazon Route 53 で SPF, DKIM 設定してメール送信してみる

スタイリッシュな画面で簡単設定。
2020.10.18

はじめに

おはようございます、もきゅりんです。

メールを送信するときには、高信頼性にしましょう、ということを先日のブログ、Amazon SES でメール送信するときのベストプラクティスまとめ(2020年10月) でまとめました。

では、 Amazon SES(以下SES) ではない方法で対応するとどうなるのか。

ということで、皆大好き SendGrid と Amazon Route53(以下Route53) で SPF, DKIM 設定する方法をまとめてみました。 (SendGrid では DMARC は対応していません。)

本稿では改めて SPF, DKIM, DMARC の詳しい説明はしません。(SPF, DKIM, DMARC は被害が後を絶たない、なりすましメールの対策に有効な手法となる「送信ドメイン認証」の方法です。それぞれ異なった技術の認証方式であり、どれかではなく、組み合わせて行うことが重要です。)

  • SPFはメール送信元のIPアドレス情報を使った確認
  • DKIMは電子署名を利用してメール送信元が詐称されていないかどうか確認
  • SPFやDKIMの認証が失敗した場合に推奨アクションをDNSに「DMARCポリシー」として設定する

仕組みの概要については下記のようなページで参照下さい。

送信ドメイン認証(SPF / DKIM / DMARC)の仕組みと、なりすましメール対策への活用法を徹底解説

4-2 送信ドメイン認証: 迷惑メール相談センター

やること

SendGrid のドキュメント HOME > ドキュメント > チュートリアル > 到達率を向上させる > 独自ドメインを利用する の Domain Authentication が今回対応する内容です。

SendGrid では、SendGrid から送信するメールのブランドやレピュテーションを守り、送信メールの到達性を改善するために独自ドメイン利用設定 (Sender Authentication)ができます。

独自ドメイン利用設定 (Sender Authentication) は以下3つの設定になります。

  • Domain Authentication (SPF/DKIM設定)
  • Link Branding (トラッキングドメイン設定)
  • Reverse DNS (IPアドレス逆引き設定)

今回は、その中から Domain Authentication (SPF/DKIM設定) を設定します。

その他の設定については上記ページを参照下さい。

設定なしでメール送信する

SendGrid からメール送信するのは、以下のようにサインアップしてからスムーズで、非常に親切かつ簡単です。

sendgrid_tutorial1

sendgrid_tutorial2

さらに具体的な送信手順については下記ブログも参照下さい。

SendGridを利用してEC2からWeb APIとSMTPでメールを送信してみた

Web API とSMTP のどちらでも良いのですが、自分は Web API で対応しました。

受信メールはこんな感じです。

[From] の送信者のドメインと [Return-Path] の戻り先ドメインが異なるため、なりすましメールである可能性を疑われて注意勧告が表示しています。

default_mail_result

default_sendmail_result

設定してメール送信する

結果

結果として、先ほどと異なり、[From] の送信者のドメインと [Return-Path] の戻り先のドメインも一致し注意勧告が消えます。

check_set_result

fixed_sendmail_result

やってみる

独自ドメインを利用する はかなり分かりやすいドキュメントなのですが、順に進めていきます。

Sender Authentication はアカウントのWebポータルの左下のサイドメニューからでも、Dashboard からも進めます。

authenticate

authenticate2

ドメインレジストラを選択します。Alibaba Cloud, Cloudflare, Google Cloud など20以上の DNS host 、未定やその他も選べます。(2020年10月17日時点)

2 については今回必要ないため No にします。

authenticate_domain3

ドメインを入力します。

Route53 の場合、アンダースコアが使えるので CNAME で問題ないのですが、折角なので MX と TXT レコードで登録します。

サブドメインを指定したいので、Return Path を指定します。

not_used_cname

各設定について

  • Use automated security は、SPF/DKIMに関するレコードの制御を SendGrid に任せるかどうかを指定する機能です。レジストラによっては、CNAMEレコードにアンダースコアが使用できない場合があるので、OFFにすることで、MXレコードとTXTレコードで設定が行えるようになります。

  • Use custom return path は Return-Path に付加するサブドメインを指定する機能です。チェックしない場合、SendGrid側でランダムに生成します。 xxxx.YOUR_DOMAIN の xxxx 部分がランダムなものになります。

  • Use a custom DKIM selector は、異なるセレクタを用意することで、同一ドメインに対して複数の公開鍵で運用することができる設定です。複数アカウントで同一ドメインに対して Domain Authenticate 設定を行う場合などに利用します。

DNS レコードが表示されるので、これらを Route53 に登録します。(CNAMEの場合も同様です。)

mx_txt_records

注意として、新しいコンソールの Route53 で この MX レコードを追加しようとすると MX record doesn't have 2 fields といったエラーが表示されて作成できません。(2020年10月16日時点)

このエラーに身に覚えがない場合、古いコンソールにしてレコードを作成しましょう。(一度古いコンソールで作成すると、新しいコンソールでも作成できます) *1

old_route53_console

作成した Python スクリプトの from_email='hoge@XXXX.YOUR_DOMAIN', 箇所を先ほど設定したサブドメインに書き替えて、再び送信してみます。

ちゃんと設定できているのが分かります。

最後に

SendGrid のドキュメントはキャプチャ付きでかなり親切で分かりやすいです!(このブログはドキュメントに毛が生えた程度です。) 設定前と設定後についてもキャプチャ付きで掲載されています。

以上です。

どなたかのお役に立てば幸いです。

参考

脚注

  1. https://stackoverflow.com/questions/63645408/configuring-gsuite-to-work-with-route-53-mx-record-doesnt-have-2-fields-err