手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Postfix OpenDMARC の設定 – DMARC 検証と milter 連携を管理する

関連する記事

Ubuntu 26.04 で Postfix に DMARC 検証を追加する場合、OpenDMARC を milter として連携します。DMARC は SPF と DKIM の結果を domain alignment と合わせて評価し、送信 domain の DNS policy に基づいて扱いを決める仕組みです。

この記事では、Postfix 本体や OpenDKIM 署名とは分けて、OpenDMARC の導入、/etc/opendmarc.confignore.hosts、Public Suffix List、TrustedAuthservIDs、Postfix milter 連携の確認点をまとめます。

この記事で扱うこと
  • opendmarc package の導入
  • /etc/opendmarc.conf の基本設定
  • /etc/opendmarc/ignore.hosts の管理
  • Public Suffix List と TrustedAuthservIDs
  • Postfix から OpenDMARC milter を使う確認
対象 OSUbuntu 26.04 Server
packageopendmarc
config/etc/opendmarc.conf
ignore hosts/etc/opendmarc/ignore.hosts
runtime/run/opendmarc/etc/tmpfiles.d/opendmarc.conf
serviceopendmarc.service

作業の流れ

OpenDMARC の設定では、サーバー上に作成する設定ファイルと、権威 DNS 側に登録する DNS レコードを分けて扱います。

  1. opendmarc package を入れる
  2. /run/opendmarc を再起動後も作れるように tmpfiles を用意する
  3. /etc/opendmarc/ignore.hosts に検証対象外の内部ホストを書く
  4. /etc/opendmarc.conf に DMARC 検証設定を書く
  5. opendmarc -n -c で設定を検証してから起動する
  6. Postfix の milter 設定に OpenDMARC の socket を追加する

DMARC の役割を確認する

DMARC は、受信したメールの From domain と SPF / DKIM の結果を照合し、送信 domain が DNS で公開している policy を参照します。OpenDMARC はこの検証結果を Postfix の milter として扱います。

  • DKIM 署名と SPF 結果を前提に評価する
  • From domain の alignment を確認する
  • DNS の _dmarc TXT レコードを参照する
  • Postfix とは milter socket で連携する

OpenDMARC をインストールする

OpenDMARC 本体を導入します。設定後は opendmarc.service と Postfix の両方を確認します。

sudo apt update
sudo apt install -y opendmarc
systemctl status opendmarc.service --no-pager

tmpfiles 設定を作成する

OpenDMARC の socket や PID を置く /run/opendmarc は tmpfs 上です。再起動すると消えるため、systemd-tmpfiles に再作成させます。

/run/opendmarc を再作成する tmpfiles 設定を用意します。

sudo tee /etc/tmpfiles.d/opendmarc.conf >/dev/null <<'EOF'
d /run/opendmarc 0755 opendmarc opendmarc -
EOF
sudo systemd-tmpfiles --create /etc/tmpfiles.d/opendmarc.conf
ls -ld /run/opendmarc

ignore.hosts を設定する

内部ホストや認証済みクライアントを DMARC 検証から除外したい場合は、/etc/opendmarc/ignore.hosts に記述します。外部から届くメールを広く除外しないよう、ここには内部で信頼する送信元だけを書きます。

sudo install -d -o opendmarc -g opendmarc -m 0755 /etc/opendmarc
sudo tee /etc/opendmarc/ignore.hosts >/dev/null <<'EOF'
127.0.0.1
::1
10.0.0.0/8
EOF
sudo chown opendmarc:opendmarc /etc/opendmarc/ignore.hosts
sudo chmod 0644 /etc/opendmarc/ignore.hosts

opendmarc.conf を設定する

OpenDMARC の基本設定では、AuthservID、Public Suffix List、RejectFailures、socket、TrustedAuthservIDs、IgnoreHosts などを指定します。

