AlmaLinux 9 + Postfix + OpenDKIM で DKIM 署名を有効化する手順
AlmaLinux 9 上の Postfix で、OpenDKIM を使って DKIM 署名を付与する手順をまとめます。
検証環境
- Postfix
- 3.5.25
- OpenDKIM
- 2.11.0
検証用ドメインとして example123.local を利用します。
1. パッケージインストール
CRB リポジトリを有効化
sudo dnf config-manager --set-enabled crb
OpenDKIM 本体とツールをインストール
sudo dnf install -y opendkim opendkim-tools
2. DKIM 鍵ペア(秘密鍵・公開鍵)の作成
/etc/opendkim/keys/ 配下に鍵を作成します。
セレクタ名はわかりやすく dkim-example123 としておきます。
cd /etc/opendkim/keys/
# 2048bit 鍵を作成
sudo opendkim-genkey \
-b 2048 \
-D ./ \
-d example123.local \
-s dkim-example123
ls -l
# 生成されるファイル例
# dkim-example123.private … 秘密鍵
# dkim-example123.txt … 公開鍵(DNS レコード用)
権限を制限します。
sudo chown -R opendkim:opendkim /etc/opendkim/keys/
sudo chmod 600 /etc/opendkim/keys/dkim-example123.private
3. OpenDKIM の基本設定
/etc/opendkim.conf を編集します。
sudo vi /etc/opendkim.conf
最低限、以下のような設定を追加・修正します。
# 送受信両方に対して署名・検証を行う
Mode sv
# Postfix から参照するソケット
Socket local:/run/opendkim/opendkim.sock
# 鍵と送信元アドレスのマッピング
SigningTable refile:/etc/opendkim/SigningTable
KeyTable /etc/opendkim/KeyTable
# ログ関連(任意だがデバッグしやすくなる)
Syslog yes
SyslogSuccess yes
LogWhy yes
※ 既存設定との重複に注意して調整してください。
4. OpenDKIM の UNIX ソケット権限調整
Postfix から OpenDKIM のソケットにアクセスできるように、systemd のサービス定義を修正します。
# /usr/lib/systemd/system は パッケージ更新で上書きされる
sudo cp /usr/lib/systemd/system/opendkim.service /etc/systemd/system/
sudo vi /etc/systemd/system/opendkim.service
# または
sudo systemctl edit httpd
以下のように Group を postfix に変更します。
[Service]
User=opendkim
Group=postfix # postfix グループがソケットにアクセスできるようにする
編集後は systemd の設定をリロードします。
sudo systemctl daemon-reload
5. DKIM 署名対象の送信者設定(SigningTable)
どの送信元アドレスにどのセレクタを使うかを定義します。
sudo vi /etc/opendkim/SigningTable
例:example123.local ドメインからのメールすべてに、dkim-example123 セレクタを使う
*@example123.local dkim-example123._domainkey.example123.local
書式(単純な例):
*@ドメイン名 セレクタ名._domainkey.ドメイン名
6. DKIM レコードと秘密鍵パスの関連付け(KeyTable)
セレクタ名と秘密鍵ファイルの対応を定義します。
sudo vi /etc/opendkim/KeyTable
dkim-example123._domainkey.example123.local example123.local:dkim-example123:/etc/opendkim/keys/dkim-example123.private
書式:
[セレクタ名]._domainkey.[ドメイン名] [ドメイン名]:[セレクタ名]:[秘密鍵ファイルのフルパス]
7. Postfix への Milter 設定
Postfix に OpenDKIM を milter として連携させます。
sudo vi /etc/postfix/main.cf
以下を追記または修正します。
# SMTP で受信したメールに対して Milter を適用
smtpd_milters = unix:/run/opendkim/opendkim.sock
# ローカルから送信されるメール(sendmail コマンド等)に対しても同じ Milter を適用
non_smtpd_milters = $smtpd_milters
# Milter がエラーのときの動作(ここではメールを受け入れる)
milter_default_action = accept
8. サービス起動・自動起動設定
# Postfix 再起動
sudo systemctl restart postfix
sudo systemctl status postfix
# OpenDKIM 自動起動設定&起動
sudo systemctl enable opendkim
sudo systemctl start opendkim
sudo systemctl status opendkim
エラーがあれば journalctl -u opendkim -u postfix などでログを確認します。
9. DNS に DKIM 公開鍵を登録
/etc/opendkim/keys/dkim-example123.txt の内容を、DNS の TXT レコードとして登録します。
cat /etc/opendkim/keys/dkim-example123.txt
中身の例:
dkim-example123._domainkey.example123.local. IN TXT (
"v=DKIM1; k=rsa; "
"p=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..."
)
DNS 登録時は、以下のイメージになります。
- ホスト名:
dkim-example123._domainkey.example123.local - タイプ:
TXT - 値:
v=DKIM1; k=rsa; p=...(1行でOK)
DNS の反映に数分〜数時間かかる場合があります。
10. DKIM 設定の確認(opendkim-testkey)
OpenDKIM の設定(秘密鍵)と、DNS に公開した公開鍵が正しく対応しているか確認します。
sudo opendkim-testkey -d example123.local -s dkim-example123 -k /etc/opendkim/keys/dkim-example123.private -vvv
-
-d:ドメイン名 -
-s:セレクタ名(_domainkeyやドメインは付けない) -
-k:秘密鍵
まとめ
- OpenDKIM を入れて DKIM 署名を付けるには、
- 鍵ペア作成(セレクタ名を決める)
- SigningTable / KeyTable でセレクタとドメイン/秘密鍵を関連付け
- Postfix に Milter として OpenDKIM を連携
- DNS に公開鍵(TXT レコード)を登録
-
opendkim-testkeyで DNS と設定の整合性を検証
という流れになります。