以前書いたmuninにSPF(Sender Policy Freamwork)の頑張り具合をグラフ化させる方法ですが、方法自体は良いのだけど、どうも集計すべき値が間違っているような気がしてきた。
修正ポイントは、「ログの中の、どのキーワードで集計するのか」ということになるので、postfixのログを確認してみると・・・。
Dec 8 16:54:46 eswat2 postfix/policy-spf[12781]: : Policy action=550 Please see http://www.openspf.org/Why?s=mfrom&id=prashant%40paratype.com&ip=82.131.186.125&r=eswat2.downtown.jp
"Policy action="のあたりが集計に使えそうなので、実際に"action="のうしろにどんなキーワードが来るのかを確認。
SPFの効果をMuninでグラフにしてみる - Soukaku's HENA-CHOKO Blog
なので、ちょっと手直しをしてみた。
集計すべきパラメータは?
実を言うと前回ののエントリーを書いてからしばらくして、なんか値の取りこぼしをしているような気がしていたのだけど、そのままほったらかしにしていたんだよね。
で、改めてログをチェックしてみたところ、1通のメールを処理すると、SPFは3行のログを出力する。
Oct 8 23:18:56 eswat2 postfix/policy-spf[25762]: : SPF None (No applicable sender policy available): Envelope-from: tempestdianequeennn@btopenworld.com
Oct 8 23:18:56 eswat2 postfix/policy-spf[25762]: handler sender_policy_framework: is decisive.
Oct 8 23:18:56 eswat2 postfix/policy-spf[25762]: : Policy action=PREPEND Received-SPF: none (btopenworld.com: No applicable sender policy available) receiver=eswat2.downtown.jp; identity=mfrom; envelope-from="tempestdianequeennn@btopenworld.com"; helo="[150.199.193.205]"; client-ip=150.199.193.205
このうちの3行目の"Policy action="の部分を使って集計していたのが前回。それよりも1行目の真ん中あたりの"SPF None"のあたりの記述の部分を使って、ログをちょと集計してみると、こんな感じに。
eswat2:/tmp# zgrep -e 'policy-spf\[[0-9]*\]: : SPF' /var/log/mail.info*.gz | perl -pe 's/^.*: : //' | cut -d " " -f 1-2 | sort | uniq -c
491 SPF Fail
271 SPF Neutral
30 SPF NeutralByDefault
13287 SPF None
5357 SPF Pass
94 SPF PermError
1798 SPF SoftFail
1410 SPF TempError
実際にサーバ上で、cutの-fオプションの範囲を"1-3"とか"1-4"とか"1-5"と広げていくと
eswat2:/tmp# zgrep -e 'policy-spf\[[0-9]*\]: : SPF' /var/log/mail.info*.gz | perl -pe 's/^.*: : //' | cut -d " " -f 1-5 | sort | uniq -c
491 SPF Fail (Mechanism '-all' matched):
271 SPF Neutral (Mechanism '?all' matched):
30 SPF NeutralByDefault (Default neutral result
13287 SPF None (No applicable sender
8 SPF Pass (Mechanism 'a' matched):
19 SPF Pass (Mechanism 'a:inte1.example.jp' matched):
35 SPF Pass (Mechanism 'a:inte2.example.jp' matched):
-- cut --
となって、実際に相手のメールサーバから取得したSPFの情報がロギングされていることが判る。ということで、この"SPF"の後ろの1ワード目で集計するようにスクリプトを変更。(munin-spf2.txt)
スクリプトの変更後のグラフを見ると、正しく描けているようなので、これで大丈夫でしょう。
で、SPF自体どうなの?
ウチに来るメールの90%ぐらいは、SPFの設定をしていないサイトから来ているモノのようです。SPFの設定がされているサイトは増えてきているようですが、いかんせん設定されていない迷惑メールの方が格段に多いのが現状ってことのようですね。
タイミングを見て、SPFの設定されていないサイトからのメールは、明示的に拒否する設定にしても良いのかなぁ〜などと思いつつ、グラフを見ながらその辺を決めればいいのかな?
コメントする