SlideShare uma empresa Scribd logo
1 de 37
Debian で使えるSPAMフィ
     ルタ(CRM114)

 dselect恐怖症患者の克服記録(1)

                たなか としひさ
                   2007/10/7
ライセンス
あなたはこのドキュメントを、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
目次
●   (本題とは外れますが)私のDebian歴とか
●   SPAMフィルタ(CRM114)
●   まとめ




                             3
私のDebian歴…
●   初めて Debian をインストールしたのはバー
    ジョン1.3(bo)。確か1997年あたり。
●   インストールに12時間かかった。
    (dselect の迷宮にハマる。恐怖症になる)
●   以降、dpkg は一切使わずひたすら
    ./configure ; make ; make install で暮らす。
●   Debian の標準の runlevel が2と知らずに3日間
    悩んだ経験あり。
●   etch のリリースで再び使い始めた。
    apt(と言うか、debの仕組みの良さ)を再認識す
                            4
SPAM考
●   邪魔。それ以外の何物でも無い。
●   「そこまでして読ませたいか?」と言う気がす
    る。
    →まぁ、読ませたいのだろう…。当然だ。
●   インターネット上でのコミュニケーションを破
    綻させる要素。
    →SPAMに埋もれて読むべきメールが読めない
    …


                        5
皆さんにお尋ね。。。
●   1日どれくらいSPAMを受信していますか?
    a) 10通以下(^^)v
    b) 20通以下(^^)/
    c) 50通位(­­)/
    d) 100通位(__)/
    e) 無量大数…




                            6
ちなみに私は…
●   1日あたり、少ない日で30通。多い日は250通
    SPAMを受信しています。
●   体感ですが、海外から来るSPAMが7割位。
    日本語SPAMは3割位。
●   先月9月2日から、今月10月5日までの時点
    で、3627通のSPAMを受信しています。
    (一日平均106.67通SPAMを受信しています)



                            7
皆さんは、どうやってSPAMを
     弾いてますか?
a) 電子メールソフト(MUA)の(ベイジアン)SPAMフィル
   タで弾いている人(^^)/
b)bogofilter,bsfilter,POPFile 等のベイジアンSPAMフィ
  ルタで弾いてる人(^^)/
c) 市販のウィルスチェッカの付属機能で弾いてる人(^^)/
d) ホワイトリスト、ブラックリストで弾いてる人(^^)/
e) 諦めて放置の人(__)/
f) そもそもSPAMが来ないので何もしていない人(^^)v
g) ついつい読んでしまう人(__)/
                                         8
私のSPAMフィルタ歴
●   初めはprocmailでブラックリストを作ってい
    た。
●   耐え切れなくなった…
●   サーバ側でbsfilterを挟む様にした。
●   すり抜けてくるので、ThunderBirdのSPAM
    フィルタも通すようにした。
●   それでも効果が芳しくない…。
●   POPFile を入れる。
    イイ感じ!
                                 9
POPFileは良いフィルタ。
      だけど…
●   POPFileは、いわゆる「クリーン」「SPAM」
    で分類せず、任意の「バケツ」に入れるので、
    使い出がある。
    →「クリーン」「SPAM」「SYSTEM」で分類
    していた。
●   基本がPOPサーバに対する proxyなのが厳し
    い。
●   「メールを受信する」と言う動作がどうして
    も必要になる。

                           10
POPFileの動き


  POP                    メール
        メール    POPFile
  サーバ                    ソフト




                クライアント


POPFileの基本は、POPサーバへのProxyとして動作し、
受信時にSPAM判定をする。なのでどう言う形であれ、
「受信」と言うアクションが必要になる。



                                   11
POPFileを使わなくなった理由
●   「受信しないと判定できない」のが厳しい。
    →1日100通にのぼるSPAMを結局「受信」している。
    →電車の中で100通SPAM受信はイヤだ…
●   SPAMは受信もしたくない。受信時間が無
    駄だ。
●   POPサーバ側にPOPFileを仕込み、サーバ側で
    定期的にfetchmailを入れる事も考えた。
    →うーん。別のSPAMフィルタを考えてみるか
    な。

                             12
