SpamAssassinインストールメモ

概要

SpamAssassinは,Perlで書かれたSPAMフィルタです.SPAMと判断されたメールに対しオプションヘッダを追加することができます.利用者側は,SpamAssassinが付与したヘッダ情報をもとに「ゴミ箱に振り分ける」などのルールをIMAP4クライアント側などで行うことで,SPAMメールを効率的に受信箱から排除することができます.

環境

参考WWWサイト

(1) SpamAssassinを導入

# cd /usr/ports
# portinstall mail/p5-Mail-SpamAssassin

オプション選択ダイアログが出る."DomainKeys support"や"Add SPF query support"がそそるが,動作の詳細を(私が)理解していないため,ここでは選択せず.デフォルトの以下の選択肢ままOKする.

(2) インストールされたファイル群の確認

# pkg_info -L /var/db/pkg/p5-Mail-SpamAssassin-3.1.8_1/
Information for p5-Mail-SpamAssassin-3.1.8_1:

Files:
/usr/local/man/man1/spamd.1.gz
/usr/local/man/man1/spamassassin.1.gz
/usr/local/man/man1/spamc.1.gz
/usr/local/man/man1/sa-learn.1.gz
/usr/local/man/man1/sa-update.1.gz
/usr/local/man/man1/spamassassin-run.1.gz
  :

manもきちんと入っている.その他,各種ドキュメントの配置状況も確認しておく.
設定ファイル群は /usr/local/etc/mail/spamassassin 以下に入っているようだ.

(3) マニュアルページの確認

# man spamassassin

以下のようなことがわかる.

  • 設定ファイルの書式を確認するには man Mail::SpamAssassin::Conf
  • spamassassin-runはフロントエンド・フィルタリング・スクリプト
  • spamcは,spamdのクライアント
  • spamdがSpamAssassinのサーバ
  • 設定ファイルを検索するパス
    • おおむね直感的な検索順になっている
  • インストール方法は "INSTALL" を読め,とのこと.
# lv /usr/local/share/doc/p5-Mail-SpamAssassin/INSTALL
  • Step.4: procmailが必要,とのこと.

(4) procmailのインストール

# cd /usr/ports/
# portinstall mail/procmail/

dfltweb1.onamae.com – このドメインはお名前.comで取得されています。を参考に,procmailrcを書く.

/usr/local/etc/procmailrc
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmail.log
# 弊サイトはMaildirでの運用であるため,LOCKFILEの設定は削除
# LOCKFILE=$HOME/.lockmail

:0fw
*!^X-Spam.*
|/usr/bin/env LANG=C LC_ALL=C /usr/local/bin/spamc

弊サイトではprocmailrcの詳細については扱わない.詳しく知りたい人は以下をどうぞ.

(5) 設定ファイルを編集 (SmapAssassin)
http://tlec.linux.or.jp/topic.htmlに,とてもよくメンテナンスされているすばらしい定義ファイルがあります.今回はこれを使わせていただくことにします.

# cd /usr/local/etc/mail/spamassassin
# fetch -o local.cf http://tlec.linux.or.jp/docs/user_prefs

続いて,local.cfの先頭部分に以下の行を追加.

use_bayes 0
rewrite_header Subject [SPAM]
required_score 8.0
allow_user_rules 0

ifplugin Mail::SpamAssassin::Plugin::AWL
auto_whitelist_path /var/db/spamassassin/auto-whitelist
auto_whitelist_file_mode 660
endif

弊サイトでは,SpamAssassinの持つベイジアンスパムフィルタは使いたくない,というポリシのため,local.cfの1行目に"use_bayes 0"を追加した.これによりベイジアンスパムフィルタは無効になる.このあたりは各自お好みで.

SpamAssassin用のデータディレクトリを掘っておく.auto-whitelistもtouchしておく.

# mkdir /var/db/spamassassin
# chown spamd:spamd /var/db/spamassassin
# chmod 770 /var/db/spamassassin

# touch /var/db/spamassassin/auto-whitelist
# chmod 660 /var/db/spamassassin/auto-whitelist
# chown spamd:spamd /var/db/spamassassin/auto-whitelist
# /usr/local/etc/rc.d/sa-spamd.sh start

(6) 起動ファイルを確認 (SmapAssassin)

# cd /usr/local/etc/rc.d/
# lv sa-spamd.sh

以下のことがわかる.

  • spamd_enable="YES" を/etc/rc.confに追加する必要がある

(7) /etc/rc.confを編集

spamd_enable="YES"
spamd_flags="-u spamd -g spamd "

spamd_flagsに "-c" の指定がある(デフォルト)状態だと,勝手にユーザのホームディレクトリ以下にuser_prefsを生成するようである.私は気持ち悪い動作だと感じるので外した.また,"-u" や "-g" フラグなしの状態だと,nobodyにsetuidして動くようである.このあたりはお好みで.

(8) SpamAssassinを起動

# /usr/local/etc/rc.d/sa-spamd.sh start
Starting spamd.

無事に起動したか確認.

# ps xa | grep spamd
16024  ??  Ss     0:01.07 /usr/local/bin/spamd -c -d -r /var/run/spamd/spamd.pi
16025  ??  S      0:00.00 spamd child (perl5.8.8)
16026  ??  S      0:00.00 spamd child (perl5.8.8)

/var/log/maillogも見ておく."ok_languages"のあたりでエラーが出ているようなので,該当行をコメントにしておく.編集が終わったら,SpamAssassinを再起動.

# /usr/local/etc/rc.d/sa-spamd.sh restart
Stopping spamd.
Waiting for PIDS: 16024.
Starting spamd.

(9) 設定ファイルを変更 (Postfix)
まず,Postfixの設定を確認する.

# postconf mailbox_command
mailbox_command =
#

mailbox_commandの設定が空であることを確認したら,main.cfに以下の行を追加する.

mailbox_command = /usr/local/bin/procmail

(10) Postfixへ設定変更を反映

# postfix reload
postfix/postfix-script: refreshing the Postfix mail system

設定が反映されたことを確認.

# postconf mailbox_command
mailbox_command = /usr/local/bin/procmail

この状態で,SpamAssassinが有効になっているはずである.

(11) 動作確認
以下のコマンドでSMTPサーバの出すログを監視する.

# tail -f /var/log/maillog