xserver
Home クッキー及びWeb ビーコンについて



AntiVir MailGateでウィルスの駆除

Clam AntiVirusによるウィルス駆除(Postfixと連携)

 Clam Antivirus とamavisd-new とPostfix を連携させてウィルスを撃退させます。




■Clam Antivirus のダウンロード

Version clamav-0.86.1
Homepage http://www.clamav.net/
Download http://www.clamav.net/stable.php#pagestart
Install clamav-0.86.1.tar.gz

※clamav-0.88 においても以下記事とほぼ同様の方法でインストール可能であることを確認しました(2006年3月10日)。なお、前バージョンからのアップグレード方法については
こちらを参照してください。



■ユーザー/グループの作成

インストールをはじめる前に予め、clamav というユーザとグループを作成しておきます。

# useradd -s /bin/false clamav


■Clam Antivirus のインストール

ソースを展開したら、configure→make→make install してください。デフォルトでは、/usr/local/lib や/usr/local/bin にファイルがインストールされるのでパスを変えたい場合は、./configure --prefix=dirとしてください。なお、configure する際に、zlib のバージョンが1.2.2以上でないとエラーが発生します。けれども、FC1では、RPMパッケージのzlib は最大でもバージョン1.2.1までしか用意されていないようなので、zlib のバージョンチェックを行わないように、--disable-zlib-vcheck オプションを付加します。

$ cd /usr/local/src
$ tar xzvf clamav-0.86.1.tar.gz
$ cd clamav-0.86.1
$ ./configure --prefix=/usr/local/clamav --disable-zlib-vcheck
$ make
$ make check
$ su
# make install



■clamd.conf の編集

以上で、インストールは完了です。上記の手順でインストールした場合は、
/usr/local/clamav/etc/clamd.conf と/usr/local/clamav/etc/freshclam.conf にコンフィグファイルがインストールされます。clamdav は先にコンフィグファイルを編集してから出ないと起動することができないようになっています。まず最初に、clamd.conf を編集します。ファイルを開いたら、「# Comment or remove the line below.」となっている行を探します。その下に、「Example」と書かれた行があるので、先頭にハッシュマークをつけてコメントしてください。そうすることで設定ファイルが有効になります。

# vi /usr/local/clamav/etc/clamd.conf

# Comment or remove the line below.
# Example //先頭にコメントをつける

その他の主な設定箇所を以下にまとめます。デフォルトで「disable」となっているディレクティヴもたくさんあるので有効にしたい場合はきちんと先頭のハッシュマークを取り除いてコメントアウトしてください。

PidFile /var/run/clamav/clamd.pid
LogTime
LogFile /var/log/clamd.log
DatabaseDirectory /usr/local/clamav/share/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket
User clamav

なお、上記で設定したPidFile である clamd.pid が保存されるディレクトリも予め作成しておきましょう。ここでディレクトリを作成してPIDの保存場所を確保しておかないと、後にデーモンを起動した際に、「ERROR: Can't save PID in file /var/run/clamd.pid」といって怒られてしまいます。

# mkdir /var/run/clamav
# chown clamav:clamav /var/run/clamav/

■freshclam.conf の編集

次に、freshclam.conf を開きます。同様に冒頭部分にある「Example」にコメントをつけて設定ファイルを有効化させます。

# vi /usr/local/clamav/etc/freshclam.conf

# Comment or remove the line below.
# Example //先頭にコメントをつける

その他、編集箇所を記述します。

PidFile /var/run/freshclam.pid
DatabaseDirectory /usr/local/clamav/share/clamav
UpdateLogFile /var/log/freshclam.log
DatabaseOwner clamav
DNSDatabaseInfo current.cvd.clamav.net
DatabaseMirror db.jp.clamav.net
DatabaseMirror database.clamav.net
#Checks 24//24÷24=1で1時間ごとにダウンロード。初期値は24÷12で2時間ごと

■freshclam用のログファイルを作成

前もってログファイルを作成し、その所有者とパーミッションを適切に設定します。この過程をきちんとしておかないと、ウィルスデータベース更新の際に、
「ERROR: Can't open /var/log/freshclam.log in append mode (check permissions!).」といったエラーが発生してしまいます。

# touch /var/log/freshclam.log
# chown clamav:clamav /var/log/freshclam.log
# chmod 644 /var/log/freshclam.log

■freshclam を自動実行させる

2時間ごとにfreshclam を実行するようにcron に登録しておきます。