sudo tee /etc/opendmarc.conf >/dev/null <<'EOF'
AuthservID HOSTNAME
FailureReports false
PidFile /run/opendmarc/opendmarc.pid
PublicSuffixList /usr/share/publicsuffix/public_suffix_list.dat
RejectFailures true
Socket local:/run/opendmarc/opendmarc.sock
Syslog true
SyslogFacility mail
TrustedAuthservIDs mail.example.com
UMask 0002
UserID opendmarc
IgnoreAuthenticatedClients true
RequiredHeaders true
IgnoreHosts /etc/opendmarc/ignore.hosts
EOF
sudo chown root:root /etc/opendmarc.conf
sudo chmod 0644 /etc/opendmarc.conf

設定を検証して起動する

OpenDMARC の設定は、サービス再起動前に opendmarc -n -c で確認します。

sudo opendmarc -n -c /etc/opendmarc.conf
sudo systemctl restart opendmarc.service
systemctl status opendmarc.service --no-pager

Postfix ユーザーを group に追加する

Postfix が OpenDMARC の local socket に接続できるように、postfix ユーザーを opendmarc group に追加します。

sudo usermod -aG opendmarc postfix
id postfix

Postfix に milter を設定する

OpenDKIM と OpenDMARC を両方使う場合、Postfix 側では複数の milter socket を並べます。次の postconf -e は、Postfix の main.cf に設定を書き込むコマンドです。

OpenDKIM は DKIM 署名、OpenDMARC は DMARC 検証を担当します。役割が違うため、socket も分けて指定します。

sudo postconf -e 'smtpd_milters = local:/run/opendkim/opendkim.sock, local:/run/opendmarc/opendmarc.sock'
sudo postconf -e 'non_smtpd_milters = local:/run/opendkim/opendkim.sock, local:/run/opendmarc/opendmarc.sock'
sudo postconf -e 'milter_default_action = accept'
sudo postfix check
sudo systemctl reload postfix.service

DMARC DNS レコードを確認する

DMARC policy は送信側 domain の DNS TXT レコードで公開します。これはサーバー上の設定ファイルではなく、権威 DNS 側に登録するレコードです。まずは p=none で観測し、運用状況を見て quarantinereject へ進めます。

dig TXT _dmarc.example.com +short

権威 DNS 側には、次のような TXT レコードを登録します。これは Ubuntu サーバー上で実行するコマンドではなく、DNS ゾーンに追加するレコードです。

_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-report@example.com; adkim=s; aspf=s

検証結果を確認する

テストメールを受信し、Authentication-Results と OpenDMARC / Postfix のログを確認します。

journalctl -u opendmarc.service -n 100 --no-pager
journalctl -u postfix.service -n 100 --no-pager

RejectFailures の扱いを決める

RejectFailures true は DMARC fail を拒否する動きに関わります。導入初期はログと policy を見ながら段階的に確認し、正当なメールまで拒否していないかを見ます。

grep -i opendmarc /var/log/mail.log
grep -i 'dmarc' /var/log/mail.log

確認ポイント

  • opendmarc package を導入している
  • /run/opendmarc を tmpfiles で作成している
  • /etc/opendmarc.conf/etc/opendmarc/ignore.hosts を管理している
  • PublicSuffixListTrustedAuthservIDs を指定している
  • opendmarc -n -c /etc/opendmarc.conf で検証している
  • DNS の _dmarc TXT レコードとログの DMARC 結果を確認している

まとめ

Ubuntu 26.04 の Postfix OpenDMARC 設定では、OpenDMARC を milter として構成し、SPF / DKIM の結果、From domain alignment、DNS の DMARC policy を検証します。

OpenDKIM は署名、OpenDMARC は検証という役割で分けると、メール認証の切り分けがしやすくなります。導入時は p=none で観測し、ログを見ながら拒否 policy へ進めるのが安全です。

関連する記事
Ubuntu 26.04 Postfix OpenDMARC の設定 – DMARC 検証と milter 連携を管理する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る