wasutech.dev を公開したはいいが、メール周りを何もしていなかった。放置するとなりすましに悪用される可能性があるので、Cloudflare Email Routing・SPF・DMARCを設定した。
Cloudflare Email Routing
自前のメールサーバーを建てるのはコストがかかる。Cloudflareには Email Routing という機能があり、@wasutech.dev 宛のメールを既存のGmailなどに転送できる。無料。
仕組みとしては、Cloudflareが自動でMXレコードを追加し、受信したメールを指定のアドレスへ転送する。
dig MX wasutech.dev
# → isaac.mx.cloudflare.net 等が返ってくる
MXレコードはドメインレベルの情報なので、転送先のメールアドレスは外部に公開されない。dig で見えるのはCloudflareのサーバーだけで、「どこに転送しているか」は誰にもわからない。
設定はCloudflareのダッシュボードから数クリックで完了する。
転送先のアクションは3種類から選べる。
| アクション | 動作 |
|---|---|
| Forward to email | 指定のメールアドレスへ転送 |
| Drop | 受信して即破棄。転送しない |
| Send to Worker | Cloudflare Workersで独自処理 |
今回はメールを受け取る必要がないため Drop に設定した。スパム対策にもなるし、転送先アドレスを管理する必要もない。Workers連携は受信メールをSlackに流したり、自動返信を実装したりする場合に使う。
SPF - 送信元を証明するレコード
SPFとは
SPF(Sender Policy Framework) は、「このドメインからメールを送信していいサーバーはどこか」を定義するDNSレコード。
なぜ必要か。メールのプロトコル(SMTP)は設計上、送信元アドレスを自由に詐称できる。つまり誰でも [email protected] を名乗ってメールを送れる。SPFはこれを受信側が検証できるようにする仕組み。
受信側のメールサーバーは、届いたメールの送信元IPアドレスを確認し、そのドメインのSPFレコードに記載されたIPと照合する。一致しなければ怪しいメールとして処理できる。
設定したレコード
v=spf1 include:_spf.mx.cloudflare.net ~all
各要素の意味:
| 要素 | 意味 |
|---|---|
v=spf1 |
SPFバージョン1 |
include:_spf.mx.cloudflare.net |
CloudflareのメールサーバーからのSMTPを許可 |
~all |
上記以外は「疑わしい」扱い(ソフトフェイル) |
~all は疑わしいメールを迷惑メール扱いにする。-all にすると完全拒否になるが、DMARCと組み合わせて制御するのが一般的。
確認:
dig TXT wasutech.dev
# v=spf1 include:_spf.mx.cloudflare.net ~all
DMARC - SPFの結果を使って何をするか決めるレコード
DMARCとは
DMARC(Domain-based Message Authentication, Reporting, and Conformance) は、SPF(やDKIM)の検証結果に基づいて、受信側が「そのメールをどう扱うか」を指示するレコード。
SPFが「このメールは正規か?」を判定するなら、DMARCは「正規じゃなかったらどうすればいい?」をドメインオーナーが宣言する仕組み。
ポリシー(p=)の違い
| ポリシー | 動作 |
|---|---|
p=none |
何もしない。モニタリング専用 |
p=quarantine |
迷惑メールフォルダに振り分け |
p=reject |
完全に拒否。受信しない |
最初は p=none で様子を見てから上げていくのが定石だが、今回はメール送信自体しないブログ用ドメインなので最初から p=reject にした。
rua - レポート送信先
DMARCには認証失敗のレポートを受け取るメールアドレスを指定できる(rua=)。Cloudflareが自動設定してくれるアドレスはハッシュ化されたもの。
rua=mailto:[email protected]
個人のメールアドレスは露出しない。
設定したレコード
DMARCは _dmarc.wasutech.dev というサブドメインのTXTレコードとして登録する。
v=DMARC1; p=reject; rua=mailto:[email protected]
確認:
dig TXT _dmarc.wasutech.dev
# v=DMARC1; p=reject; rua=mailto:...
まとめ
| 設定 | 役割 |
|---|---|
| Email Routing | @wasutech.dev 宛メールをGmailへ転送 |
| SPF | 正規の送信元サーバーを定義 |
| DMARC | なりすましメールを拒否 |
ブログ用途で自分からメールを送信しないなら、この3つで十分。DKIMはメール送信時に必要になるが、今回は対象外。
Cloudflareのダッシュボードがほぼ自動でレコードを提案してくれるので、言われるがままに追加するだけで完了した。