送信側で行うDMARCの設定方法について、基本的なことをざっくりと説明していきます。
メールサーバ構築手順
- 【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築
- 【Ubuntu Server 22.04】DovecotをSSL通信で暗号化
- 【Ubuntu Server 22.04】PostfixでTLSを有効化して通信を暗号化
- 【Ubuntu Server 22.04】PostfixにDKIMの設定を追加
- 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
- 【迷惑メール対策】ざっくり説明DMARCの設定方法(送信側)
- 【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)
- 【Ubuntu Server 22.04】PostfixとOpenDMARCでDMARC認証を行う方法
DMARC(Domain-based Message Authentication, Reporting & Conformance)について
DMARCとはメールの送信元が正しいかどうか、なりすましを行っていないかの確認するための方法のことで、確認には迷惑メール対策のSPFとDKIMの認証結果を使い、SPFおよびDKIMで認証されたドメインがメールのFromヘッダーと同じかどうかを確認して同じ場合は認証成功となります。
DMARCはSPFとDKIMの認証が失敗したときの推奨する動作(ポリシー)をDNSのリソースレコードに登録しておき、メールの受信側はこのDMARCのポリシーを参照して、受信したメールをどのように処理するかを判断します。
ですので、DMARCを導入する場合は事前にSPFとDKIMの設定が必要になります。
SPFとDKIMの設定方法
SPFとDKIMの設定方法については、下記ページで解説しています。
SPFの設定方法はこちらです。
PostfixにDKIMの設定を追加する方法はこちらです。
DMARCの設定方法
DMARCのレコードをDNSへ設定する場合の設定例です。
ドメイン | TTL | クラス | タイプ | データ |
---|---|---|---|---|
_dmarc | 3600 | IN | TXT | "v=DMARC1; p=ポリシー; rua=mailto:メールアドレス" |
- ドメイン 「_dmarc」または「_dmarc.ドメイン名.」と設定します
- TTL 3600秒(1時間)ぐらいの短い時間で設定しておきます
- クラス INを設定
- タイプ TXTを設定
- データ DMARCのレコードを「v(バージョン)」「p(ポリシー)」といったタグで設定
DMARCで設定するタグについては別途説明します。
ちなみに、私が使っているムームードメインさんの場合は、クラスやTTLの設定が無いので下記のように登録する形になります。
設定例
実際にDMARCを設定する際の設定例を、導入のフェーズにあわせて紹介していきます。
DMARCを設定する際に「p」タグでポリシーを、下記の3種類から選んで設定する必要が有ります。
- none(何もしない)
- quarantine(隔離)
- reject(拒絶)
ポリシーはいきなりrejectとかを設定するのではなく、はじめはnoneで間違って成りすましと判定されているメールが無いかを確認し、その後にquarantineに移行して様子を見て、そこでも問題が無いようであれば最終的にrejectに設定するのが良いでしょう。
- 最低限の設定(何もしない)
- レポートを受け取るだけの設定
- 一部のメールだけ隔離を行う
- 迷惑メールを拒否
1.最低限の設定(何もしない)
最低限の設定は、必須タグである「v」と「p」だけを設定した下記のようになります。
_dmarc IN TXT "v=DMARC1; p=none;
この設定はポリシーがnoneに設定していますので、SPFやDKIMでの認証に失敗してもメールはそのまま配信され、DMARCのレポートメールも受け取ることはありません。
DMARCの導入準備はできていないけれど、とりあえずレコードだけは登録しておきたい場合の設定です。
この設定の間にDMARCについて調べてみたり、運用方法の検討やレポートの宛先メールなどを準備するといった場合に設定すると良いでしょう。
2.レポートを受け取るだけの設定
ポリシーはnoneのままに設定しruaタグを追加してメールアドレスを設定します。
この設定では、DMARCの認証に失敗した場合でもメールの隔離も拒否も行わなずレポートだけを受け取ることが出来るようになります。
送られてくるレポートを調査して正常なメールが認証失敗していないか確認します。
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:メールアドレス”
送信されるメールが多い場合その分だけ送られてくるレポートも増加するので、レポート受信用に専用のメールアドレスを準備しておくことをおすすめします。
3.一部のメールだけ隔離を行う
1〜2週間ほどレポートを確認し特に問題が無いようであれば、ポリシーをquarantine(隔離)に変更して様子を見ていきます。
この場合も一度に全部のメールを隔離するのではなく、pctタグを追加しポリシーの対象となるメールの割合を設定して、影響が少なくなるようにして行きます。
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=10; rua=mailto:メールアドレス”
個人使用のメールサーバやドメインで使用状況をすべて把握済みの場合は、pctを50とかに設定して様子をみても良いでしょう。
4.迷惑メールを拒否
ここまでの設定で問題がなければ、ポリシーをreject(拒否)に設定してあげましょう。
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:メールアドレス”
これで、基本的なDMARCのレコードの設定は完了となりますので、あとは必要に応じてオプションのタグで設定を追加するなりしてください。
タグの説明
DMARCで設定するタグについての説明です。
必須タグ
このタグは必ず設定を行う必要が有ります。
タグ | 設定値 | 説明 |
---|---|---|
v | DMARC1 |
DMARCのバージョンでDMARC1を指定 最初に設定する必要がある |
p |
none quarantine reject |
SPF、DKIMの認証が失敗したときのメール処理ポリシー
|
オプションタグ
設定が必須ではないオプションのタグについて説明します。
タグ | 設定値 | 説明 |
---|---|---|
rua | メールアドレス | DMARCレポートメール送信先を設定 複数指定する場合は「,」で区切る 設定しない場合はレポートメールは送信されない |
ruf | メールアドレス | DMARC認証失敗レポートの宛先メールアドレス 複数指定する場合は「,」で区切る 設定しない場合はレポートメールは送信されない |
sp |
none quarantine reject |
サブドメインの動作ポリシー 指定していな場合はpタグで設定した動作ポリシーが適用される |
pct | 1〜100 |
DMARCのポリシー対象となるメールの割合を指定 指定していない場合は100(全て適用)となる |
adkim | r,s |
DKIM 認証識別子のアライメントモード(DKIM署名チェックの厳格さ) r(relaxed mode ドメイン部分一致) s(strict mode ドメイン完全一致) 省略時はsが設定される |
aspf | r,s |
SPF 認証識別子のアライメントモード(SPF署名チェックの厳格さ) r(relaxed mode ドメイン部分一致) s(strict mode ドメイン完全一致) 省略時はsが設定される |
ri | 秒単位指定 |
DMARCレポートを要求する間隔 指定していない場合は86400(1日)が設定される 1日1回はレポートを要求する必要がある |
rf | afrf |
DMARCの認証失敗レポートの形式を指定 指定していない場合はafrfとなる ※2024.01.29時点ではafrfのみ |
fo | d,s,1,0 |
DMARCの認証失敗レポートの要求基準 d: DKIMの認証が失敗 s: SPFの認証が失敗 1: DKIM,SPFのどちらかが失敗 0: すべての認証が失敗 |
DMARCレコードが登録されたかどうかの確認方法
DNSに登録されているDMARCの設定を確認するには下記の方法があります。
- dig _dmarc.ドメイン名 TXT
- nslookup -type=TXT _dmarc.ドメイン名
- mxtoolboxのサイトで確認
dig _dmarc.ドメイン名 TXT で確認
digコマンドでTXTタイプを指定し名前解決することで、DNSに登録されているDMARCレコードの内容を確認することが出来ます。
$ dig _dmarc.ドメイン名 TXT
Ubuntu22.04で実際に確認した結果が下記になります。
$ dig _dmarc.vpslife.server-memo.net TXT ; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> _dmarc.vpslife.server-memo.net TXT ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16597 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;_dmarc.vpslife.server-memo.net. IN TXT ;; ANSWER SECTION: _dmarc.vpslife.server-memo.net. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarcrepo@vpslife.server-memo.net; ruf=mailto:dmarcrepo@vpslife.server-memo.net" ;; Query time: 60 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Tue Jan 30 20:37:21 JST 2024 ;; MSG SIZE rcvd: 180
nslookup -type=TXT _dmarc.ドメイン名 で確認
nslookupコマンドを使用する場合は-type=TXTを指定することで、DNSに登録されているDMARCレコードの内容を確認することが出来ます。
Ubuntu22.04で実際に確認した結果が下記になります。
$ nslookup -type=TXT _dmarc.vpslife.server-memo.net Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: _dmarc.vpslife.server-memo.net text = "v=DMARC1; p=none; rua=mailto:dmarcrepo@vpslife.server-memo.net; ruf=mailto:dmarcrepo@vpslife.server-memo.net" Authoritative answers can be found from:
mxtoolboxのサイトで確認
MX TOOLBOXさんのWebサイトで、ドメインに設定されているDMARCのレコードを確認することが出来ます。
https://mxtoolbox.com/dmarc.aspx
「Domain Name」部分にドメインを入力して「DMARC Lookup」ボタンを押下します。
DNSに設定されているDMARCのレコードが表示されます。
DMARCの認証確認方法
簡単なのはgmail等のDMARCに対応しているメールアドレス宛にメールを送信して、受信したメールのヘッダーを確認するという方法です。
自分のgmailへメールを送信してのメールのヘッダーを確認すると、こんな感じに認証の結果が表示されます。
DMARCの認証に成功している場合はPASSと表示されます。
サブドメインへのDMARCレコード設定について
サブドメインを使ったメールアドレスでDMARCレコードを設定する場合について、下記のドメインを例にして説明をします。
- server-memo.net
- vpslife.server-memo.net(サブドメイン)
下記のようなDMARCレコードを設定した場合、ポリシーはサブドメインにも適用されます。
_dmarc IN TXT "v=DMARC1; p=none; _dmarc.server-memo.net. IN TXT "v=DMARC1; p=none; ※ドメイン部分を省略しない場合の記述例
ドメインに設定したポリシーがサブドメインも含む両方に反映されます。
- server-memo.net
- vpslife.server-memo.net(サブドメイン)
他にも、下記のような全てのサブドメインに対してもポリシーが反映されます。
@mail.server-memo.net
@vpslife.mail.server-memo.net
サブドメインだけに影響する設定をしたい場合
vpslife.server-memo.netだけに有効なDMARCレコードを設定したい場合は、下記のように「_dmarc.」の後にサブドメイン含めて設定を行います。
_dmarc.vpslife IN TXT "v=DMARC1; p=none; _dmarc.vpslife.server-memo.net. IN TXT "v=DMARC1; p=none; ※ドメイン部分を省略しない場合の記述例
この場合はvpslife.server-memo.netとそのサブドメインにポリシーが適用されます。
- vpslife.server-memo.net
- mail.vpslife.server-memo.net
元のserver-memo.netドメインについてはこのポリシーは適用されません。
DMARCレポートの確認方法
DMARCのレポートはxml形式で送られてくるので、慣れるまで内容がとても読みづらいです。
こちらは、vpslife.server-memo.netドメインからgmail宛にメールを送信した際に送らてきたDMARCレポートの内容です。
xml形式だとやはり見づらいですね。
これをわかりやすく加工してくれるのがMxToolboxさんのDmarc Report Analyzerです。
https://mxtoolbox.com/DmarcReportAnalyzer.aspx
「Upload XML Report」ボタンを押下して、DMARCレポートをアップロードします。
xml形式のレポートを一目で読みやすいような形に処理してくれます。
これで、DMARCの認証をパスしたメールの数と失敗した数が簡単に判断できるようになります。
より詳しく知りたい
迷惑メール対策推進協議会で作成された「送信ドメイン認証技術導入マニュアル」という資料がありますので、こちらを参照するとより詳しい内容を知ることが出来ます。
コメント