Debianで動く、サーバ側で使
      えるSPAMフィルタ
●   bogofilter
    入れてないので分かりませんm(_ _)m。
●   SpamAssassin
    試しに入れてみた。
    日本語SPAMを検出させるためにパッチを入れ
    てみたりもしたが手間がかかり過ぎて断念。
●   bsfilter
    悪くないが一度使った事があるので別のを探し
    てみる事にした。

                            13
CRM114
●   'the Controllable Regex Mutilator'
●   apt­cache search SPAM で探していると偶然
    知った。



                   http://crm114.sourceforge.net/




                                                    14
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
CRM114のインストール。
●   日本語SPAMも検出出来るように、nkfとkakasi
    も入れる。


    $ apt­get install nkf kakasi crm114




                                     16
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
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
とりあえず判定させてみる
●   どこかから*英語*の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
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
じゃぁ学習させてみる。
●   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
CRM114でのSPAM学習法
●   TOE ­ Train Only Errors
    「間違った判定をしたら正解を教える」方式。
    →正しい結果を出したならそれは学習しない。
    →POPFileと同じやり方。
●   TET – Train Every Thing
    判定結果に関わらず常に学習させる方式。
    →CRM114では推奨されていない学習法。



                              22
日本語SPAMを判定するには?
●   CRM114は8bit clean ではあるがマルチバイト
    には対応していない。
●   [アイデア]
    CRM114で無理に日本語に対応させるよ
    り、kakasiで漢字をローマ字に変換させたら、
    それはマルチバイトではないよね?




                               23
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
pretokenizer.crmを作る。
●   CRM114のメールフィルタスクリプト
    (mailfilter.crm)を改造し、メール本体を処理す
    る前に、メール内の漢字をローマ字に置き換え
    る。
●   pretokenizer.crmは、マルチパートMIMEに対応
    し、メール内の漢字コードをローマ字に置き換
    える「CRM114で書かれた」プログラム。

    (ここでpretokenizer.crmをデモする事)

                                  25
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 base64's 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 base64's expanded.
  isolate (:b_text:) /:*:m_text:/

                                                                          26
pretokenizer.crmをSPAMフィ
               ルタに組み込む(2)。
●   mailfilter.cfの最後に、下記の1行を追加する。
    (ディレクトリは適宜変更の事)
:text_preprocessor: //home/tosihisa/.crm114/pretokenizer.crm/




●   mailfilter.cfのdo_base64は必ずnoにする事。
    (pretokenizer.crmが肩代わりするから)



                                                                      27
パッチとか編集とか面倒だ
        ぞ!
●   下記のURLからどうぞ。
    http://www.netfort.gr.jp/~tosihisa/crm114/

●   mailfilter2.crm
    日本語SPAM対応フィルタ
●   mailfilter2.cf
    設定ファイル
●   pretokenizer.crm
    漢字→ローマ字変換フィルタ
                                                 28
私はどうやってCRM114を
          使っているか?
●   こんな感じ                     自宅
                            メールサーバ



    メール
    サーバ     メール          postfix


                         clamav
                                     procmail



      外部
                  imap   Maildir
      PC                             CRM114




                                                29
CRM114に通すメールと
       通さないメール
●   メーリングリストはCRM114に通していない。
    →メールヘッダのキーワードで判定できるか
    ら。
●   面倒なのは「MLに飛んでくるSPAM」
    →最近のMLは殆ど登録メールアドレス以外は
     弾く。
    →一つだけ、anyone can post のMLに入ってい
     る。
      →MLの性質上仕方が無い。このMLに来た
        SPAMだけは手作業で分類。
                                30
CRM114の判別率(1)
  (正常メールの判別精度)
  種別   数     %
GOOD   335 97.10%
UNSURE 10 2.90%
SPAM     0 0.00%
                    GOOD


全メール数:
     345通
                    UNSURE
                    SPAM




                             31
CRM114の判別率(1)
  (SPAMメールの判別精度)
  種別    数     %
