Gmailでは、昨年2022年11月より、Gmailの個人アカウントあてにメールを送る場合は、SPFやDKIM、DMARCの「送信ドメイン認証」の設定が必要となりました。商用でPMailServer2を使っていて、Gmailに送れない!という方もきっと多いと思います。多分。 そこで、DKIMの設定をしてみたのですが、困難の連続でした。せっかく頑張って設定したので、その方法をここに詳説します。一部に関しては、PMailServer2だけではなく、Postfixなどにも応用できると思いますが、この記事はPMailServer2を前提としているので、基本はWindows Serverで操作することを前提としています。 また、DNSサーバもWindows Server付属のDNSサーバを使っていますが、BINDを使う場合はBINDの流儀に従えば、同様のレコード設定でいけると思います。
使用したソフトウェア・アプリケーション
- Windows Server 2022 Datacenter 21H2
- PMailServer2:Version 2.50(Pro-IMAP4)
- OpenSSL :Version 3.1.0
- Windows Server付属のDNSマネージャー
- コマンドプロンプト
前提条件
- 基本的なメールの送受信ができる状態まで設定してあること
- OpenSSLのパスが通っていること(コマンドプロンプト上でOpenSSLのコマンドが実行できる状態)
全体の流れ
①秘密鍵・公開鍵を発行する
- OpenSSLで秘密鍵を.pem形式で発行する
- 1で発行した秘密鍵をPMailServer2で使える形式に変換
- 変換後の秘密鍵から公開鍵を発行する
②PMailServer2に秘密鍵を登録する
- 基本設定
- ドメイン別設定
③DNSマネージャーでDNSサーバーに公開鍵を登録する
- TXTレコードを追加する
- TXTレコードの詳細を書き込んでいく
①秘密鍵・公開鍵の発行手順
1.-OpenSSLで秘密鍵を.Pem形式で発行する
OpenSSLで鍵長2048ビットの秘密鍵(private.pem)を発行する
$ openssl genrsa -out private.pem 2048
発行した秘密鍵をメモ帳で開いてみる
-----BEGIN PRIVATE KEY-----
キー本体
-----END PRIVATE KEY-----
この時点ではPMailServer2では扱えない形式(PKCS#8)のため次のステップで変換する
2. 1で発行した秘密鍵をPMailServer2で使える形式に変換
秘密鍵(PKCS#8)をPKCS#1に変換し別名(pri02.pem)で書き出す。
$openssl pkey -in private.pem -traditional > pri02.pem
変換した秘密鍵を開いて
-----BEGIN RSA PRIVATE KEY-----
キー本体
-----END RSA PRIVATE KEY-----
に変わっていればPKCS#1に変換できています。
3.変換した秘密鍵から公開鍵を発行する
秘密鍵から公開鍵を発行するコマンド
$openssl rsa -in pri02.pem -out pub02.pem -pubout -traditional
コマンドの末尾で「-traditional」と指定していますが、これは「PKCS#1で書き出してね。」という指定です。
★発行した公開鍵から改行と「-----BEGIN PUBLIC KEY-----」と「------END PUBLIC KEY-----」を削除してこの時一行につき255文字より多い場合、改行を随時行ってください。
②PMailServer2に秘密鍵を登録する
*より詳細に設定したい場合公式マニュアルを参照ください。
1.基本設定を行う
- 「DKIM署名を行う」にチェックをつける。
- 「正規化」に関して今回は厳密な確認(simple/simple)を指定します。
- 「署名に含めるヘッダ」には最低1つ以上指定してください。また、複数指定する場合( , カンマ区切りで指定します。)
- 今回「追加ヘッダ」にはチェックをつけています。
- 「追加処理」にチェックをつけておきます。
2.ドメイン別設定を行う
- DKIM署名を行うドメイン名を指定してください。
- 任意のセレクタ名を指定してください。(セレクタ名は任意の文字列でOKですが、ドメイン名と秘密キーを結びつける為のものだと考えると分かりやすいかもしれません。)
- 前項で作成した秘密鍵をフルパスで指定してください。(形式は.pemである必要があります。)
③DNSマネージャーでDNSサーバーに公開鍵を登録する
*環境によっては表記やUI等が違う可能性があることをご留意ください。
1.TXTレコードを追加する
該当のドメインに対しTXTレコードを追加していきます。
2.TXTレコードの詳細を書き込んでいく
- 「エイリアス名」にはPMailServer2の「ドメイン別設定」で指定した「セレクタ」と「._domainkey」を合体させた「セレクタ._domainkey」を入力します。
- 「完全修飾ドメイン名(FQDN)」はエイリアス名とドメイン名が結合した文字列が自動的に入力されます、FQDNが以下の書式になっていることを確認してください。
セレクタ._domainkey.ドメイン名
- 「テキスト」欄には編集した公開鍵を貼り付ける(改行を行う理由としてはDNSマネージャーの一行当たりの上限文字数が255文字の場合が多いため、それをオーバーしてしまうと切り捨てられてしまい、署名が正常にできなくなってしまいます。)
④テスト
1.PMailServer2での署名テスト
PMailServer2での署名テスト方法はマニュアルを参照してください。
2.その他のサイトでDKIM署名されているかテストする方法
- dmarcian:DKIM Record Checker(DKIMレコードの参照し存在するかのチェック&DKIMレコードに含まれるパラメーターを確認できます) https://dmarcian.com/dkim-inspector/
- dkimcore(DKIMレコードの参照し存在するかのチェック&レコードが有効か否かのテストができます。) https://dkimcore.org/tools/keycheck.html
おわりに
この作業後、SPFやDMARCの設定をすると、上手く送受信出来るようになりました! 独自ECサイトを構築している方は自前ドメインでメール送信することも多いと思います。その際に参考にしていただければと思います。
特に秘密鍵の形式(PKCS#1や.pem)やTXTレコードの流儀には落とし穴も多いので、この記事を参考に構築いただきたいと思います。