2024年2月にgmailでセキュリティ対策が強化され、DKIMの設定がされていないと迷惑メールとして判断される可能性が高まります。SPFの設定は実施していても、DKIMの設定までは実施していないサーバも多いと思われます。ここではpostfixでopendkimを使用して対応する手順を紹介します。
またgoogle(gmail)でセキュリティが強化されるのですね。
そのようです。今回は5000通/日を超えるメールをgmail宛てに送付する場合、DKIMが設定されていないと、ブロックされる可能性が高まります。とはいえ、今後は必須になってくるでしょうから、早めに対応しておくのが良いですね。
DKIM(opendikim)のパッケージをインストール
ここではすでにpostfixでメール配送しており、追加でDKIMを導入するという前提で進めます。またLinuxサーバ環境は、AlmaLinux8の環境で動作を確認しています。
まず、下記のとおり、必要なパッケージであるopendkimとopendkim-tools パッケージをインストールします。
# dnf install opendkim
# dnf install opendkim-tools
特にエラー等が無ければ、インストールは完了です。もしopendkimのパッケージが見つからなければ、EPELリポジトリが必要ですので、下記のコマンドであらかじめ追加ください。
# dnf install epel-release
<2024年9月20日追記>
AlmaLinux9の環境で、opendkimをインストールしようとしたところ、以下のエラーメッセージが表示されました。
# dnf install opendkim opendkim-tools
Extra Packages for Enterprise Linux 9 - x86_64 4.8 MB/s | 23 MB 00:04
Last metadata expiration check: 0:00:08 ago on Thu Sep 19 09:56:15 2024.
Error:
Problem 1: conflicting requests
- nothing provides libmilter.so.1.0()(64bit) needed by opendkim-2.11.0-0.36.el9.x86_64 from epel
- nothing provides libmemcached.so.11()(64bit) needed by opendkim-2.11.0-0.36.el9.x86_64 from epel
Problem 2: conflicting requests
- nothing provides libmemcached.so.11()(64bit) needed by opendkim-tools-2.11.0-0.36.el9.x86_64 from epel
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
crbのリポジトリに必要なパッケージが含まれるようなので、以下のようにオプションを付与して、コマンドを実行すると問題なくインストールできました。
# dnf --enablerepo=crb install opendkim opendkim-tools
DKIMで使用する秘密鍵と公開鍵を作成
まず、今回作成する鍵を保存する領域(dassyi)を作成します。
# mkdir /etc/opendkim/keys/dassyi
次に opendkim-genkey コマンドを使用して、鍵を作成します。出来た鍵の所有者とグループをopendkimに変更しておきます。
# opendkim-genkey -b 2048 -D /etc/opendkim/keys/dassyi/ -d dassyi.com -s 20240105-vhost01
# chown -R opendkim:opendkim /etc/opendkim/keys/dassyi/
具体的なオプションの内容は以下の表の通りです。
オプション | 指定するパラメータの詳細 |
-b | 作成するキーのビット数です。デフォルトは1024なので、ここでは2048を指定します。 |
-D | キーファイルの保存領域のパスです。ここでは上記で作成したディレクトリにします。 |
-d | ドメイン名です。今回は dassyi.com を指定します。 |
-s | セレクタ名です。なんでも良いのですが、ここでは日付とホスト名を指定します。 |
作成したディレクトリには、20240105-vhost01.private と 20240105-vhost01.txt のファイルが出来上がっています。
DNSサーバへTXTレコードを登録する
先ほど出来上がった、後者の20240105-vhost01.txt のファイルを開いて、この内容をdassyi.comを管理しているDNSサーバのTXTレコードに登録します。
ファイルの中身は、
# more dassyi/20240105-vhost01.txt
20240105-vhost01._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1JgzxPSKYkqvfSEsxK9cBm7j+cxfss3/NnQmeePV1gWe+y3FsXU1L3fka2z7N+YN2u40HnqK6PKO9RzOcn56muJ9mi+OfgFyQqlaUZdOa
Nzl+708uuEBvPG8dX5SDlpvC2IhW86DZN7QTD91ps9fQAsBByl9dBkOhybkNz5iMzGu2tQuaIEMdLsCYOMIw6shTNL0fwJRMHjLkP"
"Sd1MAbcomSeUL80qguA7rpB4S87MpuVwTPZghmrhxQK9EfzE3ArOS+CunPD6vxsg8TXOxGI3HbQFGc4dAAKFV7KqoKlVdyIIkWn5PZFo8XyjdlkYwIPnKJOF/OOVKThK7SDBdJIwIDAQAB" ) ; --
--- DKIM key 20240105-vhost01 for dassyi.com
のような感じですが、DNSには、ホストを、20240105-vhost01._domainkey とし、TXTレコードの中身は、”v=DKIM1; k=rsa; ” “p=MII~” と記述します。2048ビットのカギを作成していると長くなるので、途中の ” ” も漏れなく記載するようにします。(上記の例ですと、~DAQAB” まで記載する)
なお、DKIM署名が有効でないメールの扱いを設定するためのADSPレコードを登録するように紹介されているサイトもありますが、もはや誰も見ていないとの事で、特に登録する必要はありません。
DNSサーバ(bind)については、こちらで詳しく記載していますので、もしよろしければ参照ください。
opendkimの設定(opendkim.conf)
設定ファイルは、/etc/opendkim.conf になります。まずはバックアップを取得して、以下の点を修正していきます。
# cp -p /etc/opendkim.conf /etc/opendkim.conf.org
# vi /etc/opendkim.conf
具体的な編集内容とその意味は下記になります。
Mode s →動作モードです。今回は送信メールにDKIMの署名を追加します
Socket inet:8891@localhost →ローカルの8891番ポートを使用します
#Socket local:/run/opendkim/opendkim.sock →こちらはコメント化
SoftwareHeader no →セキュリティの観点からソフトウェアのバージョンを非表示
#KeyFile /etc/opendkim/keys/default.private →KeyTableファイルを使用するためコメント化
KeyTable /etc/opendkim/KeyTable →ドメイン名と秘密鍵ファイルを紐づけるファイルを指定
SigningTable refile:/etc/opendkim/SigningTable →送信元のドメインとホスト名を紐づけるファイルを指定
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts →メール送信が行われる外部のホストを指定
InternalHosts refile:/etc/opendkim/TrustedHosts → 署名されるホストを指定
KeyTableファイルの設定
ここでは、ドメイン名と秘密鍵ファイルを紐づける設定を実施します。
まず、ファイルのバックアップを取得して設定を追記します。
# cp -p /etc/opendkim/KeyTable /etc/opendkim/KeyTable.org
# vi /etc/opendkim/KeyTable
ファイルの中身には、
<セレクタ名>._domainkey.<ドメイン名> <ドメイン名>:<セレクタ名>:<秘密鍵ファイルへのフルパス>
を記載します。このサイトでの具体的な内容としましては、以下の一行を追記します。
20240105-vhost01._domainkey.dassyi.com dassyi.com:20240105-vhost01:/etc/opendkim/keys/dassyi/20240105-vhost01.private
SigningTableファイルの設定
ここでは、送信元のドメインとホスト名を紐づけします。
こちらもまず、ファイルのバックアップを取得して設定を追記します。
# cp -p /etc/opendkim/SigningTable /etc/opendkim/SigningTable.org
# vi /etc/opendkim/SigningTable
ファイルの中身には、
*@<ドメイン名> <セレクタ名>._domainkey.<ドメイン名>
を記載します。このサイトでの具体的な内容としましては、以下の一行を追記します。
*@dassyi.com 20240105-vhost01._domainkey.dassyi.com
TrustedHostsファイルの設定
ここでは、メールの送信を行うpostfixサーバのIPアドレスを指定します。今回は同じサーバ内でpostfixを稼働させるので、ループバックアップドレス(127.0.0.1)を指定します。(デフォルトで指定されています)
opendkimのサービス稼働
ここまで設定が完了しましたら、opendkimのサービスの稼働と自動起動を有効にします。
# systemctl start opendkim
# systemctl enable opendkim
特にエラー等が出ない事を確認します。
Postfix側のDKIMに対応するための設定追加
postfixの設定ファイルである、/etc/postfix/mail.cfに以下を追記します。
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
設定が完了しましたら、postfixのサービスを再起動しておきます。
# systemctl restart postfix
送信メールにDKIMの署名が付与されているか動作確認
設定したサーバからメールを送付してみましょう。一番手っ取り早いのは、gmail宛てに送付することです。gmailに届いたメールのヘッダ情報を確認して、DKIM Pass となっていればOKです。
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dassyi.com;
s=20240105-vhost01; t=1704548989;
(以下、割愛)
といったシグネチャ情報がメールヘッダに追加されているはずです。
もしサーバ側で確認するには、 /var/logmaillog を確認しましょう。
DKIM-Signature field added (s=20240105-vhost01, d=dassyi.com)
といったログが残っていれば、署名されています。
googleの新しいセキュリティポリシーに対応するためのSTARTTLSの設定
今回参考情報として、postfixでSTARTTLSに対応する為の手順を記載します。こちらも2023年12月にgoogleから提示されたメール送信する際の新しいセキュリティポリシーに含まれています。
設定自体は簡単です。以下の3行をpostfixの/etc/postfix/main.cfに追加ください。
smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1
設定が終了しましたら、サービスの再起動を行い、反映させます。
# systemctl restart postfix
動作確認は、/var/log/maillogを確認して、SSL/TLSで通信したログの記録を確認します。
今回はここまです。最後までお読みいただきありがとうございました。