メール送信時にエラー。複数サーバー構成でのSPF設定を見直す

email_wormサイトの問い合わせ画面からメール送信しようとすると下記エラーが表示されたので調べたときの覚書。ちなみにメール自体は届く。

環境: CentOS 6.6, postfix 2.6.6

# tail -f /var/log/maillog

Jan 27 19:51:28 web01 postfix/pickup[4502]: EB2FEA0216: uid=498 from=<nginx>
Jan 27 19:51:28 web01 postfix/cleanup[5109]: EB2FEA0216: message-id=<512ad4f4dd41bc3ad80aa18f9d3cc874@www.hoge.com>
Jan 27 19:51:28 web01 postfix/qmgr[1266]: EB2FEA0216: from=<nginx@hoge.com>, size=930, nrcpt=1 (queue active)
Jan 27 19:51:31 web01 postfix/smtp[5111]: EB2FEA0216: host ASPMX.L.GOOGLE.com[2404:6800:4008:c01::1b] said: 421-4.7.0 [2401:2500:102:2b04:111:222:333:444      15] Our system has detected an 421-4.7.0 unusual rate of unsolicited mail originating from your IP address. To 421-4.7.0 protect our users from spam, mail sent from your IP address has been 421-4.7.0 temporarily rate limited. Please visit 421-4.7.0 http://www.google.com/mail/help/bulk_mail.html to review our Bulk 421 4.7.0 Email Senders Guidelines. mz9si1019871pdb.205 - gsmtp (in reply to end of DATA command)
Jan 27 19:51:33 web01 postfix/smtp[5111]: EB2FEA0216: to=<info@hoge.com>, relay=ASPMX.L.GOOGLE.com[173.194.72.26]:25, delay=4.7, delays=0.03/0.01/2.9/1.8, dsn=2.0.0, status=sent (250 2.0.0 OK 1422355893 nh15si1218912pdb.42 - gsmtp)
Jan 27 19:51:33 web01 postfix/qmgr[1266]: EB2FEA0216: removed

 

日本語訳(参考:SMTP エラー リファレンス - Google Apps ヘルプ

421, "4.7.0", ご使用の IP アドレスから送信された異常な数の未承諾メールが検出されました。ユーザーを迷惑メールから保護するため、ご使用の IP アドレスから送信されたメールを一時的にブロックしました。Google の一括送信ガイド ラインをご覧ください。

 

まずはおとなしくヘルプを読む。

 

設定を見なおして確認したこと。

  • このサーバーのIPアドレスをSPFレコードに記述済み
  • 送信元(From)がそもそも存在しないドメインだった
    → たぶんこれが原因

送信元を修正して再送しても同様のエラーになるので1日待ってみる。。。

。。。12時間くらい待ってみても同じエラー。

 

このサーバーはロードバランサーのバックエンドになっていて、IPアドレスに対応するAレコードを設定してなかったので、Aレコードを追記して試してみた。

するとエラーが消えた。

 

これで完了かと思いきや、SPFの認証に失敗している模様。メールヘッダーを見てみると「softfail」になっている。

Received-SPF: softfail (google.com: domain of transitioning nginx@hoge.com does not designate 2401:2500:102:2b04:111:222:333:444 as permitted sender) client-ip=2401:2500:102:2b04:111:222:333:444;

他のドメインは同じ設定で成功しているので謎。試しにSPFの書き方をIPからドメインに変えてみた。(Value Domainで管理)

txt @ v=spf1 +a:hoge.com +a:web01.hoge.com +a:app01.hoge.com +a:app02.hoge.com include:_spf.google.com ~all

。。。しばらくして試してみると「Received-SPF: pass」になった。タイミングの問題だったかもしれない。
注)↑「a」の設定方法を勘違いしてた。詳しくは下に書いた追記を参照。

 

。。。と思ったらサーバーのmaillogに一番最初のエラーがまた表示されるようになった。

 

DKIMをPostfixに設定することにした。それは別記事で。

それでもダメな場合はGoogleに報告すると何とかなるかもしれない。

 

< 2015/01/29 Modified >
DKIMの記事書いた。

これでGoogleのSMTPエラーは表示されなくなった(App01、App02で出力される)。ただSPFは「softfail」のままなので設定を見なおしてみた。参考サイト

今回のサーバー構成は下図で、各バックエンドがそれぞれ同じ送信元(info@hoge.com)でメールを送る。

server_structure.fw

この場合のDNSレコードのSPF設定は下記のようにした(Value Domainで管理)。念のためIPv6も記述。

txt @ v=spf1 include:_spf.google.com a:mail.hoge.com ~all
a @ 1.1.1.1
a web01 1.1.1.2
a app01 1.1.1.3
a app02 1.1.1.4
a mail 1.1.1.1
a mail 1.1.1.2
a mail 1.1.1.3
a mail 1.1.1.4
aaaa mail 2401:2500:100:2200:1:1:1:1
aaaa mail 2401:2500:100:2200:1:1:1:2
aaaa mail 2401:2500:100:2200:1:1:1:3
aaaa mail 2401:2500:100:2200:1:1:1:4

これで無事「Received-SPF: pass」になった。SPFとDKIMを理解してスッキリ感。

 

< Related Posts >