Postfixのぺーじ | ||
− AMaViSとSophos Anti-Virusによるウィルススキャン | ||
更新: 2005年2月19日 | [English Page] |
ホーム >オリジナルドキュメント >AMaViSとSophos Anti-Virusによるウィルススキャン
ML の記事 に触発されて、 Postfix にウィルススキャナを導入してみた時の記録です。
ウィルススキャンソフトには、 Sophos Anti-Virus (SAV) for UNIX を用いました。このソフトには30日間のお試し期間があります (以前は FreeBSD/Linux 版の個人利用がフリーと記載された、 SAV の代理店のページが存在しましたが、現在は削除されているようです。 ライセンスに関しては各自でお確かめください)。
ファイルシステム内のみを検索するウィルススキャンソフトでは、 メールに含まれる MIME エンコードされたり uuencode された ウィルスを見つけることはできません。そこで、メールの添付ファイルを デコードしてウィルススキャンソフトに渡すためのインターフェースが 必要となります。
今回は Postfix と SAV のインターフェースには、 Postfix と相性がよいといわれる AMaViS を利用しました。 これは GNU GPL で配布されています。
Postfix-jp ML に山内さんが InterScan VirusWall と組み合わせる方法 を報告されているので、こちらも参照してみて ください。
Postfix は Release-20010228 PL04 を用いました。
今回のインストールには FreeBSD 4.3 を用いました。 他の環境の方はファイル名などを環境に合わせて読み変えてください。
ダウンロードしたアーカイブは全て /tmp/src にあるものとします。
アーカイブの展開のために unzip などのソフトが必要になるので、 あらかじめインストールしておきます。
また、# はスーパーユーザでの実行をあらわし、% は一般ユーザでの 実行をあらわします。シェルは csh 系を仮定してるので、bsh 系の 方は読み替えて下さい。
ダウンロード のページから、対応するプラットホームの Sophos Anti-Virus (今回は 「Sophos Anti-Virus for FreeBSD (ELFフォーマット)」 [freebsd.elf.tar.Z]) と、「最新ウイルス対応ファイル(IDEファイル)」の 「各バージョンに対応したIDEファイル (IDEファイルを全て含んだZIP圧縮ファイル)」(2001.8.28 現在では 348_ides.zip が最新) をダウンロードします。
お好みの場所でアーカイブを展開し、コンパイルします。
% setenv SRCDIR /tmp/src % cd ${SRCDIR} % tar xvzf freebsd.elf.tar.Z % cd sav-install % su # vi /etc/group # sweep グループの作成。次の行を追加する。 sweep:*:12346: # vipw # sweep ユーザの作成。次の行を追加する。 sweep:*:12346:12346::0:0:virus checker:/nonexistent:/sbin/nologin # rm -f /usr/local/lib/libsavi.* # アップデートの場合、古いライブラリの削除 # ./install.sh # less /etc/sav.conf # 念のために sav.conf の中身をチェック。 # cd ${SRCDIR} # mkdir ides # cd ides # unzip ../348_ides.zip # cp *.ide /usr/local/sav (FreeBSD 4 以降の場合のみ) # /stand/sysinstall [Configure] - [Distributions] - [compat3x] を選択し、インストール。
sweep -v で読み込まれている IDE ファイルの情報等が得られます。
Postfix で AMaViS を利用するには2通りの実装方法があります。
前者はセットアップが簡単ですが、メール配送プログラムとして AMaViS を 使うため、.forward でメールを転送しようとしたり、 procmail などの外部ソフトに渡す場合にはウィルススキャンが 実行されないこと、スキャンのための一時ファイルを world writable な ディレクトリに置く必要があること (sticky bit は使用可能です)、 home_mailbox = Maildir/ が使えないことなどがあります。
後者は Postfix queue デーモンが AMaViS に SMTP でメールを渡し、 Postfix smtpd が AMaViS からスキャンされたメールを受けとるので、 そのような問題はありませんが、若干設定が面倒(らしい)です。
ここではまず、両者に共通な設定を記述します。
AMaViS-perl を利用するには、次の各ソフトが必要になります。
また、次の perl モジュールが必要です。
Perl モジュールを手動でインストールし、 かつ送受信のメールのスキャンをおこなう場合 (AMaViS の configure で --enable-smtp を付ける場合)、
も必要です (参考: [postfix-jp:01318])。 下の自動化をする場合には、Bundle::libnet のインストールに含まれるようです。
CPAN shell で自動的にネットワークから モジュールをインストールすることも可能です。この場合には、
# perl -MCPAN -e shell
を実行してから、プロンプトで
install Unix::Syslog install Convert::UUlib install Convert::TNEF install Compress::Zlib install Archive::Tar install Archive::Zip install G/GB/GBARR/MailTools-1.15.tar.gz install MIME::Tools install Bundle::libnet
の順で実行すれば、必要なモジュールが全てインストールされます。 CPAN shell を利用しない場合は、各モジュールのアーカイブを展開し、 全てのモジュールについて以下のコマンドを実行します。
# cd module-dir # perl Makefile.PL # make # make test # make install
依存関係から、一部のモジュール (MIME-Baes64, IO-stringy, libnet) は 先に入れてやる必要があるかもしれません。
また、ウィルスが検出された時に警告メールが送られる virusalert を aliases に入れておきます。
# vi /etc/aliases (次の行を追加する) virusalert: root
MDA (Mail Delivery Agent) 用のフィルタとして AMaViS を用いるのであれば、 AMaViS の構築はデフォルトのままでよいようです。
AMaViS のダウンロードページ から AMaViS-Perl のソースをダウンロードします (2001.8.28 現在の最新版は amavis-perl-11.tar.gz)。
% setenv SRCDIR /tmp/src % cd ${SRCDIR} % tar xvzf amavis-perl-11.tar.gz % cd amavis-perl-11 % ./configure % make % make check % su # make install
この設定で AMaViS を使う場合には、ウィルススキャン用の一時ファイルを 置くディレクトリを world-writable にする必要があります。
# chmod 1777 /var/amavis /var/virusmails
Postfix 側では、mailbox_command として AMaViS を使うように設定する 必要があります。
# vi /etc/main.cf (次の行を追加する) mailbox_command = /usr/sbin/amavis "$SENDER" "$RECIPIENT" # postfix reload
Postfix の設定はこれだけです。
ウィルス感染していないメールを送ると、/var/log/maillog には 次のように記録されます。
Aug 28 17:23:07 localhost amavis[55685]: starting. amavis perl-11 Sat Aug 25 23 :40:10 JST 2001 Aug 28 17:23:08 localhost amavis[55685]: do_exit:400 - ending execution with 0 Aug 28 17:23:08 localhost postfix/local[55683]: BCE053F49: to=<ike@localhost. localdomain>, relay=local, delay=3, status=sent ("|/usr/sbin/amavis "$SENDER" "$RECIPIENT"")
ウィルスに感染したファイルを見つけると、/var/log/maillog には次のように 記録されます。
Aug 28 14:15:43 localhost amavis[55025]: starting. amavis perl-11 Sat Aug 25 23 :40:10 JST 2001 Aug 28 14:15:44 localhost amavis[55025]: Virus found - quarantined as virus-2001 0828-141544-55025
そして送信者には
From: postmaster@localhost.localdomain To: ike@localhost.localdomain Subject: VIRUS IN YOUR MAIL Date: Tue, 28 Aug 2001 20:37:21 JST V I R U S A L E R T Our viruschecker found the 'W32/Sircam-A' virus(es) in your email to the following recipient(s): -> ike@localhost.localdomain Please check your system for viruses, or ask your system administrator to do so. For your reference, here are the headers from your email: ------------------------- BEGIN HEADERS ----------------------------- (以下略)
という警告メールが、virusalert 宛には
From: postmaster@localhost.localdomain To: virusalert@localhost.localdomain Subject: FOUND VIRUS IN MAIL from ike@localhost.localdomain Date: Tue, 28 Aug 2001 20:37:21 JST A virus was found in an email from: ike@localhost.localdomain The message was addressed to: -> ike@localhost.localdomain The message has been quarantined as: /var/virusmails/virus-20010828-203721-56119 Here is the output of the scanner: >>> Virus 'W32/Sircam-A' found in file /var/amavis/amavis-02133168/parts/msg-561 19-1.com Here are the headers: ------------------------- BEGIN HEADERS ----------------------------- (以下略)
というメールが送られます。本来のメールの受信者にはデフォルトでは 送信されません。必要であれば ./configure 時に --with-warnrecip=yes オプションを加えます。
AMaViS の README.postfix では送受信両方のメールをスキャンする方法として 2つの方法を上げています。
前者は2つの Postfix を起動する必要がある、ローカルホストから SMTP (port 25) を通さずに送られたメールはスキャンできない、 メールログ解析ツールが(2つの Postfix からのログによって)混乱する おそれがある、といった問題があります。
後者はそれらの問題はありませんが、直接 (デフォルトでは) port 10025 に SMTP 接続されるとウィルススキャンをバイパスできてしまうので、 他のホストからの port 10025 への接続をフィルタリングする必要が あるでしょう。
今回は2つ目の、contents_filter を利用した方法を紹介します。 前者のやりかたは using amavis with postfix (by 佐藤さん) や AMaViS 附属の README.postfix を参照して下さい。
この方法では AMaViS の構築時に、configure にオプションを与える 必要があります。下記の実行例のオプション以外に、AMaViS を動かす デフォルトユーザ vscan、 AMaViS からのメールを受信する SMTP ポート 10025 を変更するには、それぞれ --with-amavis-user=USER、 --with-smtp-port=PORT といったオプションを与える必要が あります。
% setenv SRCDIR /tmp/src % cd ${SRCDIR} % tar xvzf amavis-perl-11.tar.gz % cd amavis-perl-11 % ./configure --enable-smtp --enable-postfix
ここで
** Configuration summary for amavis perl-11 2001-04-07
で始まる行を見て、configure がうまくいっているか確認してください。
Enable SMTP: no
になっている場合には、libnet モジュール (Bundle::libnet ではない) がインストールされていないかもしれません。 モジュールのインストールの記述を参考に インストールして configure をやり直してください。
% make % make check % su # vipw # ユーザ vscan の追加。group はとりあえず nobody に入れておく。 vscan:*:12347:65534::0:0:virus checker:/nonexistent:/sbin/nologin # make install
こちらの設定では、/var/amavis, /var/virusmails ディレクトリは world-writable にしてはいけません。
% ls -ld /var/amavis /var/virusmails drwx------ 2 vscan wheel 512 8/28 21:23 /var/amavis/ drwx------ 2 vscan wheel 512 8/28 21:23 /var/virusmails/
Postfix 側では、contents_filter 機能を使う設定が必要になります。 詳しくは Postfix のアーカイブに附属の FILTER_README ファイルを 参照して下さい。
# vi /etc/postfix/main.cf (次の行を追加する) content_filter = vscan: # vi /etc/postfix/master.cf (以下の行を追加する。継続のための空白も忘れずに。) vscan unix - n n - 10 pipe user=vscan argv=/usr/sbin/amavis ${sender} ${recipient} localhost:10025 inet n - n - - smtpd -o content_filter= # postfix reload
これにより、ウィルスに感染したメールが見つかった場合には、 受信専用の設定の時と同じようなログが /var/log/maillog に記録され、警告メールがメール送信者とサーバ管理人 (virusalert) に送られます。