Copyright (C) 2003 (有)小金丸コンピュータエンジニアリングサービス
	Copyright (C) 2003, N. Koganemaru

	ネットニュースから spam 記事を取り除く

					修正日	平成15年(2003年)10月16日 (木)
					小金丸信幸

1. はじめに
	ネットニュースは近年あまり使われなくなってきましたが、逆に spam 記
	事は多くなってきており、ニュースを購読する上で spam を読み飛ばすこ
	とも煩わしくなっています。

	本コマンド群はニューススプールのディレクトリから spam 記事を取り除
	くものです。

	INN-2.0 以降で導入された、新しい保存形式には対応していません。従来
	どうり(traditinal)の個別ファイルで保存する方法のみ対応しています。

	o SpamRcMake はニューススプールディレクトリや spam 記事を移動させ
	  るディレクトリ等を指定します。SpamRcMake の結果は
	  $HOME/.spamcheckrc ファイルに格納されます。.spamcheckrc ファイル
	  は perl 言語で読み込まれます。perl 言語の記述形式であれば手動で
	  自由に修正することもできます。
	o SpamCheck は実際に spam 記事を取り除きます。
	o SpamBack は spam 記事と認識されたファイルを通常の記事として元に
	  戻すために使用します。

	spam かどうかのチェックは主に日本語でないということで、チェックして
	います。従って spam 記事でない英語の記事も spam と判定されます。

	従って、本コマンドは主に fj ニュースグループで使われることを前提と
	しています。

	fj.life.in-japan のように英語が主に使われているアーティクルの spam
	チェックを行わないように指定することもできます。

	チェック法は次の通りです。
	1) 全て 7 ビットの記事(ただし 8 ビットが 4 文字以上続かない記事も
	   含める)。
	2) ^[(ESC) 文字がない。
	3) From: の中に .jp がない。
	4) NNTP-Posting-Host: の中に .jp がない。
	上記の条件が同時に成立した記事を spam と判定しています。

	その他、指定された From: のアドレス、指定された Message-ID: の ID、
	指定された NNTP-Posting-Host: のアドレスと(一部分でも)一致した場
	合は spam 記事とすることもできます。

	コマンドはニューススプールディレクトリや spam 記事を移動させるディ
	レクトリを読み書きできるパーミションがあるユーザーで実行する必要が
	あります。

	spam 記事はファイルの inode 番号をファイル名にして保存されます。従
	って、ニューススプールディレクトリと spam 記事を移動させるディレク
	トリは同じファイルシステムになければなりません。そしてニューススプ
	ールディレクトリが2つ以上のファイルシステムで構成されるような場合
	は本コマンドは使用できません。ただし spam 記事を元に戻す必要がなけ
	れば、使ってもかまいません。

	SpamCheck に W32.Swen.A@mm ワームのチェックを追加しました。
	判断方法はファイルサイズが 140000 バイト以上で、本体に
	/"October 2003, Cumulative Patch" update/ か
	/"September 2003, Cumulative Patch" update/ か
	/"September 2001, Cumulative Patch" update/ が含まれいることです。
	条件に一致すれば、日本語シーケンスが含まれている、いないに関わらず
	全て spam として処理されます。

	W32.Swen.A@mm ワームについては次の URL を参照してください。
	http://securityresponse.symantec.com/region/jp/sarcj/data/w/w32.swen.a@mm.html

2. コマンド形式

    1) .spamcheckrc ファイルを作成する.

	使用法: SpamRcMake

	実行例:
	% SpamRcMake
	ニュース spool ディレクトリ を指定してください。
	/var/spool/news でよいですか(y/n)?>y
	チェックするニュースグループを入力してください
	fj(y/n)?n
	追加ニュースグループ>fj
	追加ニュースグループ>japan
	追加ニュースグループ>
	SPAM 管理用ディレクトリ を指定してください。
	/var/spool/spam でよいですか(y/n)?>y
	SPAM 記事を移すディレクトリ を指定してください。
	/var/spool/spam/out でよいですか(y/n)?>y
	ログファイル を指定してください。
	/var/spool/spam/LOG でよいですか(y/n)?>y
	詳細ログファイルを指定しますか?
	詳細ログファイルはファイルサイズが大きくなります(y/n)n
	時刻判定タグファイル を指定してください。
	/var/spool/spam/TAG でよいですか(y/n)?>y
	1つ前の時刻判定タグファイル を指定してください。
	/var/spool/spam/TAG2 でよいですか(y/n)?>y

	% cat .spamcheckrc
	$NEWSSPOOL='/var/spool/news';	# ニュース spool ディレクトリ
	@NEWSGROUPS=('fj', 'japan');
	$SPAMDIR='/var/spool/spam';	# SPAM 管理用ディレクトリ
	$SPAMSPOOL='/var/spool/spam/out';	# SPAM 記事を移すディレクトリ
	$logfile="$SPAMDIR/LOG";	# ログファイル
	undef($logfile_detail);
	$tagfile="$SPAMDIR/TAG";	# 時刻判定タグファイル
	$tagfile2="$SPAMDIR/TAG2";	# 1つ前の時刻判定タグファイル


    2) ネットニュースから spam 記事を取り除く

	使用法: SpamCheck [-1] [-a] [-d] [-b] [-n] [-r] [-t] [-v]
		[-e name [-e name ...]]
		[-f spamer_file [-f spamer_file ...]]
		[-m message_id_file [-m message_id_file ...]]
		[-p nntp_name] [file ...]

	-1 チェックを -f、-m と -p だけにします。
	   (ヘッダー中のメッセージ ID、From: のメールアドレスと
	   NNTP-Posting-Host: のアドレスのみをチェックします。)
	-a Form: 行の .jp を spam 記事から外さずに全てチェックします。
	-b NNTP-Posting-Host: 行の .jp を spam 記事から外さずに全てチェッ
	   クします。
	-d 判断の理由と結果を表示します。
	-n ファイル名を表示します。
	-r 1つ前の時刻判定タグ以降の記事をチェックします。新しい条件でもう
	   一度 spam 記事を削除する場合に指定します。
	-t テストモード。
	   spam 記事を移すディレクトリ($SPAMSPOOL)に記事を(リンクによって)
	   移すが元の記事を削除しません。時刻判定タグファイル($tagfile)も
	   設定しません。もう一度実行するなら、spam 記事を移すディレクトリ
	   ($SPAMSPOOL)中のファイルを手動で削除した後に実行してください。
	-v 判断の結果を表示します。
	-e で指定した文字列が file のパス名に含まれていた場合、spam 記事で
	   ないとします。特別のニュースグループ例えば sources や
	   life.in-japan は全て spam 記事でないとするような場合に使用しま
	   す。
 	   % SpamCheck -e sources -e life.in-japan
 	   .spamcheckrc で指定する場合は
 	   @etbl = (
 	   'sources',
 	   'life.in-japan',
 	   );
 	   と指定できます。
	-f spamer_file 特定のメールアドレスから出た記事を spam 記事とみな
	   します。指定した文字列の一部が含まれていても spam と見なされま
	   す。ファイルの内容は 1 行 1 メールアドレスを記述します。
	   % cat spamer_file
	   badman@rrrc.tttttt.ac.jp
	   xxxx@yyyy.co.jp
	   .spamcheckrc ファイルでも指定できます。下記の .spamcheckrc の説
	   明を参照してください。
	-m メッセージ ID が含まれたファイルを指定して、このメッセージ ID
	   が見つかれば spam とします。指定した文字列の一部が含まれていて
	   も spam と見なされます。
	   .spamcheckrc ファイルで指定する場合は @msgid テーブルを使用しま
	   す。
	-p 指定した NNTP-Posting-Host: の記事を削除します。
	   指定した文字列の一部が含まれていても spam と見なされます。
	   .spamcheckrc ファイルで指定する場合は $nntp_name 変数を使用しま
	   す。
	file 指定したファイルをチェックします。ニューススプールはチェック
	   されません。1 ファイルの場合は必ず -d か -v フラグを指定してく
	   ださい。標準入力の場合は - を指定します。
	   % SpamCheck -d <file とするとニューススプールをチェックしてしま
	   うので注意してください。
	   % SpamCheck -d - <file と指定してください。

	$HOME/.spamcheckrc ファイルがあれば、まずそのファイルを読み込んで
	   実行します。
	   例えば spamer のメールアドレスがわかっているのであれば、
	   % cat .spamcheckrc
	   @badman = (
	   'badman@xxx.com',
	   );
	   とすることができます。
	   $flag_n = 1;	# -n オプション
	   $flag_v = 1;	# -v オプション
	   を入れてもかまいません。

    3) spam 記事として記事を移したディレクトリから元に戻す

	使用法: SpamBack ino_file ...

	spam 記事を移すディレクトリに移動して、元に戻すファイルを指定しま
	す。

	実行例:
	% cd /var/spool/spam/out
	% ls
	100641	15718	23280	31187	31310	38668	464	54148	61699
	100648	15719	23289	31188	31312	38673	46517	54158	61709
	100649	15720	23290	31190	31313	38675	46518	54160	61731
	100661	15721	23291	31201	31314	38713	46519	54177	61813
	100668	15722	23292	31203	31315	38717	46520	54178	61814
	100669	15724	23294	31206	31336	38718	46530	54235	61815
	....
	% SpamBack 15718 15719

3. .spamcheckrc について

	.spamcheckrc がなければ次のような設定と同じと見なされます。

	---- ここから ----
	# SpamCheck 用設定ファイル
	#

	@NEWSGROUPS = ('fj');

	$NEWSSPOOL = '/var/spool/news';		# ニュース spool ディレクトリ
	$SPAMDIR = '/var/spool/spam';		# SPAM 管理用ディレクトリ
	$SPAMSPOOL = '/var/spool/spam/out';	# SPAM 記事を移すディレクトリ

	$logfile = "$SPAMDIR/LOG";		# ログファイル
	#$logfile_detail = "$SPAMDIR/detail-spam.log";	# 詳細ログファイル
	$tagfile = "$SPAMDIR/TAG";		# 時刻判定タグファイル
	$tagfile2 = "$SPAMDIR/TAG2";		# 1つ前の時刻判定タグファイル
	---- ここまで ----

	詳細ログファイルを指定すると spam を移動される時に詳細な情報が出力
	されます。ファイルが大きくなりすぎますので、通常は指定しないほうが
	よいでしょう。

4. 使用ノウハウ

    1) SpamCheck 済みのニュースで spam と認識できなかった記事を取り除きた
       い時には -r オプションを使って、もう一度チェックできます。

	次の例は spam ではじけなかった記事の NNTP-Posting-Host: の値を指定
	して取り除く方法です。

	% SpamCheck -r -p 10.20.31.4

	これで、
	NNTP-Posting-Host: 10.20.31.4
	が含まれる記事を spam として移動できます。

    2) 1つ前でない古い記事をもう一度チェックしたい場合は時刻判定タグファ
       イルの時刻を touch コマンドで変更すれば、もう一度チェックできます。

	% cd /var/spool/spam
	% touch -t 0304010001.00 TAG
	TAG ファイルの時刻を 2003年4月1日00時01分00秒に設定します。

	% SpamCheck -f badman@rrrr.com

	これで
	From: badman@rrrr.com
	が含まれる記事を spam として移動できます。

    3) ログファイルを自動的に小さくできません。

    	ログファイルは spam として移動したファイルの情報が含まれています。
    	これは SpamBack で参照されます。大きくなりすぎたログファイルはエデ
    	ィタを使って古い時刻の部分を削除できます。

    	spam 記事として移動されたファイルを SpamBack で元に戻せなくなりま
    	すが、削除してもかまいません。

    4) spam 記事として移動されたファイルを本当に削除するには spam 記事を移
       すディレクトリに移動して rm コマンドで削除してください。

       全て削除するなら SpamRm コマンドが使えます。

       % SpamRm
       spam 移動ディレクトリに移動された spam 記事を全て削除します。
       よろしいですか(y/n)?y

       -f オプションを指定すると問い合わせなしに spam 記事を全て削除します。
       % SpamRm -f

4. 改版履歴
    1. 作成日	平成15年(2003年)04月21日 (月)
    	新規作成
    2. 修正日	平成15年(2003年)10月02日 (木)
	新しい INN-2.0 以降で導入された、新しい保存形式に対応していないこと
	を明記。
    3. 修正日	平成15年(2003年)10月16日 (木)
	SpamCheck に W32.Swen.A@mm ワームのチェックを追加。
	SpamRm に -f オプション追加。
以上.