# vi /etc/crontab
0 */2 * * * /usr/local/clamav/bin/freshclam --daemon-notify --quiet -l /var/log/freshclam.log

また、サーバー起動時にfreshclam を起動させるように/etc/rc.d/rc.local も編集しておきます。

# vi /etc/rc.d/rc.local
/usr/local/clamav/bin/freshclam


◎freshclamオプション
 --daemon-notify 更新されたデータベースをclamdデーモンに反映させる。
 --quiet エラー以外は出力しない。
 --log 指定したログファイルにログを保存する。


■ウィルスデータベースの更新

ウィルスデータベースは、/usr/local/clamav/share/clamav 以下のdaily.cvd とmain.cvd に格納されます。daily.cvd には追加されたウィルス定義が格納され、後にmain.cvd に移動されます。

# /usr/local/clamav/bin/freshclam
ClamAV update process started at Sat Jul 2 04:44:06 2005
main.cvd is up to date (version: 32, sigs: 34720, f-level: 5, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 963, sigs: 1405, f-level: 5, builder: diego)
Database updated (36125 signatures) from db.jp.clamav.net (IP: 211.10.155.48)

■デーモンの起動

# /usr/local/clamav/sbin/clamd
# ps aux | grep clamd
clamav 6951 0.0 3.3 12060 8464 ? S 04:48 0:00 /usr/local/clamav/sbin/clamd

念のため、ログファイルを確認してエラーが発生していないかみておきましょう。

# tail -25 /var/log/clamd.log
Sat Jul 2 05:01:16 2005 -> +++ Started at Sat Jul 2 05:01:16 2005
Sat Jul 2 05:01:16 2005 -> clamd daemon 0.86.1 (OS: linux-gnu, ARCH: i386, CPU: i686)
Sat Jul 2 05:01:16 2005 -> Log file size limited to 1048576 bytes.
Sat Jul 2 05:01:16 2005 -> Running as user clamav (UID 514, GID 515)
Sat Jul 2 05:01:16 2005 -> Reading databases from /usr/local/clamav/share/clamav
Sat Jul 2 05:01:17 2005 -> Protecting against 36125 viruses.
Sat Jul 2 05:01:17 2005 -> Unix socket file /tmp/clamd
Sat Jul 2 05:01:17 2005 -> Setting connection queue length to 15
Sat Jul 2 05:01:17 2005 -> Archive: Archived file size limit set to 10485760 bytes.
Sat Jul 2 05:01:17 2005 -> Archive: Recursion level limit set to 8.
Sat Jul 2 05:01:17 2005 -> Archive: Files limit set to 1000.
Sat Jul 2 05:01:17 2005 -> Archive: Compression ratio limit set to 250.
Sat Jul 2 05:01:17 2005 -> Archive support enabled.
Sat Jul 2 05:01:17 2005 -> Archive: RAR support disabled.
Sat Jul 2 05:01:17 2005 -> Portable Executable support enabled.
Sat Jul 2 05:01:17 2005 -> Mail files support enabled.
Sat Jul 2 05:01:17 2005 -> OLE2 support enabled.
Sat Jul 2 05:01:17 2005 -> HTML support enabled.
Sat Jul 2 05:01:17 2005 -> Self checking every 1800 seconds.

■ウィルス定義ファイルの閲覧

データベースに登録されているウィルス定義ファイルを知りたい場合は、sigtool コマンドを使います。

# /usr/local/clamav/bin/sigtool --list-sig | more



■ウィルスの検出・駆除

それでは、実際にウィルスを検出・駆除してみましょう。ウィルスを手元に所持していない方は、eicar.com からウィルスファイルをダウンロードしておいてください(このファイルは、ウィルス反応を示すけれど、実際にファイルに感染したりすることはありません)。ウィルスを検出するには、clamscan を実行させます。clamscan は引数をつけずに実行した場合、カレントディレクトリ以下のファイルを検索するので、特定のディレクトリのみの検索したい場合は、clamscan の後ろに検索対象ディレクトリを指定します。以下は本当のウィルスとeicar からダウンロードしたウィルステストファイルをスキャンさせた例です。

# /usr/local/clamav/bin/clamscan /home/kororo/Virus/
/home/kororo/Virus/eicar_com.zip: Eicar-Test-Signature FOUND
/home/kororo/Virus/ema.jpg: OK
/home/kororo/Virus/チェリー.XWS: OK
/home/kororo/Virus/live.txt: OK
/home/kororo/Virus/hbedv.zip: OK
/home/kororo/Virus/File.zip: Worm.Antim.A FOUND

