FreeBSD 8.4 RELEASE - qmail - ウィルススキャンの設定

クラウディア 
 本ページの設定では、2014年9月以降の「ports」を使用した場合、「qmail」の設定ができなくなっています。  「qmail」の設定については「トップ」ページより、更新日時の新しいものを参考にしてください。
1. Version4 compatible な library のインストール
2. Sophos Anti-Virus のインストール
3. ports を手に入れる
4. qmail-scanner のインストール
5. qmail-scanner 文字化け対策
6. scanning の設定
7. 起動スクリプトの編集
8. scanning 試験
9. virus メールの削除

1. Version4 compatible な library のインストール

 市販のアンチウィルスプログラムで、「FreeBSD」と「qmail」の組合せに対応しているものは、わたしは、「Sophos Anti-Virus」しか知りません。  「Sophos Anti-Virus」は、サーバ用のアンチウィルス製品としては、比較的安価なのでお勧めします。  購入を検討する前に、30日間の製品評価期間もあります。  もし、他にもっと安くてよい、アンチウィルスプログラムを御存知の方は教えてください。  ここでは、「Sophos Anti-Virus」の 30日間製品評価版のインストール方法について説明します。  まず、「Sophos Cybersecurity as a Service: サイバーセキュリティの実現」のサイトに行ってください。そこの「無償評価版のダウンロード」から、辿っていっていくつかの質問に答えれば、「FreeBSD」用の無償評価版アンチウィルスプログラムが手に入れられます。  「Sophos Anti-Virus」の「FreeBSD」用のものは、バージョンにより、インストールする対象が違います。  組合せによって、ライブラリのインストールが必要になります。どういう組み合わせで行うかを示します。
FreeBSD のバージョン使用する Anti-virus必要なライブラリ
5.0 ~ 5.1freebsd.4.5+.tar.ZVersion 4
5.2 ~ 5.5freebsd.5.2+.tar.Z
6.0 ~ 6.4freebsd.6+.tar.Z
7.0 ~ 7.3freebsd.7+.tar.Z
8.0 ~ 8.2freebsd.7+.tar.Z
 「Version 4」のライブラリは標準的なインストールでは、インストールされていませんので、「ports」でインストールします。

/usr/ports/misc/compat4x

2. Sophos Anti-Virus のインストール

 「/tmp」の下に「sweep」というディレクトリを作って、「freebsd.4.5+.tar.Z」をそこに落とします。  そして、Sophos Anti-Virus 用のグループとユーザを作成します。  グループ名・ユーザ名は sweep としなければなりません。グループIDとユーザIDは、自由につけられますが、同じ ID でなければなりません。  例えば、グループID・ユーザID を 5000 として、グループ・ユーザをつくるとしましょう。  /etc/group を編集して

sweep:*:5000:
 という1行を加えて、sweep のグループを作成します。  それから vipw を使用して、ユーザに

sweep:*:5000:5000::0:0:Sophos Anti-virus:/:/bin/sh
 という1行を加えて、sweep のグループを作成します。ユーザ用のコメント、ホームディレクトリ、シェルの指定は、お好みのものをお使いください。  これで、sweep のグループID・ユーザIDの作成は充分です。  それから先ほどダウンロードした、freebsd.4.5+.tar.Z を解凍してインストールします。

> mkdir /tmp/sweep
> cd /tmp/sweep
> tar xvf freebsd.4.5+.tar.Z
> cd sav-sinstall
> ./install.sh
 これでおしまいです。  この作業が終わると、
/usr/local/bin にバイナリファイルがインストールされます。
/usr/local/lib に共有ライブラリがインストールされます
/usr/local/sav にウィルスデータがインストールされます
/usr/local/man にマニュアルがインストールされます
 それから、最新のウィルス定義ファイルを「Sophos」のダウンロードサイトより、取得します(リンク先がわかんなくなりました)。  お手軽なのは、「zip」形式のファイルをダウンロードして、「/usr/local/sav」に落として、解凍するのが一番かなと思います。  「Sophos」のウィルス定義ファイルは、「.ide」という拡張子を持ったファイルです。  「nnn_ides.zip」(nnn は定義ファイルのバージョン番号です) を「/usr/local/sav/」に持っていき、以下の要領で解凍します。

