OpenDKIM

DKIM+SPFで送信ドメイン認証しちゃおう! CentOS7+Postfix+OpenDKIM

優 OpenDKIM

OpenDKIM

簡単に言えば、メールの送信ドメインの正当性を認証する仕組みです。実は、メールクライアントの差出人表示は簡単になりすましが可能なことがメールの仕様になっています。

ならどうやって、メール送信ドメインの正当性を担保するのか?

 

そこでDKIMやSPFなどが効果的!

SPFやDKIMはメルマガなどメールで広いユーザに配信したいケースで設定することをおすすめします。有名なメールサービスを提供しているサーバは、スパム判定による制御が厳しいのが理由です。DKIMやSPFを設定することで、到着率を向上させることが出来ます。

 

また、SPFはDNSレコードを設定するだけのお手軽ですが、DKIM認証はサーバ側にミドルウェアを入れた上で、DNSレコードにも設定が必要なので少し手間がかかります。とっつき辛いDKIM認証をメインでこの記事では御紹介致します。

 

Sender Policy Framework(センダー・ポリシー・フレームワーク)
とは、電子メールにおける送信ドメイン認証のひとつ。
差出人のメールアドレスが他のドメイン名になりすまししていないか検出する技術である。
SPF もしくは SPF認証 とも呼ばれる。

@see Wikipedia

ドメインキー・アイデンティファイド・メール(DKIM: DomainKeys Identified Mail)とは、
電子メールの認証技術である。DKIMは、署名するMail transfer agent(MTA)から検証するMTAまで、ほぼエンド・ツー・エンドの完全性を提供する。
多くの場合、署名するMTAが発信者に代わりDKIM-Signatureヘッダを追加し、また検証するMTAがDNSを通じて発信者の公開鍵を検索する事で、受信者に代わり署名の正当性を立証する。

@see Wikipedia

 

 

では設定しちゃいましょう!

 

OpenDKIMの導入

 

OpenDKIMをインストールしようね

# yum install epel-release
# yum install opendkim

 

鍵を設置するディレクトリを作るよ

# mkdir -p /etc/opendkim/keys/example.net/

 

鍵を作成しようか

# opendkim-genkey -D /etc/opendkim/keys/example.net/ -b 2048 -d example.net -s 20180529

-dにはドメイン、-sはセレクタ名を入れるよ。
セレクタ名は日付とか、自分が分かりやすいものを設定しようね。

 

所有権の設定をしましょう

# chown opendkim:opendkim -R /etc/opendkim/keys/example.net/

 

確認しよう!

# ls -l /etc/opendkim/keys/example.net/

total 8
-rw------- 1 opendkim opendkim 1679 May 30 15:40 20180529.private
-rw------- 1 opendkim opendkim  502 May 30 15:40 20180529.txt

大丈夫だね、opendkimになっているよ。

 

 

セレクターは20180529だから下記のようにしていけばいいよ。

# vi /etc/opendkim/KeyTable


#default._domainkey.example.com example.com:default:/etc/opendkim/keys/default.private

※下記を追加

20180529._domainkey.example.net example.net:20180529:/etc/opendkim/keys/example.net/20180529.private

 

 

 

受けつけるメールアドレスアカウントの設定

# vi /etc/opendkim/SigningTable

# NON-WILDCARD EXAMPLE
# If "file:" (instead of "refile:") is specified in /etc/opendkim.conf, then
# wildcards will not work. Instead, full user@host is checked first, then simply host,
# then user@.domain (with all superdomains checked in sequence, so "foo.example.com"
# would first check "user@foo.example.com", then "user@.example.com", then "user@.com"),
# then .domain, then user@*, and finally *. See the opendkim.conf(5) man page under
# "SigningTable" for more details.

#example.com default._domainkey.example.com


※下記を追加する

*@example.net 20180529._domainkey.example.net

今回は『*』を使い、ワイルドカードで動的に対応できるように設定しました。

 

 

 

設定ファイルの複製でバックアップだ!

# cp /etc/opendkim.conf /etc/opendkim.conf.org

 

 

下記のように編集します。

# vi /etc/opendkim.conf


Mode    v

↓変更

#Mode   v
Mode    sv




KeyFile /etc/opendkim/keys/default.private

↓変更

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



# KeyTable      /etc/opendkim/KeyTable

↓変更

 KeyTable       /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/TrustedHosts

# OPENDKIM TRUSTED HOSTS
# To use this file, uncomment the #ExternalIgnoreList and/or the #InternalHosts
# option in /etc/opendkim.conf then restart OpenDKIM. Additional hosts
# may be added on separate lines (IP addresses, hostnames, or CIDR ranges).
# The localhost IP (127.0.0.1) should always be the first entry in this file.
127.0.0.1
::1
#host.example.com
#192.168.1.0/24

※下記を追加

127.0.0.1

自身でメール送信するから、今回は127.0.0.1を設定したよ。

 

 

鍵の自動生成を抑制するよ。

# vi /etc/sysconfig/opendkim


# Set the necessary startup options
OPTIONS="-x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid"

# Set the default DKIM selector
DKIM_SELECTOR=default

# Set the default DKIM key location
DKIM_KEYDIR=/etc/opendkim/keys


※下記を追加

AUTOCREATE_DKIM_KEYS=NO

 

 

 

反映させよう。

# systemctl restart opendkim
# systemctl enable opendkim

 

 

Postfixの設定を変更しよう

# vi /etc/postfix/main.cf


#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = example.net ←追加

# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
#mydomain = domain.tld
mydomain = example.net ←追加



※最終行に追加

## DKIM
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

 

反映させよう

# postfix check
# systemctl restart postfix

 

 

DKIMの公開鍵を確認しよう

# cat /etc/opendkim/keys/example.net/20180529.txt


20180529._domainkey     IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIIBIjAN (^ワ^略) E1G+JPRvEeg1ujzLHdqOS9dE"
          "7F/VXreA/ (^ワ^略) IDAQAB" )  ; ----- DKIM key 20180529 for example.net

2行になっている鍵の行は、環境によってくっつけてね。

 

 

バリュードメイン設定

a @ 150.xxx.yyy.23
a 20180529._domainkey 150.xxx.yyy.23
txt @ v=spf1 a:yexample.net ~all
txt 20180529._domainkey p=MIIBIjANBgkqh(^ワ^略)q+3QIDAQAB; v=DKIM1; k=rsa;

 

  • SPF
    txt @ v=spf1 a:yexample.net ~all
  • DKIM
    txt 20180529._domainkey p=MIIBgkqh(^ワ^略)q+3QAB; v=DKIM1; k=rsa;

 

 

サーバからGmailにテストメールを送信しよう

 

Gmailのアカウントにメールを送付して、受信メールのソースを確認して下さい。

Received-SPF: pass (google.com: domain of root@example.net designates 150.xxx.yyy.23 as permitted sender) client-ip=150.xxx.yyy.23;
Authentication-Results: mx.google.com;
       dkim=pass header.i=@example.net header.s=20180529 header.b=g9Yb0/B5;
       spf=pass (google.com: domain of root@example.net designates 150.xxx.yyy.23 as permitted sender)

 

  • dkim=pass
  • spf=pass

それぞれ、passとなっていればちゃんと設定がうまくいっているよ。

安心してね。

 

お疲れ様です。

 

OpenDKIM
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG