2005/03/15(火)qmail-scanner(qmail-scanner インストール編)

2005/03/15 11:00 PC(Linux)
clamavとQmail Scannerによるメールスキャンのインストール。
~Qmail Scannerインストール編~

Qmail Scannerをインストールしてウイルスチェックが出来るところまで。

●Qmail Scannerには以下のパッケージが必要。
・unzip
zip添付を開くのに必要
・Perl 5.005_03+以上
-PerlのTime::HiResモジュール
ナノセカンド精度のタイマーモジュール
-PerlのDB_Fileモジュール
Berkeley DB によって提供されている機能をPerlプログラムで使えるようにする
-suidperl
ディストリビューションによってパッケージ名が違う。debianではperl-suid
・MailDropのreformime
MIMEの展開・再構成に使うっぽい
・TNEF
MS OEやExchangeがリッチテキスト形式のメールを送る際に添付する、application/ms-tnefタイプの情報を読めるようにする。この時普通の添付もこれに吸収されてしまう?
・qmailqueue-patch
環境変数QMAILQUEUEを使えるようにする。qmailはQMAILQUEUEで設定されたキューにメールを渡すようになる。

[1]unzip確認
$ which unzip
/usr/bin/unzip
[2]perlバージョン+モジュール確認+perl-suidインストール
(1)Perlバージョンの確認
$ perl -v

This is perl, v5.8.3 built for i386-linux-thread-multi
(2)モジュールの確認
$ perl -mTime::HiRes

$ perl -mDB_File

$ perl -mSys::Syslog
Can't locateで怒られないのでインストール済み。

(3)suidperlのインストール
aptをtestingにして、
# apt-get install perl-suid
チェックしたのに、依存関係でperlのバージョンが5.8.4-7に上がってしまいました。

インストール確認
$ which suidperl
/usr/bin/suidperl
[3]MailDropのreformimeインストール
reformineだけで良いようだが、素直に全部ぶち込むことにする。
# apt-get install maildrop
インストール確認
$ which reformime
/usr/bin/reformime
courier-maildropはメルサバCourier専用だろうか。普通のmaildropで良いと思う。

[4]TNEFインストール
# apt-get install tnef
インストール確認
$ which tnef
/usr/bin/tnef
[5]qmailqueue-patchインストール
debianパッチにQMAILQUEUEパッチが含まれていたためこの作業は必要無し。

