前提:CloudflareでDNSを管理しているサーバがUbuntu 20.04で、デフォルト設定のpostfixにより送信しています。
OpenDKIMの設定
OpenDKIMの設定は https://www.lonnie.co.jp/linux/jessie-dkim-dmarc/ を参考にさせていただきましたが、こちらは1つのサーバで複数のドメインを扱っていないのでもっと簡単でした。
まずopendkimをインストールします。
sudo apt update
sudo apt install -y opendkim opendkim-tools
ここからはsudoでやるとめんどいので「sudo su -」でrootになって作業します。
ドメイン名は架空の foobar.net にします。
mkdir -p /etc/mail/keys
cd /etc/mail/keys
opendkim-genkey -b 2048 -s 20220517fb -d foobar.net
chown -R opendkim:opendkim ../keys
chmod 700 ../keys
chmod 600 *
これで /etc/mail/keys に 20220517fb.private と 20220517fb.txt ができます。
次に /etc/opendkim.conf を編集しますが、変更するのは以下の3行だけです。
Domain foobar.net
KeyFile /etc/mail/keys/20220517fb.private
Selector 20220517fb
/etc/default/opendkim は以下のようにRUNDIRを変更し、SOCKET=行はすべてコメントアウトしておきます。参考にしたところでは opendkim.sock を使っているのですが、それではエラーになってしまったので。
RUNDIR=/var/spool/postfix/run/opendkim
#RUNDIR=/run/opendkim
postfixの設定
/etc/postfix/main.cf の最後に以下を加えます。
Milter configuration
# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8892
non_smtpd_milters = inet:127.0.0.1:8892
postfixとopendkimをリスタートしておきます(reloadでいいかも)。
sudo systemctl restart postfix opendkim
CloudflareのDNSでDKIMを設定する
ここが他で調べても一番わからなかったところ。/etc/mail/keys/20220517fb.txt の内容は以下のようになっています。もちろん数字はこんなに連続してません。適当な値を入れてます。
20220517fb._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
"222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223" ) ; ----- DKIM key 20220517fb for foobar.net
これをCloudflareのDNSのTXTレコードに入れるわけですが、「Add record」して、以下のように20220517fb.txtの内容からダブルクォートを取り除いた文字列を入れます。
最初はよくわからないので 「( "v=DKIM1;」から括弧もダブルクォートも全部含めて入れてたので失敗してました。
DNSのDKIM設定を確かめる
https://dmarcly.com/tools/dkim-record-checker# に行って、以下のようのドメイン名とセレクターを入れて「Check DKIM Record」をクリックします。
「Success! Everything appears fine with your DKIM record.」と出ればうまく設定されています。
メールを送ってみる
いつものように
echo hello|mail -s "DKIM test" foo.bar@gmail.com
などとしてテストメッセージを送ってみます。
送られたほうでそのメッセージのソースを見て
Authentication-Results: mx.google.com;
dkim=pass header.i=@foobar.net header.s=20220517fb ...
などとなっていれば成功です。
以上