Amavisd-new/SpamAssassin(ver.3.3.1)への更新作業

May 27, 2010 – 3:30 pm

メールサーバーのウィルス/スパム対策に使っているAmavisd-newとSpamAssassinをアップグレードした。今回の更新は、SpamAssassinのメジャーアップデート(ver.3.3.1)を反映させるためにおこなったものだ。この更新作業のなかで、今年初めから見られていた障害(正規のメールをスパムとして誤判定)の原因を明らかにすることができた。一連の作業をメモしておいた。

アップグレードのいきさつ: 今年の初めころから、我がメールサーバーにちょっとした「異変」が起きていた。明らかに正規のメールがスパムと判定される例が増えたのだ。このメールサーバーの主な使途が、毎日のlogwatch出力であったこともあり、なんら措置することなく半年近くも放置したままになっていた。

このまま、この「異変」を放置するのは良くないと、原因を調べてみると、この「異変」、SpamAssassinのバグによるものであった。発信日が2010年以降のメールに対し、スパム判定用のスコアを高く与えていた。それにより、今年はじめからスパム判定をされたメールが増えたことが理解される。SpamAssassinの『2010年問題』ともいったものだった。

このバグを回避するのに、対応するルールを無効にしてしまおうかとも考えたが、いろいろ調べているうちに、今年はじめに、新しいバージョンのSpamAssassin(ver. 3.3.0)がリリースされているのを知った。今回の更新、2年7ヶ月ぶりのメジャーアップデートで、スパム判定に用いるルールとSpamAssassin本体との分離が大きな変更点。

最新版のSpamAssassinから、スパム判定用のルールは、sa-updateというコマンドを用いれば、「自動的に」最新のルールが適用可能になるという。これを導入すれば、今回の「異変」にもきちんと対応することができるはずだ。

ということで、我がメールサーバーも、この最新版(vers.3.3.1)を導入することにし、これをインストールすることにした。

Amavisd-new/SpamAssassinのダウンロードとインストール: いつものyum updateで簡単にアップグレードできると考えていたが、結構、手の混んだ作業になってしまった。

当初、SpamAssassinのみをアップデートしたところ、このSpamAssasinをchild processとして呼ぶAmavis-newとのバージョン不適合と思われる問題が発生した。止むを得ず、まず、Amavis-newとSpamAssassinのふたつのツールをremoveし、改めてダウンロード・インストール作業を行った。

以前書いたAmavisd-newをインストールした際の記録(「ClamAv+Amavisd-newでメールサーバにウィルス対策」)を参考にこのふたつのパッケージのインストール作業を進めた。作業のポイントは、Amavisd-newをインストールすると、「自動的」に(Installed for Dependencyというかたちで)SpamAssassinも自動的にインストールされるということ、そしてAmavisd-newの設定ファイル(amavisd.conf)を慎重に行うことといったところだろう。

Amavisd-newをyum インストールした際のログを示す。

# yum install amavisd-new*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.nara.wide.ad.jp
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
dag                                                           | 1.1 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package amavisd-new.i386 0:2.6.4-2.el5.rf set to be updated
--> Processing Dependency: perl(Mail::SpamAssassin) for package: amavisd-new
---> Package amavisd-new-milter.i386 0:2.6.4-2.el5.rf set to be updated
--> Running transaction check
---> Package spamassassin.i386 0:3.3.1-3.el5.rf set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package                    Arch         Version                   Repository   Size
=====================================================================================
Installing:
 amavisd-new                i386         2.6.4-2.el5.rf            dag         851 k
 amavisd-new-milter         i386         2.6.4-2.el5.rf            dag          39 k
Installing for dependencies:
 spamassassin               i386         3.3.1-3.el5.rf            dag         1.0 M

Transaction Summary
=====================================================================================
Install       3 Package(s)
Upgrade       0 Package(s)

Total download size: 1.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): amavisd-new-milter-2.6.4-2.el5.rf.i386.rpm             |  39 kB     00:00
(2/3): amavisd-new-2.6.4 (38%) 83% [============-  ]  0.0 B/s | 712 kB     --:-- ETA
(2/3): amavisd-new-2.6.4-2.el5.rf.i386.rpm                    | 851 kB     00:00
(3/3): spamassassin-3.3. (88%) 78% [===========-   ]  0.0 B/s | 832 kB     --:-- ETA
(3/3): spamassassin-3.3.1-3.el5.rf.i386.rpm                   | 1.0 MB     00:00
-------------------------------------------------------------------------------------
Total                                                942 kB/s | 1.9 MB     00:02
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : spamassassin                                                  1/3
  Installing     : amavisd-new                                                   2/3
  Installing     : amavisd-new-milter                                            3/3 

