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.