■spamassassinでヘッダ情報に「X-Spam」を追加する
※clamavとamavisd-newを導入済みの環境であることが前提
「clamassassin」もあるのだが、定番の「spamassassin」にした。
また、postfix連携とprocmail連携があるが、今回は後者とした。
Squeezeにclamavを導入。EICARチェック
http://d.hatena.ne.jp/labunix/20120423
squeezeのclamavとpostfix連携(amavis)
http://d.hatena.ne.jp/labunix/20120430
参考:Clamavとの連携
http://www.server-world.info/query?os=Debian_6.0&p=mail&f=6
■「spamassassin」の導入
※spamcはspamassassinと一緒にインストールされます。
インストール直後は無効になっています。
$ sudo apt-cache show spamassassin | grep -A 10 ^Description
Description-ja: テキスト分析を使った Perl ベースの spam フィルタ
SpamAssassin は非常にパワフルで機能豊富な spam フィルタであり、ホワイトリスト
の自動作成、RBL テスト、ベイジアン分析、header および body のテキスト分析を
含む数多くの機能を持ちます。
ユーザの .procmail 又は .forward ファイルから呼び出されるように設計されて
いますが、メール配送エージェント (MTA) への統合も可能です。
.
本パッケージに含まれるプログラムは、デーモン化された形式の spamassassin
(spamd) であり、TCP 経由でクライアント (spamc) と通信することにより、
各メッセージに対してそれぞれ perl を呼び出すオーバーヘッドを削減しています。
この利点を活用するには、spamc パッケージをインストールすべきです。
$ sudo apt-get install -y spamassassin
$ grep -B 1 ENABLED /etc/default/spamassassin
ENABLED=0
■「/etc/procmailrc」で全ユーザに適用
※一度「~/spam」ディレクトリの設定が正常に動作するか確認する為に「No」にしてある点に注意。
$ sudo cat /etc/procmailrc
LOGFILE=$HOME/procmail.log
LOCKFILE=$HOME/.lockfile
MAILDIR=$HOME/
0fw
*!^X-Spam.*
|spamassassin
0
* ^X-Spam-Status: No
$MAILDIR/spam/
■サンプルファイルでテスト
$ uuencode /usr/share/doc/spamassassin/examples/sample-spam.txt "spam.txt" | \
mail -s "spam" `whoami`@nextsqueeze.localdomain
$ grep ^X spam.txt
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
X-Spam-Level:
X-Spam-Status: No, score=0.6 required=5.0 tests=ALL_TRUSTED,DKIM_ADSP_NXDOMAIN,
X-Original-To: labunix@nextsqueeze.localdomain
X-Virus-Scanned: Debian amavisd-new at nextsqueeze.localdomain
■「spam」ディレクトリに保存された
※合わせてディレクトリも自動的に作成される
$ sudo find spam -type f -exec ls -l {} \;
-rw------- 1 root mail 2409 2012-05-01 03:16 spam/new/1335809793.10270_1.nextsqueeze
$ ls -ld spam/*
drwx------ 2 root mail 4096 2012-05-01 03:16 spam/cur
drwx------ 2 root mail 4096 2012-05-01 03:16 spam/new
drwx------ 2 root mail 4096 2012-05-01 03:16 spam/tmp
■「^X-Spam-Status: Yes」にレシピを変更
※「procmailrc」の設定変更後にpostfixから呼ばれた際に有効になる為、再起動は無い。
$ sudo cat /etc/procmailrc
LOGFILE=$HOME/procmail.log
LOCKFILE=$HOME/.lockfile
MAILDIR=$HOME/
0fw
*!^X-Spam.*
|spamassassin
0
* ^X-Spam-Status: Yes
$MAILDIR/spam/
■閾値のチェック
$ sudo find /etc/spamassassin/ -type f -exec grep -i score {} \;
score D_SENT_BY_DEBCONF -5.0
score D_SENT_BY_AFBACKUP -5.0
score D_SENT_BY_APTLC -5.0
score D_SENT_BY_ANACRON -5.0
score D_SENT_BY_CRON -5.0
■spamassassinの設定チェック
※一度目は権限が不足しているので、「sudo」で実行しなおしている。
設定変更は行っていない。
$ test "`spamassassin --lint 2>&1 | wc -l`" -eq "0" && echo "ok"
$ test "`sudo spamassassin --lint 2>&1 | wc -l`" -eq "0" && echo "ok"
ok
■設定変更については以下を参照
参考:SpamAssassinの基本設定
http://emaillab.jp/spamassassin/basic_configuration/
■既存のルールの確認
※treeコマンドである必要は全く無いのだがw。。。
「-P」オプションでパターン検索できる等、ちょっと面白いので入れてみた。
$ sudo apt-get install -y tree
$ tree -P local.cf /var/lib/spamassassin/
/var/lib/spamassassin/
└── 3.003001
└── updates_spamassassin_org
└── local.cf
2 directories, 1 file
■アップデートチェック
※以下ではまずディレクトリ名が異なることだけを報告している。
$ sudo sa-update -D --updatedir /tmp/update && echo "ok"
$ tree /var/lib/spamassassin/3.003001/updates_spamassassin_org > old.txt
$ tree /tmp/update/updates_spamassassin_org > new.txt
$ diff new.txt old.txt 1c1
< /tmp/update/updates_spamassassin_org
---
> /var/lib/spamassassin/3.003001/updates_spamassassin_org
■md5sumで出力してjoinした後に、md5sum値と旧ファイル名を取り出し、スペースを無視してdiffチェック。
$ find /tmp/update/updates_spamassassin_org -type f -exec md5sum {} \; > new_md5sum.txt
$ find /var/lib/spamassassin/3.003001/updates_spamassassin_org -type f -exec md5sum {} \; > old_md5sum.txt
$ join new_md5sum.txt old_md5sum.txt | awk '{print $1" "$3}' > check_md5sum.txt
$ diff -b old_md5sum.txt check_md5sum.txt
■デバッグモードで確認
現状とアップデートが同じバージョンの為、スキップ、エラーコード1で終了している。
$ sudo sa-update -D 2>&1 | tail -3
5月 01 03:53:43.733 [10868] dbg: dns: 1.3.3.updates.spamassassin.org => 1293136, parsed as 1293136
5月 01 03:53:43.733 [10868] dbg: channel: current version is 1293136, new version is 1293136, skipping channel
5月 01 03:53:43.733 [10868] dbg: diag: updates complete, exiting with code 1
$ sudo sa-update -D > /dev/null 2>&1 ;echo $?
1
■毎日自動的にチェックするようになっているので、放っておいて良い。
$ grep sa-update /etc/cron*/*
/etc/cron.daily/spamassassin:test -x /usr/bin/sa-update || exit 0
/etc/cron.daily/spamassassin: if [ -d /etc/spamassassin/sa-update-hooks.d ]; then
/etc/cron.daily/spamassassin: run-parts --lsbsysinit /etc/spamassassin/sa-update-hooks.d
/etc/cron.daily/spamassassin:sa-update
/etc/cron.daily/spamassassin: echo "sa-update failed for unknown reasons" 1>&2
■デフォルトの設定で課題があるようなら設定変更する方針とする。
しばらく様子見。
例えば、私個人しか使わない環境で、わざわざ大きな添付ファイルを送るなど考えられないし、
大量のメールを送るときは、そのようなテストを想定しているときしかありえない。
ここは内部メールサーバであるw。