Amazon SES でメールを送る場合、DNS に SPF 設定は不要だという話

(2018 年追記、ここから) 

この記事は 2015 年に書かれた記事 [SPF and Amazon SES](http://sesblog.amazon.com/post/Tx3IREZBQXXL8O8/SPF-and-Amazon-SES) を読んだメモでしたが、自分の整理のためにも少し追記します。

Amazon SES を使う際、DNS に SPF を設定する必要はありません。
以下公式スライドからの引用です。

https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-2016-amazon-ses
![ses.png](https://qiita-image-store.s3.amazonaws.com/0/2596/eec68f81-347d-cd1a-f69d-f16bf00bd86e.png)

SPF は `MAIL FROM` (`Return-Path`、エンベロープFROM、バウンスメール宛先) のドメインを認証します。`MAIL FROM` は、メールの送信者 `From` と一致している必要はありません。

SPF の目的は、メールサーバの IP と、`MAIL FROM` という「苦情の受付窓口」を結びつけるところにある、というのが自分の理解です。例えば、苦情の受付窓口に聞いたことがないような名札 (ドメイン) が付いていたら、そのメールサーバは、大企業の名札を付けたメールサーバと比べて信用できない、と判断できます。また、メールを送るだけ送って、苦情はマジメに仕事をしている余所の窓口に回してしまう、といったこと (`MAIL FROM` 詐称) ができなくなります。苦情を適切に処理している窓口は、評価が上がっていきます。逆に苦情が大量によせられている窓口が設定されたメールサーバは、評価が下がります。

Amazon SES は、`MAIL FROM`を `xxxxxx@us-west-2.amazonses.com` のような Amazon 所有のドメインに設定します。
<img alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/2596/64ce2b63-3928-f213-acc4-f577c3b646ac.png">
Amazon の DNS に SPF レコードが設定されているので、自前で DNS 設定を行う必要はありません。デフォルトのままで SPF 認証が通ります。

```console
$ dig us-west-2.amazonses.com TXT | grep spf
us-west-2.amazonses.com. 854    IN      TXT     "v=spf1 include:amazonses.com -all"
us-west-2.amazonses.com. 854    IN      TXT     "spf2.0/pra include:amazonses.com -all"

$ dig amazonses.com TXT | grep spf
amazonses.com.          345     IN      TXT     "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 ip4:69.169.224.0/20 -all"
```

Amazon のドキュメントには「[多くの送信者にとってはこのレベルの認証で十分ですが](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/mail-from.html)」という記述があります。

**ただし、2018年現在、本当に SPF + DKIM で十分かどうかには、議論の余地があるかもしれません。更に高度な DMARC に適合するには、**独自の `MAIL FROM` を設定する必要があります。独自の `MAIL FROM` で SPF を通すには、DNS に 

 * MX レコード (バウンスメールを SES で受け取るため)
 * SPF レコード

を追加します。MX レコードが設定が正しく設定されているかどうかは、メールの送信時にチェックされるようです。MX レコードが見つからない場合、`.amazonses.com` に戻されるか、Reject されます。 :point_down: 

<img width="453" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/2596/4f60fd8c-3bac-409f-7f7b-55a085ce3ee4.png">
<img width="457" alt="20181106154532(1).png" src="https://qiita-image-store.s3.amazonaws.com/0/2596/be87ed86-576b-ebb9-8ee7-08471e38fb17.png">

MX レコードを設定せずに SPF だけ DNS に設定しても意味がありません。受信サーバはその SPF レコードを見に来ないからです。

(2018 年追記、ここまで。以下、2015年に書いた元の記事です。) 

---

Amazon SES Blog の [SPF and Amazon SES](http://sesblog.amazon.com/post/Tx3IREZBQXXL8O8/SPF-and-Amazon-SES) を読んだメモです。

SES でメールを送る場合、DNS に

 * SPF の設定は不要
 * DKIM の設定は必要

とのこと。

以下、抜粋してコメントを書いています。翻訳ではないです。


## SPF はメールヘッダではなく、SMTP コマンドを認証する

> First, let’s separate the actual email message body and its headers from the SMTP protocol used to send it.

メールのボディやヘッダと、SMTP プロトコルを区別しましょう。

> SPF works by authenticating the IP address that originated the SMTP connection to the domain used in the SMTP MAIL-FROM and/or the HELO/EHLO command.

SPF が認証するのは、

 * SMTP コマンド送信元の IP アドレスと、
 * SMTP の MAIL-FROM や HELO/EHLO コマンドで使われるドメイン

の組み合わせ。

> The From header, which is part of the email message itself, is not covered by SPF validation. 

email メッセージの一部である From ヘッダは、 SPF バリデーションのカバー範囲ではない。

> A separate standard, DomainKeys Identified Mail (DKIM), is used to authenticate the message body and headers against the From header domain (which can be different from the domain used in the SMTP MAIL-FROM command).

メッセージの認証は、別の仕様 DKIM が担当する。

## SMTP コマンドの MAIL-FROM / RCPT-TO をエンベロープと呼ぶ

http://esupport.trendmicro.com/solution/ja-jp/1306779.aspx

>  一般にこのRCPT TOとMAIL FROMというSMTPコマンドをあわせてエンベロープと呼びます。

(中略)

> ヘッダは、あくまでメールのデータ部分であり、実際のメール配送では意味を持ちません。
> したがって、エンベロープのRCPT TOとヘッダのTOが異なったメールを送信した場合は、受信したユーザ(RCPT TOで指定されたユーザ)は、メーラー上では、他人宛のメールを受け取るということになります。

## SPF レコードの中身

> This DNS record needs to contain either blocks of IP addresses that are permitted to send from it, or another domain to which authorization is delegated (or both).

DNS レコードには IP アドレスの範囲か、委譲する先のドメインか、その両方を設定する。

> When an ISP receives an email and wants to validate that the IP address that sent the mail is allowed to send it on behalf of the sending domain, the ISP performs a DNS query against the SPF record.

(SMTPコマンドを受けた) ISP は DNS に問い合わせて、その IP がドメインのメールを送れるかどうかをチェックする。

## SPF と Amazon SES

> If you are using Amazon SES to send from your domain, you need to know that the current SES implementation involves sending emails from an SES-owned MAIL-FROM domain.

**SES は、MAIL-FROM に、SES が所有するドメインをセットする。**

> This means that you do not need to make any changes to your DNS records in order for your emails to pass SPF authentication.

**これは、SPF 認証を通すために、あなたが DNS レコードを変更する必要は一切ない、ということを意味する。**

## DMARC への適合

http://www.dkim.jp/dkim-jp/faq/

> 「DMARCとはなんですか？」
> 
> DMARCとは、Domain-based Message Authentication, Reporting and Conformanceの略で、DMARCを宣言している送信元ドメインに対して、メール受信者がDKIMとSPFに関する送信ドメイン認証の結果を通知する為の仕組みです。

DMARK は、送信元に認証結果を通知する仕組み。

> DMARC is a standard way of telling ISPs how to handle unauthenticated emails, and it’s based on both

DMARC は、ISP に認証されなかったメールの標準的な取扱方法を定める。それは、

 * a) Successful SPF and/or DKIM authentication and
   * SPF、DKIM の認証が通ったか
 * b) Domain alignment (all authenticated domains must match).
   * ドメインの一貫性 (認証されたドメインが全て一致するか)

の両方に基づく。

> As explained above, your MAIL-FROM domain is currently an SES domain, which doesn’t match your sending domain (From header).

SMTP の MAIL-FROM は SES のドメインで送信されるので、From ヘッダのドメインとは一致しない。

> As a result, SPF authentication will be misaligned for DMARC purposes.

結果として、SES の SPF 認証は DMARC に適合しない。

> DKIM, on the other hand, provides the necessary domain alignment and ultimately satisfies DMARC because you are authenticating your From domain.

一方、DKIM は From ドメインを認証するので、DMARC に完全に適合する。

## SPF で DMARC に適合するには

多くの送信者には上記で十分だが、カスタムの MAIL FROM を設定し DNS に SPF を設定することもできる。

 * https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/spf.html

> SPF に基づいて DMARC 検証に成功するには、カスタムの MAIL FROM ドメイン (カスタムの MAIL FROM ドメインを使用する) をセットアップして SPF レコードを公開する必要があります。

 * https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/mail-from.html

> 多くの送信者にとってはこのレベルの認証で［SES デフォルトの SPF で］ 十分ですが、Sender Policy Framework (SPF) に基づく DMARC (Domain-based Message Authentication, Reporting and Conformance) 認証に E メールが合格するためには、所有するドメインを MAIL FROM ドメインに設定する必要があります。