SpamAssassin

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

まずは事前準備でいろいろと入れます。

Razorのインストール

perl -MCPAN -e shell
 
o conf prerequisites_policy follow
install LWP MD5 Net::Ping Net::DNS Time::HiRes Digest::SHA1 Getopt::Long File::Copy Digest::Nilsimsa URI::Escape
quit
 
cd /usr/local/src
wget http://jaist.dl.sourceforge.net/sourceforge/razor/razor-agents-2.85.tar.bz2
tar jxvf razor-agents-2.85tar.bz2
cd razor-agents-2.85
perl Makefile.PL
make
make test
make install
 
razor-client
razor-admin -d -create -home=/etc/razor

/etc/razor/razor-agent.conf(変更点のみ)

debuglevel = 3
logfile = /var/log/razor-agent.log

SpamAssassinのインストール

いつのまにやら3.4.0が出てた。
1つほどオプションのモジュールが増えてました?

optional module missing: Net::Patricia
perl -MCPAN -e shell
 
o conf prerequisites_policy follow
#必須モジュール↓
install HTML::Parser DB_File Net::DNS BerkeleyDB Net::SMTP Mail::SPF::Query IP::Country::Fast Archive::Tar
#必須ではないモジュール↓
install ExtUtils::MakeMaker File::Spec Pod::Usage
#3.2.0から追加されたモジュール(たぶんオプション)
install Mail::DomainKeys Mail::DKIM
quit
useradd spamd
cd /usr/local/src
wget http://ftp.kddilabs.jp/infosystems/apache/spamassassin/source/Mail-SpamAssassin-3.4.1.tar.bz2
tar jxvf Mail-SpamAssassin-3.4.1.tar.bz2
cd Mail-SpamAssassin-3.4.1
perl Makefile.PL
make
make install
cp spamd/redhat-rc-script.sh /etc/init.d/spamd
chmod 755 /etc/init.d/spamd
chkconfig --add spamd
sa-update

cronの設定

0 0 * * * /usr/bin/sa-update > /dev/null 2>&1

SpamAssassinのコンフィグ設定(たぶん変更点のみ)2009年6月19日現在

/etc/mail/spamassassin/local.cf

required_score 13.0
rewrite_header Subject // SPAM //
report_safe 0
use_razor2 1
skip_rbl_checks 0
#skip_rbl_checks 1
rbl_timeout 3
score RCVD_IN_BL_SPAMCOP_NET 3
 
normalize_charset 1
 
use_bayes 1
bayes_auto_learn 1
bayes_path /home/spamd/.spamassassin/bayes
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
bayes_auto_learn_threshold_nonspam 0.1
bayes_auto_learn_threshold_spam 12.0
ok_languages ja en
ok_locales ja en

デフォルトのlocal.cfを精錬させたものが
ここにあるので利用します。
linux.or.jpが死んだようでDL先がhttp://www.flcl.org/~yoh/user_prefsに変更されたようです。
ここ最近普通のメールもスコアが高くなってきたので、
Spamassassinデフォルトの機能を利用してみます。

/etc/mail/spamassassin/v310.pre

loadplugin Mail::SpamAssassin::Plugin::Razor2
loadplugin Mail::SpamAssassin::Plugin::TextCat

/etc/sysconfig/spamassassin

SPAMDOPTIONS="-x -d -H /home/spamd -u spamd"

次にSpamのお勉強をです。

