はじめに
自慢じゃないけど当方メールシステムはさっぱり良くわかっていない
VPSを借りて複数ドメイン入れてみたもののメールはとりあえず言われるがままに設定しているだけで何もわかっていない。そこが自分でも気になっていたが、とうとう手を付けることにした。
そしたらどうなったか
見事にはまった。わけわかんねぇ。。
奥深すぎ。
ここでは何を言いたいのか
俺困ってるんだよぅ、という愚痴ではなく、わかったことを少しづつ書いておこうと思う。
これはその第1弾。
SPF:FAIL
そもそもSPFって何よ紫外線?10++みたいな?
という方は別途ググっていただくこととして、ここでは単純に事象とその対処法について。
GMAILにメールを着信させて詳細を見るっていう方法が結構簡単で私もよく使っているが、今回ソースをみたときにこんな文章があった。
spf=fail (google.com: domain of XXX@3pei.info does not designate IPv6アドレス as permitted sender)
SPFは自分のサーバのIPアドレスをテキスト形式で書いてDNSに読ませておいて使うもんだと思うが、うちの場合は下のようになっている。
v=spf1 ip4:サーバのIPv4アドレス -all
要するに、俺はIPv4のアドレスで自分の家を伝えたがサーバが実際Googleに伝えたのはIPv6アドレスであった。
そのためGoogleは「これお前んちじゃねーだろ嘘つくなやボケ」と俺の人格を否定するかの如き勢いで「FAIL」の烙印を押し、白ヤギさんがもらった手紙を食ってしまったように大切な”TEST”と書かれたメールを迷惑メールフォルダへと投げ捨ててしまった。
問題点(対応策)
2通りの対応が考えられる。
①SPFレコードをIPv4だけでなくIPv6も足して書く
②メールサーバ設定を変えてIPv4のみにする
本来のあり方としては①なんだろうが、できるかどうかもよくわからなかったのでとりあえず②で治るかどうかやってみた。
②メールサーバ設定を変えてIPv4のみにする
POSTFIXの設定ファイルの1つ、main.cfを開く
# Enable IPv4, and IPv6 if supported
inet_protocols = all ←消す
inet_protocols = ipv4
めんどくさがりなので説明を読むのもそこそこに「とりあえずallにしとけばいいんじゃね?」と考えてallにしたのがそもそもの原因。なのでサーバはv6で自分を表現しようとしていた。
保存してreloadしてから再度メールを送る
spf=pass (google.com: domain of XXX@3pei.info designates IPv4アドレス as permitted sender)
そうそうこれこれ。「PASS」が見たかったのよ
①SPFレコードをIPv4だけでなくIPv6も足して書く
原因もわかったしここで終わるのが普通なのかもしれないが、そこは蛇に足どころか両手も立派につけて服まで着せちゃう俺様。ここで終わらせるのはつまらん。
ということでIPv4とIPv6を併記することに(これではまるパターンが多いのも事実)
今のSPFレコードはこれ
“v=spf1 ip4:133.18.197.241 -all”
上では伏せてたけどよくよく考えればコマンド叩けば誰でも見えるんだしまぁいいやと方針変更。
これを
“v=spf1 ip6:2406:8c00:0:3406:133:18:197:241 ip4:133.18.197.241 -all”
※V6アドレスの後ろがv4そのままですがこういう仕様らしいです。。
にして、メールサーバも再度allにしたときにきちんと認識してくれるのか?
1)使っているVPSのコントロールパネルからDNS設定変更
2)postfixの設定もALLに戻す
3)DNSが反映されるまでコーヒー飲んで待つ
4)なかなか反映されない。2を急ぎすぎたかなとちょっぴり後悔
5)ようやく反映された!が、メールを送信するもIPv4の通知・・・
6)postfixの設定をipv6のみに固定
spf=pass (google.com: domain of XXX@3pei.info designates 2406:8c00:0:3406:133:18:197:241 as permitted sender)
7)ipv4に一応戻しておく
spf=pass (google.com: domain of XXX@3pei.info designates 133.18.197.241 as permitted sender)
まとめ
SPFの設定はv4とv6併記しましょう(出回ってる情報は大半がIPv4のみの記載)
お疲れ様でした。