Your SlideShare is downloading. ×
0
Debian で使えるSPAMフィ     ルタ(CRM114) dselect恐怖症患者の克服記録(1)                たなか としひさ                   2007/10/7
ライセンスあなたはこのドキュメントを、Free Software  Foundation によって発行された GNU General Public License(バージョン2か、希望によってはそれ以降のバージョンのうちどれか)の定める条  件...
目次●   (本題とは外れますが)私のDebian歴とか●   SPAMフィルタ(CRM114)●   まとめ                             3
私のDebian歴…●   初めて Debian をインストールしたのはバー    ジョン1.3(bo)。確か1997年あたり。●   インストールに12時間かかった。    (dselect の迷宮にハマる。恐怖症になる)●   以降、dpk...
SPAM考●   邪魔。それ以外の何物でも無い。●   「そこまでして読ませたいか?」と言う気がす    る。    →まぁ、読ませたいのだろう…。当然だ。●   インターネット上でのコミュニケーションを破    綻させる要素。    →SPA...
皆さんにお尋ね。。。●   1日どれくらいSPAMを受信していますか?    a) 10通以下(^^)v    b) 20通以下(^^)/    c) 50通位(­­)/    d) 100通位(__)/    e) 無量大数…        ...
ちなみに私は…●   1日あたり、少ない日で30通。多い日は250通    SPAMを受信しています。●   体感ですが、海外から来るSPAMが7割位。    日本語SPAMは3割位。●   先月9月2日から、今月10月5日までの時点    で...
皆さんは、どうやってSPAMを     弾いてますか?a) 電子メールソフト(MUA)の(ベイジアン)SPAMフィル   タで弾いている人(^^)/b)bogofilter,bsfilter,POPFile 等のベイジアンSPAMフィ  ルタで...
私のSPAMフィルタ歴●   初めはprocmailでブラックリストを作ってい    た。●   耐え切れなくなった…●   サーバ側でbsfilterを挟む様にした。●   すり抜けてくるので、ThunderBirdのSPAM    フィルタ...
POPFileは良いフィルタ。      だけど…●   POPFileは、いわゆる「クリーン」「SPAM」    で分類せず、任意の「バケツ」に入れるので、    使い出がある。    →「クリーン」「SPAM」「SYSTEM」で分類    ...
POPFileの動き  POP                    メール        メール    POPFile  サーバ                    ソフト                クライアントPOPFileの基本は、...
POPFileを使わなくなった理由●   「受信しないと判定できない」のが厳しい。    →1日100通にのぼるSPAMを結局「受信」している。    →電車の中で100通SPAM受信はイヤだ…●   SPAMは受信もしたくない。受信時間が無 ...
Debianで動く、サーバ側で使      えるSPAMフィルタ●   bogofilter    入れてないので分かりませんm(_ _)m。●   SpamAssassin    試しに入れてみた。    日本語SPAMを検出させるためにパッ...
CRM114●   the Controllable Regex Mutilator●   apt­cache search SPAM で探していると偶然    知った。                   http://crm114.sour...
CRM114の分類方式●   単なるベイジアンだけでは無さそう?●   Hidden Markov Model,  Bayesian Chain Rule      Orthogonal Sparse Bigrams,  Winnow,    ...
CRM114のインストール。●   日本語SPAMも検出出来るように、nkfとkakasi    も入れる。    $ apt­get install nkf kakasi crm114                             ...
CRM114を動かすために…●   CRM114実行環境を○っとコピー    cp ­a /usr/share/doc/crm114/examples .crm114    cd .crm114    gunzip *.gz    chmod ...
CRM114動いてますか?●   crm ­v を実行     This is CRM114, version 20060704a­BlameRobert (TRE 0.7.3 (LGPL))     Copyright 2001­2006 W...
とりあえず判定させてみる●   どこかから*英語*のSPAMを拾ってくる。    (1メール1ファイル形式で)    $ cat spam | crm ­u ~/.crm114/ mailfilter.crm | grep X­CRM114­S...
CRM114のSPAM判定結果●   pRと言う数値で示す。­320.0~+320.0    X­CRM114­Status: に付加される。                +320.0                           GO...
じゃぁ学習させてみる。●   SPAMを学習させるには、­­learnspamを指定す    る。    $ cat spam | crm ­u ~/.crm114/ mailfilter.crm –learnspam●   もう一度判定させて...
CRM114でのSPAM学習法●   TOE ­ Train Only Errors    「間違った判定をしたら正解を教える」方式。    →正しい結果を出したならそれは学習しない。    →POPFileと同じやり方。●   TET – T...
日本語SPAMを判定するには?●   CRM114は8bit clean ではあるがマルチバイト    には対応していない。●   [アイデア]    CRM114で無理に日本語に対応させるよ    り、kakasiで漢字をローマ字に変換させた...
kakasiで漢字→ローマ字変換●   下記の様にコマンドを入れる。    $ echo 私の名前は田中です。 | nkf ­e | kakasi ­Ha ­Ka ­Ja ­Ea ­ka ­s    watashi no namae ha ta...
pretokenizer.crmを作る。●   CRM114のメールフィルタスクリプト    (mailfilter.crm)を改造し、メール本体を処理す    る前に、メール内の漢字をローマ字に置き換え    る。●   pretokeniz...
pretokenizer.crmをSPAMフィ               ルタに組み込む(1)。*** 261,268 ****  #      We clip m_text to be the first :decision_length:...
pretokenizer.crmをSPAMフィ               ルタに組み込む(2)。●   mailfilter.cfの最後に、下記の1行を追加する。    (ディレクトリは適宜変更の事):text_preprocessor: /...
パッチとか編集とか面倒だ        ぞ!●   下記のURLからどうぞ。    http://www.netfort.gr.jp/~tosihisa/crm114/●   mailfilter2.crm    日本語SPAM対応フィルタ● ...
私はどうやってCRM114を          使っているか?●   こんな感じ                     自宅                            メールサーバ    メール    サーバ     メール   ...
CRM114に通すメールと       通さないメール●   メーリングリストはCRM114に通していない。    →メールヘッダのキーワードで判定できるか    ら。●   面倒なのは「MLに飛んでくるSPAM」    →最近のMLは殆ど登録...
CRM114の判別率(1)  (正常メールの判別精度)  種別   数     %GOOD   335 97.10%UNSURE 10 2.90%SPAM     0 0.00%                    GOOD全メール数:   ...
CRM114の判別率(1)  (SPAMメールの判別精度)  種別    数     %GOOD      1 0.03%UNSURE 613 16.90%SPAM   3014 83.08%                     GOOD全...
総合的な判別精度としては…●   90%程度。●   十分に高いとは言えないかも知れない?●   UNSUREの殆どはSPAM●   「正常」のメールがSPAM行きになった事は無    い。    (UNSUREで止まる)           ...
CRM114を使ってみて…●   とにもかくにも正直なフィルタ。    教えていないものは分からないと言う。    教えると正しく答える。    →もう少し賢いとありがたいが…●   UNSUREがあるのはありがたい。    GOOD/SPAM...
まとめ●   完璧!とまでは行きませんが、でもかなりイ    イ!感じでSPAMを弾くようになりました。●   一度お試しください~                        35
質疑応答(いや自信無いです)
ご清聴ありがとうございまし     た。
Upcoming SlideShare
Loading in...5
×

Kansai debian study_20071007

318

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
318
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "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. ご清聴ありがとうございまし た。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×