はじめに
こんにちは、株式会社レコチョク NX開発推進部 次世代プロダクト開発グループの山本です。
インディーズアーティスト向け配信サービス「Eggs Pass」の開発を担当しています。
最近新規にメールアドレスを発行する案件があり、なりすましメールへの対策として、送信ドメイン認証技術(SPF、DKIM、DMARC)に触れたので、概要と設定方法をご紹介します。
送信ドメイン認証技術
そもそも「送信ドメイン認証技術」とは何ぞやですが、日本データ通信協会の「迷惑メール相談センター」によると、
送信ドメイン認証技術は、メール送信者情報のドメインが正しいものかどうかを検証することができる仕組みです。
現在のメール送信においては、送信者情報を詐称することが可能で、実際、多くの迷惑メールは他のアドレスになりすまして送られています。送信ドメイン認証技術が普及し、送信側・受信側メールサーバ双方で広く実装されるようになれば、送信者情報を詐称しているメールの判定が可能となり、判定結果を活用したフィルタリングにも利用することができるようになります。
引用:https://www.dekyo.or.jp/soudan/contents/taisaku/4-2.html
つまり、送信ドメイン認証技術とは、メール送信者のドメインが正しいかどうかを検証する仕組みです。
そのため、迷惑メールの中でも、いわゆる「なりすましメール」に対して有効なものです。
実際、所有していないメールアドレスも送信できる配信サービスが存在したりもするので、サービスでメールアドレスを運用する以上、なりすましのリスクは避けられません。
また、
GoogleとYahooに送信する全ての送信者は、
- 送信ドメイン認証(SPF、DKIM、DMARC)に対応すること
メールマガジンなどのバルクメールは、ワンクリックで登録解除ができるリンクを記載すること
引用:https://ent.iij.ad.jp/articles/6076/#a01
のように、受信側が使用しているメールサービスもスパム判定が厳しくなっている状況もあり、未対応の場合、スパム・迷惑メールとして判定され、正しく受信者にメールが届かなくなる可能性が高まります。
SPF
SPFは、受信したメールのIPアドレスを基に、送信者情報のドメインが正当か検証します。
受取先メールサーバーが、受信したメールの「Envelope From」のドメインのDNSサーバーに問い合わせ、送信元メールサーバーのIPアドレスが正しいかを確認することで、認証を行なっています。
SPFの設定としては、メールドメインを管理しているDNSサーバーに、送信元メールサーバーのIPアドレス情報を記載した「SPFレコード」というものを登録しておく必要があります。
例えば、「@example.jp」のメールアドレスを二つのメール配信サービスで使用する場合、以下のようなTXTレコードを登録します。
example.jp. IN TXT "v=spf1 include:〇〇.XXXX.com include:△△△.◻︎◻︎.jp -all" |
“v=spf1“の部分はバージョンを表し、“-all“は、設定されたアドレス以外は該当ドメインとして認めない、という意味です。
“include:“の部分は、送信側のIPが許可されているかどうかを確認するときに、SPFレコードが照会されるドメインを指定します。
例の場合、二つのメール配信サービスで「@example.jp」ドメインが使用される想定なので、二つのincludeが入っています。
DKIM
DKIMは、メールが改ざんされていないかを確認する電子署名を付与する方式の送信ドメイン認証技術です。
送信サーバーが「秘密鍵」を用いて暗号データ(電子署名)を作成し、メールと一緒に送付します。受信サーバーは送信者によって公開された「公開鍵」を用いて暗号データを復号し、復号データが本文等と一致すれば正当なメールと判断されます。
DKIMの設定としては、以下工程が必要になります。
- ペアの「公開鍵」と「秘密鍵」を作成。
- 使用するメール配信サービスにて設定を行い、送信メールサーバーに「秘密鍵」を設置。
- ドメインを管理しているDNSサーバーに「公開鍵」としてDKIMレコードを登録。
「秘密鍵」の設定方法は使用するメール配信サービスによって異なります。
「公開鍵」のDKIM レコードの例としては、以下のようになります。
XXX._domainkey.example.jp. IN TXT "v=DKIM1; k=rsa; p=...(公開鍵)" |
DKIM レコードは、SPFレコードとは異なり、”セレクタ._domainkey(上記例だとXXX._domainkey)” サブドメインに公開する必要があります。
また、“p=“の部分に、公開鍵を記述しますが、“k=rsa;“で鍵の形式にRSAを指定します。
DMARC
DMARCは、SPFとDKIMの認証結果に基づいてメールの処理方法を指示する技術です。
送信メールの認証失敗時(正当なメールと判断できないとき)に、受信者がそのメールに対してとるべき処理方法を指定します。
DMARC設定としては、ドメインを管理しているDNSサーバーに、認証に失敗した場合の処理方法のポリシーを含んだ「DMARCレコード」というものを登録しておく必要があります。
例えば、以下のようなTXTレコードを登録します。
_dmarc.example.jp. IN TXT "v=DMARC1; p=reject; pct=100; rua=mailto:〇〇@XXXX.co.jp" |
“p=“の部分に、認証失敗時の処理方法を記述し、以下3種類があります。
- p=none(何もしない=受信してよい)
- p=quarantine(隔離)
- p=reject(拒否)
“pct=“の部分は1~100の範囲で指定し、例えばpct=50なら、50%が拒否され、50%が隔離されるというような設定になります。“p=none“の場合は機能しません。
“rua=“の部分は、受信者がXMLフィードバックを送るためのURIのリストを指定します。
確認方法
設定したSPF、DKIM、DMARCが有効であるかを確認しましょう。
それぞれのレコードは、digコマンドやnslookupコマンドで存在するかを確認することが出来ます。
SPF
# dig $ dig example.jp txt | grep spf #nslookup $ nslookup -type=txt example.jp. | grep spf |
DKIM
# dig $ dig XXX._domainkey.example.jp txt | grep DKIM #nslookup $ nslookup -type=txt XXX._domainkey.example.jp | grep DKIM |
DMARC
# dig $ dig _dmarc.example.jp txt | grep DMARC #nslookup $ nslookup -type=txt _dmarc.example.jp | grep DMARC |
また、対象のドメインから受信したメールのヘッダを見ることで、設定したSPF、DKIM、DMARCが有効であるかを確認できます。
(例)Outlookの場合
まとめ
メールのドメイン認証技術に触れたのは初めてだったので、この機会に知識をつけることが出来てよかったです。