SPF
https://www.ietf.org/rfc/rfc4408.txt
Google さんの例をもとに解説
- dig してspf レコード確認
$dig google.com txt +noall +ans
google.com. 0 IN TXT "onetrust-domain-verification=de01ed21f2fa4d8781cbc3ffb89cf4ef"
google.com. 0 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 0 IN TXT "google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQ"
google.com. 0 IN TXT "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
google.com. 0 IN TXT "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
google.com. 0 IN TXT "webexdomainverification.8YX6G=6e6922db-e3e6-4a36-904e-a805c28087fa"
google.com. 0 IN TXT "MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB"
google.com. 0 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 0 IN TXT "google-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o"
google.com. 0 IN TXT "apple-domain-verification=30afIBcvSuDV2PLX"
google.com. 0 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
** "v=spf1 include:_spf.google.com ~all"という設定になっている。別のドメインを読み込んでいるのでそちらも確認
$ dig _spf.google.com txt +noall +ans
_spf.google.com. 0 IN TXT "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
$ dig _netblocks.google.com txt +noall +ans
_netblocks.google.com. 0 IN TXT "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
include は10回までしかできないので気をつけること。 ~(チルダ)」はSoftFail、「-(ハイフン)」はFailを意味する ** SoftFail はSPF はNot pass だが、受信者のもとにメールは送ってしまう。Fail だと許可しないという意味になる
DKIM
- 電子メールにおける送信ドメイン認証技術の一つであり、 メールを送信する際に送信元が電子署名を行い、 受信者がそれを検証することで、 送信者のなりすましやメールの改ざんを検知できるようにするものです。 引用元:
- 実際の値をみてみる。セレクタを特定してその値を利用してQuery を書いてみる
dig +noall +ans 20230601._domainkey.google.com txt
20230601._domainkey.google.com. 0 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4zd3nfUoLHWFbfoPZzAb8bvjsFIIFsNypweLuPe4M+vAP1YxObFxRnpvLYz7Z+bORKLber5aGmgFF9iaufsH1z0+aw8Qex7uDaafzWoJOM/6lAS5iI0JggZiUkqNpRQLL7H6E7HcvOMC61nJcO4r0PwLDZKwEaCs8gUHiqRn/SS3wqEZX29v/VOUVcI4BjaOz" "OCLaz7V8Bkwmj4Rqq4kaLQQrbfpjas1naScHTAmzULj0Rdp+L1vVyGitm+dd460PcTIG3Pn+FYrgQQo2fvnTcGiFFuMa8cpxgfH3rJztf1YFehLWwJWgeXTriuIyuxUabGdRQu7vh7GrObTsHmIHwIDAQAB"
https://www.cloudflare.com/learning/dns/dns-records/dns-dkim-record/
- 受信者はメールを受信後、セレクタからp=以降に記載している公開鍵を利用して、メールの正当性を確認する
- これを自分で検証してみる。実際にGoogle から来たメールの署名と、公開されている公開鍵の情報を使ってDKIM としての検証ができるか見てみる
- 公開鍵作成
$ echo "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4zd3nfUoLHWFbfoPZzAb8bvjsFIIFsNypweLuPe4M+vAP1YxObFxRnpvLYz7Z+bORKLber5aGmgFF9iaufsH1z0+aw8Qex7uDaafzWoJOM/6lAS5iI0JggZiUkqNpRQLL7H6E7HcvOMC61nJcO4r0PwLDZKwEaCs8gUHiqRn/SS3wqEZX29v/VOUVcI4BjaOzOCLaz7V8Bkwmj4Rqq4kaLQQrbfpjas1naScHTAmzULj0Rdp+L1vVyGitm+dd460PcTIG3Pn+FYrgQQo2fvnTcGiFFuMa8cpxgfH3rJztf1YFehLWwJWgeXTriuIyuxUabGdRQu7vh7GrObTsHmIHwIDAQAB" > dkim_public_key.pem
- email をemail.txt とsignature.txt に分けて保存する
- verify command を叩く
openssl dgst -sha256 -verify dkim_public_key.pem -signature signature.txt email.txt
Verification failure
400783FBDE7F0000:error:0200008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:../crypto/rsa/rsa_pk1.c:79:
400783FBDE7F0000:error:02000072:rsa routines:rsa_ossl_public_decrypt:padding check failed:../crypto/rsa/rsa_ossl.c:697:
400783FBDE7F0000:error:1C880004:Provider routines:rsa_verify:RSA lib:../providers/implementations/signature/rsa_sig.c:774:
* 何故か失敗。。。 * 参考
【学習メモ】DMARCとDKIMを試す #DKIM - Qiita