未読メール2万3千通をなんとかする『spamassassin』

放っておいたらメールボックスに未読メールが2万3千通入ってた。

現状1日に500~700通ほどのspamを受信している。10年程度使用しているアドレスだけど、これは少ない方かもしれない。

メールの利用度が昔ほど高くないので、何の対策もせず、たまーにクライアントでフィルタリングして必要なメールだけ読んでいるのでそれほど不自由していないが、spamassassinを試してみることにする。

spamassassinとprocmailを用い、spamと判断したメールはis_spamフォルダに振り分けることとした。なお、メールの環境はIMAPを利用していて(dovecot)、メールが保存されるディレクトリはユーザフォルダに存在する。

備忘録としてクイックセッティングを記す。もちろんprocmailとspammassassinはインストール済みである。

procmailのレシピ。

X-Spamヘッダのないメールをspammassassinに渡し、spamと判断されstatusがYesとなったメールをis_spamフォルダへ振り分けるレシピである。

~/.procmailrc

:0fw  
*!^X-Spam.*  
|/usr/bin/spamc  
  
:0:  
* ^X-Spam-Status: Yes  
/home/piyo/Maildir/.is_spam/

.forwardファイルは以下。”piyo”の部分はアカウントである。

~/.forward

“|IFS=’ ‘ && exec /usr/bin/procmail -f- || exit 75 #piyo”

spamassassinのログを別途吐き出すよう設定。

/etc/sysconfig/spamassassin

#vi /etc/sysconfig/spamassassin  
  
SPAMDOPTIONS=”-d -c -m5 -H”  
上記を以下に変更  
SPAMDOPTIONS=”-d -c -m5 -H -s /var/log/spamd.log”

spamassassinの自動起動設定。

# chkconfig spamassassin on

local.cfの編集。

# vi /etc/mail/spamassassin/local.cf  
以下を追加  
allow_user_rules 1

ユーザ定義ファイルuser_prefsの取得と編集(日本語メール対応版)

$ cd ~/.spamassassin/  
$ wget http://tlec.linux.or.jp/docs/user_prefs  
$ vi user_prefs  
以下追加  
report_safe 0	# spamを添付メールとしない  
  
# 他ユーザと共有する学習ファイルのセッティング  
bayes_path /etc/mail/spamassassin/bayes/bayes  
bayes_file_mode 0666  
auto_whitelist_path /etc/mail/spamassassin/bayes/auto-whitelist  
auto_whitelist_file_mode 0666  
  
# データベースの肥大化対策  
bayes_expiry_max_db_size 1000000  
  
# データベースがこの値の75%に達するとエクスポートが必要と判断される  
bayes_auto_expire 0

エクスポートはcronによって行うため、自動エクスポート機能を無効化しておく

共有フォルダを作成してspamassassinを再起動

# mkdir -p /etc/mail/spamassassin/bayes  
# chmod 777 /etc/mail/spamassassin/bayes  
# /etc/rc.d/init.d/spamassassin restart

データベースのエクスポート処理をcronでスケジューリング

0 5 * * * /usr/bin/sa-learn –sync –force-expire > /dev/null 2>&1

手動による学習。ご認識されたメールを手動で学習させる方法。
 ハムなのかスパムなのかを学習させるために、メールボックス内でlearn-hamとlearn-spamというフォルダを作成。

「これはハムです」

$ sa-learn –ham ~/Maildir/.learn-ham  
$ sa-learn –sync

「これはスパムです」

$ sa-learn –spam ~/Maildir/.learn-spam  
$ sa-learn –sync