FreeBSD/SpamAssassin

SpamAssassin

毎日たくさん送られてくるスパムメールをメールサーバ側で検知してくれるソフト。
プログラムはPerlで書かれていて分かりやすいですね。
procmailと組み合わせてフォルダ分けしたり、削除したり色々と活用できそうです。

環境

Perl 5.8.8
SpamAssassin 3.1.5

sa-updateでルールセットの更新

sa-updateは、ルールセットの更新とプログラム自体のリリースを分離するために作られた、ルールセットの更新システムです。

sa-updateを実行

下記のように実行するだけです。

# sa-update

当たらしルールセットは/var/lib/spamassassinに保存されます。

# ll /var/lib/spamassassin/
total 2
drwxr-xr-x  3 root  wheel  512  9 14 20:01 3.001005/

local.cf設定

これを活用させていただきました。
http://tlec.linux.or.jp/docs/user_prefs

rewrite_header Subject [SPAM] # 件名を書き換える。[SPAM]を件名の先頭に付ける
report_safe 1 # 0:本文は変更しない 1:本文は添付に変更(デフォルト)
trusted_networks 192.168.1. # 信頼済のネットワークを除外する

オプション

ショートロング説明
-a--auto-whitelist, --whitelistauto-whitelists を使用
-c--create-prefsユーザ preferences ファイルを生成
-C path--configpath=pathPath for default config files
-d--daemonizeデーモン化
-h--helpPrint usage message.
-i ipaddr--listen-ip=ipaddr,...Listen on the IP ipaddr (default: 127.0.0.1)
-m num--max-children numAllow maximum num children
-p port--portListen on specified port (default: 783)
-q--sql-configEnable SQL config (only useful with -x)
-V--virtual-config=dirEnable Virtual configs (needs -x)
-r pidfile--pidfileWrite the process id to pidfile
-s facility--syslog=facilitySpecify the syslog facility (default: mail)
--syslog-socket=typeHow to connect to syslogd (default: unix)
-u username--username=usernameRun as username
-v--vpopmailEnable vpopmail config
-x--nouser-configDisable user config files
-A host,...,--allowed-ips=..,..Limit ip addresses which can connect
-D--debugPrint debugging messages
-L--localUse local tests only (no DNS)
-P--paranoidDie upon user errors
-H dir異なった HOMEディレクトリー (オプションのパス)を指定

Spamassassinでヘッダに****SPAM****を付加する設定をしても付加してくれない場合。

local.cfには「rewrite_header Subject *****SPAM*****」の記述をしてある
自分の環境では仕方ないのでspamcを使ってqmail-scanner.plを編集しました。

# vi /usr/local/bin/qmail-scanner.pl
-----------------編集個所-----------------
my $spamc_subject='';
         ↓
my $spamc_subject='***Spam***';
-----------------編集個所-----------------

これで、spamassassinがspamとして判断したものに対して「***Spam***」が付加されます。
※現在の環境Perl5.8.8 spamassassin3.1.5ではlocal.cfのrewrite_header Subject [SPAM]を変更する事で件名に[SPAM]を追加してくれています。

/var/log/mail.logを見るとCan't locate Mail/SPF/Query.pmとエラーが表示されている

環境

SpamAssassin 3.1.0
Perl 5.8.6

Cpanからインストール

# perl -MCPAN -e shell
cpan> o conf prerequisites_policy ask
cpan> install Mail::SPF::Query
cpan> exit

これでエラーは出なくなります。

