Skip to content

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など

参考