〜2003年9月中旬〜
更新。 -g問題は相変わらず。
最新のSpamAssassin 2.55を使うようにした。
spamをprocmailでMH形式で保存しているので、久し振りにscanしてみた。 これだけで、spamかどうか判断できるので結構便利だ。誤判断したときも
% bogofilter -Sn <$(mhpath +spam last) % sa-learn --ham --file $(mhpath +spam last) % sa-learn --rebuild
てなことをしてみたり。
% grep 'X-Bogosity: Yes' $(mhpath +spam last:100)
して何も出てこなくなったら、SpamAssassinを外してBogofilterだけにしよう。
以前どこかで読んだmailtoを16進で表記する方法を思い出した。 今更効果があるとも思えないが、この日記も@を@にしてみる。 過去のは面倒なのでそのまま。
更新。
一応Rubyで試す。問題ないようだ。
早くも1.5.4だ。
procmail -vしてみると
procmail v3.11pre7 1997/04/28 written and created by Stephen R. van den Berg <srb@cuci.nl> <後略>
とやけに古い。3.22に上げとこう。
いつのまにかwordlist.dbが25MB近くになりちょっと遅くなってきたので、 作り直してみる。SpamAssassinと組み合わせてるのは実は会社だけで、 家の遅いマシンではbogofilterだけにしてる。 適当にネット上にあるspamを食わせてみたんだけど、 あまり適当すぎてどうもうちに来るspamと合わないような気がする。 というわけで、cmailのフォルダをmboxに変換しよう。 cmailにはcmail-c2mという関数があるけど、手で実行するのもなんだし、 Lispはよくわからないし、Rubyで簡単に使い捨てスクリプトを。
#! /usr/local/bin/ruby CMAIL_SEPERATOR = "\C-_\C-L\n" gets(CMAIL_SEPERATOR) while message = gets(CMAIL_SEPERATOR) print message.chomp(CMAIL_SEPERATOR), "\n" end
実に簡単だ。これで、
% cmail2mbox.rb ~/cmail/**/*.030[789]~*spam* | bogofilter -nv -M % cmail2mbox.rb ~/cmail/**/spam.030[789] | bogofilter -sv -M
という感じでここ3ヶ月ほどのメールを学習させる。 これでwordlist.dbが2MBほど。bogotuneを実行してみると
Recommended cache size is 3 Mbytes.
らしいので、-k 3も追加。現在の~/.procmailrc。
MAILDIR=$HOME/Mail/ PATH=/bin:/usr/bin:/usr/local/bin LOGFILE=$HOME/procmail.log ### SPAM :0 HB: * ? bogofilter -k 3 -u -l -v 1>&2 spam/.
-vの結果もprocmail.logへ出すために1>&2を入れてる。
ついでにMH形式に変換するスクリプトも作った
#! /usr/local/bin/ruby CMAIL_SEPERATOR = "\C-_\C-L\n" gets(CMAIL_SEPERATOR) i = 1 while message = gets(CMAIL_SEPERATOR) open(i.to_s, "w") do |fh| fh.print message.chomp(CMAIL_SEPERATOR), "\n" end i += 1 end
これを使い今月のruby-talkをMH形式に変換。
% mkdir tmp; cd tmp % cmai2mh.rb ~/cmail/ruby/ruby-talk.0309 % find . -type -f | xargs bogofilter -v -B |grep Yes ./361 X-Bogosity: Yes, tests=bogofilter, spamicity=0.999199, version=0.15.2 ./743 X-Bogosity: Yes, tests=bogofilter, spamicity=1.000000, version=0.15.2
あれと思い調べてみると、たしかにspamだった。 手で振り分けていたころのメールだが、やはり人間がやるとミスがあるようだ。 もうおいらより賢い。
% refile -src +. 361 743 +spam % bogofilter -Ns -B $(mhpath +spam last:2)
としとこう。
nkf+kakasiを通さなくても適当に学習させればそれなりに検知してくれるようだが、 たぶんヘッダとか日本語じゃないところで判断してるのかもしれない。 韓国語だとか中国語もあるし、日本語だけに特化しても意味ないしな。 というか日本語のspamは圧倒的に少ないので、無視できるかも。 圧倒的に少なくなったのはruby-bugs, ruby-bugs-jaから来なくなったからか?
韓国語のspamをよく見ると適当に空白で区切られていた。なるほど。
"未承諾広告"をbogofilterに食わせてみた。
% echo '未承諾広告' |nkf -j |bogofilter -vvv X-Bogosity: Yes, tests=bogofilter, spamicity=0.994208, version=0.15.2 n pgood pbad fw U "Bz9-9p" 1 0.000000 0.001425 0.994208 + N_P_Q_S_s_x_md 1 5.79e-03 9.94e-01 9.94e-01 1.00e-02 4.15e-01 0.100 % echo 'Subject: 未承諾広告' |nkf -j |bogofilter -vvv X-Bogosity: Yes, tests=bogofilter, spamicity=0.999270, version=0.15.2 n pgood pbad fw U "subj:Bz9-9p" 8 0.000000 0.011396 0.999270 + N_P_Q_S_s_x_md 1 7.30e-04 9.99e-01 9.99e-01 1.00e-02 4.15e-01 0.100
ちゃんとSubjectも見てるんだね。スコアが上がってる。
% echo 'Subject: 未承諾広告' |nkf -j |od -tx1z 0000000 53 75 62 6a 65 63 74 3a 20 1b 24 42 4c 24 3e 35 >Subject: .$BL$>5< 0000020 42 7a 39 2d 39 70 1b 28 42 0a >Bz9-9p.(B.< 0000032
なので、"諾広告"しか見てくれない。 でもそのおかげでうまい具合に"末承諾広告"もspamとみなされる。
% echo 'Subject: 末承諾広告' |nkf -j |bogofilter -vvv X-Bogosity: Yes, tests=bogofilter, spamicity=0.999270, version=0.15.2 n pgood pbad fw U "subj:BKv" 0 0.000000 0.000000 0.415000 - "subj:Bz9-9p" 8 0.000000 0.011396 0.999270 + N_P_Q_S_s_x_md 1 7.30e-04 9.99e-01 9.99e-01 1.00e-02 4.15e-01 0.100
man bogofilterしてみると~/.bogofilter.cfが使えるらしいので、 ~/.procmailrcに-k 3と書くのはやめて、~/.bogofilter.cfに
db_cachesize=3
と書くことにした。サンプルは/etc/bogofilter.cf.sampleにある。
GmaneにRuby関係のMLがどのくらいあるのか 検索してみると、英語のはほとんどあるようだ。 ruby-docはMoonWolfさんとこの archiveが稼働してないようなので、便利かもしれない。
この記事によると3月ぐらいから提供しているらしい。
ham as spamがfalse positivesでspam as hamがfalse negatives(non-spamがham)。
procmailのレシピ。
-VIRLIST: EICAR-AV-TEST(test NOT virus), Iframe exploit, SirCam, Nimda, Klez, Hybris, BadTransII, Tanatos(BugBear), MTX, Elkern, Blebla, Navidad, MyParty, Magistr, Lentin(Yaha), Frethem, Gibe, Mawanella, Generic, Funnypics, Happy, Opasoft(a,d), Scrambler, PrettyPark, SysClock, Sobig(a,b,c,f,gen), Avron(Lirva Aliz, CodeGreen.a, IISWorm, GOPWorm, LastWord, Heyya, Sharpei, Trood, TrojanDownloader.Win32.Ultraset, Ganda, LovGate.f, NetThief, LovGate.i, Mimail Apost, Blaster(Lovesan), P2P.VB.ai, Dumaru.a
素晴らしい。~/.procmailrcに
INCLUDERC=$HOME/.procmail/nkvir-rc
を追加しとこう。procmailのlogにはこんな感じで記録される。
---=== WORM-DUMARU 17/09/2003 01:28:21 ===--- From watanabe Sun Sep 7 17:36:05 2003 Subject: Use this patch immediately ! (PR#574) Folder: /home/watanabe/Mail/virus/virus-Dumaru 13950 ---=== WORM-SOBIG 17/09/2003 01:28:23 ===--- From watanabe Mon Sep 8 16:46:05 2003 Subject: Your details Folder: /home/watanabe/Mail/virus/virus-Sobig 103359
procmailを試すときは
% procmail < virus-mail
のようにすればいい。
Changes: This is an emergency release which incorporates a facility to undo Verisign's wildcard A-record in the .com and .net domains.
素早い対応だ。
3.7.1になってるけど、3.7はなにがあった?
9/4あたりから止まっていたようで、どっと流れてきた。 あ、違う。Postedをよく見たら8/4だ。どういうこと?
わざわざcharsetで教えてくれてるわけだし、bogofilterに食わせる必要はない。 というわけで~/.procmailrcに
:0 HB * ^Content-Type:.*\/(GB2312|big5|ks_c_5601-1987) { LOG="---=== ${MATCH} ${DATE} ===---${NL}" :0 spam/. }
を追加。logはこんな感じ。
---=== GB2312 Thu Sep 18 23:11:37 JST 2003 ===--- From watanabe Mon Sep 8 13:08:09 2003 Subject: Beijing Chinese Translation Folder: spam/755 16848
早速Swenに対応したようだ。 Swenはすでに70通ほど来ている。 しかし1通あたり140KB以上てのはSobigよりでかい。まいったな。
特徴としてはなぜかFROM, TO, SUBJECTと大文字になっている。 ただし、経由するサーバによってはFrom, To, Subjectのように書き換わっていることもある。 とはいうものの圧倒的に大文字が多い。 SUBJECTがない場合もある。 SUBJECTの内容は種類が多い。 New Network Security Updateといった意味ものが多い。 サイズは140KB以上。
Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=
が必ずある。 もともとDateはついてないが、どこか途中のサーバがつけている。 と、POP3のLISTとTOPだけで判断できないか考えてみた。 あ、ヘッダだけbogofilterに食わせて傾向を見ればいいのか。
なぜMai KurakiのPerfect Crimeなのか? 茶髪は世界中で流行ってるらしい。 あ、少林サッカーのあの娘だったのか。 やっぱワイヤーアクションは面白い。