cd /home/spamd
mkdir spam
cd spam
wget http://ftp.momo-i.org/pub/mail/spam.tar.gz
tar zxvf spam.tar.gz
sa-learn --spam spam/*
sa-learn --spam doubt/*

sa-updateで使われるモジュールでArchive::Tarが無いと
怒られるそうで、確認してみました。
以下のモジュールを使うようですね。
Archive::Tarがちゃんとはいってました。
しかもThese are the non-standard required modules
というコメントがされてたので、標準外の必須モジュールってことですね。

File::Spec
File::Path
Getopt::Long
Pod::Usage
#These are the non-standard required modules
Net::DNS
LWP::UserAgent
HTTP::Date
Archive::Tar
IO::Zlib
#These are the non-standard required modulesここまで
Digest::SHA1

3.2.1現在Spamassassinの挙動は以下の通りになってるようです。

  1. /etc/mail/spamassassin にある.preファイルを読み込む
  2. /var/lib/spamassassin/3.00X00Y にある3.X.Y用のcfファイルを読み込む
  3. /etc/mail/spamassassin/local.cfを読み込む
  4. $HOME/.spamassassin/user_prefsを読み込む

これでSpamAssassinのインストールは完了です。

デフォルト以外のsa-updateリポジトリを使ってみる

例えばここを参考に
新しいルールを使ってみます。

wget http://yerp.org/rules/GPG.KEY
sa-update --import GPG.KEY
sa-update --gpgkey 6C6191E3 --channel sought.rules.yerp.org \
--channel updates.spamassassin.org

これで/var/lib/spamassassin/3.xxxxxx/にsought_rules_yerp_orgディレクトリと
sought_rules_yerp_org.cfが作成されます。

独自のsa-update用リポジトリを作ってみる

自前で用意しちゃおうじゃないか!ってことで日本語の情報が皆無だったので、
覚書。

まずは公開するための準備でApacheの設定
example.comは自身のドメインに置き換えてください。

# mkdir /var/www/sa-update
# echo "http://sa.example.com/ weight=5" > /var/www/sa-update/MIRRORED.BY
# chown apache:apache /var/www/sa-update
# cd /var/www/sa-update

GPGの鍵を作成します。

# gpg --gen-key
--snip--
gpg: 鍵XXXXXXXXを絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。
--snip--

XXXXXXXの部分がこの後も必要です

次に作成したGPGの公開鍵をエクスポートします。

# gpg -o GPG.KEY -a --export XXXXXXX

次にDNSの設定をします。
ここ重要!
ゾーンファイルを修正します
例: /var/named/example.com.zone
IPアドレスの127.0.0.1は自分のグローバルIPアドレスに置き換えてください。

$ORIGIN example.com.
---snip---
sa              IN  A   127.0.0.1
$ORIGIN sa.example.com.
*               IN  TXT "20140101"
mirrors         IN  TXT "http://sa.example.com/MIRRORED.BY"
 
$ORIGIN example.com.

最初にsa.example.com用のIPを設定します(HTTP用)
sa-updateはSpamAssassinのバージョンを逆にした数値+sa.example.comで
TXTを引っ張ってその中の数値を元にバージョン管理をしているので、
全バージョン同じの場合はアスタリスクで良いですが、SpamAssassinのバージョンごとに
異なるものを使用したい場合は別途以下のように設定してください
ホスト名はSpamAssassinのバージョンの数値を逆にしたものになります。
最後のmirrorsに上で作成したMIRRORED.BYのURLを記述します。
これは複数に分散してる場合でも1つでやる場合でも必須なので、省略しないようにしましょう。

$ORIGIN sa.example.com.
0.4.3           IN  TXT "20140101"
2.3.3           IN  TXT "20130101"

そして最後に配信するファイルの作成です。
含めるファイルはなんでも良いですが、書庫を解凍した後に
ファイルが直下に作成されるようにしないとダメです。
うちではとりあえず本家に沿った命名規則?でファイルを作成しています。

# ls
10_xxxxx.cf 20_yyyyy.cf 30_zzzzz.cf
# tar zcf 20140101.tar.gz *
# ls
10_xxxxx.cf 20_yyyyy.cf 30_zzzzz.cf 20140101.tar.gz
# sha1sum 20140101.tar.gz > 20140101.tar.gz.sha1
# gpg -o 20140101.tar.gz.asc -b 20140101.tar.gz
# ls
10_xxxxx.cf 20_yyyyy.cf 30_zzzzz.cf 20140101.tar.gz 20140101.tar.gz.asc 20140101.tar.gz.sha1

これで準備は整いましたので、
早速sa-updateしてみましょう。
今回はデバッグオプション(-D -v)付きで実行していますが、通常は無くていいです。

# sa-update --import /var/www/sa-update/GPG.KEY
# sa-update --channel sa.example.com --gpgkey XXXXXXX -D -v
-- snip --
dbg: channel: metadata version = 20131231, from file /var/lib/spamassassin/3.004000/sa.example.com.cf
dbg: dns: 0.4.3.sa.example.com => 20140101, parsed as 20140101
Update available for channel sa.example.com: 20131231 -> 20140101
-- snip --
dbg: channel: reading MIRRORED.BY file /var/lib/spamassassin/3.004000/sa_example_com/MIRRORED.BY
dbg: channel: parsing MIRRORED.BY file for channel sa.example.com
dbg: channel: found mirror http://sa.example.com/ weight=5
dbg: channel: selected mirror http://sa.example.com
dbg: http: url: http://sa.example.com/20140101.tar.gz
dbg: http: downloading to: /var/lib/spamassassin/3.004000/sa.example.com/20140101.tar.gz, new
dbg: util: executable for curl was found at /usr/bin/curl
dbg: http: /usr/bin/curl -s -L -O --remote-time -g --max-redirs 2 --connect-timeout 30 --max-time 300 --fail -o 20140101.tar.gz -- http://sa.example.com/20140101.tar.gz
dbg: http: process [20864], exit status: 0
http: (curl) GET http://sa.example.com/20140101.tar.gz, success
dbg: http: url: http://sa.example.com/20140101.tar.gz.sha1
dbg: http: downloading to: /var/lib/spamassassin/3.004000/sa.example.com/20140101.tar.gz.sha1, new
dbg: util: executable for curl was found at /usr/bin/curl
dbg: http: /usr/bin/curl -s -L -O --remote-time -g --max-redirs 2 --connect-timeout 30 --max-time 300 --fail -o 20140101.tar.gz.sha1 -- http://sa.example.com/20140101.tar.gz.sha1
dbg: http: process [20866], exit status: 0
http: (curl) GET http://sa.example.com/20140101.tar.gz.sha1, success
dbg: http: url: http://sa.example.com/20140101.tar.gz.asc
dbg: http: downloading to: /var/lib/spamassassin/3.004000/sa.example.com/20140101.tar.gz.asc, new
dbg: util: executable for curl was found at /usr/bin/curl
dbg: http: /usr/bin/curl -s -L -O --remote-time -g --max-redirs 2 --connect-timeout 30 --max-time 300 --fail -o 20140101.tar.gz.asc -- http://sa.example.com/20140101.tar.gz.asc
dbg: http: process [20868], exit status: 0
http: (curl) GET http://sa.example.com/20140101.tar.gz.asc, success
dbg: sha1: verification wanted: adf27a5bd8a7234babf33cccb3566d447dfa25ed
dbg: sha1: verification result: adf27a5bd8a7234babf33cccb3566d447dfa25ed
dbg: channel: populating temp content file /tmp/.spamassassin20863tCELS6tmp
dbg: gpg: populating temp signature file
dbg: generic: SpamAssassin version 3.4.0
-- snip --

更新がない場合

dbg: channel: attempting channel sa.example.com
dbg: channel: using existing directory /var/lib/spamassassin/3.004000/sa.example.com
dbg: channel: channel cf file /var/lib/spamassassin/3.004000/sa.example.com.cf
dbg: channel: channel pre file /var/lib/spamassassin/3.004000/sa.example.com.pre
dbg: channel: metadata version = 20140101, from file /var/lib/spamassassin/3.004000/sa.example.com.cf
dbg: dns: 0.4.3.sa.example.com => 20140101, parsed as 20140101
dbg: channel: current version is 20140101, new version is 20140101, skipping channel

後は/var/lib/spamassassin/3.xxxxx/にsa_example_com.cfファイルと
sa_example_comディレクトリが作成されてディレクトリ内に作ったファイルがあれば
完璧ですね。
ファイルを更新したら必ずDNSのTXTとtar.gzのファイル名を一致させた状態で
数値が上がった状態するようにしてください。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
また変更しました
Fill in the blank.