cd /usr/local/sav
unzip nnn_ides.zip
 これで、Sophos Anti-Virus のインストールは完了です。このプログラムには、別途、FreeBSD のマシン自体のウィルスチェックする機能もあるのですが、ここでは、qmail と連動させる方法について記しておりますので、Sophos Anti-Virus のインストールについての説明はここまでとします。  Sophos Anti-Virus を qmail と連動させるには、ここの処理をやってからでないと、先に以降の処理をやると Sophos Anti-Virus をインストールした後、また、以降の同じ作業を繰り返さなければならないので、いずれ Sophos Anti-Virus を導入するつもりであれば、先に Sophos Anti-Virus をインストールすることをお勧めします。

3. ports を手に入れる

 次に、必要な ports を手に入れます。
maildrop   → /usr/ports/mail/maildrop/
nkf        → /usr/ports/japanese/nkf/
Time-HiRes → /usr/ports/devel/p5-Time-HiRes/
 nkf は、日本語コード変換用のユーティリティです。他は、わたしはあまり詳しくは知りませんが、必要なので闇雲にインストールしてください。  これらは、いつものように、make、make install でばっちりですね。

4. qmail-scanner インストール

 qmail-scanner を ports からインストールします。
qmail-scanner → /usr/ports/mail/qmail-scanner/
 make する前に、日本語化するために、以下を行っておいてください。

> setenv LANG ja_JP.EUC

