IEEE のメールサービスが日本語メールを高確率でスパム扱いする件

少し前から,IEEE メンバー専用のメールエイリアスサービスを使っている.

一応 IEEE には結構な年会費を払っているので,それなりに信頼性の高いサービスだという認識で使っていた.



ところが最近,一部のメールが正しく届かないことに気がついてしまった.

自分宛にメールを送ったらいつまで経っても届かない.少なくとも 2 件発生した.他人からのメールが消えている可能性も十分に考えられる.けっこう重要な用途で使うことがあったので正直戦慄を覚えた.



もしかしてスパムフィルタに引っかかった? IEEE のメールサービスは 1 ヵ月半ほど前にスパム対策ポリシーを opt-in から opt-out に変更している.つまりこれまでは希望者のみフィルタが機能していたのが,デフォルトでフィルタリングするようになった.スパムと判定されたメールはサーバで消去される.というわけで,フィルタをくぐり抜けて無事に届いたメールのヘッダを見てみる.ちなみに内容はごく普通の日本語ビジネスメールで,Gmail から送ったもの.

X-Bayes-Prob: 0.9999 (Score 5)
X-Spam-Score: 9.50 (*********) [Hold at 12.00] FB_4WORD_DOLLARe,FB_WORD_01DOLLAR1,GAPPY_SUBJECT,SARE_MSGID_LONG40,SARE_SUB_CASH_CHAR,SPF(pass,0),Bayes(0.9999,5.0)

ちょwwwwwwものすごい勢いでスパム扱いされてるんですけどwwwwwwww



ここによると,ヘッダのフォーマットは

X-Bayes-Prob:  ベイズ投票によるスパム確率  (Score 投票によるスパムスコア )
X-Spam-Score: 投票とフィルタルールから計算した複合スコア (****) [Hold at 閾値 ] スコア増大に関与しているルール

というようになっている.つまり上のメールは,99.99% の確率でスパムだと判定されたわけだ.スコアが閾値より低かったのでなんとか生き残ったというところか.



別の例.こちらは jp ドメインから Mew で送付してみた場合で,日本語ビジネスメール.

X-Bayes-Prob: 0.0001 (Score 0)
X-Spam-Score: 9.80 (*********) [Hold at 12.00] FB_4WORD_DOLLARe,FM_MULTI_ODD2,FS_OBFU_Q0,HELO_EQ_JP,HOST_EQ_JP,SARE_RAND_2,X_IP,SPF(none,0)

こちらはルールベースでスコアが上がったらしい.なんか HELO_EQ_JP とか HOST_EQ_JP がスパムの原因になっているっぽい.多分 HELO が jp ドメインを返したとかそういう意味だよねこれ.jp ドメインからだとスパム度が高いって素敵過ぎる.



あまりのことに,さらに調べてみたところ,どうやらフィルタの実体は SpamAssassin らしい.

上記の例に挙がっているルールを調べてみた.



FB_4WORD_DOLLARe: 文字列中にダラー.Micro$oft はおkなのかwwww

body    FB_4WORD_DOLLARe	/[^a-z]\b(?!Micro\$oft)[a-z]{2,7}\$[a-z]{1,5}\b/i

FB_WORD_01DOLLAR1: これも文字列中ダラーの一種.ISO-2022-JP だと多分テキメン.

body  FB_WORD_01DOLLAR1 /\b[a-z]{1,4}\$[a-z]{0,4}[a-z01][a-z]{2,5}\b/i

GAPPY_SUBJECT: G.a.p.p.y-T.e.x.t みたいなやつ.

header GAPPY_SUBJECT           Subject =~ /\b(?:[a-z]([-_.=~\/:,*!\@\#\$\%\^&+;\"\'<>\\])\1{0,2}){4,}/i
describe GAPPY_SUBJECT         Subject: contains G.a.p.p.y-T.e.x.t

SARE_SUB_CASH_CHAR: Subject: にダラー.

header    SARE_SUB_CASH_CHAR       Subject =~ /[a-zA-Z]\$[a-zA-Z]/
describe  SARE_SUB_CASH_CHAR       Subject has letter then $ then letter

FM_MULTI_ODD2: 英語ではありえないような文字のつながり?

# Core obfu rules, these are generated from multiple US dictionary files.
body  __FB_OBFU_J		/j[bcfgw]/i
body  __FB_OBFU_OTHER		/(?:vj|vk|xj|xk|yy|zf|zj)/i
body  __FB_OBFU_Q0		/[jkpqtvwz]q/i
body  __FB_OBFU_Q1		/q[afhjkmnsy]/i
body  __FB_OBFU_V		/[fgqw]v/i
body  __FB_OBFU_X		/[cgjkqsvz]x/i
body  __FB_OBFU_Z		/[fjkpqx]z/i
meta  __FM_MULTI_ODD2 ((__FB_OBFU_J + __FB_OBFU_OTHER + __FB_OBFU_Q0 + __FB_OBFU_Q1 + __FB_OBFU_V + __FB_OBFU_X + __FB_OBFU_Z) &lgt; 1)
meta   FM_MULTI_ODD2		(__FM_MULTI_ODD2 && !__BADMIMEPARSES)

FS_OBFU_Q0: Subject: に英語としてありえない文字列がある.

header	FS_OBFU_Q0		Subject =~ /[jkpqtvwz]q/i

HELO_EQ_JP: HELO で jp ドメイン

header   HELO_EQ_JP		X-Spam-Relays-Untrusted =~ /^[^\]]+ helo=[^ ]+\.jp /i

HOST_EQ_JP: 逆引きしたら jp ドメイン

header   HOST_EQ_JP		X-Spam-Relays-Untrusted =~ /^[^\]]+ rdns=[^ ]+\.jp /i

SARE_RAND_2: 謎.Mew から送ったせいか.

70_sare_random.cf tries to detect common mis-fires on bulk mail software.

X_IP: X_IP ヘッダがある.うちの SMTP 鯖はいつもつけてますが.

header	X_IP			exists:X-IP

とりあえず,英語圏のスパムフィルタには気をつけたほうがよいと実感.フィルタは速攻でオフにした.大事なメールが消失してないことを祈るしかない.