DDNSで運用している自宅のPCでメールサーバーを運用しているが、
ある時から gmail.com 宛てのメールが届かなくなった。
“SPF” か “DKIM” の設定が必要らしい。
エラーの応答メッセージは以下の通り。
This is the mail system at host smtp.gmobb.jp. I'm sorry to have to inform you that your message could not be delivered to one or more recipients. It's attached below. For further assistance, please send mail to postmaster. If you do so, please include this problem report. You can delete your own text from the attached returned message. The mail system <XXX宛先XXX@gmail.com>: host gmail-smtp-in.l.google.com[64.233.188.27] said: 550-5.7.26 This mail is unauthenticated, which poses a security risk to the 550-5.7.26 sender and Gmail users, and has been blocked. The sender must 550-5.7.26 authenticate with at least one of SPF or DKIM. For this message, 550-5.7.26 DKIM checks did not pass and SPF check for [XXX自分のドメインXXX.net] did not pass 550-5.7.26 with ip: [157.7.156.159]. The sender should visit 550-5.7.26 https://support.google.com/mail/answer/81126#authentication for 550 5.7.26 instructions on setting up authentication. n1-20020a170903404100b001bbc7b6492fsi4175505pla.8 - gsmtp (in reply to end of DATA command)
Google翻訳すると以下。
これはホスト smtp.gmobb.jp のメール システムです。 申し訳ありませんが、あなたのメッセージを 1 人以上の受信者に 配信できなかったことをお知らせします。 これは、以下に添付ます。 さらにサポートが必要な場合は、郵便局長にメールを送信してください。 その場合は、この問題レポートを含めてください。 添付された返信メッセージから独自のテキストを削除できます。 メールシステム <XXX宛先XXX@gmail.com>: ホスト gmail-smtp-in.l.google.com[64.233.188.27] は次のように言いました: このメールは認証されていないため、送信者と Gmail ユーザーにセキュリティ上の リスクが生じるため、ブロックされました。 送信者は次のことを行う必要があります。 SPF または DKIM の少なくとも 1 つで認証します。 このメッセージについては、DKIM チェックはパスせず、 IP: [157.7.156.159] で [XXX自分のドメインXXX.net] の SPF チェックもパスしませんでした。 送信者は、https://support.google.com/mail/answer/81126#authentication に アクセスして、認証の設定手順を確認する必要があります。 n1-20020a170903404100b001bbc7b6492fsi4175505pla.8 - gsmtp (DATA コマンドの終わりへの応答)
どおやら、宛先の Google のサーバーが、メールスパム対策を強化した影響らしい。
解決するには、SPF もしくは DKIM というものを使って、
こちら(送り側)がスパムではないことを示す必要がある。という感じ。
SPF について少々調べたところ、送信元メールサーバーのドメインの
DNSの設定にSPF レコードを追加すればよい模様。
ドメインは Value Domain を使っているので、
早速 設定してみた。
もともと設定してある以下に、(aaa.bbb.ccc.ddd は 自宅のインターネット回線のIPアドレス)
mx @ 10 a @ aaa.bbb.ccc.ddd a www aaa.bbb.ccc.ddd
以下を追加。(MyDomain.net は 自分のサーバーのドメイン)
txt @ v=spf1 a:MyDomain.net ~all
結果は、相変わらず、ダメ。
途方に暮れて、改めて、エラーの文面をみてみると、
“[157.7.156.159]” なんて IPアドレスがある。
この IPアドレスは何?と調べてみたら、
smtpbb012.gmobb.jp
ということで、うちのインターネット回線を契約している
“GMOとくとくBB” が所有しているIPアドレスだ。
(↑ 自宅のインターネット回線の IPアドレスではない)
さて、なぜ “GMOとくとくBB” のIPアドレス が出てくるのかと
思いを巡らせたところ、そうか。
うちのメールは、GMO の SMTP にリレーしていた。
念のため、Postfix の 設定を改めて 久しぶりに確認。
relayhost = [smtp.gmobb.jp]:587
確かにリレーしてる。
ということは、つまり、SPF で 信頼してもらうドメインは、
“XXX自分のドメインXXX.net”
ではなくて、
“smtp.gmobb.jp”
にする必要があるということか。
自分のドメインではないのに、どおやってSPFで設定するのか?
少し調べたら、include なんていう記載で、他のドメインを
指定することができるよう。
最終的に設定(追加)したのは以下の通り。
txt @ v=spf1 include:gmobb.jp ~all
これで gmail.com 宛てのメールが送れるようになった。
よかった。
自分のドメインの SPF (TXTレコード) を確認する方法。
# dig -t TXT XXX自分のドメインXXX ;; ANSWER SECTION: XXX自分のドメインXXX. 120 IN TXT "v=spf1 include:gmobb.jp ~all"
ちゃんと設定されている。
ちなみに、include で指定した gmobb.jp の SPF (TXTレコード) は以下だった。
# dig -t TXT gmobb.jp ;; ANSWER SECTION: gmobb.jp. 86400 IN TXT "spf2.0/pra ip4:210.157.5.0/24 include:_spf.gmo.jp include:rnmk.com ~all" gmobb.jp. 86400 IN TXT "v=spf1 ip4:157.7.156.144/28 ip4:203.141.249.128/25 ip4:210.175.7.1 ip4:210.197.108.203 include:_spf.gmo.jp include:_spf.maildeliver.jp include:u2.gmoes.jp ~all"
もうひとつ、ちなみに。
relayhost で指定している smtp.gmobb.jp の SPF (TXTレコード) は以下だった。
# dig -t TXT smtp.gmobb.jp
無い。
include に smtp.gmobb.jp を指定してもうまくいかなかったのは、
これが原因だったのか。