Kansai debian study_20071007

504 views

Published on

昔々に関西 Debian 勉強会で CRM114 について話した時のスライドです。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
504
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Kansai debian study_20071007

  1. 1. Debian で使えるSPAMフィ ルタ(CRM114) dselect恐怖症患者の克服記録(1) たなか としひさ 2007/10/7
  2. 2. ライセンスあなたはこのドキュメントを、Free Software  Foundation によって発行された GNU General Public License(バージョン2か、希望によってはそれ以降のバージョンのうちどれか)の定める条 件の下で再頒布または改変することができま す。 http://www.gnu.org/copyleft/gpl.htmlこのドキュメントは以下からダウンロード可能で す。http://www.netfort.gr.jp/~tosihisa/debian/kansai_debian_study_20071007.odp 2
  3. 3. 目次● (本題とは外れますが)私のDebian歴とか● SPAMフィルタ(CRM114)● まとめ 3
  4. 4. 私のDebian歴…● 初めて Debian をインストールしたのはバー ジョン1.3(bo)。確か1997年あたり。● インストールに12時間かかった。 (dselect の迷宮にハマる。恐怖症になる)● 以降、dpkg は一切使わずひたすら ./configure ; make ; make install で暮らす。● Debian の標準の runlevel が2と知らずに3日間 悩んだ経験あり。● etch のリリースで再び使い始めた。 apt(と言うか、debの仕組みの良さ)を再認識す 4
  5. 5. SPAM考● 邪魔。それ以外の何物でも無い。● 「そこまでして読ませたいか?」と言う気がす る。 →まぁ、読ませたいのだろう…。当然だ。● インターネット上でのコミュニケーションを破 綻させる要素。 →SPAMに埋もれて読むべきメールが読めない … 5
  6. 6. 皆さんにお尋ね。。。● 1日どれくらいSPAMを受信していますか? a) 10通以下(^^)v b) 20通以下(^^)/ c) 50通位(­­)/ d) 100通位(__)/ e) 無量大数… 6
  7. 7. ちなみに私は…● 1日あたり、少ない日で30通。多い日は250通 SPAMを受信しています。● 体感ですが、海外から来るSPAMが7割位。 日本語SPAMは3割位。● 先月9月2日から、今月10月5日までの時点 で、3627通のSPAMを受信しています。 (一日平均106.67通SPAMを受信しています) 7
  8. 8. 皆さんは、どうやってSPAMを 弾いてますか?a) 電子メールソフト(MUA)の(ベイジアン)SPAMフィル タで弾いている人(^^)/b)bogofilter,bsfilter,POPFile 等のベイジアンSPAMフィ ルタで弾いてる人(^^)/c) 市販のウィルスチェッカの付属機能で弾いてる人(^^)/d) ホワイトリスト、ブラックリストで弾いてる人(^^)/e) 諦めて放置の人(__)/f) そもそもSPAMが来ないので何もしていない人(^^)vg) ついつい読んでしまう人(__)/ 8
  9. 9. 私のSPAMフィルタ歴● 初めはprocmailでブラックリストを作ってい た。● 耐え切れなくなった…● サーバ側でbsfilterを挟む様にした。● すり抜けてくるので、ThunderBirdのSPAM フィルタも通すようにした。● それでも効果が芳しくない…。● POPFile を入れる。 イイ感じ! 9
  10. 10. POPFileは良いフィルタ。 だけど…● POPFileは、いわゆる「クリーン」「SPAM」 で分類せず、任意の「バケツ」に入れるので、 使い出がある。 →「クリーン」「SPAM」「SYSTEM」で分類 していた。● 基本がPOPサーバに対する proxyなのが厳し い。● 「メールを受信する」と言う動作がどうして も必要になる。 10
  11. 11. POPFileの動き POP メール メール POPFile サーバ ソフト クライアントPOPFileの基本は、POPサーバへのProxyとして動作し、受信時にSPAM判定をする。なのでどう言う形であれ、「受信」と言うアクションが必要になる。 11
  12. 12. POPFileを使わなくなった理由● 「受信しないと判定できない」のが厳しい。 →1日100通にのぼるSPAMを結局「受信」している。 →電車の中で100通SPAM受信はイヤだ…● SPAMは受信もしたくない。受信時間が無 駄だ。● POPサーバ側にPOPFileを仕込み、サーバ側で 定期的にfetchmailを入れる事も考えた。 →うーん。別のSPAMフィルタを考えてみるか な。 12
  13. 13. Debianで動く、サーバ側で使 えるSPAMフィルタ● bogofilter 入れてないので分かりませんm(_ _)m。● SpamAssassin 試しに入れてみた。 日本語SPAMを検出させるためにパッチを入れ てみたりもしたが手間がかかり過ぎて断念。● bsfilter 悪くないが一度使った事があるので別のを探し てみる事にした。 13
  14. 14. CRM114● the Controllable Regex Mutilator● apt­cache search SPAM で探していると偶然 知った。 http://crm114.sourceforge.net/ 14
  15. 15. CRM114の分類方式● 単なるベイジアンだけでは無さそう?● Hidden Markov Model,  Bayesian Chain Rule   Orthogonal Sparse Bigrams,  Winnow,   Correlation,  KNN/Hyperspace, Bit Entropy,   CLUMP,  SVM, Neural Networks  ( or by other means­ it’s all  programmable). 15
  16. 16. CRM114のインストール。● 日本語SPAMも検出出来るように、nkfとkakasi も入れる。 $ apt­get install nkf kakasi crm114 16
  17. 17. CRM114を動かすために…● CRM114実行環境を○っとコピー cp ­a /usr/share/doc/crm114/examples .crm114 cd .crm114 gunzip *.gz chmod +x mailfilter.crm● 分類用辞書ファイルの作成 cssutil ­r ­b spam.css cssutil ­r ­b nonspam.css 17
  18. 18. CRM114動いてますか?● crm ­v を実行 This is CRM114, version 20060704a­BlameRobert (TRE 0.7.3 (LGPL))  Copyright 2001­2006 William S. Yerazunis  This software is licensed under the GPL with ABSOLUTELY NO WARRANTY 18
  19. 19. とりあえず判定させてみる● どこかから*英語*のSPAMを拾ってくる。 (1メール1ファイル形式で) $ cat spam | crm ­u ~/.crm114/ mailfilter.crm | grep X­CRM114­Status X­CRM114­Status: UNSURE (0.0000) This message is unsure;  please train it! まぁ、まだ何も学習してないんだからね。 19
  20. 20. CRM114のSPAM判定結果● pRと言う数値で示す。­320.0~+320.0 X­CRM114­Status: に付加される。         +320.0 GOOD(非SPAM)           +10.0           +/­0.0 UNSURE (どちらとも言えな            ­10.0 い) SPAM         ­320.0 20
  21. 21. じゃぁ学習させてみる。● SPAMを学習させるには、­­learnspamを指定す る。 $ cat spam | crm ­u ~/.crm114/ mailfilter.crm –learnspam● もう一度判定させてみる。 $ cat spam | crm ­u ~/.crm114/ mailfilter.crm | grep X­CRM114­Status X­CRM114­Status: SPAM  ( pR: ­183.7027 )● 非SPAMを学習させるには、­­learnnonspamを 指定する。 21
  22. 22. CRM114でのSPAM学習法● TOE ­ Train Only Errors 「間違った判定をしたら正解を教える」方式。 →正しい結果を出したならそれは学習しない。 →POPFileと同じやり方。● TET – Train Every Thing 判定結果に関わらず常に学習させる方式。 →CRM114では推奨されていない学習法。 22
  23. 23. 日本語SPAMを判定するには?● CRM114は8bit clean ではあるがマルチバイト には対応していない。● [アイデア] CRM114で無理に日本語に対応させるよ り、kakasiで漢字をローマ字に変換させたら、 それはマルチバイトではないよね? 23
  24. 24. kakasiで漢字→ローマ字変換● 下記の様にコマンドを入れる。 $ echo 私の名前は田中です。 | nkf ­e | kakasi ­Ha ­Ka ­Ja ­Ea ­ka ­s watashi no namae ha tanaka desu .● nkfを挟むのはUTF­8(tty)→EUC,JIS(mail)→EUC 変換させるため。 24
  25. 25. pretokenizer.crmを作る。● CRM114のメールフィルタスクリプト (mailfilter.crm)を改造し、メール本体を処理す る前に、メール内の漢字をローマ字に置き換え る。● pretokenizer.crmは、マルチパートMIMEに対応 し、メール内の漢字コードをローマ字に置き換 える「CRM114で書かれた」プログラム。 (ここでpretokenizer.crmをデモする事) 25
  26. 26. pretokenizer.crmをSPAMフィ ルタに組み込む(1)。*** 261,268 ****  #      We clip m_text to be the first :decision_length: characters of  #      the incoming mail.  #! match (:m_text:) [:_dw: 0 :*:decision_length:] /.*/! isolate (:m_text:)  #  #      :b_text: is the text with base64s expanded.  isolate (:b_text:) /:*:m_text:/­­­ 261,274 ­­­­  #      We clip m_text to be the first :decision_length: characters of  #      the incoming mail.  #! #match (:m_text:) [:_dw: 0 :*:decision_length:] /.*/! #isolate (:m_text:)! isolate (:m_text:) /:*:_dw:/! {!       match [:text_preprocessor:] /./!       syscall (:*:_dw:) (:m_text:) /:*:text_preprocessor:/! }! match (:m_text:) [:m_text: 0 :*:decision_length:] /.*/  #  #      :b_text: is the text with base64s expanded.  isolate (:b_text:) /:*:m_text:/ 26
  27. 27. pretokenizer.crmをSPAMフィ ルタに組み込む(2)。● mailfilter.cfの最後に、下記の1行を追加する。 (ディレクトリは適宜変更の事):text_preprocessor: //home/tosihisa/.crm114/pretokenizer.crm/● mailfilter.cfのdo_base64は必ずnoにする事。 (pretokenizer.crmが肩代わりするから) 27
  28. 28. パッチとか編集とか面倒だ ぞ!● 下記のURLからどうぞ。 http://www.netfort.gr.jp/~tosihisa/crm114/● mailfilter2.crm 日本語SPAM対応フィルタ● mailfilter2.cf 設定ファイル● pretokenizer.crm 漢字→ローマ字変換フィルタ 28
  29. 29. 私はどうやってCRM114を 使っているか?● こんな感じ 自宅 メールサーバ メール サーバ メール postfix clamav procmail 外部 imap Maildir PC CRM114 29
  30. 30. CRM114に通すメールと 通さないメール● メーリングリストはCRM114に通していない。 →メールヘッダのキーワードで判定できるか ら。● 面倒なのは「MLに飛んでくるSPAM」 →最近のMLは殆ど登録メールアドレス以外は 弾く。 →一つだけ、anyone can post のMLに入ってい る。   →MLの性質上仕方が無い。このMLに来た     SPAMだけは手作業で分類。 30
  31. 31. CRM114の判別率(1) (正常メールの判別精度) 種別 数 %GOOD 335 97.10%UNSURE 10 2.90%SPAM 0 0.00% GOOD全メール数: 345通 UNSURE SPAM 31
  32. 32. CRM114の判別率(1) (SPAMメールの判別精度) 種別 数 %GOOD 1 0.03%UNSURE 613 16.90%SPAM 3014 83.08% GOOD全メール数: 3628通 UNSURE SPAM 32
  33. 33. 総合的な判別精度としては…● 90%程度。● 十分に高いとは言えないかも知れない?● UNSUREの殆どはSPAM● 「正常」のメールがSPAM行きになった事は無 い。 (UNSUREで止まる) 33
  34. 34. CRM114を使ってみて…● とにもかくにも正直なフィルタ。 教えていないものは分からないと言う。 教えると正しく答える。 →もう少し賢いとありがたいが…● UNSUREがあるのはありがたい。 GOOD/SPAMのどちらかでしか判定しないとす ると、結局大量のSPAMの中から読みたいメー ルを探さないと行けない。 →UNSUREのお蔭で、探す数がぐっと減った。   →これは本当にありがたい。● 大量のSPAM受信から開放された。 34
  35. 35. まとめ● 完璧!とまでは行きませんが、でもかなりイ イ!感じでSPAMを弾くようになりました。● 一度お試しください~ 35
  36. 36. 質疑応答(いや自信無いです)
  37. 37. ご清聴ありがとうございまし た。

×