----------- SCAN SUMMARY -----------
Known viruses: 36125
Engine version: 0.86.1
Scanned directories: 1
Scanned files: 6
Infected files: 2 //感染ファイルが2つ見つかったことが表示される
Data scanned: 10.70 MB
Time: 7.779 sec (0 m 7 s)


なお、感染ファイルを削除したい場合は、--remove オプションをつけてclamscanを実行させます。

# /usr/local/clamav/bin/clamscan --remove /home/kororo/Virus/


◎clamscan の主なオプション
 --recursive サブディレクトリごと再帰的に検査。圧縮ファイルは再帰的に解凍して検査
 --remove 感染したファイルを削除する
 --move=DIR 感染したファイルを指定したディレクトリへ隔離(移動)する
 --infected ウィルスに感染したファイルのみ標準出力する

■clamdav の自動起動の設定

サーバー起動時にclamdav が自動起動するように設定します。

# touch /etc/rc.d/init.d/clamd
# chmod +x /etc/rc.d/init.d/clamd
# vi /etc/rc.d/init.d/clamd

#!/bin/bash
# chkconfig: 35 78 20
# description: Clamd DAEMON
. /etc/rc.d/init.d/functions
prog="/usr/local/clamav/sbin/clamd"
prog_base="$(basename ${prog})"
prog_config_file="/usr/local/clamav/etc/clamd.conf"
RETVAL=0

# See how we were called.
case "$1" in
start)
action $"Starting ${prog_base}:" ${prog} -c ${prog_config_file}
RETVAL=$?
echo
;;
stop)
echo $"Shutting down ${prog_base}"
killproc ${prog_base}
RETVAL=$?
echo
;;
status)
status $"${prog_base}"
RETVAL=$?
echo
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
reload)
pid=`pidofproc ${prog_base}`
kill -USR2 ${pid}
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload}"
exit 1
esac

exit $RETVAL

起動スクリプトの動作が成功したら、自動起動サービスに追加します。

# /etc/rc.d/init.d/clamd restart
Shutting down clamd
[ OK ]
Starting clamd: [ OK ]
# chkconfig --add clamd



■amavisd-new のダウンロード

Version amavisd-new-2.3.2
Homepage http://www.ijs.si/software/amavisd/
Download http://www.ijs.si/software/amavisd/#download
Install amavisd-new-2.3.2.tar.gz

amavisd-new とは、clamav などのウィルススキャンプログラムとPostfixやsendmail などのMTAとの橋渡しをしてくれる役目を果たすソフトウェアです。Antivir Mailgate などは単体でPostfix とのSMTP経由での連携ができますが、clamav の場合はamavisd-new などのソフトウェアが必要となります。amavisd-new を用いることで、clamd のプロセスにトラブルが発生した際に、セカンダリ(予備)としてclamscanを実行するようにすることができます。また、amavis 自体はデフォルトでは10024ポートでListen し、Postfix からの連絡を待ちます。

■ユーザー/グループの作成

事前準備として、amavis というユーザとグループを作成しておきます。その後、amavis ユーザ用のホームディレクトリを作成しておきます。

# useradd -d /dev/null -s /bin/false amavis
# mkdir /var/amavis
# mkdir /var/amavis/tmp /var/amavis/var /var/amavis/db
# chown -R amavis:amavis /var/amavis/
# chmod -R 750 /var/amavis

■amavisd-new のインストール

ソースを展開し、amavis のディレクトリへ移動します。

# wget http://www.ijs.si/software/amavisd/amavisd-new-2.3.2.tar.gz
# tar xzvf amavisd-new-2.3.2.tar.gz
# cd amavisd-new-2.3.2

以下のファイルをコピーし、パーミッションを適切に設定します。

# cp amavisd /usr/local/sbin/
# chown root /usr/local/sbin/amavisd
# chmod 755 /usr/local/sbin/amavisd

conf ファイルを/etc 内にコピーし、パーミッションを適切に設定します。

# cp amavisd.conf /etc/
# chown root /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf

次に、ウィルスを発見した際のウィルスの隔離ディレクトリ(quarantine area)を作成します。

# mkdir /var/virusmails
# chown amavis:amavis /var/virusmails
# chmod 750 /var/virusmails

ログファイルを作成します。

# touch /var/amavis/amavis.log
# chown amavis:amavis /var/amavis/amavis.log


