The ULTIMATE spam Filter NNIPF(Nearest Neighbor IP address based mail Filter) Version 0.04-beta |
---|
★このドキュメントは,Linuxやメイルの配送システム等に詳しい上級者向けに書かれています.内容が理解できない場合は,詳しい人にインストールしてもらってください.素人によるインストールはおそらく不可能です. |
---|
[What's New] NNIPFのPerlの書き方がよろしくないという意見を各方面から頂戴しまして,ゆっくりですが書き直しつつあります.書き直しをしたことで動作の信頼性にどの程度の違いが出るかは分かりませんが,現バージョンは,ベータ版ということをご了承ください.0.03-betaから0.04-beta では下記の変更を施しています.
今後はリファレンスの使用,モジュール化,MTAOBの判断方法,全体のコードの見直し,複数ユーザに対応するために,マスターのBIP,GIPとユーザ毎のBIP,GIPに分離することなどを進めていく予定で,これらが済んだらbetaを取り除きます.いつになるやら.
利用者の声:(使っていない人の意見は割愛してます)
NNIPF とは ? | ||
---|---|---|
NNIPF は sendmail, postfix, qmail などのメイル配送エージェント(MTA)上でユーザ定義のフィルタとして動作するスパムメイルフィルタです.
誤りの少ないフィルタを作成するためには,メイルがスパムであるか否かを特徴付ける明確な特徴を見つける必要があります.NNIPFでは,我々が長年蓄積した100万通以上の大量のスパムデータを詳細に解析した結果,最も有効であると思われる「送信者の情報」を特徴として利用しております.これは,偽造されている可能性のあるメイルのヘッダー情報から,正しい送信者の情報を得るという問題を解決しなければなりません.このために, 「自分が外部からメイルを受けるときに使っている信頼できるMTA(Mail Transfer Agent)を登録しておき,そのMTAが生成したReceived:行から送信元のIPアドレスを割り出す」という機能を実現しました.これにより,メイルヘッダーの偽造に対しても頑健な送信元アドレスの割り出しが実現できます.このときに登録する信頼できるMTAをNNIPFではMTA On the Border (MTAOB)と呼ぶことにします. MTAOBは外部からのメイルを受け付けている信頼できるMTAであり,これによって受信されたメイルは決まった配送経路でBase MTAに送られます.MTAOBは,外部の野蛮な世界に面しているMTAであり,MTAOB上では送信元のIPアドレスを正確に把握できます.通常,メイルヘッダーに含まれる多数の"Received"フィールドにはIPアドレスが書かれていますが,それらは偽造されたものであるかもしれないし,また一部は見飽きたものばかりです.しかし,MTAOBの生成した"Received"行には,図1吹き出し内の赤字の部分に示したように送信者の正しいIPアドレスが含まれているので,これを利用してスパム検出を行うことができます. 当初はMTAOBの生成したReceived行に対して様々なルールを適用してスコアリングするといった小細工をやっていましたが,こういった人間の作ったルールよりもIPアドレスの識別の方が精度が高く,見通しが良かったため,次のような方式に切り替えました.
次に問題となるのは,抽出されたIPアドレスが果たしてスパム送信者のアドレスか,そうではないのかを判断しなければなりません.一般にメイルの判別には,従来Bayesianフィルタや,Support Vector Machine, ADABoostingなどの識別器が用いられてきました.しかし,これらの手法は
この手法は,「既知のスパム送信者のIPアドレス集合」,および「既知の正常なメイル送信者のIPアドレス集合」を事前に用意しておき,未知のメイルから抽出されたIPアドレスと,それぞれの集合との最短距離を計算し,より近い方に識別するという方式です.この方式の良さは,
具体的には,
この量が0であれば,確実に普通のメイルであり,1であれば確実にスパムメイルで,その中間の0.5であれば,どちらとも言えないということになります.システムでは,弁別度の値が0〜0.35であれば正常,0.65〜1であればスパム,そしてそれ以外は不確かというような扱いができるように作ってあります.(0.35や0.65の値は調整できます.).現在登録しているスパム-IPアドレスは4千以上,Nonスパム-IPアドレスは千数百程度ですが,最近傍探索と弁別度の計算は一瞬で終わります. では,これらを組み合わせて実現される「IPアドレスの最近傍識別」にどのような意味があるかという問題について考えてみます.もともと,IPアドレスは,国別,組織別,に割り振られており,勝手なIPアドレスを用いてもきちんと通信は行なえません.したがって,スパム送信者のIPアドレスが大学や政府機関とは異なるアドレスに分布していることは容易に想像ができます.実際に,この分布を調べてみたところ,かなり明白な分布の偏りが存在することを確認しております.ですから,この方式では,怪しいMTAから送られてくるメイルを全てブロックできます.その一方で,まっとうな組織から送られてくるスパムメイルは検出できないという限界もあります.これは,ウイルスやワームに感染した正当な組織のコンピュータがスパム送信にABUSE(不正利用)されたケースに相当しますが,これは現在のところ前述したターピットや強制切断などの様々な対策の結果,ユーザまで送り届けられるケースは少なくなっております.実際,半年間運用してみた限り作者はこういうケースに遭遇しておりません. NNIPFのプラットフォームは,ユーザの使っているMTAであり,ユーザはそこからPOPやIMAPなどのプロトコルを用いてメイルをダウンロードしています. ここで,スパム検出が行われるということは,ユーザは自分のPCにスパムメイルをダウンロードすることはないということです.これは,出張先などで低速の通信回線でインターネットに接続されている場合などで特に有利に働く特徴です. NNIPFは他のフィルタよりも精度およびスピードの点で優れていますが,人間の作ったソフトウエアは間違いを起こすものです.間違いを起こした場合,NNIPFはWEBインターフェイスを通じて誤りを修正し,フィルターを再トレーニングすることができます.これが行なえるためには,
NNIPFは,スパムメイルとして検出したメイルを全て蓄積しており,それらはWEBを介して見ることができます.もし,ユーザが誤分類を発見した場合にはそれをWEB経由で修正することができるようになっています.これは,同時に識別器の再トレーニングにもなっており,この修正以降は同じ間違いは2度としません. 問題点など.
|
NNIPF.tgzの中身 | ||
---|---|---|
説明 | 名前 | 中身 |
設定ファイルが置かれたディレクトリ(この下のファイルを書き直す必要があります.) | CONF | Boundary, conf.pl |
説明文書が格納されるディレクトリ | DOC | README-j.txt, WEB-interface.html, README-j.html |
.forward, .qmailなどの設定例が格納されたディレクト | EXAMPLE | dot.forward, dot.qmail, dot.htaccess |
Perlのスクリプトの雛形とパッケージが格納されたディレクトリ(analyse.pl,header.plはここに置いておく必要あり) | PERL | analyze.pl chk.cgi filter.pl header.pl |
いわゆる makefile | Makefile |
インストールの手順 | ||
---|---|---|
順番 | 作業 | |
1 | ユーザのWEBページが格納される~/public_html以下でアーカイブされたファイルを展開してください.これによって"~/public_html/NNIPF" というディレクトリが作成される筈です. | |
2 | 下記の2つのURLからBIP.tgz, GIP.tgzをダウンロードし,NNIPFのディレクトリ内で展開し,BIP,GIPというディレクトリを作ります. http://vrl.sys.wakayama-u.ac.jp/~twada/BIP.tgz http://vrl.sys.wakayama-u.ac.jp/~twada/GIP.tgz これらは,それぞれ BAD IP, GOOD IPのデータベースを表すディレクトリです.(2007年4月15日午前1時10分以降,BIPの内容を更新しました.以前のものは,過去約10年間で一度でもスパムを送信したことのあるMTAのアドレスになっておりました.したがって,最近ではスパムを送信していないocnとかyahooのアドレスも含まれており,初めてこれらのアドレスから受け取ったメイルがスパムと誤判定されることが報告されております.これに対処するため,過去半年以内にスパムを送ったアドレスに限定したBIPに変更しました.ディレクトリの大きさは1/4以下になり,おそらく上記の誤検出も少なくなるはずです.)これらのアドレスは,予告なく変更しますので,新しいかどうかはみなさんでチェックしてみてください.NNIPFのバージョンアップ時には常に更新されています. ここまでの作業で,NNIPF直下には下記のディレクトリとファイルができている筈です.確認して下さい. BIP/ CONF/ DOC/ EXAMPLE/ GIP/ Makefile PERL/ |
|
3 | CONF/conf.pl を編集します.少なくとも$PERLはシステムにあわせて正確に書き直して下さい.また,$cgi_user, $cgi_passもCGIのユーザ名とパスワードを設定する重要なものですので,書き直して下さい. | |
4 | NNIPF直下で make を実行します.これによって,./chk.cgi, ./filter.pl, というperl script, ~/Maildir/trashというディレクトリ, .htaccess, .htpasswdができます.chk.cgiはWeb interface用のCGI,filter.plはフィルタソフトの本体です. | |
5 | 先の make で,
例えば Base MTAが,base.mta.ac.jpであり,あなたのアカウントがjimであった場合,http://base.mta.ac.jp/~jim/NNIPF/chk.cgiに,設定したユーザ名とパスワードでアクセスでき,エラーも出なければOKです.以降,このページからREADMEが読めるようになります.もし,CGIが動かなければWEBサーバの管理者に.htaccessの内容を見せて,尋ねてください. |
|
6 | ***ここは特に注意深く読んでください*** "CONF/Boundary" というファイルにはMTAOBが記載されています. 繰り返しになりますが,MTAOBとは以下のような計算機を指します.
最も良いのは,実際に受信したメイルの"Received"フィールドからあなたのMTAOBを見つけて抜き出すことです. 例えば,あなたの受信したメイルのヘッダーが以下のようなReceived行を含んでおり,178.95.4.140を特徴ベクトルとして抽出すべきであるときには, mgate.var.wakayama-u.ac.jp を"Boundary"に追加します.これは,"by"直後のスペースで区切られた文字列です.
MTAOBが複数個ある場合は,複数行にそれらを書いてください. また,似たような名前のMTAOBがある場合,hormel[1-8].ieee.orgのように,正規表現を使うことができます. MTAOBの詳しい決め方はこちらを参照してください. |
|
7 | "~/public_html/NNIPF/filter.pl" をあなたのMTAのフィルタとして設定してください. Postfix と sendmailの場合: 下記の行を .forwardに書き込んでください. | "~/public_html/NNIPF/filter.pl > /dev/null" Qmailの場合:下記の行を .qmailに書き込んでください. | ./public_html/NNIPF/filter.pl > /dev/null filter.pl は受信したメイルがスパムと判定されなかった場合,受信したメイルの内容をそのまま標準出力に吐き出します.これは,携帯への転送など他のフィルタと連動させるための仕組みです.その場合には,以下のようになります. .forward(Postfix & sendmail)の場合 | "~/public_html/NNIPF/filter.pl| some filter" .qmail(Qmail)の場合 | ./public_html/NNIPF/filter.pl| some filter EXAMPLEに設定の例がありますので,これを参考にして下さい. |
|
8 | テストメイルを自分に送り正しく受信できることを確認してください.(この段階ですでにメイルフィルタは動作しています.)もし受信できず,TRASHにも入っていない場合は,即座に使用を中止してください.この間に届いたメイルが消えてしまいます. TRASHに入った場合は,Boundaryファイルの書き方がおかしいか,あなたのメールサーバがBIPに入っている可能性があります.WEBから確認してみてください. |
|
9 | しばらく放置しておき"~public_html/NNIPF/chk.cgi"に対応するWEBページを見に行ってください.もしあなたが頻繁にスパムメイルを受けるのなら,この内容が時々刻々変化するはずです.これは特に最初の頃は毎日見る必要があります.このWEBページの操作は,WEB-interface.htmlを参照してください. |
うまく行けばこれだけで終わりです.
運用 |
---|
検出率を上げ,誤検出率を下げるコツはとにかくBoundaryファイルを正しく書くことと,トレーニングをきちんと行なうことです.これをきちんと行なっておけば,このフィルタは殆ど間違わずにスパムをブロックします.
|
[無保証]
尚,このソフトウエアの使用により被った被害については,作者は一切責任を取りませんので,使用者側で問題が生じないかどうかを十分テストをした上で運用して下さい.
[著作権]
各プログラムをご覧下さい.
2007年4月6日公開,同日0.02beta,15日0.03beta,18日0.04betaに改訂
作者:
和歌山大学 システム工学部 和田俊和(twada@ieee.org)
謝辞: 本プログラムは,平成17年度(H17-H18)和歌山大学「オンリー・ワン創成プロジェクト経費」の補助を受けて開発された.