GmailとYahooが新しいメール送信者要件を導入したためSPFとDKIMの電子メール認証に対応

GmailとYahooが新しいメール送信者要件を導入したためSPFとDKIMの電子メール認証に対応

※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

何を今さら感はありますが、Gmailを主に使っていながら実はメール送信者要件のSPFとDKIMの電子メール認証に対応していなかったので、これから設定していこうと思います。

GmailとYahooのメール送信者要件の元は下記になるので、英語ですが翻訳サービスなどを使って確認してみてください。

In a new effort to further protect their users’ inboxes, both Gmail and Yahoo! introduced a new set of requirements senders must meet by February 2024 in order for mail to be delivered as expected to their subscribers. If a sender does not meet the requirements by February 2024, they will start to see temporary errors occurring on a small percentage of their non-compliant mail to Google recipients. In April 2024, a small percentage of the mail will be rejected and that percentage will gradually increase over time. The requirement for senders to implement one click unsubscribe will not be enforced until June 2024

Gmail and Yahoo’s New Sender Requirements: A Closer Look

2024年6月までには、上記以外にもDMARC (Domain-based Message Authentication, Reporting & Conformance)やメールヘッダーにList-Unsubscribeヘッダーを付与することでメールからワンクリックで定期購読解除ができるようにしたりしないといけないのですが、まずはSPFとDKIMに対応したいと思います。

サーバーのメール設定を確認する

まずは現状を把握しないといけないので、このブログのサーバーから自分のGmail宛てにFrom: tsukarooohi.comからメールを送ってみます。

やはりというかメールを受信できませんでしたチョー(o´Δ・`o)ショック

サーバーのメールログを確認すると次のエラーログがありました。

said: 550-5.7.26 This mail has been blocked because the sender is unauthenticated. 550-5.7.26 Gmail requires all senders to authenticate with either SPF or DKIM. 550-5.7.26  550-5.7.26こ

今回解決予定のSFP、DKIM認証に失敗した的な理由で受信サーバーから弾かれたようです。

ただその前に一つ気になる点として、メールログの送信者がfrom=<httpd@kusanagi71.localdomain になっているではありませんか!

これは当ブログがさくらインターネットのVPSサービスにKUSANAGIをインストールして使っているためだと思いますが、ここは正しいFromに変更したいと思います。

postfixの設定ファイルの下記を修正します。(コメントアウトされていれば解除して変更)

/etc/postfix/main.cf

myhostname = email.tsukarooohi.com
mydomain = tsukarooohi.com

myhostnameのサブドメイン部分はこのあとSPFレコードを設定するサブドメインに合わせます。

main.cfを編集し終わったらpostfixを再起動して再確認しましょう。

ちゃんとfrom=<httpd@email.tsukarooohi.comに変わっていますね( ´͈ ᵕ `͈ )

ドメインにSPFレコードを設定する

では本題に戻ってSPFレコードの設定をしたいと思います。

SPFとは簡単に説明すると、メールの送信元サーバーのIPアドレスとドメインに紐付けられているIPアドレスを比較することで、正規のメールサーバーから送信されているかを検証する機能になります。

そのため、SPFレコードはドメインのDNSにTXTレコードで設定すればOKです。

先にドメインにSPFレコードが設定されていないか確認しておきます。

https://www.cman.jp/network/support/nslookup.html

digコマンドの結果にSPFレコード関連の値を確認できません。

それではDNSへの設定になります。

私はDNSはAWSサービスのRoute53を利用していますが、さくらインターネットやお名前.comのDNS設定を利用している方は適宜そちらで対応してください。

設定値は下記になります。

ホスト名:email.tsukarooohi.com
タイプ:TXT
Value:v=spf1 ip4:{自分のドメインのIPアドレス} ~all
Route53にてSPFレコードの設定

これで当ブログのメール送信ドメインに対してSPFレコードの設定が完了しました。

設定したメール送信ドメインは email.tsukarooohi.comになるので、これに対して digコマンドを実行してみます。

SPFレコード設定後のdigテスト【DNSサーバ接続確認】結果

反映までに多少時間がかかるかも知れませんが、私の場合は2,3分で無事反映されました(,,>᎑<,,)

送信ドメイン認証のDKIMを設定する

次にDKIM認証の設定になりますが、こちらは少しめんどくさいです。

まずはDKIM認証に必要な鍵の生成やサーバー間同士でのやり取りを行ってくれるOpenDKIMをインストールします。

OpenDKIMとは、DKIMサービスを提供するオープンソースパッケージになので yumコマンドでインストールしていきます。

インストール内容や手順、各設定値の変更ログが次になります。

[root@kusanagi71]から始まっている行がコマンド実行部分で、//はコメントで処理の内容などを記載しています。

設定ファイルに関しては -行が元の構文で +行が追加、編集した内容になります。

// root ユーザーに切替えるか `sudo` で行ってください。

// 「EPELリポジトリ」のインストール
[root@kusanagi71 ~]# yum install epel-release

// opendkimインストール
[root@kusanagi71 ~]# yum install opendkim

・・・省略。

インストール:
  opendkim.x86_64 0:2.11.0-0.1.el7

依存性関連をインストールしました:
  libbsd.x86_64 0:0.11.7-2.el7                       libmd.x86_64 0:1.1.0-1.el7                       libopendkim.x86_64 0:2.11.0-0.1.el7                       opendbx.x86_64 0:1.4.6-6.el7                       sendmail-milter.x86_64 0:8.14.7-6.el7

完了しました!

// 鍵の格納ディレクトリ作成
[root@kusanagi71]# mkdir /etc/opendkim/keys/tsukarooohi.com