■amavisd.conf の編集

コンフィグファイルを編集していきます。

# vi /etc/amavisd.conf

$daemon_user = 'amavis';
$daemon_group = 'amavis';
//デーモンを起動するユーザは先ほど作成した'amavis'を指定する
$mydomain = 'kororo.jp';
$MYHOME = '/var/amavis';
$TEMPBASE = "$MYHOME/tmp";
$QUARANTINEDIR = '/var/virusmails';
# $daemon_chroot_dir = $MYHOME;
$db_home = "$MYHOME/db";
$helpers_home = "$MYHOME/var";
$pid_file = "$MYHOME/var/amavisd.pid";
$lock_file = "$MYHOME/var/amavisd.lock";
//↑は、上記で作成したディレクトリが必要となる

$DO_SYSLOG = 0;
$LOGFILE = "/var/amavis/amavis.log";
//デフォルトではsyslog にログを書き込むようになっているが、独自のログに書き込むように設定しておく

$virus_admin = "virusalert\@$mydomain"
//ウィルス検出時の通知先アドレスを記述する。デフォルトのままにしておき、後で/etc/aliases を編集する。

$myhostname = 'ns1.kororo.jp';
$notify_method = 'smtp:[127.0.0.1]:10025';
$forward_method = 'smtp:[127.0.0.1]:10025';

# @bypass_virus_checks_maps = (1); # uncomment to DISABLE anti-virus code
# @bypass_spam_checks_maps = (1); # uncomment to DISABLE anti-spam code
//コメントを外すとウィルスチェックとスパムチェック(SpamAssassin)を行わなくなる
//デフォルトでは動作するようになっている

/etc/aliases を開き、以下の行を追加します。kororo の部分は各自のユーザ名に読み替えてください。追加し終えたら設定を反映させるために、newaliases コマンドを実行してください。

# vi /etc/aliases
virusalert: kororo
spamalert: kororo
# newaliases

amavisd.conf のデフォルトは、clamavに関する記述はコメントアウトされているので、コメントを取り除きます。以下の記述の書かれた行の先頭部分のハッシュマークを全て取り除いてください。

### http://www.clamav.net/
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# NOTE: the easiest is to run clamd under the same user as amavisd; match the
# socket name (LocalSocket) in clamav.conf to the socket name in this entry
# When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],

■clamd.conf の再編集

clamd はamavis と同じユーザで稼動していないといけないので、clamd.conf を編集して、User ディレクティヴを amavis に変えておきます。

# vi /usr/local/clamav/etc/clamd.conf
User amavis

同時に上記で設定したclamav のディレクトリやログの所有権もamavis に変更しておきます。

# chown -R amavis:amavis /var/run/clamav/
# chown amavis:amavis /var/log/clamd.log



■Postfix との連携

さぁ、いよいよMTAの設定です。Postfix の設定ファイルであるmain.cf を開き、以下の行を追加します。最後の行あたりに自分がわかりやすい場所に記述しておきましょう。

◎main.cf に追加
# vi /etc/postfix/main.cf

# clamd + amavis + postfix
content_filter = smtp:localhost:10024

次にmaster.cf ファイルに以下のように追加します。「mynetworks=~」には自ネットワークも追記しておきました。-o の前にはスペース、もしくは[TAB]を挿入して下さい。

◎master.cf に追加
# vi /etc/postfix/master.cf

# clamdav + amavisd-new + Postfix
smtp-amavis unix - - n - 2 smtp
 -o smtp_data_done_timeout=1200
 -o smtp_send_xforward_command=yes
 -o disable_dns_lookups=yes

127.0.0.1:10025 inet n - n - - smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o smtpd_restriction_classes=
 -o smtpd_client_restrictions=
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_
sasl_authenticated,reject_unauth_destination
 -o mynetworks=172.16.50.0/27,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
 -o receive_override_options=no_header_body_checks

■デーモンの起動

ここまで終えたら、clamd とamavis のデーモンを起動させてみます。まず先に、clamd を起動させます。実行ユーザが amavis になっていることを確認してください。ログも閲覧してエラーが発生していないかどうか確認してください。

# /usr/local/clamav/sbin/clamd
# ps aux | grep clamd

amavis 3360 0.0 3.3 11972 8464 ? S 18:35 0:00 /usr/local/clamav/sbin/clamd
# tail /var/log/clamd.log

