Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM)

Linux
スポンサーリンク

DKIM(ディーキム)は、そのメールが正当なメールサーバから送信されたメールか否(差出人のメールアドレスが詐称されたメール)かを識別する技術です。仕組みとしては、送信側でメールに電子署名を行い、受信側でその電子署名を検証することによってメールサーバの正当性をチェックします。PostfixでDKIMを使えるようにするには OpenDKIM を使うのが定番のようです。

設定の手順は、送信側のメールサーバで署名に必要な秘密鍵と公開鍵を作成し、この秘密鍵を使ってメールサーバで署名を行うように設定します。一方、ペアの公開鍵はメールドメインを管理しているDNSサーバのTXTレコードに登録しておき、受信側のメールサーバはこの公開鍵を使って電子署名の検証を行います。
dkim01

OpenDKIMのインストール

インストールにあたってEPELリポジトリを追加します。

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6

OpenDKIM(2.9.0-2)をインストールします。※バージョンは2014年11月5日時点のものです。

yum -y install opendkim

インストールが終了したら、EPELリポジトリを無効にしておきます。
vi /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
 ↓
enabled=0

DKIM署名用の秘密鍵と公開鍵の作成

今回は「apar.jp」ドメインでの設定になります。ご自分の管理しているドメイン名に読み替えてください。

鍵ファイルの作成先ディレクトリを作っておきます。ディレクトリをドメイン名にしておくと、複数のドメインを管理する時に便利かと思います。

mkdir /etc/opendkim/keys/apar.jp

opendkim-genkeyコマンドで鍵ファイル(秘密鍵と公開鍵)を作成します。

opendkim-genkey -D /etc/opendkim/keys/apar.jp -d apar.jp -s 20141105

・オプションの意味
-D 鍵ファイルの作成先ディレクトリを指定
-d ドメイン名を指定
-s セレクタ名(セレクタ名はこの後もろもろの設定で使いますので、覚えやすいものがよいかと思います。私は鍵を作成した日にしておきました)

鍵ファイルのオーナーを「opendkim」に変更します。

chown opendkim:opendkim /etc/opendkim/keys/apar.jp/20141105.private
chown opendkim:opendkim /etc/opendkim/keys/apar.jp/20141105.txt

以上で下記2つの鍵ファイル(秘密鍵と公開鍵)が作成されました。ここで作成した公開鍵をDNSサーバに登録します。
/etc/opendkim/keys/apar.jp/20141105.private ・・・秘密鍵
/etc/opendkim/keys/apar.jp/20141105.txt   ・・・公開鍵

公開鍵レコードとADSPレコードの作成

DNSサーバに登録するための公開鍵レコードと、ADSPレコードの2つを作成します。普通のDNSレコードとはだいぶ異なりますので複雑に感じます(^^;)

公開鍵レコードの書式

<セレクタ名>._domainkey.<ドメイン名>.	IN	TXT "v=DKIM1; k=rsa; p=<公開鍵のデータ>"

「v=DKIM1; k=rsa;」はお決まりの設定です。このタグは省略することも可能ですが、設定することが推奨されています。当たり前ですが「p=<公開鍵のデータ>」は省略できません。

「p=」の後に指定する<公開鍵のデータ>は、公開鍵ファイルの下記赤字の部分です。
cat /etc/opendkim/keys/apar.jp/20141105.txt
------------------------------
20141105._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEY3elqxNK0guNILe8vha+WUpjiX2OVxkCDm6TzTAUCKR9Zde3sphY/gzor4j0ElHr2H3ax4MOqwuZ7WyP466d89QpYIbUxhz/zR/1TzqKa8ES0OHiUVvY9Nf4uONQY84Yr1g6l1vFNDy3nqK6/cf5OuOzxcGYbxOL3djH1TnF7QIDAQAB" ) ; ----- DKIM key 20141105 for apar.jp
------------------------------

上記をふまえて今回登録する公開鍵レコードはこのようになります。かなーり長くなりますね。

20141105._domainkey.apar.jp.  IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEY3elqxNK0guNILe8vha+WUpjiX2OVxkCDm6TzTAUCKR9Zde3sphY/gzor4j0ElHr2H3ax4MOqwuZ7WyP466d89QpYIbUxhz/zR/1TzqKa8ES0OHiUVvY9Nf4uONQY84Yr1g6l1vFNDy3nqK6/cf5OuOzxcGYbxOL3djH1TnF7QIDAQAB"

ADSPレコードの書式

ADSPレコードは、受信側でDKIMの認証結果をどのように扱ってほしいかを示すためのレコードです。dkim=の値は「all」「unknown」「discardable」のいずれかを設定します。

_adsp._domainkey.<ドメイン名>.  IN TXT "dkim=unknown"

現時点では下記の理由から「dkim=unknown」とするのが無難なようです。

▽ (引用元)DKIM (Domainkeys Identified Mail)|迷惑メール対策委員会

*なお、discardableやallを公開すると、署名して送信したメールが配送経路において再署名されるケース(メーリングリストへの投稿等)や、第三者にメールの送信を委託する場合などにおいて、受信側に厳しい対応をとられる可能性が考えられる。そのような状況を考慮する必要のあるメールを送信する場合、discardableやallの公開については十分に注意が必要である。

上記をふまえて今回登録するADSPレコードはこのようになります。

_adsp._domainkey.apar.jp.  IN TXT "dkim=unknown"

DNSサーバ(Amazon Route 53)へ公開鍵の登録

