Debian 12 bookworm
Sponsored Link

Mail サーバー : DKIM の設定2024/07/17

 

Postfix に DKIM (Domain Keys Identified Mail) を設定します。

生成した公開鍵を DNS に登録するため、DNS サーバー が必要となります。

[1] OpenDKIM をインストールして設定します。
root@mail:~#
apt -y install opendkim opendkim-tools
# DKIM を設定するドメイン用のディレクトリ作成

root@mail:~#
mkdir /etc/dkimkeys/srv.world
# 鍵ペアを生成
# -D (鍵を格納するディレクトリ)
# -d (ドメイン名)
# -s (セレクター名) ⇒ 任意の名称で OK

root@mail:~#
opendkim-genkey -D /etc/dkimkeys/srv.world -d srv.world -s $(date "+%Y%m%d")

root@mail:~#
chown -R opendkim:opendkim /etc/dkimkeys/srv.world

root@mail:~#
ll /etc/dkimkeys/srv.world

total 16
drwxr-xr-x 2 opendkim opendkim 4096 Jul 12 05:22 ./
drwx------ 3 opendkim opendkim 4096 Jul 12 00:54 ../
-rw------- 1 opendkim opendkim 1704 Jul 12 05:22 20240712.private
-rw------- 1 opendkim opendkim  507 Jul 12 05:22 20240712.txt

root@mail:~#
vi /etc/opendkim.conf
# 14,15行目 : コメント解除
# Mode : s = sign
# Mode : v = verify
Mode                    sv
SubDomains              no

# 22,23,24行目 : 扱うドメインが 1 つの場合は
# 以下 3 行をコメント解除して それぞれの値を変更
# 複数のドメインを扱う場合は 別のパラメーターで設定
#Domain                 example.com
#Selector               2020
#KeyFile                /etc/dkimkeys/example.private

# 37行目 : コメント化
# 38行目 : コメント解除
#Socket                 local:/run/opendkim/opendkim.sock
Socket                  inet:8891@localhost

# 50行目 : DNS サーバーで DNSSEC を有効にしていない場合はコメント化
#TrustAnchorFile        /usr/share/dns/root.key

# 51行目 : DKIM キーを登録する DNS サーバー
# DNS サーバーがローカルホストでない 且つ
# resolv.conf 登録のサーバーでもない場合は コメント解除して DNS サーバーを指定
#Nameservers            127.0.0.1

# 最終行に追記
# 複数のドメインを扱う場合は以下を設定
# 単一のドメインのみの場合は 22-24行目で設定し 以下は不要
KeyTable                /etc/dkimkeys/KeyTable
SigningTable            refile:/etc/dkimkeys/SigningTable
ExternalIgnoreList      refile:/etc/dkimkeys/TrustedHosts
InternalHosts           refile:/etc/dkimkeys/TrustedHosts

root@mail:~#
vi /etc/dkimkeys/KeyTable
# 新規作成
#
# (セレクター名)._domainkey.(ドメイン名) (ドメイン名):(セレクター名):(プライベートキーのパス)
#
# 複数のドメインを扱う場合は 改行して同様に登録する

20240712._domainkey.srv.world srv.world:20240712:/etc/dkimkeys/srv.world/20240712.private

root@mail:~#
vi /etc/dkimkeys/SigningTable
# 新規作成
#
# *@(ドメイン名) (セレクター名)._domainkey.(ドメイン名)
#
# 複数のドメインを扱う場合は 改行して同様に登録する

*@srv.world 20240712._domainkey.srv.world

root@mail:~#
vi /etc/dkimkeys/TrustedHosts
# 新規作成
# 信頼するホストを登録
127.0.0.1
::1

root@mail:~#
chown opendkim:opendkim /etc/dkimkeys/{KeyTable,SigningTable,TrustedHosts}

root@mail:~#
chmod 600 /etc/dkimkeys/{KeyTable,SigningTable,TrustedHosts}

root@mail:~#
systemctl restart opendkim

[2] Postfix の設定です。
root@mail:~#
vi /etc/postfix/main.cf
# 最終行に追記
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

root@mail:~#
systemctl reload postfix

[3] DNS サーバー登録用の公開鍵を確認します。
# 公開鍵の内容

root@mail:~#
cat /etc/dkimkeys/srv.world/20240712.txt

