✉️

メールの設定について(SPF、DKIM、DMARC)

公開日
5か月前
2024-06-28
更新日
5か月前
2024-07-11
更新履歴

この記事について

メールに関する技術であるSPF、DKIM、DMARCについて整理した記事です。

SPFとは

SPFとはなりすましメールを防止するため、電子メールの送信元を認証するための技術です。

DKIMとは

DKIMとは、電子メールの送信元ドメインを認証し、メッセージが改ざんされていないことを確認する技術です。

DMARCとは

DMARCとは、フィッシング、スパム、なりすましメールなどの不正メールを防止するための技術です。SPFやDKIMと組み合わせて、送信元ドメインの認証を強化します。

DNSレコードの例

以下はそれぞの技術のDNSレコードの例です。

SPFレコード

example.com. IN TXT "v=spf1 ip4:127.0.0.1 -all"

ドメイン名(example.com)、IPアドレス(127.0.0.1)の部分は任意の値に置き換えます。

タグ名説明
vバージョンv=spf1
ip4許可されたIPアドレス範囲ip4:127.0.0.1
allすべての受信メールが照合されることを指定-all

DKIMレコード

SELECTOR._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."

セレクタ名(SELECTOR)、ドメイン名(example.com)、公開鍵(MIIBIjANBgkq...)の部分は任意の値に置き換えます。

タグ名説明
vバージョンv=DKIM1
k鍵の種類k=rsa
p公開鍵p=MIIBIjANBgkq...

DMARCレコード

_dmarc.example.com. IN TXT "v=DMARC1;p=none;rua=mailto:dmarc@example.com"

ドメイン名(example.com)、メールアドレス(dmarc@example.com)の部分は任意の値に置き換えます。

タグ名説明
vバージョンv=DMARC1
pポリシーp=none
rua送信先の集計レポートrua=dmarc@example.com

チェックツール

それぞれのDNSレコードを追加した後は以下のツールで正しく設定されているかチェックすることができます。

SPFチェッカー

DKIMチェッカー

DMARCチェッカー

Route53にDKIMのレコードを追加するときに CharacterStringTooLong というエラーになる場合

Route53のレコード追加では255文字までの制限があるため、それ以上の文字列を設定する場合に工夫が必要です。Terraformの定義にも工夫がいるため参考になるGitHubのIssueを紹介します。

上記のIssueで紹介されていたHCLは以下です。

locals {
  dkim_record = "v=DKIM1; k=rsa; p=MIIBIjAN..."
  zone_id = "..."
  domain = "example.com"
}

resource "aws_route53_record" "this" {
  zone_id = local.zone_id
  name    = "selector._domainkey.${local.domain}"
  type    = "TXT"
  records = [
    join("\"\"", [
      substr(local.dkim_record, 0, 255),
      substr(local.dkim_record, 255, 255),
    ])
  ]
  ttl = "300"
}

Zennに詳しく解説されている記事もあります。

もっと詳しく知りたい

以下はそれぞれの技術について詳しく解説されているWEBサイトへのリンクです。

SPF

DKIM

DMARC