開発者のためのメール認証
2024年6月30日
著者: Ahona Rudra
翻訳: 岩瀨 彩江
この記事はPowerDMARCのブログ記事 Email Authentication for Developers の翻訳です。
Spelldataは、PowerDMARCの日本代理店です。
この記事は、PowerDMARCの許可を得て、翻訳しています。
メール認証とは、メール送信者の身元を確認し、送信中にメールが改竄されていないことを保証するプロセスです。
開発者としては、さまざまなメール認証方法を理解し、それらを正しく実装することが、メール詐欺を防ぎ、メールの到達率を高めるために重要です。
このブログでは、異なるメール認証方法と、それらを開発者としてどのように実装するかについて解説します。
重要なポイント
- メール認証は、送信者の身元を確認し、メッセージの完全性を確保するために不可欠です。
- SPF、DKIM、DMARC を実装することで、メールの到達率を大幅に向上させ、スパムに関する苦情を減らすことができます。
- メール認証の手法は、マーケティングキャンペーンの成果に関する貴重な洞察を提供することができます。
- 認証済みのメールリストを維持することで、データベースのサイズや管理コストを削減し、コスト削減につなげることができます。
- 各認証方法の限界を理解することは、包括的なメールセキュリティ戦略を構築する上で極めて重要です。
なぜメール認証が重要なのでしょうか?
開発者にとってのメール認証とは、自分のドメインから送信されるメールが正当なものであることを保証するプロセスです。
ここでは、これらのプロトコルに投資すべき主な5つの理由を見ていきましょう。
- 1.バウンス率の低減
-
メール認証は、データベース内のメールアドレスを確認し、アカウントがアクティブか休止中かをリアルタイムでテストすることで、メールの到達率を向上させます。
これにより、目的の受信者の受信箱にメールが届く確率が低下する可能性を減らします。 - 2.正確なインサイト
- ツールを使用してメーリングリストを整理することで、マーケティングキャンペーンに関する信頼性が高く、実用的な分析結果を得ることができます。
- 3.コストの節約
-
メールを送信するためには、メールの保存やデータベースの管理に費用がかかります。
開発者がアプリケーション内でこれらのプロトコルを実装することで、メールリストが整理され、データベースのサイズが縮小されるため、コストを節約することができます。 - 4.高い投資利益率(ROI)
-
開発者がメール認証を詳細に理解することで、バウンス率を低減でき、その結果としてより高いROI(投資利益率)を得ることができます。
メールのバウンスは、メールマーケティングに投じた資金の無駄を意味します。 - 5.顧客および見込み顧客からのスパム苦情の減少
-
2022年には、世界中で送信されたメールのうち約49%がスパムとしてマークされました。
理想的には、1つのアカウントから送信される5,000通のメールにつき、スパム苦情は5件未満であるべきです。
メール検証プロセスはスパムメッセージを検出し、通知を行うことで、迅速な対応による制御を可能にします。
SPFとは何か?
開発者にとってのメール認証は、SPF(Sender Policy Framework:送信者ポリシーフレームワーク)の理解と実装から始まります。
このプロトコルは、あなたのドメイン名を使用してメールを送信することが許可されたサーバのリストを作成・更新するよう求めることで機能します。
このリストはDNSサーバに追加され、受信者側のサーバが送信者のサーバがそのリストに含まれているかどうかを確認します。
リスト外のIPアドレスから送信されたすべてのメールは、SPFメール認証に失敗します。
優れたC#開発者は、SPFメール認証の重要性を理解しており、安全で信頼性の高いメール通信を実現するために簡単に実装することができます。
これらすべてには、SPFレコードが必要です。
SPFレコードとは、管理者がDNSに任意のテキストを入力できるTXTレコードのことです。
SPFレコードタグとは何か?
| タグ | 目的 |
|---|---|
Version (v) | SPFのバージョンを表し、SPFレコード内で最初に記述されるタグです。 |
mx | MXレコードは、ドメインの代わりにメールを受け取るサーバを指定します。 各サーバには、メッセージを受け取るためのIPアドレスと優先度(priority)値が設定されています。 |
a | 送信者のIPアドレスを持つドメインで、AレコードまたはAAAAレコードを照会する際に使用されます。 |
ptr | 送信元IPアドレスの逆引きホスト名またはサブドメインを使用して、対象のドメイン名を指定します。 MXレコードが1つだけの場合に使用されますが、このタグは RFC 7208 により 使用が推奨されていません。 |
ip4 | メインからメールを送信することが許可されている IPv4アドレス または IP CIDR範囲 を指定します。 |
ip6 | ドメインからメールを送信することが許可されている IPv6アドレス または IP CIDR範囲 を指定します。 |
include | このタグを使用することで、他のドメインまたはサブドメインのSPFレコード全体を含めることができます。 第三者サービスがあなたの代わりにメールを送信する場合に使用します。 |
exists | Aレコードの照会を実行して、そのレコードが存在するかどうかを確認します。 存在する場合は “pass”(認証成功)として結果が返されます。 |
all | SPF TXTレコードの末尾に追加されるタグです。 SPFレコードと一致しないメールをどのように処理するかを指定します。 一般的に使用される3つの指定方法があります。
|
SPFの制限と課題
SPFは、あなたの会社名を騙って行われるあらゆる種類のフィッシング攻撃やスパム攻撃に対抗するには十分ではありません。
したがって、開発者としてメール認証について学ぶ際には、SPFの制限を理解することに重点を置く必要があります。
DNSサーバのバリデータリソース(帯域幅やCPUなど)への過負荷を防ぐために、10回までのルックアップ制限 が設けられています。
この制限に達すると、メールサーバはそれ以上の処理を行わず、SPF Permerror(恒久的エラー) が発生します。
この制限を超えると、メールが目的の受信者の受信箱に届く確率が下がり、配信率に悪影響を及ぼします。
この制限内に収めるためには、次の対策を取ることが推奨されます。
- 使用していないサービスを削除する
- デフォルトのSPF値を削除する
ptrメカニズムの使用を避けるmxメカニズムの使用を避ける- IPv6またはIPv4を使用する
- SPFレコードの「フラット化」を行わない
もう1つの制限として、SPFレコードは特定の Return-Pathドメイン に適用され、Fromアドレス には適用されないという点があります。
攻撃者はこのサイバーセキュリティ上の脆弱性を悪用し、Fromアドレスを偽装することでフィッシング攻撃を実行します。
DKIMとは何か?
DKIM(DomainKeys Identified Mail)とは、暗号化方式を用いてメールを認証するプロトコルのことです。
ドメイン管理者はDNSにDKIMレコードを追加し、公開鍵と秘密鍵のペア を受け取ります。
送信元のメールサーバは秘密のDKIM秘密鍵を保持しており、受信側のメールサーバはペアのもう一方である公開DKIM鍵を使用して署名を検証します。
これらのDKIM署名はメールとともに転送され、メール転送チェーン(forwarded mail chain) 上でも機能します。
DKIMの整合性(アライメント)が失敗すると、ドメインのメール到達率が低下し、メールがスパムフォルダに入る、または受信者のメールボックスに拒否されるといった問題が発生します。
DKIMタグとは何か?
DKIMタグには、DKIMタグクラスターの一部として多くの非公式な要素が含まれています。 これらのタグは、必須タグ(required tags) と 任意タグ(optional tags) に分類されます。
ここでは、必須タグの用途について説明します。 その他のタグの詳細については、こちらをクリックして学ぶことができます。
必須タグ(Required Tags)
これらのタグは、検証に必須となるもので、受信者のメールボックスはこれらのタグがないメールを拒否します。
v=-
使用されているDKIM標準のバージョンを表すタグです。
この値は常に「1」に設定されます。 a=-
署名の作成に使用される暗号アルゴリズムを表すタグです。
一般的にその値は rsa-sha256 ですが、CPU性能が低いコンピュータでは rsa-sha1 を使用することもできます。
ただし、rsa-sha1 はセキュリティ上の脆弱性があるため、専門家は使用を推奨していません。 s=-
ドメインのDNSで公開鍵を検索するために使用されるセレクターレコード名(selector record name)を指定するタグです。
ドメイン管理者またはアプリ開発者は、このフィールドに名前または番号を入力する必要があります。 d=-
セレクターレコードと組み合わせて公開鍵を特定するために使用されるドメインを指定します。
この値は、送信者が使用するドメイン名と同じになります。 b=-
ヘッダーのハッシュデータに使用されるタグです。
通常、h= タグと組み合わせてDKIM署名を生成します。
この値は常に Base64 でエンコードされています。 bh=-
メール本文のハッシュ値を保持する必須のDKIMタグです。
値は、使用されるアルゴリズムによって決定されたハッシュを示す文字列です。 h=-
署名アルゴリズムで参照されるヘッダーの一覧を示すタグです。
この値は削除も変更もできません。
DKIMの制限と課題
あなたのドメインから送信された正当なメールであっても、転送された場合にはモバイルデバイスで拒否されることがあるという問題があります。
受信側のサーバは、認証情報を読み取る際にそれらのメールを偽造メッセージ(forged messages)と誤認してしまうことがあるためです。
DMARCとは何か?
開発者向けメール認証の理解の最終段階となるのが、DMARC(Domain-based Message Authentication, Reporting, and Conformance) の学習です。
DMARCは、SPFおよび/またはDKIMの結果と連携して動作し、メール認証チェックに失敗したメールをどのように処理するかを決定します。
DMARCポリシーでは、以下の3つの設定を選択できます。
p=none:認証に失敗したメールに対して何の処理も行いません。p=quarantine:認証に失敗したメールをスパムとしてマークします。p=reject:認証に失敗したメールの受信を拒否します。
最初はポリシーを 「none」 に設定し、すべての正当なメールが検証チェックを通過しているかを監視することから始めるとよいでしょう。 その後、状況に応じて 「quarantine」 または 「reject」 に設定を変更することができます。
DMARCタグとは何か?
ドメイン所有者は、以下のDMARCタグをDMARCレコード内で指定することができます。
v:-
DMARCプロトコルのバージョンを示すタグで、値は常に
v=DMARC1になります。 pct:- ポリシーモードに準拠するメールの割合(パーセンテージ)を指定します。
p:-
DMARCのポリシーモードを指定するタグです。
設定可能な値はreject、quarantine、noneのいずれかです。 rua:- 任意タグで、DMARC集計レポート(ruaデータ)を送信する先のメールアドレスまたはWebサーバを指定します。
ruf:- DMARCフォレンジックレポート(rufレポート)を送信する宛先アドレスを指定します。
fo:- 任意タグで、ドメイン所有者が選択できる失敗/フォレンジックレポートのオプションを指定します。
aspf:-
SPFアライメントモードを設定します。
値は strict(
s) または relaxed(r) のいずれかです。 adkim:-
DKIMアライメントモードを設定します。
この値も strict(s) または relaxed(r) のいずれかになります。 rf:- フォレンジックレポートの出力形式を指定するタグです。
ri:-
任意のDMARCタグで、既定値は86400(秒)です。
これは、レポート組織がドメイン所有者に送信する連続する2つの集計レポートの間隔を秒単位で示します。
まとめ
開発者にとってのメール認証は、あなたの名を騙って行われるフィッシング攻撃やスパム攻撃に対抗するために極めて重要です。
まずは、公式の送信ドメインに対してSPF・DKIM・DMARCレコードを作成し、私たちのPowerToolbox を使用して設定を開始しましょう。