作成した下記の公開鍵レコードとADSPレコードをDNSサーバに登録します。

20141105._domainkey.apar.jp.  IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEY3elqxNK0guNILe8vha+WUpjiX2OVxkCDm6TzTAUCKR9Zde3sphY/gzor4j0ElHr2H3ax4MOqwuZ7WyP466d89QpYIbUxhz/zR/1TzqKa8ES0OHiUVvY9Nf4uONQY84Yr1g6l1vFNDy3nqK6/cf5OuOzxcGYbxOL3djH1TnF7QIDAQAB"
_adsp._domainkey.apar.jp.  IN TXT "dkim=unknown"

AWSのマネジメントコンソールから「Route53」を選択します。
aws-route53-01-min

「Hosted Zones」をクリックします。
aws-route53-02-min

レコードを登録するドメイン名(apar.jp)にチェックを入れ、「Go to Record Set」をクリックします。
aws-route53-03-min

「Create Record Set」をクリックします。
aws-route53-04-min

公開鍵レコードを登録します。TYPEは「TXT」を選択してください。
dkim02

同様にADSPレコードを登録します。
dkim03

確認

登録したレコードが正しく引けるかを確認します。

公開鍵レコードの確認

$ dig 20141105._domainkey.apar.jp txt
(省略)
;; ANSWER SECTION:
20141105._domainkey.apar.jp. 300 IN	TXT	"v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEY3elqxNK0guNILe8vha+WUpjiX2OVxkCDm6TzTAUCKR9Zde3sphY/gzor4j0ElHr2H3ax4MOqwuZ7WyP466d89QpYIbUxhz/zR/1TzqKa8ES0OHiUVvY9Nf4uONQY84Yr1g6l1vFNDy3nqK6/cf5OuOzxcGYbxOL3djH1TnF7QIDAQAB"
(省略)

ADSPレコードの確認

$ dig _adsp._domainkey.apar.jp txt
(省略)
;; ANSWER SECTION:
_adsp._domainkey.apar.jp. 300	IN	TXT	"dkim=unknown"
(省略)

どちらのレコードも正しく引けていることが分かります。

OpenDKIMの設定

今回のメイン OpenDKIMの設定です。

vi /etc/opendkim.conf

# 「s」送信時の署名「v」受信の確認の両方行う
Mode    v
 ↓
Mode    sv

KeyFile /etc/opendkim/keys/default.private
 ↓
#KeyFile /etc/opendkim/keys/default.private

#KeyTable   /etc/opendkim/KeyTable
 ↓
KeyTable        refile:/etc/opendkim/KeyTable

#SigningTable   refile:/etc/opendkim/SigningTable
 ↓
SigningTable   refile:/etc/opendkim/SigningTable

#ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
 ↓
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts

#InternalHosts  refile:/etc/opendkim/TrustedHosts
 ↓
InternalHosts  refile:/etc/opendkim/TrustedHosts

署名に使う秘密鍵を指定
vi /etc/opendkim/KeyTable

20141105._domainkey.apar.jp     apar.jp:20141105:/etc/opendkim/keys/apar.jp/20141105.private

署名を行うドメイン名を指定
vi /etc/opendkim/SigningTable

*@apar.jp   20141105._domainkey.apar.jp

送信を行うPostfixサーバのIPアドレスを指定。今回は同じサーバでPostfixを動かしているのでループバックアドレスを指定します。
vi /etc/opendkim/TrustedHosts

127.0.0.1

・OpenDKIMの起動
service opendkim start

OpenDKIM起動時に秘密鍵を自動生成できなかった旨の警告が発生することがあります。

Generating default DKIM keys: hostname: No address associated with name
                                                           [WARNING]

動作には問題ないようですが、起動時に秘密鍵を自動生成しないように変更しておくと良いでしょう。
vi /etc/sysconfig/opendkim

AUTOCREATE_DKIM_KEYS=YES
 ↓
AUTOCREATE_DKIM_KEYS=NO

・OpenDKIMの再起動
service opendkim start

・OpenDKIM自動起動設定
chkconfig opendkim on

Postfix と OpenDKIM を接続

Postfixの基本設定はこちらを参照してください。

PostfixからOpenDKIMを使えるように設定します。
vi /etc/postfix/main.cf

---(下記を最終行に追加)---------------------------
#
# DKIM設定
#
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

・Postfixをリロードします。
service postfix reload

DKIM認証の動作確認

最後に動作確認です。

メール送信時の署名確認

Gmailなどへメールを送信して、メールヘッダに下記のような表示があればOKです。
dkim04

Gmailなどからメールを受信して下記のようなログがあればOKです。

Nov  6 05:32:23 sv01 opendkim[32105]: B51EC420322: mail-pd0-f178.google.com [209.85.192.178] not internal
Nov  6 05:32:23 sv01 opendkim[32105]: B51EC420322: not authenticated
Nov  6 05:32:24 sv01 opendkim[32105]: B51EC420322: DKIM verification successful
Nov  6 05:32:24 sv01 opendkim[32105]: B51EC420322: s=20120113 d=gmail.com SSL

コメント

  1. […] gmailとmailman Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) […]

  2. DKIM導入 | かんのWebメモ より:
  3. spam認定を解除するためにDKIMの設定した話 | Lachelier より:
  4. spam認定を解除するためにDKIMの設定した話 より:

    […] Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) […]

  5. PostfixをDKIM認証に対応(CentOS) | Angel21 HP Blog より:

    […] 参考サイト: Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) | あぱーブログ […]

タイトルとURLをコピーしました