こんにちは、ちゃりおです。
gmail smtpサーバ、SPFの知識が不足してハマったのでまとめてみます。
用語のおさらい
本題に入る前に、登場する用語のおさらいです。
Gmail SMTPサーバ
Gmail SMTPサーバを使用することで、自前でメールサーバを建てなくても
アプリケーションからメールを送ることができます。
特徴
- 1 日あたりの送信メール数の上限は 2,000 通です。
- 認証時に Gmail または G Suite の完全なメールアドレスの入力が必要
SPFについて
SPFはメール送信のなりすましを防ぐ技術です。
SPFは、こうしたメールアドレスにおけるなりすましを防ぐための技術の一つで、 DNSを利用するのが特徴です。 ドメインをSPFに対応させるには、 そのドメインのゾーンデータにSPFレコード(*2)という情報を追加します。 SPFレコードには、 そのドメイン名を送信元としてメールを送ってもよいサーバのIPアドレス等を記述します。
事象
GmailのSMTPサーバを使って、アプリケーションからメールを送っている。
Gmailのアカウントと違うドメインのメールアドレスを、GmailのエイリアスとしてメールのFROMにしている。
Googleから「DNSルックアップが不正」と連絡が来る。
しかし、FROMにしているGmailアカウントのspfを調べても問題なさそう。
エイリアスはSPFで認証されない
メールのヘッダーみたらエイリアスは、認証には使われないみたいです。
Gmailのアカウントのドメインが使われていました。
例えば、「hoge@hoge.com」がgmailのアカウントでメールのFromを「hoge@fuga.com」にしていた場合
「hoge@hoge.com」で認証されます。
メールクライアントがGmailだったらメールを開いて、「メッセージのソースを表示」から確認できます。
これでGmailアカウントのドメインのSPFに問題がありそうだということがわかりました。
SPFのDNSルックアップは10回まで
SPFのDNS ルックアップは10回に制限されています。
RFCで確認できます。
DNSルックアップは、spfレコードのincludeしているところをDNSで名前解決してIPアドレスを得ることです。
10回を超えている場合、SPFとして不正とみなされます。
迷惑メールフォルダに振り分けられる確率があがってしまいます。
迷惑メールフォルダに振り分けられて、ドメインのレピュテーションも下がるので悲惨です。
SPFのDNSルックアップを数える際に、知っておきたいことはincludeされた先のincludeもカウントされることです。
例えば、hoge.comのspfレコードに下記の記述があったとします。
v=spf1 include:_spf.google.com ~all
ここだけ見ると、includeが1回なのでルックアップが1回に見えます。
しかし、「_spf.google.com」をさらに調べてみると3回includeされていることがわかります。
$ dig +short _spf.google.com. txt
"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
結果、4回includeがあるのでDNSルックアップが4回発生しています。
includeが複数あって調べるのが面倒な場合、下記のツールが便利です。
対策
以上のことから対策としては、下記になります。
- gmailアカウントのドメインのspfレコードの不要なincludeを削除する
- (削除できない場合)gmailアカウントを別のドメインで新規に作る
まとめ
今回は、実際に体験した事象からSPFについて調べたことを共有しました。
一つのドメインに色々詰め込むと今回のように、SPFの問題が発生することもあると思うので
用途ごとにドメインとったり、サブドメインきるのが大事だなと実感しました。