Ghost (Pro)のSPF・DKIM・DMARC設定。
Ghost(Pro)はマネージド型のパブリッシングプラットフォームで、ニュースレターはGhost自身が管理するMailgun基盤を通じてGhostが代わりに送信します。そのため、セルフホスト版のGhostとは異なり、MailgunのAPIキーやリージョンを入力することはありません。初期状態のメールはGhostの共有送信ドメインghost.ioから送られるため、購読者には「newsletter@yourdomain.com via ghost.io」と表示されます。自社ドメインとして送信するには、Custom sending domain(Publisherプラン以上)を有効にします。Ghost Adminがアカウントごとに少数のDNSレコード(専用の送信用サブドメインに置くDKIMレコードとSPFレコード)を生成するので、これをDNSにコピーし、さらにDMARCレコードを自分で追加します(Ghostはその存在を必須としています)。ルートドメインに貼り付ける共通のSPFレコードはありません。レコードはアカウント固有で、Ghost Admin内に表示されます。確認が完了すると、ニュースレターにはGhostを通じて自社ドメインの署名が付き、DKIMのアライメントが一致してDMARCに成功します。「via ghost.io」の表示は、約6週間の自動的なレピュテーションのウォームアップ後に消えます。同じレコードはGhostのメンバー向け・スタッフ向けトランザクションメールの認証にも使われ、こちらはすぐに自社ドメインへ切り替わります。
Ghost (Pro)を認証すべき理由
Custom sending domainを設定すると、ニュースレターはGhostの共有レピュテーションから離れ、自社のレピュテーションで送信されるようになります。これは欠かせない対応になりつつあります。2024年2月以降、GmailとYahooは、すべての大量送信者(1日あたり約5,000通以上)に対し、SPF、DKIM、DMARCにアライメントが一致した状態で成功することを義務付けています。Microsoftも2025年に、Outlook/Hotmail/Liveに同様の要件の適用を広げました。ニュースレターは、まさにこれらのルールが対象とする大量メールです。Custom sending domainを設定するまで、Ghost(Pro)はすべての号をghost.ioから送信します。受信者には「via ghost.io」の注記が表示され、SPFとDKIMのアライメントは自社ドメインではなくghost.ioと一致するため、こうしたメールは自社ドメインのDMARCの助けになりません。積み上げた送信レピュテーションも、Ghostの共有ドメインを使う他のすべてのパブリケーションと共有されます。Custom sending domainを使えば、この問題の核心が解決します。Ghostは送信用サブドメインのDKIMでニュースレターに署名します(組織ドメインとアライメントが一致します)。これにより、Fromアドレスは暗号的に自社のものとなり、DMARCに成功し、レピュテーションも自社に蓄積されます。Ghost特有の点として知っておきたいのは、これらのレコードの対象がニュースレターだけではないことです。メンバー向け・スタッフ向けのトランザクションメール(マジックリンクによるサインイン、有料メンバーシップの領収書、スタッフの招待、コメント通知)もCustom sending domainに移行し、ウォームアップなしですぐに切り替わります。ニュースレターは逆で、Ghostが段階的にウォームアップするため、トランザクションメールが自社ドメインで完全に認証された後も、約6週間は各号の一部がghost.ioから送信されます。
Ghost (Pro)におけるSPFの実情
Ghost(Pro)はアカウント単位の送信者で、共通のincludeを使うサービスではありません。「include:ghost.io」も、全顧客がルートドメインに貼り付ける共通のSPFレコードも存在しません。Ghostは裏側で自ら管理するMailgunを運用しているため、Ghost Adminに表示されるレコードはMailgun形式で、送信用サブドメインに固有のものです。具体的には、DKIMレコードと、v=spf1 include:mailgun.org ~allというSPFのTXTレコードです。重要なのは置き場所で、Ghostが指定する専用の送信用サブドメイン(send.やmail.などのホスト)に置き、ルートドメインのSPFレコードには決して入れません。理由は2つあります。1つ目に、普段のメールボックスのメール(Google WorkspaceやMicrosoft 365などのyou@yourdomain.com)は、ルートドメインのSPFとDKIMをそのまま維持できます。Ghost(Pro)は受信トレイをホストしておらず、そのレコードがメールサービスのものと衝突することもありません。2つ目に、include:mailgun.orgはルックアップの消費が多いincludeです。実際に確認したところ、1行でMailgunのUSとEUの範囲をカバーするため、ネストしたDNSルックアップ約5回分に展開されます。送信用サブドメインに置けば、この負荷はサブドメイン自身のSPFレコードにとどまり、ルートドメインに対するRFC 7208のDNSルックアップの10回制限を1回も消費しません。include:mailgun.orgをルートドメインにコピーしてはいけないのは、まさにこのためです。(セルフホスト版のGhostは異なります。自分のMailgunアカウントを用意し、Settings → Email newsletterでリージョン、ドメイン、非公開APIキーを入力したうえで、同じ形式のレコードを自分で追加します。Ghost(Pro)ではMailgunアカウントをGhostが所有し、公開すべきDNSレコードを提示するだけです。)
設定手順
- 1
プランとカスタムドメインを確認
Ghost(Pro)のCustom sending domainには、Publisherプラン以上が必要です。また、この項目は、カスタムドメインをパブリケーションに接続済みの場合にのみ表示されます(デフォルトのyoursite.ghost.ioのURLでは表示されません)。Starterプランの場合は先にアップグレードしてください。ghost.ioのURLのままの場合は、先にカスタムドメインを接続すると、この項目が表示されます。
- 2
Custom sending domain → Set upを開く
Ghost Admin内のGhost(Pro) → Domainエリアを開き、Custom sending domainセクションを見つけてSet upをクリックします。Ghostがニュースレター専用の送信用サブドメインを決め、公開すべき正確なDNSレコードを表示します。これらはアカウント固有なので、一般的なチュートリアルではなく、この画面からコピーしてください。
- 3
DKIMレコードとSPFレコードをコピー
Ghostには、追加するレコードとして、送信用サブドメイン配下の<selector>._domainkeyホストに置くDKIMレコードと、そのサブドメインに置くSPFのTXTレコード(v=spf1 include:mailgun.org ~all)が表示されます。各ホストと値を正確にコピーしてください。DKIMセレクターとターゲットはアカウント固有で、推測できません。
- 4
送信用サブドメインにDKIMレコードを追加
DNSホストで、Ghostの表示どおりにDKIMレコードを作成します。ほとんどのアカウントでは、鍵をMailgunに委任するCNAMEです(これによりGhostがローテーションできます)。アカウントによってはDKIMのTXTレコード(k=rsa; p=…)が表示されます。表示されたものをそのまま公開し、レコードタイプは変更しないでください。
- 5
送信用サブドメインにSPFレコードを追加
SPFのTXTレコード(v=spf1 include:mailgun.org ~all)は、Ghostが指定した送信用サブドメインに追加します。ルートドメインではありません。そのサブドメインに万一SPFレコードがすでにある場合は、includeをそこにまとめてください。1つのホストにSPFレコードを2つ公開してはいけません(PermErrorになります)。通常のメールボックス用のルートドメインのSPFレコードは、そのままで構いません。
- 6
CloudflareのCNAMEをグレーのクラウドにする
DNSがCloudflareにあり、DKIMレコードがCNAMEの場合は、「DNS only」(グレーのクラウド)に設定します。オレンジのクラウドでプロキシが有効なCNAMEはMailgunに解決されず、Ghostの確認チェックに失敗し続けます。
- 7
DMARCレコードを公開(必須)
GhostはDMARCレコードを作成しませんが、Custom sending domainの有効化にはその存在を必須としています。ルートドメインの_dmarcにTXTレコードを追加してください。Ghostの例はv=DMARC1; p=none;ですが、実用的にするにはレポートの送信先を追加します:v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com。p=noneは監視のみのため、アライメントを確認している間、影響は何もありません。_dmarcレコードはドメイン全体で1つだけにしてください。
- 8
Ghost Adminで緑のチェックマークを待つ
Custom sending domainの画面に戻ると、Ghostがレコードをチェックします。緑のチェックマークは検出済み、赤い感嘆符は未検出を示します。DNSの反映には通常15分~24時間かかります。赤のままのレコードがあれば、画面を再度確認してください。
- 9
テストを送信し、ウォームアップを見込む
自分宛てにテストのニュースレターを送り、Show originalで開きます。送信用サブドメインで署名されたDKIM: PASS、SPF: PASS、DMARC: PASSが表示され、「via ghost.io」がなければ成功です。重要な点として、最初の約6週間、Ghostは各ニュースレターの一部をghost.ioから送信して新しいサブドメインをウォームアップします。そのため、この期間は一部の受信者(自分のテストを含む)にghost.ioと表示されることがありますが、想定どおりで、レコードの不具合ではありません。一方、メンバー向けのマジックリンクのメールはすでに自社ドメインから送信されます。トランザクションメールにウォームアップはありません。
追加するレコード
正確な値はGhost (Pro)のセットアップウィザードで生成されます。以下は、DNSホストに追加するレコードの形式を示したものです。
| タイプ | ホスト | 値 |
|---|---|---|
| TXT | send | v=spf1 include:mailgun.org ~allGhostが指定する専用の送信用サブドメインに置くSPFレコードです。ホストは例なので、正確なサブドメインはGhost Adminからコピーしてください。サブドメインに置き、ルートドメインのSPFレコードには入れません。Ghostが代わりにMailgunを運用しているため、include:mailgun.orgはMailgunの共通のincludeです。 |
| CNAME | krs._domainkey.send | krs._domainkey.<account>.dkim.mailgun.orgDKIM鍵は、自動でローテーションされるようMailgunに委任します。例です。セレクター(krs、k1、ランダムなトークンなど)とターゲットはアカウント固有で、Ghost Adminに表示されます。アカウントによってはDKIMのTXTレコード(k=rsa; p=…)を公開します。Ghostの表示に従ってください。 |
| CNAME | email.send | mailgun.org(任意)自社ドメインでの開封・クリックのトラッキング用です。Ghost Adminに表示されている場合にのみ追加し、Cloudflareではグレーのクラウドにします。 |
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com自分で追加するレコードです。Ghostは作成しませんが、Custom sending domainの有効化にはその存在を必須としています。ドメインごとに1つ、ルートドメインに置き、p=noneから始めます。Ghostの例は最小形のv=DMARC1; p=none;です。 |
ルートドメインのSPF(v=spf1)のTXTレコードは1つだけにし、すべての送信元をこの1行にまとめてください。SPFレコードが2つあると、それ自体がエラーになります。
DNSルックアップの10回制限
SPFのDNSルックアップは10回までに厳格に制限されており、超えるとpermerrorを返して、どの受信側でも検証されなくなります。Ghost (Pro)の設定がこの上限のうち何回を消費するかは、次のとおりです。
Ghost (Pro)の推奨設定はルックアップを消費しません。10回すべてを、includeが必要な他の送信元に使えます。
DKIM
Ghost(Pro)のニュースレターで要となるのはDKIMです。自社ドメインとアライメントが一致し、DMARCの成功を担うのはDKIMだからです。Custom sending domainを有効にすると、Ghostは(自ら管理するMailgunを通じて)送信用サブドメインにアカウント固有のDKIM鍵を生成し、そのサブドメイン配下の<selector>._domainkeyホストに公開するレコードを表示します。ほとんどのアカウントでは、鍵をMailgunに委任するCNAMEです。貼り付ける静的な鍵ではなくCNAMEなので、秘密鍵はMailgunが保持し、DNSを編集し直さなくても、Mailgunがそのセレクターの裏で2048ビットの公開鍵をローテーションできます。アカウントによっては静的なDKIMのTXTレコード(k=rsa; p=<long base64 public key>)が表示されます。動作は同じですが、再生成するまで固定されたままです。いずれの場合も、送信するニュースレターにはd=<your-sending-subdomain>で署名されます。緩和されたDMARCアライメントではサブドメインとその親を同じ組織ドメインとして扱うため、このDKIM署名はyourdomain.comのFromアドレスとアライメントが一致し、DMARCの要件を満たします。セレクターと値はアカウント固有で推測できないので、Ghostの表示どおり正確にコピーしてください。DNSがCloudflareにある場合は、DKIMのCNAMEが解決されるよう「DNS only」に設定します。Ghost(Pro)では、鍵の生成、保管、ローテーションを自分で行うことはありません。これらはGhostが管理するMailgunの役割です。
DMARC
DMARCは別のポリシーレコードで、Ghostが代わりに公開することはありません。さらにGhost(Pro)では必須です。Custom sending domainを有効にするには、ドメインにDMARCレコードが必要なため、任意の追加設定ではありません。DNSホストで、ルートドメインの_dmarc.yourdomain.comに追加します。Ghostのヘルプには最小形のv=DMARC1; p=none;が示されていますが、実際に状況を把握できるよう、レポートの送信先を含めてください:v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com。p=noneは監視のみのため、配信には影響しません。その間に集計レポート(rua)を使って、Ghostのニュースレター(およびドメインを使う他のすべての送信元)が自社ドメインとアライメントの一致したDKIMに成功していることを確認します。ルートドメインのDMARCレコードは組織ドメインのルールによりサブドメインにも適用されるので、この1つで送信用サブドメインもカバーされます。サブドメインに2つ目の_dmarcを追加しないでください。利用するサービスの数にかかわらず、_dmarcはドメイン全体で1つだけにします。約6週間のウォームアップ中はghost.ioも送信元として表示される点に注意してください。1~2週間のレポートでGhostがアライメントの一致した安定した送信元として確認できたら、p=noneからp=quarantine、最終的にp=rejectへと段階的に引き上げます。攻撃者によるドメインのなりすましを実際に防ぐのは、この段階です。
正しく設定できたか確認する
Ghostの緑のチェックマークだけで判断しないでください。チェックマークが示すのはレコードが解決されることで、実際のニュースレターが認証されることではありません。自分宛てにテストのニュースレターを送り、Gmailで開いて⋮ → Show originalを選びます。送信用サブドメイン(ghost.ioではなく)で署名されたDKIM: PASS、SPF: PASS、DMARC: PASSと表示され、送信者の行から「via ghost.io」の注記が消えていれば成功です。Ghost特有の注意点が1つあります。約6週間のレピュテーションのウォームアップ中、Ghostは意図的に各ニュースレターの一部をghost.ioから送信し続けます。そのため、初期のテストや一部の購読者の報告でghost.ioが表示されるのは想定どおりの動作で、設定ミスではなく、ウォームアップの完了とともに解消します。テストにはマジックリンクのメールではなく、実際のニュースレターを使ってください。トランザクションメールはすぐに送信ドメインへ移行するので、ニュースレターのウォームアップが終わる前に成功してしまいます。Qualisendのドメイン診断で送信用サブドメインをチェックし、DKIM、SPF、DMARCの各レコードが問題なく解決されることを確認します。DMARCの集計レポートが届き始めたら、DMARCレポート解析にレポートをドロップします。Ghost/Mailgunの送信用サブドメインが、アライメントの一致した成功している送信元として表示されるはずです(ウォームアップ中はghost.ioも併せて表示されます)。
よくある注意点
- 適用範囲
Ghost(Pro)はセルフホスト版のGhostとは別物です。Ghost(Pro)ではMailgunのAPIキー、リージョン、ドメインを入力することはなく、GhostがMailgunアカウントを所有して設定します。Settings → Email newsletterのMailgun関連の項目はセルフホスト環境用です。Ghost(Pro)ではCustom sending domainの手順を使い、操作するのはDNSレコードだけです。
- DNS設定
この機能には利用条件があります。Custom sending domainには、Publisherプラン以上と、パブリケーションに接続済みのカスタムドメインの両方が必要です。Starterプランの場合や、yoursite.ghost.ioのURLのままの場合は、Set upボタンが表示されません。
- 適用範囲
約6週間のウォームアップは正常な動作です。レコードの確認後も、Ghostは新しいサブドメインでレピュテーションを築く間、各ニュースレターの一部をghost.ioから送信します。そのため、「via ghost.io」が数週間残ること(初期のテストに表示されることも含む)は想定どおりで、レコードの不具合ではありません。これを解消しようとしてDNSをやり直さないでください。
- 適用範囲
認証されるのはニュースレターだけではありません。トランザクションメールも認証されます。メンバー向け・スタッフ向けのメール(マジックリンクによるサインイン、メンバーシップの領収書、スタッフの招待、コメント通知)もCustom sending domainに切り替わり、ニュースレターとは異なりウォームアップなしですぐに移行します。そのため、マジックリンクのメールにはすぐに自社ドメインが表示されます。これは想定どおりですが、ニュースレターの移行が完了したことを意味するものではありません。移行状況は、ログインメールではなく実際のニュースレターで判断してください。
- 適用範囲
Ghost(Pro)は受信トレイをホストしません。普段のyou@yourdomain.comのメールはGoogle Workspace、Microsoft 365などにあり、ルートドメインのSPF、DKIM、DMARCを独自に持っています。Ghostのレコードは別の送信用サブドメインに置くものであり、追加の際にメールサービスのルートドメインのSPFやDKIMに手を加えたり上書きしたりしてはいけません。
- 認証失敗の原因
include:mailgun.orgをルートドメインのSPFレコードに入れないでください。これを置くのは、Ghostが指定する送信用サブドメインだけです。ルートドメインに置いてもニュースレターのアライメントには役立たず、SPFの10回のルックアップのうち約5回を消費します(MailgunのUSとEUの範囲をカバーするためです)。ルートドメインには一切入れないでください。
- DNS設定
CloudflareのプロキシはDKIMのCNAMEを機能させなくします。「DNS only」(グレーのクラウド)に設定してください。オレンジのクラウドでプロキシが有効なCNAMEはMailgunに解決されず、Ghostの確認は赤のままです。また、レジストラでのホスト名の二重付加にも注意してください。管理画面がドメインを自動で付加する場合は、完全なドメインではなく、Ghostが表示するラベル(サブドメイン配下の_domainkeyセレクター)だけを入力します。
SPFレコードを作成
Ghost (Pro)では、ルートドメインにSPFのinclude:を追加する必要はありません。作成ツールを使って他の送信元用のクリーンなレコードを1つ組み立て、1行に収めてください。
送信元
メールの送信に使っているサービスを検索して、それぞれチェックを入れてください。
上の検索欄で利用中のメールサービスを検索するか、してください。
このドメイン自身のサーバー
ドメインが(上記のサービスを経由せず)直接メールを送信する場合は、ドメイン自体を許可します。
その他の送信元・IP
リストにないもの(別のサービスのSPFホストや特定のIPアドレス)を追加します。
接頭辞のinclude:は自動で付加されます。サービスのドキュメントに記載されているホスト名を入力してください。
その他すべての送信元へのポリシー
上記に記載されていないサーバーからのメールを、受信側がどう処理すべきかを指定します(allメカニズム)。
送信元がまだないため、すべてのメッセージに~allポリシーが適用されます。ステップ1で利用中のサービスを追加してください。
- ルートドメインにTXTレコードとして公開します。ホストは@(ドメインそのもの)、値は上記の文字列全体です。
- SPFレコードは1つのドメインにつき1つだけにします。すべての送信元をこの1行にまとめてください。v=spf1で始まるTXTレコードが2つあると、両方とも無効になります。
- DNSルックアップは10回以内に収めてください。include:、a、mxはそれぞれ1回とカウントされ、includeは内部でさらにルックアップを発生させることがあります。ip4:とip6:はカウントされません。
送信ドメイン認証の設定が済んだら、次は検証済みのクリーンなリストへの配信です。
リストを検証Ghost (Pro)のSPFに関するよくある質問
関連記事
ホスティング・Webサイトの他のサービス
すべてのSPFガイド公開したら、ドメイン診断ですべてのレコードが正しく解決されることを確認し、DMARCレポート解析で自社ドメインを名乗って送信している送信元を把握します。作成ツールではすべての送信元を確認できます。ただし、認証は到達率対策の半分にすぎません。送信IPやドメインがブラックリストに掲載されていると、SPFの設定がどれほど適切でも迷惑メールに振り分けられます。そのため、ブラックリスト監視で掲載状況を確認しておくことをおすすめします。
認証の次は、リストをクリーンに保つ
SPF、DKIM、DMARCに成功すれば受信トレイに届き、クリーンなリストならその状態を維持できます。お手持ちのリストも検証してクリーニングできます。100クレジット無料、クレジットカード登録不要で始められます。