CentOS Steam 9 + PostfixのOpenARC設定

前にOpenARCインストールしたけど、情報が少なくDNS設定が出来てなかったのでGemini先生に聞きながら対応したときの覚書。
前の記事: CentOS Steam 9にOpenARCをインストール

環境: CentOS Stream 9, Postfix 3.5.25
Gemini 2.5 Proと対話。

Postfixのバージョンを確認するコマンド。
-d オプションは、Postfixに組み込まれているデフォルト値を表示。
# postconf -d mail_version

空いているポートを確認するコマンド。
# ss -ltpn

オプションの意味

  • -l: LISTEN状態
  • -t: TCP 
  • -p: プロセス名も表示
  • -n:  数値表示

OpenARCのバージョンを確認。
# openarc -V

openarc: OpenARC Filter v1.0.0
        Compiled with OpenSSL 3.5.1 1 Jul 2025
        SMFI_VERSION 0x1000001
        libmilter version 1.0.1
        libopenarc 1.0.0:


秘密鍵の生成

前はOpenDKIMの秘密鍵を流用していたので、OpenARCだけの秘密鍵を生成する。
OpenARC用の鍵を保管するディレクトリを作成。
# mkdir -p /etc/openarc/keys/hoge.jp
# cd /etc/openarc/keys/hoge.jp

新しい鍵を生成。
セレクタ名は[サービス]-[ホスト名]-[年月]にする。例)arc-server02-202509
# opendkim-genkey -b 2048 -s arc-server02-202509 -d hoge.jp

権限変更。
# chown -R openarc:openarc /etc/openarc/keys

DNSのTXTレコードを追加する。
# cat /etc/openarc/keys/hoge.jp/arc-server02-202509.txt

GmailのDNSの書き方を確認。
(Gmailから送信したメールヘッダーを見る)
# dig +short TXT arc-20240605._domainkey.google.com

"k=rsa; p=MIIBIj...AB"

同じくMicrosoft365のDNSの書き方を確認。
# dig +short TXT arcselector10001._domainkey.microsoft.com

"v=DKIM1; k=rsa; p=MIIBIjANBgk...QAB"

まだARCの仕様は曖昧みたい。

Gmailユーザーの方が多いと思うので「v=DKIM1;」を付けない記述にする。
Value Domainの場合の例

txt arc-server02-202509._domainkey k=rsa; p=MIIBIjAN...IDAQAB

digコマンドで確認。
digコマンドがなければインストールする。
# dnf install bind-utils
# dig +short TXT arc-server02-202509._domainkey.hoge.jp

Windowsのnslookupで確認する場合のコマンド。
PS > nslookup -debug -type=TXT arc-server02-202509._domainkey.hoge.jp 8.8.8.8

Google Public DNSでも確認できる。
参考: Google Public DNS


OpenARCの設定変更

Gemini先生に日本語のコメント付き設定ファイルを作ってもらう。
既存のをバックアップしてから設定変更。
# mv /etc/openarc.conf /etc/openarc.conf.bak20250914
# less /etc/openarc.conf

#
# OpenARC 設定ファイル (CentOS Stream 9向け)
#
# プロセスIDを保存するファイルのパス。変更の必要はありません。
PidFile /run/openarc/openarc.pid

# ログをsyslog経由で出力します。'yes' を推奨します。
Syslog  yes

# OpenARCプロセスを実行するユーザーとグループ。
# dnfでインストールした場合、自動で'openarc'ユーザーが作成されます。
UserID  openarc:openarc

# Postfix (MTA) と通信するためのソケット設定。
# Postfixのmain.cfにある 'smtpd_milters' の設定と一致させる必要があります。
# (例: inet:127.0.0.1:8893)
Socket  inet:8893@localhost

# ARC署名に含めるメールヘッダのリスト。
# このリストはRFCで推奨されているもので、通常は変更不要です。
SignHeaders to,subject,message-id,date,from,mime-version,dkim-signature

# 動作モードを設定します。
#   s  - Signing (署名のみ): 送信メールにARC署名を付与します。
#   sv - Sign and Verify (署名と検証): 送信時の署名に加え、受信メールのARC検証も行います。
# 通常は 'sv' を設定することが推奨されます。
Mode                    sv

# 電子署名を生成する際の正規化方式を「ヘッダ/ボディ」の順で指定します。
# 'relaxed/relaxed' が最も一般的で、互換性の問題が起きにくい推奨設定です。
Canonicalization        relaxed/relaxed

# 署名に使用するドメイン名。
Domain                  hoge.jp

# 署名に使用するセレクタ名。DNSのTXTレコードと対応させます。
# [サービス]-[ホスト名]-[年月] の形式を推奨します。
Selector                arc-server02-202509

# 署名に使用する秘密鍵のフルパス。
# ファイル名はセレクタ名と合わせるのが一般的です (例: selector.private)。
KeyFile                 /etc/openarc/keys/hoge.jp/arc-server02-202509.private

# 署名の暗号化アルゴリズム。
# コメントアウトされている場合、デフォルトの 'rsa-sha256' が使用されます。
# 通常はこのままで問題ありません。
#SignatureAlgorithm      rsa-sha256

# --- 以下はデバッグ用の設定です ---
# 本番環境では通常コメントアウトまたは無効化します。
MilterDebug 6        # 詳細なデバッグログを有効化
# EnableCoredumps yes  # クラッシュ時にコアダンプを生成

# 信頼するMTAからの接続をリストするファイル。通常は使用しません。
# PeerList /etc/openarc/PeerList

再起動する前に別コンソールでログ監視する。
# journalctl -f -u postfix -u opendkim -u openarc

テストしてOpenDKIM, OpenARC, Postfixを再起動
# openarc -n
# systemctl restart opendkim
# systemctl restart openarc
# systemctl restart postfix


テストメールを送信して動作確認

コンソールからメールを送信して確認。
# sendmail daiki.suganuma@gmail.com
subject: test1
test mail from server
.

MilterDebug 6でもログ出力しなかった。

メールのヘッダーを見るとARC認証が失敗している。

Authentication-Results: mx.google.com;
       dkim=pass header.i=@hoge.jp header.s=server02 header.b=kPssXXkd;
       arc=fail (DNS record missing);
       spf=pass (google.com: domain of root@hoge.jp designates 11.22.33.44 as permitted sender) smtp.mailfrom=root@hoge.jp;
       dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=hoge.jp

Google Public DNSではTXTレコードの値を確認できる。
参考: Google Public DNS

困ったときはGmailから送信したメールのヘッダーと比較すると間違いに気づきやすい。
(ARC情報はまだ少ないのでGemini先生も嘘を教える場合がある)

下記サイトでDNSの浸透具合を確認できる。
参考: DNS Propagation Checker - Global DNS Testing Tool

成功したときのメールヘッダー。

Authentication-Results: mx.google.com;
       dkim=pass header.i=@hoge.jp header.s=server02 header.b=PMLd+8IJ;
       arc=pass (i=1);
       spf=pass (google.com: domain of root@hoge.jp designates 11.22.33.44 as permitted sender) smtp.mailfrom=root@hoge.jp;
       dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=hoge.jp


▼ 関連記事