次に、amavis を起動させます。けれども、Perl 関連モジュールの不足により、以下のようなエラーが発生するでしょう。なので、足りないモジュールを片っ端からインストールしていきます。因みに筆者はここのPerl モジュールのインストールで相当苦戦しました。なにかひとつ入れるたびにエラーが発生したりと…(-。-;)。なお、エラーへの対処法は後述いたします。

# /usr/local/sbin/amavisd debug
ERROR: MISSING REQUIRED BASIC MODULES:
Time::HiRes
IO::Wrap
IO::Stringy
Unix::Syslog
Mail::Field
Mail::Address
Mail::Header
Mail::Internet
Compress::Zlib
MIME::Words
MIME::Head
MIME::Body
MIME::Entity
MIME::Parser
MIME::Decoder
MIME::Decoder::Base64
MIME::Decoder::Binary
MIME::Decoder::QuotedPrint
MIME::Decoder::NBit
MIME::Decoder::UU
MIME::Decoder::Gzip64
Net::Server
Net::Server::PreForkSimple

# perl -MCPAN -e shell
We have to reconfigure CPAN.pm due to following uninitialized parameters:

cpan_home, keep_source_where, build_dir, build_cache, scan_cache, index_expire, gzip, tar, unzip, make, pager, makepl_ar
g, make_arg, make_install_arg, urllist, inhibit_startup_message, ftp_proxy, http_proxy, no_proxy, prerequisites_policy,
cache_metadata

/usr/lib/perl5/5.8.3/CPAN/Config.pm initialized.

中略

Are you ready for manual configuration? [yes] no

cpan shell -- CPAN exploration and modules installation (v1.7601)
ReadLine support available (try 'install Bundle::CPAN')

cpan>install Time::HiRes
cpan>install IO::Wrap
cpan>install IO::Stringy
cpan>install Unix::Syslog
cpan>install Mail::Field
中略…


上記で出力された不足モジュールをインストールしてもまだエラーが発生すると思います。エラーの出たモジュールを全てインストールしていきます。/usr/local/sbin/amavisd を実行し、出力されたエラーから必要となるモジュールを探して逐次インストールしていきます。エラーの内容は以下のような感じになると思います。1行目に表示されている「Can't locate Mail/SpamAssassin.pm」に注目すれば、なにをインストールするべきなのかがすぐにわかります。ここでは、SpanAssassin が必要となります。

# /usr/local/sbin/amavisd

Problem in the antispam code: Can't locate Mail/SpamAssassin.pm in @INC (@INC contains: /usr/lib/perl5/5.8.3/i386-linux-
thread-multi /usr/lib/perl5/5.8.3 /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2/
i386-linux-thread-multi

中略

BEGIN failed--compilation aborted at (eval 38) line 14.

# perl -MCPAN -e shell
cpan>install Mail::SpamAssassin

その他にもいろいろと不足モジュールが出てくると思いますが、以下に示すモジュールをインストールしておけばほとんど問題なくなるでしょう。

# perl -MCPAN -e shell
cpan>install Archive::Tar
cpan>install Archive::Zip
cpan>install BerkeleyDB
cpan>install Compress::Zlib
cpan>install Convert::UUlib
cpan>install Digest::MD5

cpan>install IO::Stringy
cpan>install Mail::ClamAV
cpan>install Mail::SpamAssassin
cpan>install Mail::Internet
cpan>install MIME::Base64
cpan>install MIME::Parser

cpan>install Net::SMTP
cpan>install Net::Server
cpan>install Digest::SHA1
cpan>install Convert::TNEF

Perlモジュールのインストール中に、make できない等のエラーが発生する場合は、ダウンロードしたディレクトリへ移動して(デフォルトでは、/root/.cpan/~/モジュール名)、以下のコマンドを実行してみましょう。以下の例では、Archive-Zip のインストール中にエラーが発生したので、ソースディレクトリへ移動してからインストールを実行したものです。

# cd /root/.cpan/build/Archive-Zip-1.15/
# perl Makefile.PL
# make check
# make install

それでもインストールできないときは、cpan シェルにて、force install を実行して強制的にインストールしてみてください。

cpan>force install Convert::TNEF Net::SMTP

また、インストール中にFTPサイトに接続できない場合は、urllist に日本にあるCPANサーバーを追加していきましょう。以下に記述したサーバー名を一通り追加しておけば接続できないということはほとんどないでしょう。なお、cpan シェルを1度抜けるとこのurllist はクリアされてしまいますので注意してください。使用しているルータがPortモード(Active)でしかダウンロードできないような場合はhttp://www.cpan.org/SITES.html からHTTPで接続できるCPANサーバーを選択して追加してください。