GOOD      1 0.03%
UNSURE 613 16.90%
SPAM   3014 83.08%
                     GOOD

全メール数:
     3628通           UNSURE
                     SPAM




                       32
総合的な判別精度としては…
●   90%程度。
●   十分に高いとは言えないかも知れない?
●   UNSUREの殆どはSPAM
●   「正常」のメールがSPAM行きになった事は無
    い。
    (UNSUREで止まる)




                         33
CRM114を使ってみて…
●   とにもかくにも正直なフィルタ。
    教えていないものは分からないと言う。
    教えると正しく答える。
    →もう少し賢いとありがたいが…
●   UNSUREがあるのはありがたい。
    GOOD/SPAMのどちらかでしか判定しないとす
    ると、結局大量のSPAMの中から読みたいメー
    ルを探さないと行けない。
    →UNSUREのお蔭で、探す数がぐっと減った。
      →これは本当にありがたい。
●   大量のSPAM受信から開放された。     34
まとめ
●   完璧!とまでは行きませんが、でもかなりイ
    イ!感じでSPAMを弾くようになりました。
●   一度お試しください~




                        35
質疑応答
(いや自信無いです)
ご清聴
ありがとうございまし
     た。

Mais conteúdo relacionado

Mais de Toshihisa Tanaka

Linuxベースのシングルボード色々
Linuxベースのシングルボード色々Linuxベースのシングルボード色々
Linuxベースのシングルボード色々Toshihisa Tanaka
 
Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)
Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)
Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)Toshihisa Tanaka
 
OpenStreetMap の紹介 (20150221 IODD 堺)
OpenStreetMap の紹介 (20150221 IODD 堺)OpenStreetMap の紹介 (20150221 IODD 堺)
OpenStreetMap の紹介 (20150221 IODD 堺)Toshihisa Tanaka
 
DIY GPS Logger 20130413 #mbed_fest_w
DIY GPS Logger 20130413 #mbed_fest_wDIY GPS Logger 20130413 #mbed_fest_w
DIY GPS Logger 20130413 #mbed_fest_wToshihisa Tanaka
 

Mais de Toshihisa Tanaka (7)

Linuxベースのシングルボード色々
Linuxベースのシングルボード色々Linuxベースのシングルボード色々
Linuxベースのシングルボード色々
 
Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)
Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)
Linuxコミュニティ20年の振返りと学んだ事(ダイジェスト版)
 
OpenStreetMap の紹介 (20150221 IODD 堺)
OpenStreetMap の紹介 (20150221 IODD 堺)OpenStreetMap の紹介 (20150221 IODD 堺)
OpenStreetMap の紹介 (20150221 IODD 堺)
 
DIY GPS Logger 20130413 #mbed_fest_w
DIY GPS Logger 20130413 #mbed_fest_wDIY GPS Logger 20130413 #mbed_fest_w
DIY GPS Logger 20130413 #mbed_fest_w
 
Mbed gps logger_20101105
Mbed gps logger_20101105Mbed gps logger_20101105
Mbed gps logger_20101105
 
Diy gps logger_20110618
Diy gps logger_20110618Diy gps logger_20110618
Diy gps logger_20110618
 
Oss coding style
Oss coding styleOss coding style
Oss coding style
 