5. qmail-scanner 文字化け対策

 qmail-scanner のインストール時に、--lang ja_JP.EUC で、管理者宛のメッセージは日本語化されるのですが、ウィルス検出した、メールの Subject が日本語だと、その部分が文字化けしてしまいます。  この対策として、/var/qmail/bin/qmail-scanner-queue.pl を2箇所ほど修正します。  まず、1箇所目は、sub email_sender { という個所を探してその関数の

open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sendi
ng quarantine report - $!");
 の行を

open(SM,"|/usr/local/bin/nkf -j|$qmailinject -h -f ''")||&tempfail("cannot open
$qmailinject for sending quarantine report - $!");
 と変更してください。  もう一箇所は、sub email_recips { という関数の

open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sendi
ng quarantine report - $!");
 の行を

open(SM,"|/usr/local/bin/nkf -j|$qmailinject -h -f ''")||&tempfail("cannot open
$qmailinject for sending quarantine report - $!");
 と変更してください。  これで、nkf によって Subject も日本語化されるます。  更に、マシンのパフォーマンスが低い場合、スキャンの時間がタイムアウトすることがあります。デフォルトで、スキャン時間は 120 秒になっています。これを変更する場合は、

my $MAXTIME=20*60;
 の行の数字をもう少し大きくしてみてください。

6. scanning の設定

 qmail-scanner がチェックする内容は、/var/spool/qscand/quarantine-events.txt に書きます。qmail-scanner をインストールしたら、/var/spool/qscand/quarantine-events.txt.sample というサンプルが作成されています。これをコピーしてください。  この中には、

EICAR.COM               69      EICAR Test Virus
Happy99.exe             10000   Happy99 Trojan
zipped_files.exe        120495  W32/ExploreZip.worm.pak virus
ILOVEYOU                Virus-Subject:  Love Letter Virus/Trojan
 などの、有名なウィルスが記述されています。また

.{100,}                 Virus-Date:             MIME Header Buffer Overflow
.{100,}                 Virus-Mime-Version:     MIME Header Buffer Overflow
.{100,}                 Virus-Resent-Date:      MIME Header Buffer Overflow
 などのように、ヘッダがある文字数を超えたら、ウィルスとみなすような設定になっています。  この他、あるファイル名や拡張子のファイルをウィルスとみなすようにするには

whatever.exe    4096    WORM_ALIZ.A Virus
.com            0       Non relocable MSDOS executable binary
 のように記述されています。  この指定は、第1記述子がファイル名または拡張子、第2記述子がバイト数(0 を指定した場合は、どんなバイト数のものも拒否)、第3記述子がウィルスの説明となっているようです。  すべての記述子は、TAB で区切るのがルールです。  既知のウィルスを知っていたり、あるいは、ある特定の記述子のファイルを拒否したい場合は、ここに追加してください。  /var/spool/qmailscan/quarantine-attachments.txt を書き換えたら、

> /usr/local/bin/qmail-scanner-queue.pl -g
 とすれば、

perlscanner: generate new DB file
perlscannner: total of 44 entries.
 てな、メッセージが出力されて、ウィルスチェック用データベースが更新されます。

7. 起動スクリプトの編集

 起動スクリプトを編集して、qmail 実行時に qmail-scanner がキューイングされるようにします。  /usr/local/rc.d/qmail.sh を編集して

#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.
 の下に、3行を加えてください。

#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE
 これで、準備完了です。

> /usr/local/etc/rc.d/qmail.sh start
 で、qmail を起動しましょう。

8. scanning 試験

 ここまで来たら、「qmail」にウィルスチェックの機能が追加されているはずです。  試験してみましょう  まず、1つの試験は、

$ /usr/ports/mail/qmail-scanner/work/qmail-scanner-2.01/contrib/test_installation.sh -doit
 とやります。  以下のようなメッセージが出力され

setting QMAILQUEUE to /var/qmail/bin/qmail-scanner-queue.pl for this test...

Sending standard test message - no viruses...
done!

Sending eicar test virus - should be caught by perlscanner module...
done!

Sending eicar test virus with altered filename - should only be caught by commer
cial anti-virus modules (if you have any)...
Done!

Finished test. Now go and check Email for 管理者のメールアドレス
 管理者のメールアドレスに、4通の「qmail-scanner」からのウィルス警告メールが届けば、試験は成功です。  次に、「Sophos Anti-Virus」をインストールしているのであれば、「/var/spool/qscand/quarantine-attachments.txt」の

EICAR.COM               69      EICAR Test Virus
 の個所をコメントアウトしてください。  そして

/var/qmail/bin/qmail-scanner-queue.pl -g
 で、ウィルスデータベースを再構築します。  下記の内容のテキストファイルを作成し

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
 名称を「eicar.com」とします。  通常、ウィルススキャナが有効になっていれば、作成して、名称を変えたとたんに、ウィルスと判断されて消えてしまうので、この作業の間は、ウィルススキャナを無効にしなければなりません。  「eicar.com」を添付して、メールを送信します。  それで、管理者のメールアドレスに、「qmail-scanner」からのウィルス警告メールが届けば、試験は成功です。  できれば、この試験は「LAN」の外に協力者がいれば、「LAN」からインターネット向けに、インターネットから「LAN」向けに双方向の試験を行って、両方チェックできることが望ましいです。

9. virus メールの削除

 qmail-scanner でウィルスメールを検出するとウィルス警告メールを送信して /var/spool/qscand/quarantine/new/ というディレクトリに対象のメールファイルを保存します。  これは、明示的に削除してやらないと、どんどん溜まっていってしまいます。  これは cron デーモンで定期的に消していきましょう。  /etc/crontab に以下の1行を追加します。

45 0 1 * * root find /var/spool/qscand/quarantine/new/* -mtime +30 -exec rm '{}' \;
 「cron」の指定方法については、詳細は、

man crontab
man 5 crontab
 を参照してもらうこととして、上記の設定は、毎月1日の0時45分に30日以上経過したウィルスメールを自動的に消すように設定しています。
earthcar(アースカー)
神戸養蜂場