SpamAssassin日本語対応 *1 [#bb832c88]

オリジナルのSpamAssassinは日本語等のマルチバイト文字の言語を正しく扱う ことができません。このパッチを適応することにより、SpamAssassinで正しく 日本語を扱うことができるようになります。

  1. 形態素解析エンジンMeCab
  2. MeCabの辞書mecab-ipadic
  3. MeCabのPerlバインディングText::MeCab
  4. 文字エンコーディング検出器Encode::Detect
  5. SpamAssassinにパッチあて
  6. 設定ファイル準備(/etc/mail/spamassassin)
  7. テスト
  8. 起動

なお、このパッチは日本SpamAssassinユーザ会(http://spamassassin.jp/)により 開発が行われています。

形態素解析エンジンMeCab

$ tar zxfv mecab-X.X.tar.gz
$ cd mecab-X.X
$ ./configure --with-charset=utf8
$ make
$ make check
$ su
# make install

形態素解析エンジンMeCab(Ports)

# cd /usr/ports/japanese/mecab
# make  WITH_CHARSET=utf-8 install

MeCabの辞書mecab-ipadic

$ tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
$ cd mecab-ipadic-2.7.0-XXXX
$ vi char.def
  • char.defを編集して次のように書き換える。
    ------------------------------------------------
    # ASCII
    0x0021..0x002F ALPHA
    0x0030..0x0039 ALPHA
    0x003A..0x0040 ALPHA
    0x0041..0x005A ALPHA
    0x005B..0x0060 ALPHA
    0x0061..0x007A ALPHA
    0x007B..0x007E ALPHA
    ------------------------------------------------
    $ ./configure --with-charset=utf8
    $ make
    $ su
    # make install

MeCabのPerlバインディングText::MeCab

配布元: http://search.cpan.org/~dmaki/Text-MeCab/

$ tar zxvf Text-MeCab-0.13.tar.gz
$ cd Text-MeCab-0.13
$ perl Makefile.PL
  Path to mecab config? [/usr/local/bin/mecab-config] Enter
  Encoding of your mecab dictionary? (shift_jis, euc-jp, utf8) [euc-jp] utf8 Enter
$ make
$ make install

MeCabのPerlバインディングText::MeCab(Port)

# cd /usr/ports/japanese/p5-Text-MeCab
# make install

文字エンコーディング検出器Encode::Detect

配布元: http://search.cpan.org/~jgmyers/Encode-Detect/

cpan を使って
install Bundle::CPAN
でCPANモジュール&関連モジュールを最新版にする
cpan の再設定(reload cpan では有効にならないモジュールがある模様)
(上記で BuildやYAMLが入ります)
install Module::Build
install ExtUtils::CBuilder
install Data::Dump
そして最後に
install Encode::Detect
を実行してやると入りました

Razor2

SpamAssassinがメールを受け取ったらRazor2にオンラインで照会しSpamメールか判断するというもの

ソース:http://wiki.apache.org/spamassassin/InstallingRazor

Port

# cd /usr/ports/mail/razor-agents
# make install

SpamAssassinにパッチあて

パッチ ⇒ http://spamassassin.jp/download/

※自分の場合portsからインストールしていたので、make deinstallで一度アンインストールしてから作業しました。

$ fetch http://www.emaillab.org/spamassassin/patch/spamassassin-3.1.5-normalize-test6.patch
$ tar zxvf Mail-SpamAssassin-3.1.5.tar.gz
$ cd Mail-SpamAssassin-3.1.5
$ perl Makefile.PL
$ patch -p1 <../spamassassin-3.1.5-normalize-test6.patch
$ make
$ su
# make install

設定ファイル準備(/etc/mail/spamassassin)

local.cfに下記を追加

normalize_charset 1

$ fetch http://www.emaillab.org/spamassassin/patch/tokenizer.pre
下記の行をコメント解除
loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab

テスト

# spamassassin --lint

起動

# /usr/local/bin/spamd -s /var/log/spam.log /usr/local/bin/spamd -c -d -x -v -u vpopmail -r /var/run/spamd

spandの起動オプション ⇒ http://spamassassin.apache.org/full/3.2.x/doc/spamd.html

sa-learnでspamassassinの学習

sa-learn コマンドでspamassassinに学習をさせ、スパムの判定精度を向上させることができます。

書式

# sa-learn オプション フォルダ

オプション

--spam spam としてメッセージを学習
--ham  ham(non-spam) としてメッセージを学習

使用例

/usr/local/vpopmail/Spamにスパムメールを保存しておいてから。

# sa-learn --spam /usr/local/vpopmail/Spam

*1 日本Spamassassinユーザ会http://spamassassin.jp/