20240712._domainkey     IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5zup/hnAFPCeeaTgrC7/WGcP4UtKHWpLpRS4xyIbuGKolfqk/YE+GZQlr2pSrXkapjjIJn829l/87GJVs7mwhmR6Sb4Ga7P+bNnuqJc/vejieuX6KL7cQ/GwUDOjomJ0nI0UEB4i02kF27HshudohMLK21rUQUn7eEP3Da6yj3Ud7z6qRH6kwOxGfgxoyO9E6D850sGOLoSY2"
          "iTuuC7+O5Px+FLJTL5JbrvAxFf10yrtatXLzUyYR1G9s+odQehYmYnA/Pk+7G8ee9tZQ1zWaVPQGLZirN08zkMzjDy9LK1nZnnCUTMrhjniHsg1NDpg3vJx/UWr0uQZvCuOeh3VwIDAQAB" )  ; ----- DKIM key 20240712 for srv.world

# ゾーンファイルへの登録は不要な文字を除いて 1 行にする

root@mail:~#
sed "s/^\t *//g" /etc/dkimkeys/srv.world/20240712.txt | sed -z "s/\\n//g" | sed "s/( //g" | cut -d')' -f1

20240712._domainkey     IN      TXT     "v=DKIM1; h=sha256; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5zup/hnAFPCeeaTgrC7/WGcP4UtKHWpLpRS4xyIbuGKolfqk/YE+GZQlr2pSrXkapjjIJn829l/87GJVs7mwhmR6Sb4Ga7P+bNnuqJc/vejieuX6KL7cQ/GwUDOjomJ0nI0UEB4i02kF27HshudohMLK21rUQUn7eEP3Da6yj3Ud7z6qRH6kwOxGfgxoyO9E6D850sGOLoSY2""iTuuC7+O5Px+FLJTL5JbrvAxFf10yrtatXLzUyYR1G9s+odQehYmYnA/Pk+7G8ee9tZQ1zWaVPQGLZirN08zkMzjDy9LK1nZnnCUTMrhjniHsg1NDpg3vJx/UWr0uQZvCuOeh3VwIDAQAB"
[4] DNS サーバーへ公開鍵を登録します。
BIND のゾーンファイル へ登録する場合を例にします。
root@dns:~#
vi /etc/bind/srv.world.wan
.....
.....
# 最終行に追記
20240712._domainkey     IN      TXT     "v=DKIM1; h=sha256; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5zup/hnAFPCeeaTgrC7/WGcP4UtKHWpLpRS4xyIbuGKolfqk/YE+GZQlr2pSrXkapjjIJn829l/87GJVs7mwhmR6Sb4Ga7P+bNnuqJc/vejieuX6KL7cQ/GwUDOjomJ0nI0UEB4i02kF27HshudohMLK21rUQUn7eEP3Da6yj3Ud7z6qRH6kwOxGfgxoyO9E6D850sGOLoSY2""iTuuC7+O5Px+FLJTL5JbrvAxFf10yrtatXLzUyYR1G9s+odQehYmYnA/Pk+7G8ee9tZQ1zWaVPQGLZirN08zkMzjDy9LK1nZnnCUTMrhjniHsg1NDpg3vJx/UWr0uQZvCuOeh3VwIDAQAB"

root@dns:~#
rndc reload
[5] メールサーバー側で確認します。
root@mail:~#
dig 20240712._domainkey.srv.world. txt

.....
.....

# 登録した内容の応答があれば OK
;; ANSWER SECTION:
20240712._domainkey.srv.world. 86400 IN TXT     "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5zup/hnAFPCeeaTgrC7/WGcP4UtKHWpLpRS4xyIbuGKolfqk/YE+GZQlr2pSrXkapjjIJn829l/87GJVs7mwhmR6Sb4Ga7P+bNnuqJc/vejieuX6KL7cQ/GwUDOjomJ0nI0UEB4i02kF27HshudohMLK21rUQUn7eEP3Da6yj3Ud7z6qRH6kwOxGfgxoyO9E6D850sGOLoSY2" "iTuuC7+O5Px+FLJTL5JbrvAxFf10yrtatXLzUyYR1G9s+odQehYmYnA/Pk+7G8ee9tZQ1zWaVPQGLZirN08zkMzjDy9LK1nZnnCUTMrhjniHsg1NDpg3vJx/UWr0uQZvCuOeh3VwIDAQAB"

.....
.....

root@mail:~#
opendkim-testkey -d srv.world -s 20240712 -vvv

opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key '20240712._domainkey.srv.world'
opendkim-testkey: key not secure
opendkim-testkey: key OK
# [key OK] であれば OK
# * [key not secure] は DNSSEC に関するメッセージ
[6]

最後に Gmail にでもメール送信して、受信メールのヘッダーに [DKIM: 'PASS'(Domain: srv.world)] と表示されていれば OK です。

関連コンテンツ