FreeBSD/SpamAssassin の変更点


*''&size(15){SpamAssassin};'' [#d0b64e0a]

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

#contents

**環境 [#x0563cf4]
 Perl 5.8.8
 SpamAssassin 3.1.5

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

***sa-updateを実行 [#jf259299]
下記のように実行するだけです。
 # 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設定 [#b09726ca]
これを活用させていただきました。~
http://tlec.linux.or.jp/docs/user_prefs

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

**オプション [#r7b43459]

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

**Spamassassinでヘッダに****SPAM****を付加する設定をしても付加してくれない場合。 [#g6fedb2d]
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***」が付加されます。~
&color(red){※現在の環境Perl5.8.8 spamassassin3.1.5ではlocal.cfのrewrite_header Subject [SPAM]を変更する事で件名に[SPAM]を追加してくれています。};

**/var/log/mail.logを見るとCan't locate Mail/SPF/Query.pmとエラーが表示されている [#u58fa9a3]
***環境 [#i98878a8]
 SpamAssassin 3.1.0
 Perl 5.8.6
***''Cpanからインストール'' [#w67bc575]
 # perl -MCPAN -e shell
 cpan> o conf prerequisites_policy ask
 cpan> install Mail::SPF::Query
 cpan> exit
これでエラーは出なくなります。

*SpamAssassin日本語対応 [#kab2b315]((日本Spamassassinユーザ会http://spamassassin.jp/)) [#bb832c88]
オリジナルのSpamAssassinは日本語等のマルチバイト文字の言語を正しく扱う
ことができません。このパッチを適応することにより、SpamAssassinで正しく
日本語を扱うことができるようになります。

+[[形態素解析エンジンMeCab>#iebaa939]]
+[[MeCabの辞書mecab-ipadic>#yeefd73f]]
+[[MeCabのPerlバインディングText::MeCab>#l59f7a9e]]
+[[文字エンコーディング検出器Encode::Detect>#w16c8056]]
+[[SpamAssassinにパッチあて>#r669ad58]]
+[[設定ファイル準備(/etc/mail/spamassassin)>#rda8ec5b]]
+[[テスト>#d731f730]]
+[[起動>#ja1def11]]

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

**形態素解析エンジンMeCab [#iebaa939]
 $ tar zxfv mecab-X.X.tar.gz
 $ cd mecab-X.X
 $ ./configure --with-charset=utf8
 $ make
 $ make check
 $ su
 # make install

***形態素解析エンジンMeCab(Ports) [#zce59211]
 # cd /usr/ports/japanese/mecab
 # make  WITH_CHARSET=utf-8 install

**MeCabの辞書mecab-ipadic [#yeefd73f]
 $ 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 [#l59f7a9e]
配布元: 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) [#w46d2f81]
 # cd /usr/ports/japanese/p5-Text-MeCab
 # make install

**文字エンコーディング検出器Encode::Detect [#w16c8056]
配布元: 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 [#gcb4133e]
SpamAssassinがメールを受け取ったらRazor2にオンラインで照会しSpamメールか判断するというもの

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

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

**SpamAssassinにパッチあて [#r669ad58]

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

&color(red){※自分の場合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) [#rda8ec5b]
local.cfに下記を追加
 normalize_charset 1
 
 $ fetch http://www.emaillab.org/spamassassin/patch/tokenizer.pre
 下記の行をコメント解除
 loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab

**テスト [#d731f730]
 # spamassassin --lint

**起動 [#ja1def11]
 # /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の学習 [#gb909ebe]
sa-learn コマンドでspamassassinに学習をさせ、スパムの判定精度を向上させることができます。
**書式 [#sdb5b22c]
 # sa-learn オプション フォルダ

**オプション [#dc860146]
 --spam spam としてメッセージを学習
 --ham  ham(non-spam) としてメッセージを学習

**使用例 [#t4dcaa6f]
/usr/local/vpopmail/Spamにスパムメールを保存しておいてから。
 # sa-learn --spam /usr/local/vpopmail/Spam