Installed:
  amavisd-new.i386 0:2.6.4-2.el5.rf     amavisd-new-milter.i386 0:2.6.4-2.el5.rf    

Dependency Installed:
  spamassassin.i386 0:3.3.1-3.el5.rf                                                 

Complete!

Amavisd-newの設定: /etc配下に置かれている設定ファイルamavisd.confを以下のように設定した:

<amavisd.conf 設定>

# $mydomain = 'example.com';   # a convenient default for other settings
#                  (サーバーのdomain name)
$mydomain = 'dns-name.tld';

# $myhostname = 'host.example.com';  # must be a fully-qualified domain name!
#                                 (サーバーのfully-qualifiedなdomain name)
$myhostname = 'host_name.dns_name.tld';

#$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
#                                 (spamテスト情報を全メールに示すため、以下に変更)
$sa_tag_level_deflt  = undef;
$sa_tag2_level_deflt = 6.2;  # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.9;  # triggers spam evasive actions (e.g. blocks mail)
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent
$sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From
# $sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off
$penpals_bonus_score = 8;    # (no effect without a @storage_sql_dsn database)
$penpals_threshold_high = $sa_kill_level_deflt;  # don't waste time on hi spam
$bounce_killer_score = 100;  # spam score points to add for joe-jobbed bounces

#                                   (ウィルス判定,スパム判定したメールの処理法)
# $final_virus_destiny      = D_DISCARD;
$final_virus_destiny      = D_PASS;
# $final_banned_destiny     = D_BOUNCE;
# $final_spam_destiny       = D_BOUNCE;
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;
# $bad_header_quarantine_method = undef;

# ### http://www.clamav.net/
# ['ClamAV-clamd',
#   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
#   qr/\bOK$/m, qr/\bFOUND$/m,
#   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
#                                             (以下の4行付加)
 ['ClamAV-clamd',
   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
   qr/\bOK$/m, qr/\bFOUND$/m,
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

上記設定により、SpamAssassinによるスパム判定プロセスが全メールに対して付加される。また、判定用のスコアが6.2を超えたものをスパムとして判定する。

sa-updateを動作させないと・・?!: 上記したAmavis-newの設定作業を終了したところでamavisdのサービスを上げると、以前の版では、メールサーバーが正常に動作していた。ところが、今回の最新版では、不思議なことに、amavisdが立ち上がらない。miallog(/var/log/maillog)を調べてみると、次のようなログメッセージが出力されている:

 amavis[3250]: Using primary internal av scanner code for ClamAV-clamscan
 amavis[3250]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
 amavis[3250]: Creating db in /var/amavis/db/; BerkeleyDB 0.36, libdb 4.3
 amavis[3250]: (!!)TROUBLE in pre_loop_hook: config: no rules were found!  Do you need to run 'sa-update'?
 amavis[3250]: (!)_DIE: Suicide () TROUBLE in pre_loop_hook: config: no rules were found!  Do you need to run 'sa-update'?

また単独でSpamAssasin(spamd)を上げようとすると、

#service spamassassin restart
Stopping spamd:                                            [失敗]
Starting spamd: child process exited or timed out without signaling production
of a PID file at /usr/bin/spamd line 2504

なるメッセージが現れる。

これらのログメッセージから、どうもスパム判定用のルールがパッケージをインストールしただけでは整えられていないことに問題があると考えた。

では、ということで、今回の版から導入された「ルール」更新用のコマンドsa-updateをまず実行し、その後、amavisdを上げることにした。

予想どおり、amavisdが正常にあがり、なんとかインストール作業を終えることができた。分かってしまえば、なんのことはない。てこずってしまった。

因みに、「ルール」用のデータベースは、私のシステム構成(CentOS) では、

/var/lib/spamassassin/3.003001/updates_spamassassin_org

のディレクトリに置かれている。

以上のアップグレード作業の後、テストメールによる動作確認を行い、想定どおりの結果を得ることができた。ただ、今後、ルールの更新頻度、その適用などについて検討する必要があるものとおもう。


Post a Comment