Memo

メモ > サーバ > 各論: ネットワーク > メールを送信する際、迷惑メール扱いされないための設定(SPF)

■メールを送信する際、迷惑メール扱いされないための設定(SPF)
■SPFの概要 メールを送信するサーバのIPアドレスを、送信したいドメインのDNSレコード内で宣言をしておく これにより、不正なサーバからのメール送信を禁止する ※SPFレコードは後付で用意されたもの。当初SPFはメモ書き用レコードであるTXTに設定されていた SPFレコードを解釈できないサーバ向けに、SPFとTXTの両方のレコードに同じ内容を設定しておくのが好ましい ※メール送信サーバをスケーリングさせる場合、SPFレコード反映のタイムラグが問題になる可能性がある そのため、メール送信サーバはマルチAZで手動スケーリングにするか、SESを使う必要がありそう SPFとは?SPFの仕組みとSPFレコードの設定方法について解説します│教えて!レンタルサーバーのこと - ロリポップ!レンタルサーバー https://lolipop.jp/media/what-is-an-spf-record/ SPFレコードとは?正しい書き方を徹底解説 - カゴヤのサーバー研究室 https://www.kagoya.jp/howto/it-glossary/mail/spf/ SPFレコードを Amazon Route 53 に登録する https://blog.apar.jp/linux/737/ SPFとは http://e-words.jp/w/SPF.html hatena は今すぐSPF宣言しましょう。 http://pen2.hateblo.jp/entry/20090614/1244983020 SPF(Sender Policy Framework) http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/ 10. SPFレコードの記述例 「ip4やip6の記法で簡潔に記述することを推奨する」 「RFCでは、連結したあとの1つのレコードが450バイト以下であることが目安とされている」 ■SPFレコードの設定 送信元メールアドレスの正当性付与の為、SPFレコードをRoute53へ登録 「Route 53 → Hosted zones → (ドメインを選択) → Create Record Set」から登録する 今回は2台のサーバ(203.0.113.1 と 203.0.113.2 とする)からrefirio.netドメインとしてメール配信を行うため、以下のように登録 ---------------------------------------------------------------------- Name Type Value ---------------------------------------------------------------------- refirio.net SPF "v=spf1 ip4:203.0.113.1 ip4:203.0.113.2 -all" refirio.net TXT "v=spf1 ip4:203.0.113.1 ip4:203.0.113.2 -all" ---------------------------------------------------------------------- IPアドレスではなくAレコードで登録することもできるが、DNSの参照回数は10回が上限となっている 参照回数を減らすために、AレコードではなくIPアドレスで登録する方が無難そう SPF について知らなかった 3 つのこと | はったりエンジニアの備忘録 https://blog.manabusakai.com/2017/08/spf-misconception/ 間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会 https://salt.iajapan.org/wpmu/anti_spam/admin/operation/information/spf_i01/ DNS - SPFチェックでエラーが出る|teratail https://teratail.com/questions/180645 また、以下のサイトからSPFレコードの登録内容を確認できる SPF Record Check & SPF Lookup - Sender Policy Framework (SPF) - MxToolBox https://mxtoolbox.com/spf.aspx 末尾の「all」は「-all」と「~all」がある。特に理由がなければ「-all」で良さそう SPFレコード”~all”と”-all”の違い | SugiBlog https://k-sugi.sakura.ne.jp/it_synthesis/linux/3632/ SPFレコードではAレコードを指定することもでき、具体的には以下のように設定する 送信元メールアドレスの正当性付与の為、SPFレコードをDNSへ登録 ---------------------------------------------------------------------- Name Type Value ---------------------------------------------------------------------- refirio.net SPF "v=spf1 a:web1.refirio.net a:web2.refirio.net -all" refirio.net TXT "v=spf1 a:web1.refirio.net a:web2.refirio.net -all" ---------------------------------------------------------------------- IPアドレスとAレコードの両方を設定することもできる ただしAレコードを登録する場合、AレコードでIPを正引きできないとfail扱いになるのであらかじめ設定しておく 管理がややこしいので、IPアドレスかAレコードのどちらかに統一する方がいいかも…と思ったが、DNSの参照回数は10回が上限となっている 参照回数を減らすために、AレコードではなくIPアドレスで登録する方が無難そう また「include」を使うことにより、外部の設定取り込むことができる 後述の「Gmail用の設定」も参照 以下は複数のincludeとIPアドレスを指定した場合の例 "v=spf1 include:_spf.example.ne.jp include:spf.example.jp ip4:203.0.113.1 ip4:203.0.113.2 ~all" SPF レコードの例 | なりすまし対策ポータル ナリタイ https://www.naritai.jp/guidance_spf_example.html ■送信元メールアドレスについて補足 メールを送信するプログラムを書く際、送信元のメールアドレスを指定できる 送信元のメールアドレスは「ヘッダーFrom」とも呼ばれ、送信者が自由に変更できる 例えばPHPの場合はmail関数でメールを送信できるが、第4引数でメールヘッダの内容を指定でき、ここでメールの送信元アドレスを指定できる 具体的には以下のように記述すると、from@example.com がメールの送信元になる
mail('to@example.com', '題名', 'メール本文', 'From: from@example.com');
さらに、PHPの場合はmail関数の第5引数でリターンパス(Return-Path)を指定できる リターンパスは「エンベロープFrom」とも呼ばれ、メッセージが何らかのトラブルにより届けられなかった場合の、エラーの通知先として利用される 具体的には以下のように記述すると、system@example.com がリターンパスになる
mail('to@example.com', '題名', 'メール本文', 'From: from@example.com', '-f system@example.com');
「エンベロープFrom」は「ヘッダーFrom」を指定しても上書きされない またリターンパスを指定しなかった場合「実行ユーザ名@ホスト名」となるが、サーバが複数台構成の場合に問題になることがある 具体的には送信元が apache@web1.refirio.net や apache@web2.refirio.net となった場合、 送信元サーバが web1.refirio.net や web2.refirio.net とみなされるため、上で設定した refirio.net のDNS設定内容は参照されない sendmail コマンドによるメール発信 - Postfix Advent Calendar 2014 https://fumiyas.github.io/2014/12/13/sendmail.postfix-advent-calendar.html PHP mail関数でenvelope-fromを指定する方法 http://kaworu.jpn.org/kaworu/2008-02-17-2.php このようなことを避けるため、「-f auto@refirio.net」のようにリターンパスを常に指定しておくのが無難 そうでなければ以下のように、それぞれのホストに対して個別に設定を行う必要がある ----------------------------------------------------- Name Type Value ----------------------------------------------------- web1.refirio.net SPF "v=spf1 ip4:203.0.113.1 -all" web1.refirio.net TXT "v=spf1 ip4:203.0.113.1 -all" web2.refirio.net SPF "v=spf1 ip4:203.0.113.2 -all" web2.refirio.net TXT "v=spf1 ip4:203.0.113.2 -all" ----------------------------------------------------- また「エンベロープFrom」と「ヘッダーFrom」で異なるサーバのメールアドレスを指定している場合、 なりすましメールと判定されて届きづらくなる可能性があるので避ける (原則、「エンベロープFrom」と「ヘッダーFrom」は同じメールアドレスを指定しておくのが無難だと思われる また送信専用のメールアドレスを用意し、そのメールアドレスを指定しておくのが無難だと思われる) 2024年2月以降Gmailに送信するための新要件とは? 新しい送信者ガイドラインへの対応策 - ベアメールブログ https://baremail.jp/blog/2023/12/18/3640/ ■設定反映を確認 SPFレコードの設定完了後、設定が反映されているか確認 適当なサーバのコンソールから以下のコマンドを実行
$ dig refirio.net txt
以下の項目が表示されればOK
;; ANSWER SECTION: refirio.net. 227 IN TXT "v=spf1 ip4:203.0.113.1 ip4:203.0.113.2 -all"
更に以下のコマンドを実行
$ dig refirio.net spf
以下の項目が表示されればOK
;; ANSWER SECTION: refirio.net. 227 IN SPF "v=spf1 ip4:203.0.113.1 ip4:203.0.113.2 -all"
もしくは、以下のコマンドでもTXTレコードやSPFレコードの設定を確認できる
$ host -t txt refirio.net $ host -t spf refirio.net
■正当性を確認 上記で問題がなければ、以下の手順で正当性が保たれているか確認 適当なサーバのコンソールから以下のコマンドを実行。xxxxxx@gmail.com は自身のGmailのアドレスにする admin@refirio.net は送信元メールアドレスを設定する (もしくはPHPなどでメール送信プログラムを作成し、自身のGmailアドレスに送信してもいい)
echo "Text Mail." | mail -s "test mail" -r admin@refirio.net xxxxxx@gmail.com
Gmailへログインし、受信したメールヘッダを確認 以下のように spf=pass が表示されていれば成功(問題がある場合、spf=fail となる)
Authentication-Results: mx.google.com; spf=pass (google.com: domain of admin@refirio.net designates 203.0.113.1 as permitted sender) smtp.mailfrom=admin@refirio.net
独自ドメインのメール送信を SPF に対応させる方法 http://webos-goodies.jp/archives/51103006.html 以下のようなツールでも、SPFの反映をチェックできる SPF Records http://mxtoolbox.com/spf.aspx SPF Viewer https://dmarcian.com/spf-survey/ 例えば送信先をロリポップのメールアドレスにして、そのメールアドレスからGmailに転送した場合、spf=fail になる これは別サーバを経由しているためだが、現状決定的な解決策は無いみたい 運用に関する提案 http://salt.iajapan.org/wpmu/anti_spam/admin/operation/suggestion/ 初回の設定は比較的すぐに反映されるようだが、変更した場合は24時間〜72時間程度かかるかも SPFレコードはDNSの新しい定義方法のため、DNSサーバによっては扱えない場合がある 可能であれば、SPFとTXTの両方に同じ設定をしておくことが望ましい ただしこの場合、チェッカーによってはduplicateの警告が表示されるみたい Gmailが大丈夫なら、Yahoo!でも同様にテストしておく(Yahoo!メールに送信し、メールヘッダを確認) ■Gmail用の設定 送信(SMTP)に使われる Google の IP アドレスの範囲 - G Suite 管理者 ヘルプ https://support.google.com/a/answer/60764?hl=ja 「include:_spf.google.com」を設定するといいみたい 以下は設定例(詳細は要勉強) ---------------------------------------------------------------------- Name Type Value ---------------------------------------------------------------------- test-web1.refirio.net A 203.0.113.1 test-web2.refirio.net A 203.0.113.2 test.refirio.net SPF "v=spf1 a:test-web1.refirio.net a:test-web2.refirio.net include:_spf.google.com -all" test.refirio.net TXT "v=spf1 a:test-web1.refirio.net a:test-web2.refirio.net include:_spf.google.com -all" test.refirio.net CNAME test-123456789.ap-northeast-1.elb.amazonaws.com. ----------------------------------------------------------------------

Advertisement