#author("2018-08-03T20:21:09+09:00","","") [[コマンド]] *Postfix + OpenDKIMで送信元ドメイン認証を実装するメモ [#y38eb071] **DKIMとは [#e6ec3d77] -DKIM(Domain Keys Identified Mail) -送信元ドメインを認証するための技術 **OpenDKIMの導入 [#a8592295] 標準のレポジトリにはないので、EPELから取ってくる |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# yum install -y epel-release| |[root@localhost ~]# yum install -y opendkim| **鍵ペア作成 [#y7a9e410] opendkim-genkeyを利用 |BGCOLOR(black):COLOR(white):|c |opendkim-genkey -D [出力先ディレクトリ] -b [鍵の長さ] -d [ドメイン名] -s [セレクタ名]| |&color(lime){(例)};| |[root@localhost ~]# opendkim-genkey -D /etc/opendkim/keys -b 2048 -d example.com -s 20170309| |[root@localhost ~]# ls -l /etc/opendkim/keys/| |20170309.private 20170309.txt| |[root@localhost ~]# chown -R opendkim:opendkim /etc/opendkim/keys/*| → セレクタ名.privateとセレクタ名.txtが出来ている → xxx.privateが秘密鍵、xxx.txtがDNSのDKIMレコードとなる → 秘密鍵は漏洩しないように留意 **KeyTable、SigningTableの更新 [#jdcbfc55] KeyTableを更新する ※ DKIMレコードと秘密鍵の関連付け? |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/opendkim/KeyTable| 以下の書式に従う |BGCOLOR(black):COLOR(white):|c |DKIMレコード名 ドメイン名:セレクタ名:秘密鍵ファイル| |BGCOLOR(black):COLOR(white):|c |/etc/opendkim/KeyTable| |20170309._domainkey.example.com example.com:20170309:/etc/opendkim/keys/20130709.private| **SigningTableを更新する [#a11c0664] ※ どのDKIMレコードに対応する秘密鍵で署名するか決定するテーブル? |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# # vi /etc/opendkim/SigningTable| 以下の書式に従う |BGCOLOR(black):COLOR(white):|c |対象のメールアカウント DKIMレコード名| なお、ドメインの全てのアカウントを一括指定も可能 |BGCOLOR(black):COLOR(white):|c |/etc/opendkim/SigningTable| |# アカウントを指定する書き方| |hoge@examle.com 20170309._domainkey.example.com| |# ワイルドカードを利用する書き方| |*@example.com 20170309._domainkey.example.com| |# ワイルドカードを利用しない書き方| |@example.com 20170309._domainkey.example.com| **opendkim.confの設定 [#k67e46df] 設定ファイルをバックアップして編集 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# \cp -p /etc/opendkim.conf /tmp/| |[root@localhost ~]# vi /etc/opendkim.conf| 編集結果をdiff取ると、だいたいこんな感じ |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# diff /etc/opendkim.conf /tmp/| |39c39| |< Mode sv| |---| |> Mode v| |91c91| |< #Selector default| |---| |> Selector default| |98c98| |< #KeyFile /etc/opendkim/keys/default.private| |---| |> KeyFile /etc/opendkim/keys/default.private| |103c103| |< KeyTable /etc/opendkim/KeyTable| |---| |> # KeyTable /etc/opendkim/KeyTable| |108c108| |< SigningTable refile:/etc/opendkim/SigningTable| |---| |> # SigningTable refile:/etc/opendkim/SigningTable| |112c112| |< ExternalIgnoreList refile:/etc/opendkim/TrustedHosts| |---| |> # ExternalIgnoreList refile:/etc/opendkim/TrustedHosts| |115c115| |< InternalHosts refile:/etc/opendkim/TrustedHosts| |---| |> # InternalHosts refile:/etc/opendkim/TrustedHosts| **OpenDKIM起動 [#r8acbee7] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# chkconfig opendkim on| |[root@localhost ~]# service opendkim start| |[root@localhost ~]# netstat -lntp | grep opendkim| |tcp 0 0 127.0.0.1:8891 0.0.0.0:* LISTEN xxxxxx/opendkim| **Postfixの設定を変更 [#a4033168] OpenDKIMはmilterとして動作するので、Postfixにmilterの設定を入れる |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/postfix/main.cf| 末尾に以下を追記 |BGCOLOR(black):COLOR(white):|c |/etc/postfix/main.cf| |...| |# smtpdプロセスが利用するmilterの定義| |smtpd_milters = inet:localhost:8891| |# smtpdプロセス以外が利用するmilterの定義| |non_smtpd_milters = inet:localhost:8891| |# milterがメールを受け取ったときの既定の動作| |milter_default_action = accept| **Postfixの設定確認&再起動 [#t4bfa16b] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# service postfix check| |[root@localhost ~]# service postfix reload| |[root@localhost ~]# postconf | egrep "(smtpd_milters|milter_default_action)"| |milter_default_action = accept| |non_smtpd_milters = inet:localhost:8891| |smtpd_milters = inet:localhost:8891| **DNSサーバへのTXTレコード登録 [#u95bf8b8] 出力されたTXTレコードをコピー |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# cat /etc/opendkim/keys/20170309.txt| こんな感じのが出力される(鍵ペア作成時の鍵長が長いと結構長い) |BGCOLOR(black):COLOR(white):|c |20170309._domainkey IN TXT ( "v=DKIM1; k=rsa; "| | "p=xxxxpubkeyxxxxxx..." "...xxxxxpubkeyxxxxx" ) ; ----- DKIM key 20170309 for example.com| **zoneファイルに追記 [#vef53ec4] zoneファイルにTXTレコードを追加する DKIMレコードとADSPレコードを追加する ''BINDの場合の例'' |BGCOLOR(black):COLOR(white):|c |/var/named/example.com.zone| |20170309._domainkey IN TXT ( "v=DKIM1; k=rsa; "| | "p=xxxxpubkeyxxxxxx..." "...xxxxxpubkeyxxxxx" ) ; ----- DKIM key 20170309 for example.com | |_adsp._domainkey IN TXT "dkim=unknown" ; DKIMの認証結果に対する取り扱い方針を示す| **名前解決できることを確認 [#yc0b32c1] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# dig 20170309._domainkey.example.com txt| |...| |;; ANSWER SECTION:| |20170309._domainkey.example.com. 3600 IN TXT "v=DKIM1\; k=rsa\; " "xxxxxpubkeyxxxxx..." "...xxxxxpubkeyxxxxx"| |[root@localhost ~]# dig _adsp._domainkey.example.com txt| |...| |;; ANSWER SECTION:| |_adsp._domainkey.example.com. 3600 IN TXT "dkim=unknown"| |→ ANSWER SECTIONに想定通りの値が返ってくること。| **メールを送信してみる [#h402cec5] 自分のGmailアカウント宛にメールを投げてみる |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# echo "テストメールですよ" | mail -s "DKIMのテスト" hoge@gmail.com| ''maillogを確認してDKIM-Signatureフィールドが追加されていることを確認する'' |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# tail /var/log/maillog| |Mar 9 14:34:44 ns-test opendkim[23066]: 78A3B101059: DKIM-Signature field added (s=20170309, d=example.com)| **受信結果の確認 [#va7adf27] Gmailで受信したメールを確認してみる Authentication-Resultsヘッダが"dkim=pass"となっていることを確認する |BGCOLOR(black):COLOR(white):|c |Authentication-Results: mx.google.com;| | dkim=pass header.i=@example.com;| | ...|