The ULTIMATE spam Filter NNIPF(Nearest Neighbor IP address based mail Filter) Version 0.10
★このドキュメントは,Linuxやメイルの配送システム等に詳しい上級者向けに書かれています.内容が理解できない場合は,詳しい人にインストールしてもらってください.素人によるインストールはおそらく不可能です.

インストール方法

NNIPF.tgzの中身
説明 名前 中身
設定ファイルが置かれたディレクトリ(conf.plを書き直す必要があります.) CONF Boundary, conf.pl,Params
説明文書が格納されるディレクトリ 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 NNIPF.pm chk.cgi filter.pl
いわゆる makefile.これも書き直す必要あり. Makefile
TIPS: こじまさん情報
NNIPF の BIP/GIP のデータがかなりディスクを消費する件ですが,ext3 系のファイルシステムの場合もブロックサイズを小さくした専用のファイルシステムを用意することである程度回避することが可能です.

具体的には,
1) 100MB くらいの空のファイルを作り (dd if=/dev/zero of=minifs bs=1M count=100)
2) ブロックを1024バイト単位でフォーマット (mke2fs -b1024 -i1024 -m0 minifs)
3) 作成した fs を loopback でマウント (mount minifs /home/kojima/public_html/NNIPF -o loop)
4) NNIPF をインストール
# 3) の部分は root 権限が必要になります.

みたいな感じでやれば,かなり小さくて済みます.手元では
172M public_html/NNIPF.old/BIP (通常の ext3 fs 上)
46M public_html/NNIPF/BIP (専用の minifs 上)
ぐらいになりました.
インストールの手順
順番 作業
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の内容を更新しました.)これらのアドレスは,予告なく変更しますので,新しいかどうかはみなさんでチェックしてみてください.

ここまでの作業で,NNIPF直下には下記のディレクトリとファイルができている筈です.確認して下さい.
BIP/ CONF/ DOC/ EXAMPLE/ GIP/ Makefile PERL/

【複数人で使用する場合】
上記URLからBIP,GIPのデータを適当なディレクトリに展開します.そして,それらの場所をCONF/conf.pl中の$MBADIPと$MGOODIPに書いておきます.この場合のホームディレクトリの様子は下記の通り
CONF/ DOC/ EXAMPLE/ Makefile PERL/
3 Makefile中のCGI_USER ,CGI_PASSWD,PERL,MYBIP,MYGIP,MASTERBIP, MASTERGIP, BOUNDARY, PARAMS, MAILDIR, TRASH, NEW , CUR, TMP, OPTなどを書き直してください.
特にPERLはシステムにあわせて書き直さないと動きません.また,CGI_USER, CGI_PASSWDもCGIのユーザ名とパスワードを設定する重要なものですので,書き直して下さい.

CONF/conf.pl を編集します.これはOPTでSmtp,ANONYMOUSなどを指定しなければ直す必要はありません.
4 NNIPF直下で make を実行します.これによって,./chk.cgi, ./filter.pl, というperl script, ~/Maildir/trashというディレクトリ, .htaccess, .htpasswdができます.chk.cgiはWeb interface用のCGI,filter.plはフィルタソフトの本体です.2のステップで,【複数人で使用する場合】を選択した人は,この段階でNNIPFのディレクトリにBIPとGIPができます.
5 先の make で,
  • ~/public_html/NNIPF/以下でchk.cgiが動作するWEBサーバの設定
  • chk.cgiを他人に悪用されないようにパスワードでガードすること
の2つは設定された筈ですが,確認を忘れないで下さい.特に~/Maildir以下のファイルにアクセスするので,そのユーザ権限でchk.cgiが動く必要があります.このため,あなたのWEBサーバがsuEXEC環境をサポートしている必要があります.
【確認方法】
例えば 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の改竄を行なわない信頼できるホスト
  • メイリングリストのサーバなどで,直接スパムメイルを受ける可能性のあるホスト
  • メイルのフォワードサービスなどに用いている信頼できるホストで,直接スパムを受ける可能性があるホスト
しかし,あなたのあやふやな記憶でこのファイルを作らないで下さい.
最も良いのは,実際に受信したメイルの"Received"フィールドからあなたのMTAOBを見つけて抜き出すことです.
例えば,あなたの受信したメイルのヘッダーが以下のようなReceived行を含んでおり,
178.95.4.140を特徴ベクトルとして抽出すべきであるときには,
mgate.var.wakayama-u.ac.jp
を"Boundary"に追加します.これは,"by"直後のスペースで区切られた文字列です.
Received: from msr40.hxnet.net (msr40.hxnet.net [178.95.5.140])
by
mgate.var.wakayama-u.ac.jp (8.13.6/8.13.6) with ESMTP id l31C8n6J010000
for <foo@var.wakayama-u.ac.jp>; Sun, 1 Apr 2007 21:10:50 +0900

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ファイルを正しく書くことと,トレーニングをきちんと行なうことです.これをきちんと行なっておけば,このフィルタは殆ど間違わずにスパムをブロックします.
  • WEBページ上での操作方法に関しては,"WEB-interface.html"をご覧下さい.
  • Version0.02-betaから,BoundaryファイルをWebから修正できるようにしました.
  • NNIPFは,現在のところMaildir形式でメイルを蓄積するように設定した postfixとqmailで,popを使う場合に動作は確認しております.imapでも動作するはずですが,確認できておりません.

[無保証]
尚,このソフトウエアの使用により被った被害については,作者は一切責任を取りませんので,使用者側で問題が生じないかどうかを十分テストをした上で運用して下さい.

[著作権]
各プログラムをご覧下さい.

2007年4月6日0.o1beta公開,同日0.02beta,15日0.03beta,18日0.04betaに改訂,21日早朝0.05beta,23日0.06-release,25日0.07-fix,26日0.07-fixfix,0.07-final,28日0.08,5月11日0.09,11月1日0.10
作者:
 和歌山大学 システム工学部 和田俊和(twada@ieee.org)