DMARCPostfixメール認証運用

Postfix で DMARC を自前構築する手順

ドメイン番人6 分で読めます
目次

Postfix + OpenDMARC + OpenDKIM の milter 構成

この記事でわかること

  • Postfix で DMARC を自前構築する全体像(milter 構成)
  • OpenDMARC / OpenDKIM のインストールと設定
  • 送信側 DMARC(DKIM 署名)と受信側 DMARC(検証)の両方の手順
  • 自前運用で押さえる失敗ポイント

なぜ Postfix での自前構築を選ぶのか

SaaS(Google Workspace / Microsoft 365 / SendGrid)を使えば DMARC 対応は数分で済みます。それでもあえて Postfix で自前構築するのは、以下のいずれかに該当する場合です。

  • メール本文をサーバー内に閉じておきたい(法務・コンプライアンス要件)
  • 大量配信のコストを抑えたい
  • 既存のオンプレ MTA 資産を活かしたい

DMARC の用語と仕組みは DMARC とは|なりすまし対策の基本 を参照。ここでは構築手順に絞ります。

全体像:milter で 2 つの認証を束ねる

DMARC は SPF と DKIM の検証結果を統合してポリシーを適用する仕組みです。Postfix では milter(Mail Filter)プロトコルで OpenDKIM と OpenDMARC を連携させます。

  • 送信時: メール送信 → Postfix → OpenDKIM が署名 → 外部へ送出
  • 受信時: 外部から受信 → Postfix → OpenDKIM が DKIM 検証 → OpenDMARC が SPF/DKIM 結果を統合して DMARC 判定 → ヘッダ追加

SPF は Postfix の policy daemon(postfix-policyd-spf-python など)で検証し、その結果を Authentication-Results ヘッダに残します。OpenDMARC はこのヘッダを参照して最終判定します。

ステップ 1: OpenDKIM をインストール・設定

Ubuntu / Debian の例です。

sudo apt update
sudo apt install opendkim opendkim-tools

鍵を生成してセレクタを決めます。

sudo mkdir -p /etc/opendkim/keys/example.co.jp
cd /etc/opendkim/keys/example.co.jp
sudo opendkim-genkey -s default -d example.co.jp
sudo chown opendkim:opendkim default.private

/etc/opendkim.conf に以下を設定。

Domain                  example.co.jp
KeyFile                 /etc/opendkim/keys/example.co.jp/default.private
Selector                default
Socket                  inet:8891@localhost
Mode                    sv
SubDomains              no

生成された default.txt の TXT 値を DNS に登録します(default._domainkey.example.co.jp)。

ステップ 2: OpenDMARC をインストール・設定

sudo apt install opendmarc

/etc/opendmarc.conf の主要項目。

AuthservID              mail.example.co.jp
TrustedAuthservIDs      mail.example.co.jp
Socket                  inet:8893@localhost
HistoryFile             /var/run/opendmarc/opendmarc.dat
PidFile                 /var/run/opendmarc/opendmarc.pid
SoftwareHeader          true
SPFSelfValidate         true

SPFSelfValidate true にしておくと OpenDMARC 自身が SPF を再評価するため、policy daemon が止まっても DMARC 判定が破綻しません。

ステップ 3: Postfix に milter を組み込む

/etc/postfix/main.cf に追記します。

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891, inet:localhost:8893
non_smtpd_milters = inet:localhost:8891, inet:localhost:8893

並び順は OpenDKIM → OpenDMARC の順序が必須です。OpenDMARC は DKIM 検証結果を参照して判定するため、後段に置きます。

sudo systemctl restart opendkim opendmarc postfix

ステップ 4: 送信テストと検証

自社から Gmail / Outlook のテストアドレスへ送信し、受信ヘッダを確認します。

Authentication-Results: mx.google.com;
       dkim=pass header.i=@example.co.jp;
       spf=pass smtp.mailfrom=example.co.jp;
       dmarc=pass header.from=example.co.jp

3 行すべて pass であれば成功です。検証の細かな手順は SPF / DKIM / DMARC の確認方法 を参照してください。

送信側と受信側の処理フロー

ステップ 5: DMARC レコードを段階的に強化

最初は p=none で 2 週間レポートを観察し、想定外の送信元が無いことを確認してから quarantine を経て reject に進めます。具体的なポリシー強化のロードマップは DMARC ポリシー強化の手順 を参照。

レポート(rua)は /etc/opendmarc.conf で受信先を指定し、外部の解析サービスや自前パーサで集計します。届かない場合は DMARC rua レポートが届かないとき で原因を確認できます。

自前運用でつまずきやすい点

1. milter の起動順序ミス

OpenDKIM が起動していない状態で Postfix が起動すると Connection refused でメールが滞留します。systemd の After=opendkim.service opendmarc.service を Postfix のユニットに足しておくと安全です。

2. SPF が 10 lookup を超える

include を増やしすぎると SPF の DNS lookup が 10 を超え、PermError でメールが弾かれます。flattening や include の整理は SPF レコード Flattening を参照。

3. メーリングリストで DMARC が壊れる

ML を運営している場合、転送時に From を書き換えていないと DMARC が fail します。ARC や From 書き換えの対処は メーリングリストと DMARC fail を参照。

SaaS で十分なケースとの境目

少人数チームで「自社ドメインで送る数百通/月」の規模なら、Google Workspace と Resend / SendGrid の組み合わせのほうが運用コストは下回ります。Postfix 自前構築が見合うのは、配信規模が大きい、法務要件がある、既にオンプレ MTA がある、のいずれかに該当する場合です。

まとめ

  • Postfix での DMARC は OpenDKIM と OpenDMARC の milter 2 段構成
  • DKIM 署名から DMARC 判定の順序を必ず守る
  • 受信側でも Authentication-Results を残して連携する
  • ポリシーは p=none から段階的に強化する
  • SaaS で済むケースは多い。要件次第で選ぶ

まずは現状を把握しましょう

自社の DMARC・SPF・DKIM の設定状況は、ドメイン番人の無料診断で確認できます。Postfix で構築したあとの動作確認や、SaaS への移行検討にもお使いください。判断に迷う場合はお問い合わせからご相談ください。

次の一歩は無料診断から。