DKIM(ディーキム)は、そのメールが正当なメールサーバから送信されたメールか否(差出人のメールアドレスが詐称されたメール)かを識別する技術です。仕組みとしては、送信側でメールに電子署名を行い、受信側でその電子署名を検証することによってメールサーバの正当性をチェックします。PostfixでDKIMを使えるようにするには OpenDKIM を使うのが定番のようです。
設定の手順は、送信側のメールサーバで署名に必要な秘密鍵と公開鍵を作成し、この秘密鍵を使ってメールサーバで署名を行うように設定します。一方、ペアの公開鍵はメールドメインを管理しているDNSサーバのTXTレコードに登録しておき、受信側のメールサーバはこの公開鍵を使って電子署名の検証を行います。
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」を選択します。
レコードを登録するドメイン名(apar.jp)にチェックを入れ、「Go to Record Set」をクリックします。
公開鍵レコードを登録します。TYPEは「TXT」を選択してください。
確認
登録したレコードが正しく引けるかを確認します。
公開鍵レコードの確認
$ 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です。
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
コメント
[…] gmailとmailman Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) […]
[…] http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/ https://blog.apar.jp/linux/856/ […]
[…] 主に下記6つのサイトを参照して、やっとできました。 https://blog.apar.jp/linux/856/ http://server-setting.info/centos/sendmail-dkim-milter.html http://www.ohoclick.com/archives/38 http://kantaro-cgi.com/blog/etc-server/opendki […]
[…] Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) […]
[…] 参考サイト: Postfix DKIM 認証 設定メモ(CentOS6.5+OpenDKIM) | あぱーブログ […]