以前、書いた日本語spamメール。日々のメールサーバのログも、数日は弾いていたようですが、そのうちまったくこなくなっていた。
が、どうやら昨日の月曜日から、ふたたびメールが送られてきているらしい。昨日のログをみると、例のdiscardが数百件も記録されていた。ま、discardされてるってことなので、クライアントには届いていないから問題はない。
で、このブログのサマリーを眺めると、時を同じくしてアクセス数がうなぎ上り。wow
以前、書いた日本語spamメール。日々のメールサーバのログも、数日は弾いていたようですが、そのうちまったくこなくなっていた。
が、どうやら昨日の月曜日から、ふたたびメールが送られてきているらしい。昨日のログをみると、例のdiscardが数百件も記録されていた。ま、discardされてるってことなので、クライアントには届いていないから問題はない。
で、このブログのサマリーを眺めると、時を同じくしてアクセス数がうなぎ上り。wow
postfixのbody_checksでDISCARDする設定をしたあとのlog summariesを見てみると、DISCARDが356件。ここ最近他にdiscardするようなことはなかったので、すべて今回のspamメールだと言えるだろう。rejectが多いのはGreylistingの分が含まれてるから。
2047 received
2712 delivered
3225 rejected (51%)
356 discarded (5%)
さて、今回のspamの内容は、WhiteSmokeという会社の英英ソフトで、実在するものだ。検索すれば、日本の代理店がいくつかヒットする。実績があるのかもしれないが、そんな事は俺は知らない。でも、本家の英語のサイトも含めて、価格が表示されていない時点で怪しい。
しかし、こんな手法を使っては逆に評判を落とすんじゃないか?もしかして宣伝じゃなくて嫌がらせか?
今回はgoogleのspamfilterや、thunderbirdなどに搭載されているベイジアンフィルターが結構活躍したらしい。確かにこれまでテスト的に使っていて、非常に性能は良い。今メインに使っているBeckyにもプラグインで機能を持たせる事は出来るらしいけど、ソフトに内蔵されている機能の方がシステムを管理する側としては楽だわな。客先でもBeckyを使ってるけど、Thunderbirdに切り替える提案をしてみようかな。
昨日に続き、大量のspamメールの対処。
昨日のbody_checksの効果は全くなかった。理由は、これれで出力して正規表現で一致させようとしていた箇所が全くでたらめだったという事。
echo -n ¥”洗練された英文ライティングを実現!¥” | nkf -MB >> /etc/postfix/body_checks
昨日の時点では、手元にサンプルがなかったんだけど、今日はこの時間にサーバに入って、クライアントがPOP3で受信する前のファイルを手元にもってきて解析。ふぅっ。
で、見てみると、こんな感じになっていて、昨日やった事が間違っていた事が判明。
=1B$B@vN}$5$l$?1QJ8%i%$%F%#%s%0$r<B8=3D=1B(B!
=1B$BC1D4$JJ8>O$b!”0l=3DV$G@vN}$5$l$?1QJ8$K!*=1B(B
=1B$BJ8K!!”%9%Z%k!”6gFIE@$N%A%’%C%/$K2C$(!”=1B(B =
では今日得られたこの文字列、どうやって正規表現で表すんだ?
$(ドルマーク)とか厄介だなぁ。。。
オンラインで、JavaScriptで動いているような正規表現確認サイトってないかなぁ、、、って探してみると、やっぱりあるね。REJAX – Easiest Regular Expression Tester. Ever. ナイス!!
Language にPHP 5 POSIXを選択して、Subjectに、「=1B$B@vN}$5$l$?1QJ8%i%$%F%#%s%0$r<B8=3D=1B(B!」とかをペースト。んでもって、patternを組み立てていくと、下のResultsのところに、赤く選択された文字列がパターンに一致した箇所だと示してくれる。
でここまで来て困ったので、やっぱり$とか} とか。。。。 orz
正規表現をちゃんと調べればいいんだろうけど、とりあえず知っていた知識として、 . (ドット)が何か1文字を表すということ。$とか特殊な文字を全部 . のパターンにしちゃえばいいってことだ。それで出来たのがこれ。
=1B.B@vN}.5.l..1QJ8%i%.%F%#%s%0.r<B8=3D=1B.B!
これを持って、body_checksを以下のようにしてやれば、バシバシはじいてくれるじゃない。
/=1B.B@vN}.5.l..1QJ8%i%.%F%#%s%0.r<B8=3D=1B.B!/ REJECT
でログを眺めながら、REJECTされているのを確認していて、ふと思った。これまでの大量のメールをREJECTしたらどうなるか。。。所詮FROMのアドレスは適当だから、送り返されても困るだろう。
ということで、REJECTをやめて、DISCARD。これなら、受信したように見せかけてそのまま廃棄。
でこれの問題は、body_checksに使った文章が変更された時。また本文を拾ってきて同じような作業を行わなければならない。
だが、今夜は気持ちよく寝られそうだ。
今回のbase64ではだめでした。こちらで対処できました。(2009-01-22追記)
洗練された英文ライティングを実現!
が謳い文句らしいソフトのスパムメール対策。
よっぽどgmailをspamfilterとして利用するようにシステムを切り替えさせようかと思ったけど、思いつきでメールというインフラを変更することはできない。
なんとか今ある環境で防ぎたいので、
方法としては、postfixのbody_checksの機能を使って、文字列を検索してREJECTだな。
body_checks = regexp:/etc/postfix/body_checks
echo -n ¥”洗練された英文ライティングを実現!¥” | nkf -MB >> /etc/postfix/body_checks
/GyRCQHZOfSQ1JGwkPzFRSjglaSUkJUYlIyVzJTAkcjxCOD0bKEI=/ REJECT
postmap /etc/postfix/body_checks
service postfix reload
body_checksの正規表現に自信がないけど、ひとまずこんなところで明日1日様子見だな。