// opendkim-genkeyで鍵ファイルを作成
// http://www.opendkim.org/opendkim-genkey.8.html
[root@kusanagi71 keys]# /usr/sbin/opendkim-genkey -v -b 2048 -D /etc/opendkim/keys/tsukarooohi.com/ -d tsukarooohi.com -s m1
opendkim-genkey: generating private key
opendkim-genkey: private key written to m1.private
opendkim-genkey: extracting public key
opendkim-genkey: DNS TXT record written to m1.txt

[root@kusanagi71 keys]# ls -la /etc/opendkim/keys/tsukarooohi.com/
合計 8
drwxr-xr-x 2 root     root       36  2月 12 17:07 .
drwxr-x--- 3 opendkim opendkim   28  2月 12 16:54 ..
-rw------- 1 root     root     1675  2月 12 17:07 m1.private
-rw------- 1 root     root      491  2月 12 17:07 m1.txt

// 鍵ファイルの所有者とグループをopendkim:opendkimに変更する
[root@kusanagi71 keys]# chown opendkim:opendkim /etc/opendkim/keys/tsukarooohi.com/m1.private
[root@kusanagi71 keys]# chown opendkim:opendkim /etc/opendkim/keys/tsukarooohi.com/m1.txt
[root@kusanagi71 keys]# ls -la /etc/opendkim/keys/tsukarooohi.com/
合計 8
drwxr-xr-x 2 root     root       36  2月 12 17:07 .
drwxr-x--- 3 opendkim opendkim   28  2月 12 16:54 ..
-rw------- 1 opendkim opendkim 1675  2月 12 17:07 m1.private
-rw------- 1 opendkim opendkim  491  2月 12 17:07 m1.txt

// opendkim.conf 設定ファイルを編集
[root@kusanagi71 keys]# vim /etc/opendkim.conf

- Mode v
+ Mode sv

- KeyFile^I/etc/opendkim/keys/default.private
+ #KeyFile^I/etc/opendkim/keys/default.private

- # KeyTable^I/etc/opendkim/KeyTable
+ KeyTable^I/etc/opendkim/KeyTable

- # SigningTable^Irefile:/etc/opendkim/SigningTable
+ SigningTable^Irefile:/etc/opendkim/SigningTable

- # ExternalIgnoreList^Irefile:/etc/opendkim/TrustedHosts
+ ExternalIgnoreList^Irefile:/etc/opendkim/TrustedHosts

- # InternalHosts^Irefile:/etc/opendkim/TrustedHosts
+ InternalHosts^Irefile:/etc/opendkim/TrustedHosts

// KeyTable に秘密鍵情報を記載
[root@kusanagi71 opendkim]# vim /etc/opendkim/KeyTable
- #default._domainkey.example.com example.com:default:/etc/opendkim/keys/default.private
+ m1._domainkey.tsukarooohi.com tsukarooohi.com:m1:/etc/opendkim/keys/tsukarooohi.com/m1.private

// TrustedHosts にメール送信を行うホスト情報
[root@kusanagi71 opendkim]# vim TrustedHosts
+ email.tsukarooohi.com

// SigningTable に署名を行うドメイン名
email@tsukarooohi.com m1._domainkey.tsukarooohi.com

// DNSへの設定用にコピー
[root@kusanagi71 opendkim]# cat /etc/opendkim/keys/tsukarooohi.com/m1.txt
m1._domainkey   IN  TXT ( "v=DKIM1; k=rsa; "
      "p=...省略"
      "u4a...省略" )  ; ----- DKIM key m1 for tsukarooohi.com

// OpenDKIMを自動起動on
[root@kusanagi71 ~]# systemctl enable opendkim

ここまででDNSレコードに設定するための設定値が揃ったので、まずは設定して動作確認したいと思います。

送信ドメインにDKIMをTXTレコードで設定

DKIMもDNSへの設定になるので先程と同じくRoute53にて行います。

DKIMのTXTレコード値は先程認証鍵を生成した時に同時に作られているテキストファイルになります。

ホスト名:m1._domainkey.tsukarooohi.com
タイプ:TXT
Value:"v=DKIM1; k=rsa; " "p=MIIBIjA..."

m1のところはセレクタ名になります。

また、もう一つ別にTXTレコードでDKIMポリシーも登録しておきましょう。

ホスト名:_adsp._domainkey.tsukarooohi.com
タイプ:TXT
Value:"dkim=unknown"

これでDKIM用のDNS設定も完了になります。

設定確認はどんな方法でも構いませんが私はDKIM Record Checkerで行いました。

DKIMのDNSレコード設定確認

ちゃんと設定が反映されDKIM認証されていることが分かります。

OpenDKIMとPostfixを連携させる

DKIMのレコード設定さえうまく行けば、あとはPostfixと連携させるだけなので簡単です(•̀•́)وグッ!

// postfix にDKIMとの連携設定を追記
// 元々この項目がないため、ファイル末尾に追加記載
[root@kusanagi71 ~]# vim /etc/postfix/main.cf

+ smtpd_milters = inet:127.0.0.1:8891 #smtpdが利用するmilterを指定
+ non_smtpd_milters = $smtpd_milters #smtpd以外が利用するmilterを指定
+ milter_default_action = accept #milterがメール受診時のデフォルト挙動

// postfix再起動
[root@kusanagi71 ~]# systemctl restart postfix

上記がOpenDKIMとPostfixを連携させるPostfix側の設定になります。

実際にドメインからメール送信して動作確認

Postfixの再起動が終われば最終動作確認です。

実際にサーバーから別ドメインのメールアドレス(プライベートで使っているものなど)にメールを送って確認してみましょー。

Gmailならメール詳細右上の3点ボタンから「メッセージのソースを表示」で確認できます。

SPF、DKIM設定後のメールヘッダー

これでメール送信ドメインのSPF、DKIM認証設定は完了になります。