Gmail の送信ドメイン認証強化に対応する
2024年2月1日の Google による送信ドメイン認証強化に対応するため、postfix を SPF と DKIM に対応させたときのメモです。
SPF
基本は DNS に TXT レコードを足すだけですが、自ドメイン宛のメールを Gmail に転送 (forward) している場合は一工夫が必要に思います。例えば自ドメインが @foo.com
だっとして、me@foo.com
宛のメールを me.foo@gmail.com
に転送するようになっていたとします。
送信者 you@bar.org
から me@foo.com
へメールを送信すると、foo.com
の smtp サーバがメールを受信した後、Gmail へメールを再送信します。
このとき Gmail から見るとメールの送信者は bar.org
なのに smtp サーバは foo.com
で bar.org
からのメールが bar.org
の SPF レコードに含まれないサーバから送信されているので SPF 認証に失敗してしまいます。
ARC を設定すればそれでも問題ないのかもしれませんが、世の中には envelope from を強制的に書き換えて場当たり的に対処する work around が知られているようです。 今回はとりあえず、それで様子をみることにしました。
転送時に envelope from(具体的には Return-Path:)を強制的に root@foo.com
に変えるためには、まず /etc/postfix/main.cf
に以下を追加します。
sender_canonical_classes = envelope_sender
sender_canonical_maps = regexp:/etc/postfix/sender_canonical
次に /etc/postfix/sender_canonical
を次のような内容で作成します。
/@foo.com$/ @foo.com
/^[^@]+@([a-z0-9_+\-\.]+)$/ root@foo.com
この設定で、自ドメインである foo.com
から直接送信されている場合は envelope from を変更せず、そうでないときは強制的に root@foo.com
に変わるはずです。
root@foo.com
は smtp サーバからエラーメールを受け取れるアドレスであれば何であっても問題ありません。
こうしておいて、
sudo postmap /etc/postfix/sender_canonical
sudo systemctl restart postfix
とすれば設定が反映されるはずです。
ただ、原因は調べ切れていませんが、このやり方だと、Gmail から me@foo.com
へ送信された場合、転送された先の me.foo@gmail.com
では SPF 認証に失敗するようです。
Gmail 側で受信したメールを見てみると Return-Path:
が root@foo.com
に変わっていません。
この問題を避けるためには .forward
や /etc/aliases
の設定で
me: "|/usr/sbin/sendmail -oi -f root@foo.com me.foo@gmail.com"
のようにすればよいことを発見しました。
この設定が必要なのは Gmail に転送しているアカウントだけです。
それ以外の場合は sender_canonical_classes
の設定だけで対応できているようです。
DKIM
こちらは素直に設定すれば良いようです。
sudo apt install opendkim opendkim-tools
sudo opendkim-genkey -D /etc/dkimkeys -d foo.com
sudo chown opendkim:opendkim /etc/dkimkeys
sudo chown opendkim:opendkim /etc/dkimkeys/default.txt
sudo chown opendkim:opendkim /etc/dkimkeys/default.private
その後、/etc/opendkim.conf
に次のような行を追加、あるいは変更します。
Domain foo.com
KeyFile /etc/dkimkeys/default.private
Selector default
Socket inet:8891@localhost
Mode sv
そして公開鍵 /etc/dkimkeys/default.txt
の内容を DNS に登録します。
このファイルの中身をそのまま使うことはできないので、手で適当に整形する必要があります。
その後 /etc/postfix/main.cf
に以下を追加します。
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
そして
sudo systemctl restart opendkim
sudo systemctl restart postfix
このように DKIM の新しい設定を反映させれば完了です。
いいわけ
以上です。メモですので何か間違いがあってもご容赦ください。