cpan>o conf urllist push ftp://ftp.u-aizu.ac.jp/pub/CPAN
cpan>o conf urllist push ftp://ftp.kddilabs.jp/CPAN/
cpan>o conf urllist push ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
cpan>o conf urllist push http://ftp.cpan.jp/
cpan>o conf urllist push ftp://ftp.dti.ad.jp/pub/lang/CPAN/
cpan>o conf urllist push ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/

削除する場合は、CPANシェルから抜けるか、pop URL名とする

cpan>o conf urllist pop ftp://ftp.u-aizu.ac.jp/pub/CPAN

追加したurllist を閲覧する場合は、以下のコマンドを実行します。

cpan>o conf urllist

ここまできたらいよいよ、amavis デーモンを起動させてみます。なにもエラーが出力されなくなったら無事に成功です。なお、画面上にエラーが出力されていなくても10024 番ポートがListen していない状態では正常に起動はしていません。ps コマンドやnetstat コマンド、telnet コマンドできちんとamavis が起動しているかどうか確認してください。コマンド実行時に以下のように表示されれば問題なく起動しています。

# /usr/local/sbin/amavisd start
# netstat -an | grep 10024
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN
# ps aux | grep amavis
amavis 2525 0.1 15.2 46896 39056 ? S 03:05 0:01 amavisd (master)
amavis 2528 0.0 15.5 48152 39784 ? S 03:05 0:00 amavisd (ch2-avail)
amavis 2529 0.1 15.6 48276 39968 ? S 03:05 0:01 amavisd (ch2-avail)
# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.

確認のため、ログファイルの中身も閲覧しておきましょう。いくらやっても起動しない場合は、デバッグのため、/etc/amavisd.conf を編集し、$log_level の値を最大の「5」にしておきましょう。これで、amavis.log に吐くエラー内容がより具体的に表示されるようになるので解決の糸口に繋がります。また、amavisd.conf で$daemon_chroot_dir = $MYHOME; を有効にしていると起動できないのでその時は先頭にハッシュマークをつけてコメントしてから再度、amavisd を再起動させてください。

# tail -20 /var/amavis/amavis.log

以上の設定が全て終えたら、いよいよPostfix を再起動させます。その後で、netstat を実行し、10025番ポートがListen状態にあれば成功です。

# postfix reload
# netstat -an | grep 10025
tcp 0 0 127.0.0.1:10025 0.0.0.0:* LISTEN
# telnet localhost 10025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.kororo.jp ESMTP Postfix

■メールヘッダーの確認

実際に、通常メールやウィルスメールを自分宛に送ってみてメールのヘッダーを確認してみてください。以下のような記述があればきちんとamavis 経由でウィルスチェックが行われていると考えてよいでしょう。

X-Virus-Scanned: amavisd-new at kororo.jp

■amavisd-newの自動起動の設定

amavis の自動起動設定をします。ソースディレクトリに用意されいるamavisd_init.sh を流用します。

# cd /usr/local/src/amavisd-new-2.3.2
# cp amavisd_init.sh /etc/rc.d/init.d/amavisd
# chmod +x /etc/rc.d/init.d/amavisd

各自の環境に合わせてamavisd を編集します。上記のページどおりに進んできた場合は以下の行を編集しておきましょう。

# vi /etc/rc.d/init.d/amavisd

# pidfile: /var/amavis/var/amavisd.pid
prog="/usr/local/sbin/amavisd"

# chkconfig --add amavisd
# chkconfig --level 24 amavisd off
# /etc/rc.d/init.d/amavisd restart

Shutting down amavisd: [ OK ]
amavisd stopped
Starting amavisd: [ OK ]



■PrimaryスキャナとSecondary スキャナの設定

amavis を使うことで、Primary AVスキャナとSecondary AVスキャナの設定を行うことができます。これは、デーモンとして起動しているプライマリスキャナにトラブルが発生した際に、セカンダリスキャナを実行させるようにします。これによって、より安全性が増します。

