Contents
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ: メールフォーム
DKIM(DomainKeys Identified Mail)とは、電子署名を利用して送信元メールサーバーが偽装されていないか(正当なメールサーバーからの送信かどうか)を認証する仕組みです。
1. 送信メールサーバーが電子署名を付けてメールを送信
2. 受信メールサーバーが電子署名を認証
→ このとき受信先メールサーバーは、メールのFromアドレスのドメインのDNSに問い合わせを行い、TXTレコードに登録された公開鍵を取得して電子署名の認証を行います。
3. 電子署名が正しく認証された場合、メールヘッダーに「dkim=pass」を付与して正当なメールであることをアピールする
→ その結果、(メーラーやWEBメールの仕様に依存しますが)迷惑メールフォルダ等に振り分けられる可能性が低くなります。
今回は「OpenDKIM」を利用させていただき、VPS(CentOS)で設定したときの作業メモになります。
以下、root ユーザーで作業を行う前提です。
また、DKIMを適用するドメインは「example.com」としていますので、適宜読み替えてください。
# yum install opendkim
# cd /etc/opendkim/keys/ # mkdir example.com_keys
# opendkim-genkey -D example.com_keys -d example.com -s default
セレクタ名について |
---|
セレクタ名の命名は用途による差別化など、特に必要がなければ「default」でよいかと思います。
以下「default」というセレクタ名の前提ですが、変更される場合は適宜読み替えてください。
# ls -1 example.com_keys/ default.private default.txt
# chown -R opendkim:opendkim ./example.com_keys
# less example.com_keys/default.txt default._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=xxxxxxxxxx" ) ; ----- DKIM key default for example.com
次にDNSのTXTレコードに公開鍵を登録します。
DNSのTXTレコードには上記の「p=xxxxxxxxxx」の部分を登録します。
default._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=xxxxxxxxxx" _adsp._domainkey.example.com. IN TXT "dkim=unknown"
なお、「_adsp._domainkey.example.com …」のレコードですが、これは「DKIMの認証結果をどのように扱うかのポリシー」を設定する行です。
通常は「dkim=unknown」で問題ないと思いますが、「all」や「discardable」も設定できます。
各ポリシーの意味は以下となります(受信メールサーバーに以下の意図を伝えます)
all | このドメインから送信されるすべてのメールに電子署名が付けられています |
---|---|
unknown | このドメインから送信される一部、またはすべてのメールに電子署名が付けられています |
discardable | このドメインから送信されるすべてのメールに電子署名が付けられています。もし電子署名が認証できない場合はそのメールは破棄すべきです |
なお、今回対象のドメインは「Value Domain」の管轄だったため、「Value Domain」のコントロールパネルより、以下を設定しました。
txt default._domainkey v=DKIM1; k=rsa; p=xxxxxxxxxx txt _adsp._domainkey dkim=unknown
ちなみに「subdomain.example.com」のようなサブドメインがある場合は以下の書式になるので注意が必要です。
txt default._domainkey.subdomain v=DKIM1; k=rsa; p=xxxxxxxxxx txt _adsp._domainkey.subdomain dkim=unknown
また、「お名前.com」の場合は、コントロールパネルより以下の2行を設定します。(2019/08/03 追記)
ホスト名:default._domainkey TYPE:txt TTL:3600 VALUE:v=DKIM1; k=rsa; p=xxxxxxxxxx
ホスト名:_adsp._domainkey TYPE:txt TTL:3600 VALUE:dkim=unknown
※ DKIMのTXTレコードが正しく登録されたかの確認は、後述の「DKIMのTXTレコードの確認」を参照ください。
※ なお、最初の登録時は、TXTレコードの登録を誤る場合があるので、TTLを短めにしておくと修正変更の時間が短縮されます。
→ 正しい設定が確認できたら正規のTTLを改めて設定します。
次に OpenDKIM の設定を行います。
# vi /etc/opendkim.conf : # 送信時は署名を行い、受信時は検証する #Mode v Mode sv : # Socket の設定(デフォルトで以下のようになっているはず) Socket inet:8891@localhost : # KeyTable の設定(同じ設定であれば、追記でなくコメントアウトを外してもよい) # KeyTable /etc/opendkim/KeyTable KeyTable /etc/opendkim/KeyTable : # SigningTable の設定(同じ設定であれば、追記でなくコメントアウトを外してもよい) # SigningTable refile:/etc/opendkim/SigningTable SigningTable refile:/etc/opendkim/SigningTable : # ExternalIgnoreList の設定(同じ設定であれば、追記でなくコメントアウトを外してもよい) # ExternalIgnoreList refile:/etc/opendkim/TrustedHosts ExternalIgnoreList refile:/etc/opendkim/TrustedHosts : # InternalHosts の設定(同じ設定であれば、追記でなくコメントアウトを外してもよい) # InternalHosts refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts :
# vi /etc/opendkim/KeyTable default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com_keys/default.private
# vi /etc/opendkim/SigningTable *@example.com default._domainkey.example.com
# vi /etc/opendkim/TrustedHosts 127.0.0.1 ::1
# chkconfig opendkim on
# chkconfig --list | grep opendkim opendkim 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# service opendkim start
# netstat -lntp | grep opendkim tcp 0 0 127.0.0.1:8891 0.0.0.0:* LISTEN 24094/opendkim
次に postfix と opendkim の紐付けを行います。
# vi /etc/postfix/main.cf # 最下部に以下を追記 # for DKIM smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
# /etc/init.d/postfix restart
以上で設定は完了です。
GMail等にメールを送ってみて、以下のようなメールヘッダーが付けば設定が正しく行われています。
ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@example.com header.s=default header.b=lAxa+2SH;
上記のようなメールヘッダーが付与されない場合は、DNSのTXTレコードが正しく設定されているか再確認してみてください。
なお、TXTレコードが正しいかは以下のコマンドで確認できます。
% dig -t TXT default._domainkey.example.com : (snip) : ;; ANSWER SECTION: default._domainkey.example.com. 120 IN TXT "v=DKIM1; k=rsa; p=xxxxxxxxxx"
% host -t txt default._domainkey.example.com default._domainkey.example.com descriptive text "v=DKIM1; k=rsa; p=xxxxxxxxxx"
正しくDKIMの設定をしているにも関わらず、スパム判定されて迷惑メールフォルダに振り分けられてしまう場合は、以下の設定や確認を行ってみましょう。
特に1と2は必須です。
Postfix の「myhostname」と「mydomain」を正しく設定する。
% sudo vi /etc/postfix/main.cf
: myhostname = example.com : mydomain = example.com :
% sudo /etc/init.d/postfix reload
Postfix の MTA 間送信において、TLS による暗号化を行う設定をします。
具体的には「main.cf」に以下を追記し、Postfix をリロードします。
% sudo vi /etc/postfix/main.cf
# for TLS smtp_tls_CAfile = /etc/pki/tls/cert.pem smtp_tls_security_level = may smtp_tls_loglevel = 1
% sudo /etc/init.d/postfix reload
「opendkim.conf」の「SoftwareHeader」の設定を「no」に変更する。
% sudo vi /etc/opendkim.conf
: SoftwareHeader no <= yes から no に変更 :
% sudo service opendkim restart
おまけ(1) |
---|
今回、DKIMを設定したついでにSPFの設定を見直したところ、Gmailで以下のエラーが出ていました。
postfix の設定を以下のように「ipv4」に変更することで、問題を解決することができました。
# Enable IPv4, and IPv6 if supported #inet_protocols = all inet_protocols = ipv4
おまけ(2) |
---|
以下のような便利なWEBサービスがありました。
DKIM,SPF, DMARC の確認に便利です。
https://dmarcian.com/dkim-inspector/
https://dmarcian.com/spf-survey/
https://dmarcian.com/dmarc-inspector/