Contents
前書き
SPF/DKIMの具体的な設定方法とその効果については、以下のような優れた記事が既に存在するため、本記事はその手前の部分を中心に取り扱う。
- Mark Hammer’s Blog – ドメインにSPF、DKIMを設定してSalesforceから送信するメールから「経由」を外す
- SalesforceBen – Salesforce Email Deliverability Tips: BCC Email, SPF, DKIM, DMARC
- How to improve Email Deliverability in Salesforce Lightning(※DKIM設定後もviaが消えないなどの本記事の検証結果は誤りと思われるが、全体としては優れた記事)
具体的には、以下の流れで説明していく。
- メール送受信の仕組みとその問題点
- 送信ドメイン認証技術としてのSPF/DKIM
- SPF
- DKIM
- メール送信プロセス(※認証ありVer.)
- SPF/DKIMを設定しないとどうなるのか?
- SalesforceにおけるSPF/DKIM設定
メール送信の仕組みとその問題点
メール送信は一般に以下のようなプロセスで行われる。
- 送信者がメールを作成し、送信ボタンを押す
- メールデータが送信側メールサーバーに送信される(※ASCIIコードに変換の上、SMTPプロトコルで送信)
- 送信側メールサーバーがDNSサーバーにドメイン情報を問い合わせる(※送信先メールアドレスのドメインから、受信側メールサーバーのIPアドレスを特定)
- 送信予定のメールがメールキューに格納され、順次発射される
- メールが受信側メールサーバーに到達
- メールが受信者に配信される
一言で表現すると、「名前解決によって宛先メールアドレスから送信先メールサーバーのIPアドレスを特定し、SMTPプロトコルを用いてデータを送信する」という、ただそれだけの仕組みである。
この仕組みの弱点は明らかで、送信元メールアドレス情報を改竄することで、誰でも簡単になりすましを行うことができる。
例えば、私が送信するメールの「送信元メールアドレス(Envelop-From)」としてtanaka@google.comと指定すれば、私は見かけ上Google社に勤める田中さんだ。
また、受信側メールサーバーに到達するまでのどこかの段階でメールの文面を改竄するといったことも場合により可能である。
ここで送信ドメイン認証技術としてのSPF/DKIMの必要性が立ち現れてくる。
送信ドメイン認証技術としてのSPF/DKIM
上述したような「送信者のなりすまし」や「メールの改竄」はどのようにすれば防止できるのか。
その答えが送信ドメイン認証技術としての「SPF(Sender Policy Framework)」と「DKIM(DomainKeys Identified Mail)」である。
以下、順に確認していく。
SPF(Sender Policy Framework)
SPFとは、メールの送信元IPアドレスが、送信者により事前登録されているIPアドレスに一致するかどうかを照合する認証技術である。
◼️送信側の事前設定
・許可するIPアドレスのリストを含むSPFレコードをドメインのDNS設定に追加(=TXTレコードの作成)
◼️受信者側の認証の流れ
受信メールサーバーがメールを受信したタイミングで、上記TXTレコードを取得し、送信元IPアドレスと登録されているIPアドレスを照合。
DKIM(DomainKeys Identified Mail)
DKIMとは、メールの送信時に付与された電子署名が、送信者により事前登録された公開鍵での検証結果に一致するかどうかを照合する認証技術である。
◼️送信側の事前設定
・公開鍵と秘密鍵の生成
・公開鍵を含むDKIMレコードをドメインのDNS設定に追加
・送信するメールにDKIM署名が追加されるよう、メールサーバーの設定を変更
◼️受信者側の認証の流れ
受信メールサーバーがメールを受信したタイミングで、上記DKIMレコードを取得し、「メールの内容」と「電子署名の公開鍵を用いた復号化結果」が一致することを確認
メール送信プロセス(※認証ありVer.)
本記事の冒頭で紹介したメール送信プロセスにSPF/DKIMの認証プロセスを追加すると以下のようになる。
- 送信者がメールを作成し、送信ボタンを押す
- メールデータが送信側メールサーバーに送信される(※ASCIIコードに変換の上、SMTPプロトコルで送信)
- 送信側メールサーバーがDNSサーバーにドメイン情報を問い合わせる(※送信先メールアドレスのドメインから、受信側メールサーバーのIPアドレスを特定)
- DKIM署名を付与する
- 送信予定のメールがメールキューに格納され、順次発射される
- メールが受信側メールサーバーに到達
- 受信側メールサーバーでメールが信頼できるかどうかチェックする
- SPFチェック
- DKIMチェック
- (メールサーバー独自の)スパムフィルタリング
- メールが受信者に配信される
SPF/DKIMを設定しないとどうなるのか?
ここまでの内容で、メール送信はその仕組み上「なりすまし」や「内容の改ざん」がやりたい放題なのでSPF/DKIMの設定は事実上必須であるということが明らかになった。
ただそれでは、SPF/DKIMの設定をしなかった場合にどうなるのだろうか?
例えば、Salesforceの「組織のメールアドレス(Org-Wide Address)」を登録しておきながら、それとセットでSPF/DKIM設定をしていないような場合、どうなってしまうのだろうか?
結論、(受信側がGmailを利用している場合)以下の三つの影響が発生する。
①受信メール上部に「via(経由)」が表記される
②受信メール上部に「spoof(なりすまし)」の警告が表示される
③受信メールサーバー側で弾かれて、そもそもメールが到達しない可能性がある
※Googleの場合、SPF/DKIM認証を行わずにGoogle個人メールアドレス宛にメールを送信すると、自動的に弾かれて送信元メールアドレス宛に以下のような不達メールが届くことになる。
自社社員宛にのみメールを送信している場合はお目にかかる機会はないだろうが、Chatter UserやCommunity Userとして(個人メールアドレスを利用している)外部ユーザを招待している場合、SPF/DKIM設定を行っていないとこの不達メールに出くわす可能性がある。
差出人: Mail Delivery System <mailer-daemon@mailerdaemon.mta.salesforce.com>
件名: Undeliverable: 〜さんが投稿であなたにメンションしました
日付: 2023年5月01日 19:45:28 JST
宛先: test@regardie.comThis message was created automatically by the mail system.
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:test@gmail.com (Undelivered)
This mail is unauthenticated, which poses a security risk to the sender and Gmail users, and has been blocked. The sender must authenticate with at least one of SPF or DKIM. For this message, DKIM checks did not pass and SPF check for [ドメイン名] did not pass with ip: [IPアドレス]. The sender should visit https://support.google.com/mail/answer/81126#authentication for instructions on setting up authentication.
—— This is a copy of the original message, including all headers. ——
[originalのメール]
SalesforceにおけるSPF/DKIM設定
◼️SPFの設定
①以下のvalueを持つTXTレコードをDNS側で登録する
v=spf1 include:_spf.salesforce.com ~all
◼️DKIMの設定
①Setup>Email>DKIM KeysからDKIM鍵を生成する
②上記で出力されたCNAMEレコードをDNS側で登録する
③SF側のDKIM鍵の画面で”Activate”をクリックする
◼️上記DKIM設定手順に関する補足
上述のSalesforceでのDKIM設定手順には「公開鍵(のTXTレコード)をDNSレコードとして登録する」という必要不可欠な手順が抜けているように思われるかもしれないが、それはSalesforceが裏側でやってくれている。
CNAMEレコードはまさにSalesforce側で登録した公開鍵のTXTレコードへリダイレクトするためのDNSレコードである。
Salesforceの「DKIM Keys」の機能はよくできており、DKIM鍵の生成と有効化によって以下の全てを裏側で自動的に処理してくれている。
・公開鍵と秘密鍵の生成
・公開鍵を含むDKIMレコードをドメインのDNS設定に追加
・送信するメールにDKIM署名が追加されるよう、メールサーバーの設定を変更
参考
Carpe Diem – メールにおけるSPFのドメイン認証の仕組み
Salesforce Help – メールのシステム管理者詳細の管理
Mark Hammer’s Blog – ドメインにSPF、DKIMを設定してSalesforceから送信するメールから「経由」を外す
SalesforceBen – Salesforce Email Deliverability Tips: BCC Email, SPF, DKIM, DMARC