Postfix 実用ガイド
Postfix の設計、設定、運用を詳しく確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Ubuntu 26.04 で Postfix に DMARC 検証を追加する場合、OpenDMARC を milter として連携します。DMARC は SPF と DKIM の結果を domain alignment と合わせて評価し、送信 domain の DNS policy に基づいて扱いを決める仕組みです。
この記事では、Postfix 本体や OpenDKIM 署名とは分けて、OpenDMARC の導入、/etc/opendmarc.conf、ignore.hosts、Public Suffix List、TrustedAuthservIDs、Postfix milter 連携の確認点をまとめます。
opendmarcpackage の導入/etc/opendmarc.confの基本設定/etc/opendmarc/ignore.hostsの管理- Public Suffix List と TrustedAuthservIDs
- Postfix から OpenDMARC milter を使う確認
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| package | opendmarc |
| config | /etc/opendmarc.conf |
| ignore hosts | /etc/opendmarc/ignore.hosts |
| runtime | /run/opendmarc、/etc/tmpfiles.d/opendmarc.conf |
| service | opendmarc.service |
作業の流れ
OpenDMARC の設定では、サーバー上に作成する設定ファイルと、権威 DNS 側に登録する DNS レコードを分けて扱います。
opendmarcpackage を入れる/run/opendmarcを再起動後も作れるように tmpfiles を用意する/etc/opendmarc/ignore.hostsに検証対象外の内部ホストを書く/etc/opendmarc.confに DMARC 検証設定を書くopendmarc -n -cで設定を検証してから起動する- Postfix の milter 設定に OpenDMARC の socket を追加する
DMARC の役割を確認する
DMARC は、受信したメールの From domain と SPF / DKIM の結果を照合し、送信 domain が DNS で公開している policy を参照します。OpenDMARC はこの検証結果を Postfix の milter として扱います。
- DKIM 署名と SPF 結果を前提に評価する
- From domain の alignment を確認する
- DNS の
_dmarcTXT レコードを参照する - Postfix とは milter socket で連携する
OpenDMARC をインストールする
OpenDMARC 本体を導入します。設定後は opendmarc.service と Postfix の両方を確認します。
sudo apt update
sudo apt install -y opendmarc
systemctl status opendmarc.service --no-pagertmpfiles 設定を作成する
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/opendmarcignore.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.hostsopendmarc.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-pagerPostfix ユーザーを group に追加する
Postfix が OpenDMARC の local socket に接続できるように、postfix ユーザーを opendmarc group に追加します。
sudo usermod -aG opendmarc postfix
id postfixPostfix に 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.serviceDMARC DNS レコードを確認する
DMARC policy は送信側 domain の DNS TXT レコードで公開します。これはサーバー上の設定ファイルではなく、権威 DNS 側に登録するレコードです。まずは p=none で観測し、運用状況を見て quarantine や reject へ進めます。
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-pagerRejectFailures の扱いを決める
RejectFailures true は DMARC fail を拒否する動きに関わります。導入初期はログと policy を見ながら段階的に確認し、正当なメールまで拒否していないかを見ます。
grep -i opendmarc /var/log/mail.log
grep -i 'dmarc' /var/log/mail.log確認ポイント
opendmarcpackage を導入している/run/opendmarcを tmpfiles で作成している/etc/opendmarc.confと/etc/opendmarc/ignore.hostsを管理しているPublicSuffixListとTrustedAuthservIDsを指定しているopendmarc -n -c /etc/opendmarc.confで検証している- DNS の
_dmarcTXT レコードとログの DMARC 結果を確認している
まとめ
Ubuntu 26.04 の Postfix OpenDMARC 設定では、OpenDMARC を milter として構成し、SPF / DKIM の結果、From domain alignment、DNS の DMARC policy を検証します。
OpenDKIM は署名、OpenDMARC は検証という役割で分けると、メール認証の切り分けがしやすくなります。導入時は p=none で観測し、ログを見ながら拒否 policy へ進めるのが安全です。

