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.0Compiled with OpenSSL 3.5.1 1 Jul 2025SMFI_VERSION 0x1000001libmilter version 1.0.1libopenarc 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