Clam Antivirus とamavisd-new
とPostfix を連携させてウィルスを撃退させます。
|
|
■Clam Antivirus のダウンロード
※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 のダウンロード
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 を閲覧する場合は、以下のコマンドを実行します。
ここまできたらいよいよ、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 で動かす