(訂正) DNS のエントリはサブドメイン単位で必要でした。
切っ掛け
iCloud だと 130円で DKIM できるよ?
って読んだので、一瞬乗り換えようかと思ったが、
いやいや、うちのサーバーにも DKIM を付けられるだろう?
と、思ったので試してみた。
実は SPF は随分前に対応したのに、
DKIM って、DNSSEC が必須だろう、
なんていう訳の分からない思い込みがあったため、やっていなかった。
※ 勿論 DNSSEC 無しでできる。
うちの環境は、記事タグの通り。
参考
導入手順
opendkim インストール
# yum install -y opendkim
DNS 設定
key pair 生成
# cd /etc/opendkim/keys/
# opendkim-genkey -b 2048 -d example.com -s 202301220
# chown opendkim:opendkim 202301220.*
202301220 は作業日付。
zone ファイルへの追加
202301220._domainkey IN TXT ( "v=DKIM1; k=rsa; p=..." )
; ----- DKIM key 202301220 for example.com
_adsp._domainkey IN TXT "dkim=unknown"
1, 2 行目は、先程生成した 202301220.txt の内容をそのまま使用。
3行目はこのように記載。
これを使用しているドメイン/サブドメイン全てに追加。
動作確認
# rndc reload
# dig TXT 202301220._domainkey.example.com
# dig TXT _adsp._domainkey.example.com
# dig TXT 202301220._domainkey.sub1.example.com
...
zone ファイルに追記した内容がサブドメイン分を含めて、全てきちんと引けることを確認。
/etc/opendkim.conf の修正箇所
Mode sv
SyslogFacility mail
#
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
ExemptDomains /etc/opendkim/ExemptDomains
refile を使わない
検索で引っかかる殆どの事例が refile(正規表現使用) の dataset を指定しているが、見る限り余り意味が無いので、止めることにした。
/etc/opendkim/ 下のファイル
KeyTable
202301220._domainkey.example.com %:202301220:/etc/opendkim/keys/202301220.private
opendkim.conf(5) より
KeyTable (dataset)
--- snip ---
If the first value consists solely of a percent sign ("%") character, it will be replaced by the apparent domain of the sender when generating a signature.
% は送信者のドメインに置換される。
SigningTable
.example.com 202301220._domainkey.example.com
example.com の全てのサブドメインに一致。
TrustedHosts
127.0.0.1
::1
192.168.1.0/24
192.168.1.0/24 には内部の smtp relay が置いてある。
ExemptDomains
.example.com
example.com の全てのサブドメインに一致。
MUAから submission port 宛に投入したメールの DKIM 署名に必要。
opendkim 起動
# systemctl start opendkim
# systemctl enable opendkim
systemctl status opendkim で起動状況を確認し、
/var/log/maillog や /var/log/messages に異常が無いことを確認する。
postfix への追記
/etc/postfix/main.cf
#
# DKIM
#
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
postfix reload
systemctl reload postfix
systemctl status postfix で起動状況を確認し、
/var/log/maillog や /var/log/messages に異常が無いことを確認する。
動作確認
動作確認については、参考記事を参照のこと。
以上