簡単に言えば、メールの送信ドメインの正当性を認証する仕組みです。実は、メールクライアントの差出人表示は簡単になりすましが可能なことがメールの仕様になっています。
ならどうやって、メール送信ドメインの正当性を担保するのか?
そこで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をインストールしようね
1 2 |
# yum install epel-release # yum install opendkim |
鍵を設置するディレクトリを作るよ
1 |
# mkdir -p /etc/opendkim/keys/example.net/ |
鍵を作成しようか
1 |
# opendkim-genkey -D /etc/opendkim/keys/example.net/ -b 2048 -d example.net -s 20180529 |
-dにはドメイン、-sはセレクタ名を入れるよ。
セレクタ名は日付とか、自分が分かりやすいものを設定しようね。
所有権の設定をしましょう
1 |
# chown opendkim:opendkim -R /etc/opendkim/keys/example.net/ |
確認しよう!
1 2 3 4 5 |
# 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だから下記のようにしていけばいいよ。
1 2 3 4 5 6 7 8 |
# 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 |
受けつけるメールアドレスアカウントの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 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 |
今回は『*』を使い、ワイルドカードで動的に対応できるように設定しました。
設定ファイルの複製でバックアップだ!
1 |
# cp /etc/opendkim.conf /etc/opendkim.conf.org |
下記のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# 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 |
受け付けるネットワークを設定しようね
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 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を設定したよ。
鍵の自動生成を抑制するよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 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 |
反映させよう。
1 2 |
# systemctl restart opendkim # systemctl enable opendkim |
Postfixの設定を変更しよう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# 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 |
反映させよう
1 2 |
# postfix check # systemctl restart postfix |
DKIMの公開鍵を確認しよう
1 2 3 4 5 6 |
# 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行になっている鍵の行は、環境によってくっつけてね。
バリュードメイン設定
1 2 3 4 |
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のアカウントにメールを送付して、受信メールのソースを確認して下さい。
1 2 3 4 |
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となっていればちゃんと設定がうまくいっているよ。
安心してね。
お疲れ様です。