Google Cloudサーバーからのメール送信とSPF
SPFとは
SPF(Sender Policy Framework)は、メール送信元のドメイン部分のドメイン所有者が、メール送信ができるサーバーのIPアドレスを予めDNSのTXTレコードに登録しておく仕組みである。メール受信側のサーバーは、メールを送信してきたIPアドレスが、そのリストにあるかどうかをチェックし、正当な送信元からのメールかどうかを判断する。これにより、なりすましメールやスパムを防ぐことができる。
SPFエラーで、迷惑メールに振り分けられた
Google CloudのApp Engine/Goから、さくらのメールボックスを介して、SMTPで、Eメール送信を実装した。
Gmailで受信したEメールを確認したところ、SPFエラーで、迷惑メールに振り分けられていた。
該当メールを選んで、右の3点アイコンから「メッセージのソースを表示」より確認できる。 SPF: SOFTFAIL(IP: 0.0.0.0)
Authentication-Results: mx.google.com;
spf=softfail (google.com: domain of transitioning [メール送信元アドレス] does not designate 107.178.XXX.XXX as permitted sender) smtp.mailfrom=[メール送信元アドレス]
Received-SPF: softfail (google.com: domain of transitioning [メール送信元アドレス] does not designate 107.178.XXX.XXX as permitted sender) client-ip=107.178.XXX.XXX;
Received: from localhost (XXX.XXX.178.107.gae.googleusercontent.com [107.178.XXX.XXX])
この内容が意味するところは、Gmailが、メール送信元のドメインに対するSPFチェックの結果、SOFTTAILエラーであることである。送信元であるIPアドレス(107.178.XXX.XXX)が、SPFレコードに含まれていないためである。
DNSのSPFレコードを確認
digコマンドで、DNSのTXTレコードのSPFを確認すると、現状の値は以下であり、上記のIPアドレスは勿論含まれていない。
dig txt [メール送信元ドメイン]
[メール送信元ドメイン]. 3600 IN TXT "v=spf1 a:wwwXXXX.sakura.ne.jp mx ~all"
Google Cloudのメール送信元サーバーのSPF
今回の例では、Google Cloudのサーバー 107.178.XXX.XXX から、Eメール送信されているが、Google Cloudのサーバーからの送信元IPアドレスは、設定されたレンジ内で動的に変わることが予想される。
Google CloudのサーバーのSPFレコードはどうなっているだろうか?
Google CloudのIPレンジを参考にすると
https://cloud.google.com/compute/docs/faq?hl=ja#find_ip_range
_cloud-netblocks.googleusercontent.com で、SPFレコードを保持しているようだ。
digコマンドで、TXTレコードのSPFを確認する
dig txt _cloud-netblocks.googleusercontent.com
;; ANSWER SECTION: _cloud-netblocks.googleusercontent.com. 3600 IN TXT "v=spf1 include:_cloud-netblocks1.googleusercontent.com 〜略〜 include:_cloud-netblocks5.googleusercontent.com ?all"
さらに、include先を、digコマンドで、TXTレコードのSPFを確認する
dig txt _cloud-netblocks5.googleusercontent.com
;; ANSWER SECTION: _cloud-netblocks5.googleusercontent.com. 3600 IN TXT "v=spf1 ip4:107.167.160.0/19 ip4:107.178.192.0/18 〜略〜 ?all"
Note) 107.178.192.0/18 は、107.178.192.0 から 107.178.255.255 までのサブネット、IPアドレス範囲
_cloud-netblocks5.googleusercontent.com に対象のIPが含まれていた。
よって、このIPアドレスのレンジや、ドメインを追加すれば良い。
SPFレコードへ追加
TXTレコードに、所望のIPアドレスやWebドメインを追加する 例)"v=spf1 a:wwwXXXX.sakura.ne.jp ip:[IPアドレス] include:[Webドメイン] mx ~all"
迷惑メール扱いは解消
SPFレコードを登録し、時間が経って反映された後、Eメールを送ると、PASSで成功となり、Gmailの表示上も、迷惑メール扱いにはならなくなった。
SPF: PASS(IP: 0.0.0.0)
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of [メール送信元アドレス] designates 107.178.XXX.XXX as permitted sender) smtp.mailfrom=[メール送信元アドレス]
Received-SPF: pass (google.com: domain of [メール送信元アドレス] designates 107.178.XXX.XXX as permitted sender) client-ip=107.178.XXX.XXX;
Received: from localhost (XXX.XXX.178.107.gae.googleusercontent.com [107.178.XXX.XXX])
SPFレコードは公開情報
このDNS TXTレコードそれ自体は、誰でもdigコマンドにより取得でき、全世界に公開されていることに注意が必要である。 送信許可するIPアドレスを適切に登録することと、SMTP TLS認証などメール送信機能について、セキュアに構築することが必要である。
※なお、さくらメールのウィルスチェックサービスを有効化にしていると、メール発信元サーバーのIPアドレスが更に変わっていることは、メモとしておく。 fsavXXX.sakura.ne.jpなど