Postfix で DMARC を自前構築する手順
目次
この記事でわかること
- 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 への移行検討にもお使いください。判断に迷う場合はお問い合わせからご相談ください。