Postfix + opendkimでDKIM認証するようにする。

理由はなんとなく。自身のメールアカウントでGoogleMailなど受信するとDKIMによる認証がないと言われるから。

Postfix + opendkimによる構成としますが、DKIMはPostfix内でmilterの指定をしてDKIMに署名させる、という設定をします。

大抵、ローカルのMTA配送はsendmailでやっていたり、外向けはPostfixでやっていたりすることがあります。(特にAWSで構築したEC2など)

まずは、sendmailからPostfixへ切り替えます。(既にPostfixがmtaとなっていれば)

OSの環境はCentOS6、またはAmazonLinuxを使用しています。

・MTAの指定

# alternatives --config mta

2 プログラムがあり ‘mta’ を提供します。

選択 コマンド
———————————————–
* 1 /usr/sbin/sendmail.sendmail
+ 2 /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 2

素でインストールしたCentOSなどはPostfixだけのことはありますが、AWSのEC2なんかはこうなっていることが多いです。

・OpenDkimの設定方法
主要な設定方法と、注意点を。
私の環境では、dnsとPostfixを同環境で扱っています。


opendkimをインストール
# sudo yum install opendkim

keyファイルを作成する。
# opendkim-genkey -D /etc/opendkim/keys -b 2048 -d dns.kenti.jp -s 2018_dkim

Keytableを指定する。(後にDNSレコードにも関わります。)
# vi /etc/opendkim/KeyTable
2018_dkim._domainkey.dns.kenti.jp dns.kenti.jp:2018_dkim:/etc/opendkim/keys/2018_dkim.private

メールアドレスのドメインに該当するdkimレコードを指定する。
# vi /etc/opendkim/SigningTable
dns.kenti.jp 2018_dkim._domainkey.dns.kenti.jp
mail.kenti.jp 2018_dkim._domainkey.dns.kenti.jp

※dns.kenti.jp宛、mail.kenti.jp宛のメールアドレスを扱うため、2行記載しています。

ここまでで、/etc/opendkim/keys/2018_dkim.txt というファイルができています。
これをDNSへ登録しておきましょう。


2018_dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=xxxxxxxxxxxxxxx/xxxxxxxxxxx" ) ; ----- DKIM key dkim for dns.kenti.jp
_adsp._domainkey IN TXT "dkim=unknown"

_adsp._domainkey レコードは、DKIMのポリシーを指定となります。
今回は当サイトから、「dkim署名していないメールも送信している」ということで、unknownとします。
ほかに、「ぜんぶうちはdkim署名しているよ dkim=all」「署名されていないもの、不正なものは破棄していいよ dkim=discardable」があります。当サイトの他メールサーバもあるため、今回はunknownとします。

つづけて、opendkimのconfを記述します。


[/etc/opendkim.conf]
Mode sv
KeyFile /etc/opendkim/keys/2018_dkim.private
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts

※SigningTableのファイルの参照について

/etc/opendkim/SigningTable に下記のように書いている場合
*@mail.kenti.jp 2018_dkim._domainkey.dns.kenti.jp
→/etc/opendkim.conf内の記述
SigningTable refile:/etc/opendkim/SigningTable

/etc/opendkim/SigningTable に下記のように書いている場合
mail.kenti.jp 2018_dkim._domainkey.dns.kenti.jp
→/etc/opendkim.conf内の記述
SigningTable /etc/opendkim/SigningTable

refile の書き方で挙動が変わるので注意してください。

ここまで終わったら、サービスとして起動します。


# service opendkim start
# chkconfig opendkim on

・Postfixの設定
milterとして動作させるため、下記を記載。

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

#postfix reload

その後、Gmailなどにテストメールなどを送ってみて、ログに表示されることとDKIM署名されたことを確認してみます。

# echo “テストメール本文です” | mail -s “件名:テストメール” *****@gmail.com

[/var/log/maillog]
opendkim[1199]: A8AAAAAAAAA: DKIM-Signature field added (s=dkim, d=dns.kenti.jp)