2024/2のGmailセキュリティガイドライン変更でメールセキュリティ対応に苦労したのでそのメモ。SPF/DKIM/DMARCやワンクリックオプトアウトなどを分かりやすく整理。
ヘッダfromとエンベロープfrom
ヘッダfromとエンベロープfromとは
メールの「送信元」と言うと、通常はヘッダfromのことを指すが、エンベロープfromというものもある。
- ヘッダfrom
Gmailなどのメールソフトで送信元として表示されるアドレスのこと。送信者が任意のアドレスに変更できるため、実際の送信元と異なることがある。 - エンベロープfrom
実際にメール送信した送信元のこと。メール送信に失敗した場合は、これに返ってくる。
メリット・デメリット
2種類の「送信元」がある理由はメリットがあるため。一方でデメリットもある。
メリット
- メール配信サービスを利用できる
この仕組みを使って代わりにメール配信サービスなどでメール送信してもらえる。例えば、xxxxx@shachiku-se.comというアドレスで顧客にメール送信したいとする。メール配信サービスを利用すれば、自社で環境を構築する必要が無く、メール配信に役立つ機能(送信先管理機能やオプトアウト機能など)を利用することができる。その際、実施はメール配信サービスから送信するのでエンベロープfromはメール配信サービスのアドレスとなるが、ヘッダfromにxxxxx@shachiku-se.comを設定することで、顧客から見るとxxxxx@shachiku-se.comからメールが送信されたように見える - メール転送やBCC送信ができる
この仕組みを使って実現しているらしい
デメリット
- なりすましメールに利用される
ヘッダfromは任意のアドレスに変更可能のため、簡単になりすましメールを送信できる。というか、ヘッダfromをエンベロープfromと異なるアドレスになりすましたメールをなりすましメールと言う。
メールヘッダで確認する方法
受信したメールソフトでメールヘッダを確認することで、ヘッダfromとエンベロープfromを確認できる。
- ヘッダfrom
メールヘッダ上の「From:」の後に記載がある(通常はメールソフト画面の差出人で確認可能) - エンベロープfrom
メールヘッダ上の「Return-Path:」の後に記載がある
なりすましメール対策
上述のとおり、ヘッダfromを任意のアドレスに変更してなりすましメールを送信することが可能。なりすましメールを防ぐために、SPF/DKIM/DMARCがある。
SPF
メール送信元IPの正当性を認証する。
メール送信元ドメインに対し、正当な送信元IPをDNSに登録しておくことで、受信者がメール受信したときに、DNSを参照し正当なIPからメールが来ているか認証する。詳細は後述
DKIM
メールの中身の改ざんが無いことを認証する。
メール送信者は秘密鍵と公開鍵のペアを作成し、秘密鍵は保持、公開鍵はDNSに送信元ドメインと紐づけて登録する。メール送信時に、送信者が秘密鍵でメールを署名し、受信者はDNS上の公開鍵を使って認証する。もし、改ざんがあった場合は認証NG(Fail)となる。詳細は後述
DMARC
SPFとDKIMでFailした時に、受信者がメールを受信するかどうかを送信者側で制御できる仕組み。DMARC未設定の場合、受信者側のポリシーで受信するかどうかが決まる。例えば、攻撃者がxxxxx@shachiku-se.comに偽装したなりすましメールを送信した場合、受信者側のポリシーが甘ければ受信できてしまい、xxxxx@shachiku-se.comを持つ会社は風評被害を受けてしまう。そのため、受信者側のポリシーに任せず、送信者側のポリシーで強制する仕組みがある。詳細は後述
SPF
Sender Policy Frameworkの略。メール送信元IPの正当性を認証する。
仕組み
- メール送信者が、エンベロープfrom※に対する正当な送信元IP(SPFレコード)をDNSに登録しておく
- メールを受信したメールサーバが、メール情報内のエンベロープfromからSPFレコードを取得する
- メールを受信したメールサーバが、メール情報内の送信元IPとSPFレコード内のIPを照合し一致すればPass
※ドコモのキャリアメールでなりすまし拒否レベルを高く設定している人にメールを送信する際は、ヘッダfromでもSPF認証される(正確にはSPF認証でなくSender ID認証と言う)。通常はヘッダfromとエンベロープfromは同じなので、エンベロープfromのSPFレコードを登録していればヘッダfromもSPF認証Passするが、上述の例の場合などはヘッダfromとエンベロープfromが異なるので、エンベロープfromだけSPFレコードを登録していても認証Failする。個人的には、ドコモのキャリアメール、かつなりすまし拒否レベルが高い人のためだけに(私が確認できたのはドコモくらい)対応する必要はないと思う。実際に2024/2にGmailがセキュリティガイドラインを変更しSPF対応していないメールは受信しないことを公表したが、Sender IDまで要求していないというか触れてもいなかったので、ニッチな対応なんだと思う。
SPFレコードの設定方法
以下DNSレコードを登録する
送信元ドメイン IN TXT ①SPF version ②qualifier ③mechanism ④値
③④の条件に該当したものを②のルールで処理する。②③④は繰り返し記述することで複数条件処理できる。
①SPF version
v=spf2.0(Sender ID)もあるらしいが、あまり気にせず普通はv=spf1(※v=spf1.0は誤り)で設定するものらしい。
②qualifier
省略したら+となる
③④に該当したら②の処理を実施する
② | 処理内容 |
+ | 正常なメールとして処理 |
– | 不正メールとして処理され配信拒否(Fail) |
~ | 不正メールとして処理されるが配信される(Soft Fail) |
? | SPF指定なしとして処理 |
③mechanism+④値
③+④で②の処理を実施する条件を決める
よくある設定
送信元をip指定する
shachiku-se.com IN TXT ”v=spf1 +ip4:52.195.25.206 -all”
2つの②③④がある
1つ目 +(②)ip4:(③)52.195.25.206(④)
2つ目 -(②)all(③④)
1つ目の方が優先されるので、送信元が52.195.25.206であれば正常なメールとして処理、それ以外は
送信元をドメイン指定する
ip指定でなくドメイン指定したい場合はincludeを使う。例えば、メール配信サービスを使う場合は送信元ipが固定でないので、メール配信サービスのドメインを指定し、そのドメインに紐づくipであれば認証passするなど
DKIM
DomainKeys Identified Mailの略。メールの中身の改ざんが無いことを認証する。