昨日に続き、大量の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に使った文章が変更された時。また本文を拾ってきて同じような作業を行わなければならない。
だが、今夜は気持ちよく寝られそうだ。