pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

opendkim環境構築

環境

RHEL7

やりたいこと

メール送信時にDKIM署名するサーバの構築

手順

①OpenDKIMパッケージインストール

# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum -y --enablerepo=rhui-REGION-rhel-server-optional install sendmail-milter
# yum install -y opendkim --enablerepo=epel

②OpenDKIM設定ファイル編集

  • /etc/opendkim.conf
PidFile /var/run/opendkim/opendkim.pid
Mode    s
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
SendReports     no
SoftwareHeader  yes
Canonicalization        relaxed/relaxed
MinimumKeyBits  1024
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
OversignHeaders From
  • /etc/opendkim/KeyTable
s1._domainkey.sa.example.com sa.example.com:s1:/etc/opendkim/keys/s1.private
  • /etc/opendkim/SigningTable
*@sa.example.com s1._domainkey.sa.example.com

★ポイント★
・受信検証しないのでModeはs
・受信検証しないけど、SendReports noで明示的に認証失敗レポート機能無効化
・KeyTableはDNSレコードと鍵ファイルの紐づけ
・SigningTableはFromアドレスとDNSレコードの紐づけ
・利用するドメイン/署名が1個だけの場合は、KeyTable・SigningTableは利用せず、domain・KeyFileに定義すればOK。
・今回は1個だけだが、拡張性を考慮しKeyTable・SigningTableを利用

③鍵ファイル生成

# opendkim-genkey -b 2048 --directory=/etc/opendkim/keys --selector=s1 --domain=sa.example.com
# chown opendkim. /etc/opendkim/keys/*

Postfix設定ファイル編集

参考にしたサイトの通り以下追加

milter_default_action = accept
non_smtpd_milters = $smtpd_milters
smtpd_milters = inet:127.0.0.1:8891

⑤動作確認

受信側は何の情報をもとに送信元検証をするのか?EnvFrom/From Header_

→どちらでもない。DKIM-Signatureヘッダにあるドメイン名(dタグ)や送信アドレス(iタグ)で実施
f:id:pikesaku:20200224003532p:plain

OpenDKIMでDKIM-Signatureヘッダ付与時、エンベロープFrom/Fromヘッダどちらをdタグに付与するの?

Fromヘッダのみがマッチする場合

$ echo test | mutt -e 'set use_envelope_from=yes' -e 'set envelope_from_address="hoge@hoge.com"' -e 'my_hdr From: hoge@sa.example.com' 宛先アドレス

DKIMヘッダ付いた!

ENV Fromのみがマッチする場合

$ echo test | mutt -e 'set use_envelope_from=yes' -e 'set envelope_from_address="hoge@sa.example.com"' -e 'my_hdr From: hoge@hoge.com' 宛先アドレス

DKIMヘッダ付かず!

結論はFromヘッダを見てる!

どんなヘッダがつくの?