DKIM (Domainkeys Identified Mail)

送信ドメイン認証技術にはIPアドレスを利用するものと電子署名を利用するものがあり
今回は、電子署名を利用するタイプの送信ドメイン認証である「DKIM」を導入してみました。

DKIM のインストール

# yum -y --enablerepo=epel install opendkim
:
 opendkim               x86_64        2.11.0-0.1.el7          epel        222 k
:
 libbsd                 x86_64        0.6.0-3.el7             epel         66 k
 libopendkim            x86_64        2.11.0-0.1.el7          epel         75 k
 opendbx                x86_64        1.4.6-6.el7             epel         46 k
 sendmail-milter        x86_64        8.14.7-5.el7            base         71 k

設定ファイルの修正

以下に必要な設定をしていきます。

# vi /etc/opendkim.conf
PidFile /var/run/opendkim/opendkim.pid
Mode    sv
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
SendReports     yes
SoftwareHeader  yes
Canonicalization        relaxed/relaxed
Domain  sample.com
Selector        default
MinimumKeyBits  1024
KeyTable refile:/etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts   refile:/etc/opendkim/TrustedHosts
OversignHeaders From

電子署名用の鍵

保存用ディレクトリの作成

複数ドメイン運用も可能なのでドメイン毎のディレクトリを作成します。

# mkdir /etc/opendkim/keys/sample.com

鍵の作成

「default.private」が秘密鍵、「default.txt」がDNSに設定する公開鍵になります。

/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/sample.com/ -d sampe.com -s default

所有者の変更

chown -R opendkim:opendkim /etc/opendkim/keys

KeyTableの設定

「/etc/opendkim/KeyTable」に鍵情報を追加していきます。

# vi /etc/opendkim/KeyTable
default._domainkey.sample.com sample.com:default:/etc/opendkim/keys/sample.com/default.private

SigningTableの設定

署名するドメインの情報を「/etc/opendkim/SigningTable」に追加します。

# vi /etc/opendkim/SigningTable
*@sample.com default._domainkey.sample.com

TrustedHostsの設定

# vi /etc/opendkim/TrustedHosts
127.0.0.1
::1
mail.sample.com
sample.com

DNSの設定

公開鍵をゾーンファイルに「/etc/opendkim/keys/sample.com/default.txt」の内容をそのまま追記します。
DKIMポリシーも追記します。(DKIMの規格を補うDKIM-ADSPという標準があり、RFC 5617で標準化されている。)
ゾーンのシリアル番号更新を忘れずに!!

 _adsp._domainkey        IN      TXT     "dkim=unknown"
default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "  "p=MIGf・・・・・・・・・・・・・・・・・・・・・" )  ; ----- DKIM key default

反映させます。

# systemctl reload named-chroot

opendkimの有効、起動

# systemctl enable opendkim
# systemctl start opendkim

postfixの設定

postfixにopendkimを使用するように設定追加します。

# vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

設定反映

# systemctl reload postfix

送信テスト

署名が正常に確認されるかテストを行います。
「autorespond+dkim@dk.elandsys.com」に空メールを送信すれば結果のメールが送られてきます。

$ echo "Test Mail." | mail -s "test mail" -r admin@sample.com autorespond+dkim@dk.elandsys.com

メール本文

This is an automatic response.  Replies to this message will not generate
an automatic response.
Do not reply to this message except for reporting a problem.

The results are as follows:

DKIM Signature validation: pass
DKIM Author Domain Signing Practices: dkim=unknown

DKIM Signature validation: passとなっていれば成功です、
DNSの設定に誤りがあると「permerror」となってしまいます。

参考にさせて頂いたサイト

有限会社ルートリンクス CentOS 7にDKIMを導入
Configure DomainKeys (OpenDKIM) with Postfix on CentOS 7
一般財団法人インターネット協会 有害情報対策ポータルサイト 迷惑メール対策編