倉金家ホームページ

趣味の部屋/サーバー構築メモ/メールサーバー

14-6.amavis-newからclamsmtpへ

2007年12月7日 2008年 2月7日 改訂
12月にperlのアップデートで起動しなくなったamavis-newに変わり、clamsmtpというソフトを導入し、切り替えることにしました。


amavisd動かなくなる
いつもやっていることでsynapticでアップデートを実施。perlのアップデートがあった。
アップデートそのものは問題なく完了。念のため再起動。
いつもは緑の[OK]がづらづら並ぶが一個[FAILED]が...
何かと見るとamavisdが起動に失敗!!!。
やばいと思って再度再起動してみたが結果は同じ。
試しにメールの送受信を行ってみたがやはり送受信はできず、メールは消えてしまう。

夜も遅かったのでとりあえずpostfixのmain.cfとmaster.cfからamavisdの設定を外して再起動。ウイルスチェックはやらないがメールの送受信はできる状態にしておいて、寝た。

次の日、いろいろいじってみたがどうしても起動できず。
moduleが足りないとかなんたらかんたら言っている。原因わからず。
12月はとにかく忙しいので、もうそのまま。最近ウィルスメールが来たこともないし...

ウイルスチェッカー取り外し
/etc/postfix/main.cf から
content_filter = smtp-amavis:[127.0.0.1]:10024
の行を取り除きます。
またmaster.cfから Amavis Virus Scanner Setting の部分を取り除きます。
(実際はまた同じようなことを書くかもしれないので#でコメントアウトしただけ。)

#service postfix reload でウイルスチェックなしでpostfixを起動させておきます。

消えたメールの復活
amavis-newが起動しなくなったため、amavis-newでウイルスチェックするはずだったメールがチェック待ちでひっかかっていました。消えたわけではなかった。よかった!。
#postsuper -r ALL
これでamavis-newへのcontent_filter情報を取り除いてウイルスチェックなしで再配送します。

調べてみるとどうやらperlのアップデートでamavisdが動かなくなってしまったようです。
amavisはやめて同様のソフトのclamsmtpを使うことにします。

clamsmtpインストール
http://cmf.ohtanz.com/clamav.html
http://www.nk2.org/d/postfix.html あたりを参考にさせていただきました。

ソースファイルの入手先
http://www.inet.lt/clamsmtp/
http://memberwebs.com/stef/software/clamsmtp/

今回 http://www.inet.lt/clamsmtp/ より clamsmtp-1.9-1.src.rpm をダウンロードしました。
ダウンロードしたファイルをrpm/SRPMSに置いてソースをインストールします。
$cd rpm/SRPMS
$rpm -ivh clamsmtp-1.9-1.src.rpm

引き続きRebuild
$cd ../SPECS
$rpmbuild -ba clamsmtp.spec
1分ほどでコンパイル完了。
rpm/RPMS/i386/clamsmtp-1.9-1.i386.rpm ができました。

#rpm -ivh clamsmtp-1.9-1.rpm
これも一瞬で完了です。

amavis-newアンインストール
もういらなくなったamavis-newはアンインストールします。
インストールに使用したソースのディレクトリで
#amavisd_install.sh del
もしソースを捨ててしまっていたら、amavisd_install.shには次のように書いてありますので、これを手動で実行すればいいわけです。
if [ "$1" = "del" ] ; then
rm -f /usr/sbin/amavisd && echo "OK: rm -f /usr/sbin/amavisd"
rm -f /etc/amavisd.conf && echo "OK: rm -f /etc/amavisd.conf"
rm -f /etc/rc.d/init.d/amavisd && echo "OK: rm -f /etc/rc.d/init.d/amavisd"
rm -f /var/amavis/notify_virus_admin.txt && echo "OK: rm -f /var/amavis/notify_virus_admin.txt"
rm -f /var/amavis/notify_virus_recips.txt && echo "OK: rm -f /var/amavis/notify_virus_recips.txt"
rm -f /var/amavis/notify_virus_sender.txt && echo "OK: rm -f /var/amavis/notify_virus_sender.txt"
fi

clamsmtp+postfix設定
/etc/clamsmtpd.conf を設定します。
変えたところ
OutAddress: 127.0.0.1:10026
Listen: 127.0.0.1:10025
ClamAddress: /var/run/clamav/clamd
Header: X-Virus-Scanned: Clamav using ClamSMTP
TempDirectory: /var/tmp/clamsmtp
Quarantine: on
User: clamav
VirusAction: /usr/local/bin/virusalert.sh

ClamAddressの/var/run/clamavディレクトリを作成しUser clamavの書込権限を与えておきます。clamsmtpdはここにソケットとpidファイルをつくります。

ウィルスメールを隔離するためのディレクトリ /var/tmp/clamsmtp をつくり、clamavに書込権限を与えておきます。

/usr/local/bin/virusalert.sh をつくり、以下を書き込んで実行許可を与えておきます。
上記参考サイトのを参考にさせていただきました。
#! /bin/sh

# This is virus alert message of clamsmtp

FROM="Clam AntiVirus "
TO="virusalert"
MAILER="/usr/sbin/sendmail -it"
SUBJECT=`/bin/echo "ウィルスが検出されました" | /usr/bin/nkf -jMB`

$MAILER <<EOM
From: $FROM
To: $TO
Subject: =?ISO-2022-JP?B?$SUBJECT?=
A virus ($VIRUS) was found.
The mail has been quarantined as: $EMAIL
[From]: $SENDER
[To]: $RECIPIENTS

EOM

exit 0

/etc/postfix/aliases に警告メールを受ける管理者を定義しておきます。
virusalert: xxxxx@xxxxx.xxx

/etc/postfix/main.conf に
#ClamSMTP Virus Scannerの設定
content_filter = virus-scan:127.0.0.1:10025

/etc/postfix/master.conf に
# postfixからclamsmtpへ
virus-scan    unix    -    -    n    -    16    smtp
    -o smtp_send_xforward_command=yes
    -o smtp_data_done_timeout=1200
    -o disable_dns_lookups=yes

#clamsmtpよりpostfixへ
127.0.0.1:10026    inet    n    -    n    -    16    smtpd
    -o content_filter=
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000

amavis-newの設定にclamsmtpの設定を追加したので余計なのもあるかもしれません。

確認
postfixをreloadして設定を反映させ、amavis-newのときと同じようにテストウイルスを送ってみます。
メールは送られず、管理者(aliasesで定義したvirusalert)宛以下のような警告メールがきます。

[件名]: ウィルスが検出されました
A virus (Eicar-Test-Signature) was found.
The mail has been quarantined as: /var/tmp/clamsmtp/virus.xxxx
[From]: xxxx@xxxx.xx
[To]: xxxx@xxxx.xx

...OKです。