以下、気づかずに進めたときの作業ログ
練習の意味も込めてパッチを当て直す。
# cd /usr/src/qmail-src/
# wget    <a HREF="http://www.qmail.org/qmailqueue-patch" TARGET=_top>http://www.qmail.org/qmailqueue-patch</a>
# tar -xvzf qmail_1.03.orig.tar.gz
# cd qmail-1.03/
# patch -p1 <../qmail-date-localtime.patch
# patch -p1 <../qmailqueue-patch
# zcat ../qmail_1.03-36.diff.gz | patch -p1
としたところで、
Reversed (or previously applied) patch detected!  Assume -R? [n]
と2回ほど注意される。conflictというより、単にdebianのpatchに含まれてるのではないかと思い、grepしたところ、
# zcat ../qmail_1.03-36.diff.gz | grep MAILQUEUE
++    binqqargs[0] = env_get("QMAILQUEUE");
++                variable QMAILQUEUE. Also known as qmailqueue patch.
++QMAILQUEUE
++  if (env_get("QMAILQUEUE")) {
++    logstring(2,env_get("QMAILQUEUE"));
+    binqqargs[0] = env_get("QMAILQUEUE");
これは含まれているっぽい。debian本家に調べに行くと、 http://packages.debian.org/changelogs/pool/non-free/q/qmail/qmail_1.03-36/changelogに、
qmail (1.03-21) testing unstable; urgency=low

  * Added QMAIL-QUEUE patch
となっているので、追加済み確定。

[6]qmail-scannerインストール
(1)qscandユーザー追加
# groupadd qscand
# useradd -g qscand -s /bin/false qscand
(2)ソースダウンロード
最新版は1.25
http://prdownloads.sourceforge.net/qmail-scanner/qmail-scanner-1.25.tgz
からソースをダウンロード(sourceforgeだからwgetじゃダメ)。

(3)インストール
$ tar -xvzf qmail-scanner-1.25.tgz
$ cd qmail-scanner-1.25
# ./configure

/usr/bin/reformime contains bugs. Please upgrade to a release
that post-dates Mar 22 2002 (e.g. 1.3.8)
reformimeが古いと怒られた。
# apt-show-versions -a -p maildrop
maildrop        1.3.7-2 install ok installed
maildrop        1.3.7-2 stable
maildrop        1.5.3-1.1       testing
maildrop        1.5.3-1.1       unstable
maildrop/stable uptodate 1.3.7-2
なので、testingを入れることにする。
# apt-get install maildrop/testing
# ./configure
スクリプト生成プログラムのテストが通ったので、ちゃんと生成し直す。
# ./configure --lang ja_JP.EUC --admin root --notify recips,admin --domain dt8.jp --install
    • langは通知メールの言語、--adminと--domainは合わせて管理者メルアドだと思ってよい。--notifyは通知のポリシー決めで、recipsは受信者、adminは管理者へそれぞれ通知する。ウイルスメールの場合詐称があるので、送信元アドレスは当てにならずsenderは使いづらい。Stray Penguinにlsndr(ローカルの送信者)に通知するパッチがあるが、きちんと動くなら不用意にウイルスに感染した自ドメインのユーザへの自動通知が出来る? 今後の課題だろうか。adminの代わりにml宛先を除いたnmladmが使われることも多い。自分にはml宛先ウイルスを通知することによる不利益が今ひとつぴんと来ないので、当面adminで使う。その他の通知先は[参考サイト]を参照。
基本的にはENTER連発でスクリプトのインストールまで完了する。

(4)QMAILQUEUE設定
/etc/init.d/qmail

に以下のdiff2行分を追加。
35a36,38
> QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
> export QMAILQUEUE
>
qmailの起動スクリプトにQMAILQUEUEの設定をしておく。起動スクリプトは環境によって違うがtcpserver起動の前に設定されるようにしておけば大丈夫だろう。

(5)ulimit修正
同じく、
/etc/init.d/qmail
のulimitの値を変更。
53c53
<       ulimit -v 8192
---
>       ulimit -v 10240
メモリ制限はQMAIL-SCANNERの頻出問題だ。私はこう理解している。デフォルトでqmailは自身の起動にギリギリ程度のメモリ値を設定ファイルに記述する。qmail-scannerを介し使うようにした時に、その設定値を超えてスクリプトがストップすることがある。想定外のストップにスクリプトは止まった箇所によって様々なエラーを吐く。ファイルがないといわれたり、パーミッションが違うと言われることもある。それで数多の管理者を混乱させるのだ。qmail-scannerインストール時には、このメモリ制限問題とパーミッション問題がよく起こる。発生したら適切に切り分ける必要がある。daemontools使用時?はulimitではなく、softlimitの設定値かもしれない。

(6)日本語euc->JIS修正
ウィルス告知メールがeucで飛んでくる。文字化けするメーラーも結構あるのでJISに修正してやる。
1876c1876
<   open(SM,"|$qmailinject -h -f ''")||&error_condition("cannot open $qmailinject for sending
 quarantine report - $!");
---
>   open(SM,"|/usb/bin/nkf -j|$qmailinject -h -f ''")||&error_condition("cannot open
 $qmailinject for sending quarantine report - $!");
2003c2003
<   open(SM,"|$qmailinject -h -f ''")||&error_condition("cannot open $qmailinject for sending
 quarantine report - $!");
---
>   open(SM,"|/usr/bin/nkf -j|$qmailinject -h -f ''")||&error_condition("cannot open
 $qmailinject for sending quarantine report - $!");
要するに、qmailinjectの前にパイプでnkfを挟んでやるだけだ。2箇所修正が必要。

(7)起動とテスト
qmailを再起動
# /etc/init.d/qmail restart
テスト
# contrib/test_installation.sh -doit
4通のメールのうち2通目と3通目がウィルス告知メールになっていれば成功だ。1通目は通常メールで、4通目はスパムテスト用なので、この段階では配信されるはず。

http://www.eicar.org/anti_virus_test_file.htm

からテストウィルスを落としてプロバイダ経由で送信(注:怒られる危険性があるのであんまりやってはいけません)すると、管理者宛と受信者宛に2通通知が届くことを確認する。

プロバイダ経由で普通のメールの送受信も確認しておく(メモリ制限問題でqmail-scannerが止まる場合、届かないことがある)。

あとは多量のウイルスで検査するも、放っておくも良し。

[参考サイト]
ここがわかりやすい。
http://www.asahi-net.or.jp/~aa4t-nngk/qmail6.html

以下はそれぞれ微妙に情報か解説が不足している。
http://www.atmarkit.co.jp/flinux/rensai/qmail08/qmail08c.html
http://www.itmedia.co.jp/help/howto/security/special6/02.html
http://www.tom.sfc.keio.ac.jp/~torry/ldap/ldap.html#doc10_1122
http://www.unix-power.jp/linux/qmail-scanner.html
http://www.fkimura.com/qmail0.html

関係する情報
http://www.i-ml.jp/cgi-bin/bbs/memo.cgi?m=e
http://moin.qmail.jp/
http://www.planet-green.com/linux/qmail.html
OK キャンセル 確認 その他