Último

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Último (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Kansai debian study_20071007

  • 1. Debian で使えるSPAMフィ ルタ(CRM114) dselect恐怖症患者の克服記録(1) たなか としひさ 2007/10/7
  • 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. 目次 ● (本題とは外れますが)私のDebian歴とか ● SPAMフィルタ(CRM114) ● まとめ 3
  • 4. 私のDebian歴… ● 初めて Debian をインストールしたのはバー ジョン1.3(bo)。確か1997年あたり。 ● インストールに12時間かかった。 (dselect の迷宮にハマる。恐怖症になる) ● 以降、dpkg は一切使わずひたすら ./configure ; make ; make install で暮らす。 ● Debian の標準の runlevel が2と知らずに3日間 悩んだ経験あり。 ● etch のリリースで再び使い始めた。 apt(と言うか、debの仕組みの良さ)を再認識す 4
  • 5. SPAM考 ● 邪魔。それ以外の何物でも無い。 ● 「そこまでして読ませたいか?」と言う気がす る。 →まぁ、読ませたいのだろう…。当然だ。 ● インターネット上でのコミュニケーションを破 綻させる要素。 →SPAMに埋もれて読むべきメールが読めない … 5
  • 6. 皆さんにお尋ね。。。 ● 1日どれくらいSPAMを受信していますか? a) 10通以下(^^)v b) 20通以下(^^)/ c) 50通位(­­)/ d) 100通位(__)/ e) 無量大数… 6
  • 7. ちなみに私は… ● 1日あたり、少ない日で30通。多い日は250通 SPAMを受信しています。 ● 体感ですが、海外から来るSPAMが7割位。 日本語SPAMは3割位。 ● 先月9月2日から、今月10月5日までの時点 で、3627通のSPAMを受信しています。 (一日平均106.67通SPAMを受信しています) 7
  • 8. 皆さんは、どうやってSPAMを 弾いてますか? a) 電子メールソフト(MUA)の(ベイジアン)SPAMフィル タで弾いている人(^^)/ b)bogofilter,bsfilter,POPFile 等のベイジアンSPAMフィ ルタで弾いてる人(^^)/ c) 市販のウィルスチェッカの付属機能で弾いてる人(^^)/ d) ホワイトリスト、ブラックリストで弾いてる人(^^)/ e) 諦めて放置の人(__)/ f) そもそもSPAMが来ないので何もしていない人(^^)v g) ついつい読んでしまう人(__)/ 8
  • 9. 私のSPAMフィルタ歴 ● 初めはprocmailでブラックリストを作ってい た。 ● 耐え切れなくなった… ● サーバ側でbsfilterを挟む様にした。 ● すり抜けてくるので、ThunderBirdのSPAM フィルタも通すようにした。 ● それでも効果が芳しくない…。 ● POPFile を入れる。 イイ感じ! 9
  • 10. POPFileは良いフィルタ。 だけど… ● POPFileは、いわゆる「クリーン」「SPAM」 で分類せず、任意の「バケツ」に入れるので、 使い出がある。 →「クリーン」「SPAM」「SYSTEM」で分類 していた。 ● 基本がPOPサーバに対する proxyなのが厳し い。 ● 「メールを受信する」と言う動作がどうして も必要になる。 10
  • 11. POPFileの動き POP メール メール POPFile サーバ ソフト クライアント POPFileの基本は、POPサーバへのProxyとして動作し、 受信時にSPAM判定をする。なのでどう言う形であれ、 「受信」と言うアクションが必要になる。 11
  • 12. POPFileを使わなくなった理由 ● 「受信しないと判定できない」のが厳しい。 →1日100通にのぼるSPAMを結局「受信」している。 →電車の中で100通SPAM受信はイヤだ… ● SPAMは受信もしたくない。受信時間が無 駄だ。 ● POPサーバ側にPOPFileを仕込み、サーバ側で 定期的にfetchmailを入れる事も考えた。 →うーん。別のSPAMフィルタを考えてみるか な。 12
  • 13. Debianで動く、サーバ側で使 えるSPAMフィルタ ● bogofilter 入れてないので分かりませんm(_ _)m。 ● SpamAssassin 試しに入れてみた。 日本語SPAMを検出させるためにパッチを入れ てみたりもしたが手間がかかり過ぎて断念。 ● bsfilter 悪くないが一度使った事があるので別のを探し てみる事にした。 13
  • 14. CRM114 ● 'the Controllable Regex Mutilator' ● apt­cache search SPAM で探していると偶然 知った。 http://crm114.sourceforge.net/ 14
  • 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. CRM114のインストール。 ● 日本語SPAMも検出出来るように、nkfとkakasi も入れる。 $ apt­get install nkf kakasi crm114 16
  • 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. 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. とりあえず判定させてみる ● どこかから*英語*の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. 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. じゃぁ学習させてみる。 ● 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. CRM114でのSPAM学習法 ● TOE ­ Train Only Errors 「間違った判定をしたら正解を教える」方式。 →正しい結果を出したならそれは学習しない。 →POPFileと同じやり方。 ● TET – Train Every Thing 判定結果に関わらず常に学習させる方式。 →CRM114では推奨されていない学習法。 22
  • 23. 日本語SPAMを判定するには? ● CRM114は8bit clean ではあるがマルチバイト には対応していない。 ● [アイデア] CRM114で無理に日本語に対応させるよ り、kakasiで漢字をローマ字に変換させたら、 それはマルチバイトではないよね? 23
  • 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. pretokenizer.crmを作る。 ● CRM114のメールフィルタスクリプト (mailfilter.crm)を改造し、メール本体を処理す る前に、メール内の漢字をローマ字に置き換え る。 ● pretokenizer.crmは、マルチパートMIMEに対応 し、メール内の漢字コードをローマ字に置き換 える「CRM114で書かれた」プログラム。 (ここでpretokenizer.crmをデモする事) 25
  • 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 base64's 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 base64's expanded.   isolate (:b_text:) /:*:m_text:/ 26
  • 27. pretokenizer.crmをSPAMフィ ルタに組み込む(2)。 ● mailfilter.cfの最後に、下記の1行を追加する。 (ディレクトリは適宜変更の事) :text_preprocessor: //home/tosihisa/.crm114/pretokenizer.crm/ ● mailfilter.cfのdo_base64は必ずnoにする事。 (pretokenizer.crmが肩代わりするから) 27
  • 28. パッチとか編集とか面倒だ ぞ! ● 下記のURLからどうぞ。 http://www.netfort.gr.jp/~tosihisa/crm114/ ● mailfilter2.crm 日本語SPAM対応フィルタ ● mailfilter2.cf 設定ファイル ● pretokenizer.crm 漢字→ローマ字変換フィルタ 28
  • 29. 私はどうやってCRM114を 使っているか? ● こんな感じ 自宅 メールサーバ メール サーバ メール postfix clamav procmail 外部 imap Maildir PC CRM114 29
  • 30. CRM114に通すメールと 通さないメール ● メーリングリストはCRM114に通していない。 →メールヘッダのキーワードで判定できるか ら。 ● 面倒なのは「MLに飛んでくるSPAM」 →最近のMLは殆ど登録メールアドレス以外は 弾く。 →一つだけ、anyone can post のMLに入ってい る。   →MLの性質上仕方が無い。このMLに来た     SPAMだけは手作業で分類。 30
  • 31. CRM114の判別率(1) (正常メールの判別精度) 種別 数 % GOOD 335 97.10% UNSURE 10 2.90% SPAM 0 0.00% GOOD 全メール数: 345通 UNSURE SPAM 31
  • 32. CRM114の判別率(1) (SPAMメールの判別精度) 種別 数 % GOOD 1 0.03% UNSURE 613 16.90% SPAM 3014 83.08% GOOD 全メール数: 3628通 UNSURE SPAM 32
  • 33. 総合的な判別精度としては… ● 90%程度。 ● 十分に高いとは言えないかも知れない? ● UNSUREの殆どはSPAM ● 「正常」のメールがSPAM行きになった事は無 い。 (UNSUREで止まる) 33
  • 34. CRM114を使ってみて… ● とにもかくにも正直なフィルタ。 教えていないものは分からないと言う。 教えると正しく答える。 →もう少し賢いとありがたいが… ● UNSUREがあるのはありがたい。 GOOD/SPAMのどちらかでしか判定しないとす ると、結局大量のSPAMの中から読みたいメー ルを探さないと行けない。 →UNSUREのお蔭で、探す数がぐっと減った。   →これは本当にありがたい。 ● 大量のSPAM受信から開放された。 34
  • 35. まとめ ● 完璧!とまでは行きませんが、でもかなりイ イ!感じでSPAMを弾くようになりました。 ● 一度お試しください~ 35