まず、/etc/amavisd.conf を開いてください。「@av_scanners = ( 」と記述された行より下がプライマリAVスキャナの設定に関する項目です。どのスキャナを使用するかによって行頭のハッシュマークを取り除いてコメントアウトします。青で示した箇所は各環境によって編集する場合があります。「@av_scanners_backup = ( 」と記述された行より下がセカンダリAVスキャナの設定に関する項目です。下記の設定では、プライマリスキャナとして、clamd デーモンを使用し、バックアップスキャナとして、clamscan を実行するように設定してあります。勿論、他にもアンチウィルスソフトがインストールされている場合は異なるスキャナを指定しても構いません。

# vi /etc/amavisd.conf

@av_scanners = ( //プライマリAVスキャナの設定

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

@av_scanners_backup = ( //セカンダリAVスキャナの設定

### http://www.clamav.net/ - backs up clamd or Mail::ClamAV
['ClamAV-clamscan', ['/usr/local/clamav/bin/clamscan'],
"--stdout --disable-summary -r --tempdir=$TEMPBASE {}", [0], [1],
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

以上の編集を終えたら、設定を反映させるためにamavisd を再起動し、ログを確認します。吐き出されたログに赤で示した箇所が現れれば成功です。

# /etc/rc.d/init.d/amavisd restart
# tail -500 /var/amavis/amavis.log | grep clam
Jul 3 15:43:25 ns1.kororo.jp /usr/local/sbin/amavisd[14546]: Using internal av scanner code for (primary) ClamAV-clamd
Jul 3 15:43:25 ns1.kororo.jp /usr/local/sbin/amavisd[14546]: Found secondary av scanner ClamAV-clamscan at /usr/local/clamav/bin/clamscan

最後にテストとして、わざとclamd デーモンを停止し、clamscan でウィルスを検出できるかどうか試してみます。まず、clamd デーモンを停止したら、メールでウィルスを自分宛に送信してみてください。その後で、amavis.log を確認します。以下に示すようなログが吐き出されればセカンダリAVスキャナとして指定したclamscan が正常に実行されたことがわかります。また、ウィルス検出時に送信されるメールアドレス先にも、clamd で検出した場合とは異なる文章が届いていることがわかります。

# /etc/rc.d/init.d/clamd stop
Shutting down clamd
[ OK ]

# tail /var/amavis/amavis.log
ClamAV-clamd: Can't connect to UNIX socket /var/run/clamav/clamd.sock: No such file or directory, retrying (2)

ClamAV-clamd av-scanner FAILED: Too many retries to talk to /var/run/clamav/clamd.sock (Can't connect to UNIX socket /var/run/clamav/clamd.sock: No such file or directory)

WARN: all primary virus scanners failed, considering backups

Blocked INFECTED (Worm.Antim.A)



■Primary をAntivir Mailgate、Secondaryにclamscan

元はといえば、Antivir Mailgate をバージョンアップした際に、送信メールに広告をつけるようになったのでそれがわずらわしいために、clamav のインストールを決意しました。しかし、amavisd-new 経由でAntivir Mailgate を使用した場合はどうなるのでしょうか?それを実験したところ、見事に広告フッターはなくなりました。以下では、プライマリをAntivir Mailgate に、セカンダリにclamscan を使用するように設定していきます。ここまでついてきている方ならやり方は容易に想像がつくと思います。なお、Antivir Mailgate がインストールされていることを前提として解説しています。

まず、postfix の設定ファイルを編集します。

◎main.cf の編集
# vi /etc/postfix/main.cf

# AntiVir Mailgate
content_filter = smtp:127.0.0.1:10024
//Antivir Mailgate 用に設定を追加

# clamd + amavis + postfix
# content_filter = smtp:localhost:10024
//clamav の箇所をコメントアウトする

◎master.cf の編集
# vi /etc/postfix/master.cf

# AntiVir MailGate
localhost:10025 inet n - n - - smtpd -o content_filter=

# clamdav + amavisd-new + Postfix

#smtp-amavis unix - - n - 2 smtp
# -o smtp_data_done_timeout=1200
# -o disable_dns_lookups=yes
# -o smtp_send_xforward_command=yes
#
#127.0.0.1:10025 inet n - n - - smtpd
# -o content_filter=
# -o local_recipient_maps=
# -o relay_recipient_maps=
# -o smtpd_restriction_classes=
# -o smtpd_client_restrictions=
# -o smtpd_helo_restrictions=
# -o smtpd_sender_restrictions=
# -o smtpd_recipient_restrictions=permit_mynetworks,permit_
sasl_authenticated,reject_unauth_destination
# -o mynetworks=172.16.50.0/27,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
# -o receive_override_options=no_header_body_checks

次に、amavisd.conf を編集します。

# vi /etc/amavisd.conf

@av_scanners = (

### http://www.clamav.net/
#['ClamAV-clamd',
# \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
# qr/\bOK$/, qr/\bFOUND$/,
# qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# NOTE: the easiest is to run clamd under the same user as amavisd; match the
# socket name (LocalSocket) in clamav.conf to the socket name in this entry
# When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],
//clamav の箇所を無効にする


# ### http://www.hbedv.com/
['H+BEDV AntiVir or the (old) CentralCommand Vexira Antivirus',
['antivir','vexira'],
'--allfiles -noboot -nombr -rs -s -z {}', [0], qr/ALERT:|VIRUS:/,
qr/(?x)^\s* (?: ALERT: \s* (?: \[ | [^']* ' ) |
(?i) VIRUS:\ .*?\ virus\ '?) ( [^\]\s']+ )/ ],
# NOTE: if you only have a demo version, remove -z and add 214, as in:
# '--allfiles -noboot -nombr -rs -s {}', [0,214], qr/ALERT:|VIRUS:/,
//Antivir Mailgateの箇所を有効にする

@av_scanners_backup = (

### http://www.clamav.net/ - backs up clamd or Mail::ClamAV
['ClamAV-clamscan', ['/usr/local/clamav/bin/clamscan'],
"--stdout --disable-summary -r --tempdir=$TEMPBASE {}", [0], [1],
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
//セカンダリとしてclamscan を使用するようにする

以上で、設定は終了です。後は、avgated を起動させ、Postfix をリロードさせます。実際にウィルスメールを送ってみてウィルスが検出されるかどうか確認してください。また、amavis.log にもPrimary av scanner とSecondary av scanner に何を使用しているか出力されるのできちんと確認しておいてください。また、もうひとつの確認方法として、ウィルス検出時の通知メールにどのウィルススキャナーを使用して検出されたものかがきちんと記述されています。例えばプライマリスキャナにAntivir Mailgate を指定しているならば、通知メールに以下のような記述が見つかるでしょう。

Scanner detecting a virus: H+BEDV AntiVir or the (old) CentralCommand Vexira Antivirus

もしも、clamd で検出したものならば、

Scanners detecting a virus: ClamAV-clamd

セカンダリスキャナとして指定しているclamscan で検出したものならば、

Scanner detecting a virus: ClamAV-clamscan

プライマリスキャナにclamd と Antivir Mailgate 両方指定しているならば、

Scanners detecting a virus: ClamAV-clamd, H+BEDV AntiVir or the (old) CentralCommand Vexira Antivirus

のように表示されます。

さらに、安全性を増したいのであれば、プライマリAVスキャナに、clamd とAntivir Mailgate の両方を設定しておき、バックアックAVスキャナにclamscan を使うようにすることです。プライマリAVスキャナにふたつのデーモンを指定することで、仮にclamd がなんらかのトラブルでダウンしていたとしても、もうひとつのプライマリAVスキャナとして指定しているAntivir Mailgate が(本来の役割はプライマリAVスキャナなのに)セカンダリAVスキャナとしての役割を担ってくれます。さらに、Antivir Mailgate もダウンしていた場合には、バックアップAVスキャナのclamscan が実行されます。clamscan はデーモンではないので確実に実行されます。このように何重にもウィルススキャンをかけておくことでセキュリティの強化が図れます。



■logrotate の設定

ログのローテーションの設定もしっかり行っておきましょう。

# touch /etc/logrotate.d/amavis
# touch /etc/logrotate.d/clamav
# touch /etc/logrotate.d/freshclam

◎/etc/logrotate.d/amavis
/var/amavis/amavis.log {
weekly
rotate 4
missingok
create 0644 amavis amavis
postrotate
/etc/rc.d/init.d/amavisdreload > /dev/null
endscript
}

◎/etc/logrotate.d/clamav
/var/log/clamd.log {
weekly
rotate 4
missingok
create 0644 amavis amavis
postrotate
/etc/rc.d/init.d/clamd reload > /dev/null
endscript
}

◎/etc/logrotate.d/freshclam
/var/log/freshclam.log {
weekly
rotate 4
missingok
create 0644 clamav clamav
}

ログローテートを実行します。

# /usr/sbin/logrotate /etc/logrotate.conf



■参考サイト

⇒Clam Antivirusに関するメモ
⇒ClamAVのページ
⇒Adding ClamAV Anti-Virus to an Anti-SPAM Gateway
⇒Amavis をchroot で動かす







TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円~30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: