#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;|
|       ...|


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS