Fetchmail を使って、spamassassinによるフィルタリングをする
プロバイダからメールアドレスを一つもらって、宅内サーバを運営していると、そのめーるもほしくなりませんか?
また、そのメールがSPAMだったら悲しい出来事です。
そこで、勝手にメールを取ってきて、SPAMチェックまでしてくれる方法を考えてみました。よければどうぞ!! ∈^0^∋


Spamassassinファイルと各バージョン
	spamassassin-2.55-0vl2
	spamassassin-tools-2.55-0vl2
	perl-Mail-SpamAssassin-2.55-0vl2

Fetchmailファイルと各バージョン
	fetchmail-5.9.11-0vl1
	fetchmailconf-5.9.11-0vl1

Procmailファイルと各バージョン
	procmail-3.22-0vl2

1:Procmailの設定
	Procmailはメールが来たときに動作する。よってトリガーは特に設定がない。
	spamassassinが起動するとき「--auto-whitelist(-a でもよい)」をつけると自動的にホワイトリストを作成する。
	
	各ユーザごとに設定する。
	ファイル保存場所 = $HOME/.procmailrc
	
		VERBOSE=off
		MAILDIR=/var/spool/mail
		PMDIR=/var/log/procmail
		LOGFILE=$PMDIR/$LOGNAME.log

		:0fw
		| /usr/bin/spamassassin --auto-whitelist

		# Spam Check
		:0:
		* ^X-Spam-Status: Yes
		! spam@mail.desu           # メールに送る場合
		/home/hogehoge/spam.txt    # ファイルに残す場合   どちらかを「#」にてコメントアウトすること

2:spamassassin全体の設定

	ファイル保存場所 => /etc/mail/spamassassin/local.cf

	local.cf を設定する。今回はHIT POINTは6点でスパム認定
	最後の行は、ホワイトリストの所在地。local.cfで設定するとネットワーク全体のホワイトリストが完成する。

		# This is the right place to customize your installation of SpamAssassin.
		# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
		# tweaked.
		#
		###########################################################################
		#
		#rewrite_subject 0
		#report_header 1
		#defang_mime 0
		ok_languages ja en
		ok_locales ja en

		required_hits 6
		full RAZOR_CHECK
		describe RAZOR_CHECK

		score NAME_OF_TEST 3.0
		score CASHCASHCASH 0.00
		score UPPERCASE_25_50 0.00
		score UPPERCASE_50_75 0.00
		score UPPERCASE_75_100 0.00
		score US_DOLLARS_2 0.00
		score HTTP_CTRL_CHARS_HOST 0.00

		auto_whitelist_path   /etc/mail/spamassassin/auto-whitelist

3:spamassassinの個別設定を行う
	
	ファイル保存場所 => $HOME/.spamassassin/
	
	各ユーザのホームディレクトリに .spamassassin のディレクトリを作成する。
	ここに、SPAMと判定する文字を入力して、ポイントを設定する。
	デフォルトは、 /etc/doc/spamassassin/sample-japanese.cf をコピーして user_prefs と名前を変更する。
	
	簡単カスタマイズ
	 ★日本語をそのまま使うことはできないのでS-JISをJISに変更する必要がある。
		変更ツールとして、
			旧 echo 'Japanese spam keyword' | nkf -j | od -t a
			echo echo 'サンプル' | nkf -j | awk '{gsub(/\x1B[$(]B/,"");print}'   <- こっちの方がいいそうです 参考ぷらぷらブログさん
		と、コマンド入力をする。 Jananese spam keyword に日本語を入力する。
		
		(例 1)件名に「未承認」があればPOINTを与えたい場合
			$ echo '未承認' | nkf -j | od -t a
			0000000 esc   $   B   L   $   >   5   G   ' esc   (   B  nl
			0000015
			
			頭と最後の3文字ずつ削る => L   $   >   5   G   '
			ここからスペースを除く  => L$>5G'
			
			<<注意>> $|>.,等はコマンドとして成立するので「¥」を前に入れて無効化しておく
			
			件名は subject なので、メールヘッダーにあるからチェック場所を指定する
			10POINTを与える
			
			header MISYOUNIN Subject =~ /L\$>5G'/
			describe MISYOUNIN Misyonin
			score MISYOUNIN 10.0
		
	 ★ドメインをホワイトリストに載せたい場合(自分の会社を設定したりする)
			whitelist_from  *@hogehoge.gr.jp
		
		(例 2)文書内容に「合法ドラッグ」があればPOINTを与えたい場合
			日本語をJISに変換するのは上の同じ。
			300POINTを与える(ホワイトリストは大体-100POINT)
			
				body GOUHOUDRAG /9gK!%I%i%C%0/
				describe GOUHOUDRAG Gouhou Drag
				score GOUHOUDRAG 300.0
		
	 ★個別にホワイトリストを作る
			個別にホワイトリストを作る場合は、user_prefsの最後に
			
			auto_whitelist_path	/home/hogehoge/.spamassassin/auto-whitelist
			とすればできあがる。

4:Fetchmailの設定をする

	ファイル保存場所 => $HOME/.fetchmailrc

	Fetchmailは違うサイトのメールを取得してきてくれる。そのときに、こちらにあるSpamassassinで
	SPAMチェックができれば便利がよい。
	
		set daemon 7200							# 起動しておけば2時間おきにチェックする。デーモン管理になる
		set nobouncemail						# エラーメールを送信者に転送しないための設定

		poll pop.hogehoge.gr.jp					# popサーバ
		protocol pop3							# pop3 か imap などプロトコル指定
		user "hoge"								# ユーザ名
		password "hoge"							# パスワード 平文で丸見えである
		flush									# メールを残さない。残したい場合は keep
		no mimedecode							# メールサブジェクトが文字化けしないため(サブジェクトをデコードしないよう)に記述
		mda "/usr/bin/procmail -d hoge"			# 受信したメールをProcmailに送る。ユーザを -d にて指定する

4-2:Fetchmailをcronで動作させるとき(メモリ節約タイプ)
	Fetchmailをデーモンではなくcronで動作させる場合
		0 */2 * * * /usr/bin/fetchmail > /dev/null
		これで2時間ごとに動作する。分の所を*にすると、0分~59分まで連続起動するので必ず指定する

2003/05/27 記述
2005/03/07  フレーズを作るところに加筆


Let's PC の Topに戻る
ホームページのTopに戻る