pct タグ(Percentage)
概要
pct タグ(Percentage) は、DMARC レコードの pct= タグで指定する設定で、認証に失敗したメールのうち何パーセントにポリシー(p= の値)を適用するかを制御します。RFC 7489(2015年)で定義されています。
pct=100 がデフォルト値で、認証失敗メールの 100% にポリシーを適用します。pct=10 であれば、認証失敗メールの 10% にポリシーを適用し、残り 90% は 1 段階低いポリシーで処理します。p=reject かつ pct=10 の場合、10% が reject、90% が quarantine 相当になります。
pct タグは DMARC ポリシーを p=none から p=quarantine、p=reject へ段階的に強化する際のリスク軽減手段です。一度に全メールにポリシーを適用するのではなく、徐々に割合を上げることで、設定ミスによる正規メールの拒否を最小限に抑えます。
仕組み
受信サーバーは pct の値に基づいて認証失敗メールのうち何割にポリシーを適用するかをランダムに決定します。
適用率の動作
受信サーバーは DMARC 認証が fail したメールに対して、ランダムまたは一定のアルゴリズムで pct の割合に基づいてポリシーを適用するか判断します。
| pct 値 | p=quarantine の場合 | p=reject の場合 |
|---|---|---|
100(デフォルト) | 100% quarantine | 100% reject |
50 | 50% quarantine、50% none | 50% reject、50% quarantine |
10 | 10% quarantine、90% none | 10% reject、90% quarantine |
0 | 全て none | 全て quarantine |
p=reject で pct が 100 未満の場合、ポリシー適用対象外のメールは p=quarantine として処理されます。p=quarantine で pct が 100 未満の場合、対象外は p=none として処理されます。
段階導入のフロー
典型的な DMARC 段階導入は次のステップを踏みます。
p=noneでモニタリング開始(2〜4 週間)p=quarantine; pct=10で少量から適用開始ruaレポートで問題がないことを確認しながらpctを引き上げるp=quarantine; pct=100で全量適用p=reject; pct=10で reject を開始p=reject; pct=100で最終形に移行
各ステップで rua レポートを確認し、正規メールが fail していないことを検証します。
sp タグとの関係
pct タグは p= と sp= の両方に影響します。サブドメインポリシー(sp=)に対して個別に pct を設定することはできません。pct=50 を指定すると、親ドメインのポリシーもサブドメインポリシーも同じ 50% の適用率になります。
設定例
pct の値を段階的に引き上げる典型的なパターンを quarantine と reject で示します。
quarantine を 25% から開始
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@example.com"
認証失敗メールの 25% を迷惑メールフォルダに振り分け、75% は通常配送します。
reject を段階適用
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; pct=10; rua=mailto:dmarc@example.com"
認証失敗メールの 10% を受信拒否、90% は quarantine 相当にします。
最終形(pct=100)
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@example.com"
pct=100 は省略しても同じ動作です。意図を明確にする目的で明示することもあります。
確認方法
DMARC レコードの pct タグは dig で確認できます。
dig TXT _dmarc.example.com
;; ANSWER SECTION:
_dmarc.example.com. 3600 IN TXT "v=DMARC1;p=reject;pct=50;rua=mailto:dmarc@example.com"
pct=50 が設定されています。タグが存在しなければデフォルトの 100 です。
外部の視点からも確認したい場合は、Labee Dev Toolbox の Mail Auth API を使うと、外部の視点から見た結果を取得できます。
curl "https://labee.dev/api/mail-auth?domain=example.com"
{
"success": true,
"data": {
"spf": { "record": "v=spf1 include:_spf.google.com ~all", "exists": true },
"dkim": { "record": "v=DKIM1; k=rsa; p=MIIBIjANBgkqh...", "exists": true, "selector": "default" },
"dmarc": {
"record": "v=DMARC1; p=reject; pct=50; rua=mailto:dmarc@example.com",
"exists": true
},
"bimi": { "record": null, "exists": false }
},
"error": null,
"meta": { "responseTime": 123 }
}
data.dmarc.record フィールドから pct= タグの値を確認できます。
よくある問題
pct の放置や不適切な値設定は、DMARC ポリシーの保護効果を損ない、BIMI の表示条件にも影響します。
pct を下げたまま長期間放置する
pct=10 のまま何か月も放置すると、認証失敗メールの 90% はポリシーの保護を受けていない状態です。rua レポートで問題がないことを確認したら、段階的に pct を引き上げて最終的に 100 にします。
pct=0 を設定する
pct=0 は一見すると「ポリシーを適用しない」設定ですが、実装によって動作が異なります。RFC 7489 では pct は 0 から 100 の整数と定義されており、0 は有効な値です。ただし p=none と同等の動作になるため、一時的にポリシーを無効化したい場合は p=none に変更する方が意図が明確です。
BIMI との関係
BIMI は p=quarantine 以上かつ pct=100 であることを要件とする場合があります。Gmail で BIMI ロゴを表示するには、pct が 100 である必要があります。pct が 100 未満の場合、DMARC ポリシーは p=quarantine 以上でもロゴは表示されません。
rua レポートなしで pct を引き上げる
集計レポートなしで pct を引き上げると、正規メールの認証失敗を検知できません。rua= は必ず設定し、各ステップで 1〜2 週間のレポートを確認してから次の段階に進みます。