2005/04/16(土)qmail-scanner(SpamAssassin インストール編)

2005/04/16 5:00 PC(Linux)
Qmail Scannerによるメールスキャンのインストール。
~SpamAssassinインストール編~

SpamAssassinはRBLやBayesを利用する多機能スパムフィルタだ。

今回はこれをqmail-scanner経由でqmailから使えるようにしてみる。

同種のソフトにbogofilterやbsfilterがある。SPamAssassinの良いところはNSに基づいた細かい設定や協調型フィルタリングデータベース(rbl)の利用(その分設定ファイルは異常に長く複雑であるが)が行えるところだろう。その分bogofilterなどに比べると動作速度は遅い(という噂)。単にベイジアンフィルタとして使いたいだけなら、bogofilterの方が早いという情報は良く出てくる。

SpamAssassinをインストールする前に大きなRBLに関しては事前にどれを使うか決めておく必要がある。デフォルトで使えるrblは主に以下3つ。

razor,pyzor,DCC

pyzorは登録が厳しすぎ、DCCは逆に登録が甘すぎるという話で、Razorが一番使い易いらしい。今回はRazorのみ使用する。

[1]Razorのインストール
# apt-get install razor

Sorry, but the following packages have unmet dependencies:
  razor: Depends: libdigest-sha1-perl but it is not going to be installed
         Depends: libnet-dns-perl but it is not going to be installed
         Depends: libtime-hires-perl (> 1.20-3)
         Depends: libmailtools-perl but it is not going to be installed
依存関係で怒られて入らない。またもやperl5.6<-->5.8問題? 怪しいところで以下をピックアップしてインストール。
# apt-get install libdigest-sha1-perl/testing
# apt-get install razor/testing
今度は入った。

Razor用の設定ファイルを作成するために以下のコマンドを打つ。
# razor-client
# razor-admin -d -create -home=/etc/razor
[2]SpamAssassinのインストール
ログが大混乱しているので、ハマリは別記事にかいた。これは正当手順(と思われるもの)。

(1)
いつも通りaptで取ってくる。
# apt-get install spamassassin/testing
モジュールが足りてないようなので、
# apt-get install libhtml-parser-perl/testing
# apt-get install libnet-dns-perl/testing
(2)
設定ファイルで、spamassassinを有効にする。
/etc/default/spamassassin

ENABLED=0

ENABLED=1
に書き直す。

注意!:/etc/init.d/spamassassinのENABLEDを書き換えても動かないので注意

/etc/default/spamassassin
OPTIONSに-F 0を追加

(3)
spamdを動かす
# /etc/init.d/spamassassin start
(4)
qmail-scannerを生成し直す。qmail-scannerインストールの記事を参照。
# ./configure --lang ja_JP.EUC --admin root --scanners clamdscan,verbose_spamassassin --notify recips,admin --domain dt8.jp --install
テスト。
# contrib/test_installation.sh -doit
このテストで通常メール1通と、ウィルス告知メール2通と、スパム判定されてスパム本体が添付に入っているメール1通が送られてくればインストール成功。

[3]SpamAssassin設定
(1)設定調査
SpamAssassinの設定ファイルで日本語もケアしているもので探したところネット上で2つ発見した。

unix-power
http://www.unix-power.jp/linux/local.txt
tlec
http://tlec.linux.or.jp/docs/user_prefs

自分のところに来たメール30通ほどをそれぞれこの設定で処理にかけ、良い方をベースに調整していくことにする。

テストに使用したメールは、ham側(hamは非スパムメールのこと)はDMやMLを中心に誤判定されそうなものをピックアップ、spam側はいくつかは誤判定されそうなものを入れるようにしたが基本的には無作為抽出した。

テスト結果は以下の通り。
--spam--
   unix-power	tlec
1	22.9 	34.5 
2	26.8 	35.0 
3	20.8 	23.2 
4	13.8 	23.9 
5	10.6 	15.8 
6	13.7 	19.3 
7	28.1 	35.4 
8	22.7 	28.3 
9	 6.4 	 9.8 
10	 9.9 	17.0 
11	 5.6 	13.9 
12	19.9 	28.5 
13	15.4 	30.3 
14	12.4 	19.3 
15	24.3 	27.8 
16	 7.6 	11.9 
17	 7.8 	12.1 
18	20.4 	25.0 
19	15.8 	16.0 
20	 0.2 	10.4 

--ham--		
1	 6.4 	10.9 
2	 5.5 	 7.6 
3	 0.5 	 5.4 
4	12.9 	12.9 
5	 5.9 	 7.8 
6	-1.4	 2.2 
7	 6.3 	11.2 
8	-2.4	 2.8 
9	 6.3 	 9.2 
10	-0.4	 3.0 
11	 3.0 	19.1 
SpamAssassinは各テストの結果をスコアとして加算し最終的にそのメールのスパム/非スパムを判定する。表の数字はスコアだ。

色々考えたが、tlecのものをベースに少し弄ってみることにする。

(2)調整
tlecの出力結果&設定ファイルと延々にらめっこした結果、tlecの設定では

・x-mailerの点は高すぎる。
・SJISNOTXMAILERの点は高すぎる。
・Razor関係の点は低すぎる。
・BLARS関係の点も若干低い。
・URIBL関係の点も若干低い。
・required_hitsは低すぎる。

ということがわかった。このあたりを調整すればいいのだが、下2つ

・BLARS関係
・URIBL関係

はどうやら怪しいRBLだからわざと点が低くしてあるらしい。となると気になるのがRazorの信頼性だが、自分が試した31通では

Spam is Spam 19/20
ham is Spam 0/11

と非常に優秀。

設定ファイルには、「Razor2は間違えることがあるから個別にはあまり点を与えません」と書いてあるのだが、Razorのみに頼っていい気がする。SpamAssassinの評判が悪いのは、Razorの初期点が低いことにあるのではないだろうか(SpamAssassinはDCCやPyzorも使うことを前提としているが、あまりみんなやらない)。

X-MAILERはX-MAILERヘッダをチェックするルールであるが、最近のスパムはあまりつけてこない上にX-MAILERルールには一般的なDM、ML送信ソフトも含まれているようなのでスコア下げ。

SJISNOTXMAILERはXMAILERヘッダが無くbodyがSJISの場合起動するが、普通のbodyがSJISのパターンでも2.0与えているので、ここまで攻撃的にするのはきつすぎると判断しスコア下げ。

hamが全部はいる範囲にrequired_hitsを調整。本当はもう少し点を高くすべきなのだろうが、ham11がspamと判定されても致し方ないような酷いメールなのと、spam19がspam判定されないのはちょっと問題のように思える内容だったので15を採用。

合わせて、auto_learnのthresholdも調整。

結局以下のようにした。

required_hits 8.0 -> 15.0
X_MAILER 7.0 -> 3.0
SJISNOTXMAILER 7.0 -> 2.0
RAZOR2_CF_RANGE_51_100 2.5 -> 7.0

また
error: rule 'GB2312_CHARSETContent-Type' has invalid characters (not Alphanumeric + Underscore)
error: rule 'CONTENT_TYPE_PRESENTexists:Content-Type' has invalid characters (not Alphanumeric + Underscore)
error: rule 'X_MAILER_PRESENTexists:X-Mailer' has invalid characters (not Alphanumeric + Underscore)
とエラーが出るので(単に空白が足りてない)、それも修正した。

添付になるのはいまいちなので、report_safeとrewrite_headerを弄ってsubject書き換えに変更。
3.0と2.0系で指定方法が若干変わっているので注意。
[参考]
http://itc.sfc.keio.ac.jp/announce_open/20050124-spamassassin.html


以下、(元) http://tlec.linux.or.jp/docs/user_prefsと(修正後)/etc/spamassassin/local.cfのdiff。
81c81
< required_hits 8.0
---
> required_hits 15.0
128c128
< header GB2312_CHARSETContent-Type =~ /charset=['"]?GB2312['"]?/i
---
> header GB2312_CHARSET Content-Type =~ /charset=['"]?GB2312['"]?/i
180c180
< score X_MAILER          7.0
---
> score X_MAILER          3.0
451,453c451,453
< header CONTENT_TYPE_PRESENTexists:Content-Type
< describe CONTENT_TYPE_PRESENTexists:Content-Type
< score CONTENT_TYPE_PRESENT-0.1
---
> header CONTENT_TYPE_PRESENT exists:Content-Type
> describe CONTENT_TYPE_PRESENT exists:Content-Type
> score CONTENT_TYPE_PRESENT -0.1
1243,1245c1243,1245
< header X_MAILER_PRESENTexists:X-Mailer
< describe X_MAILER_PRESENTexists:X-Mailer
< score X_MAILER_PRESENT0.1
---
> header X_MAILER_PRESENT exists:X-Mailer
> describe X_MAILER_PRESENT exists:X-Mailer
> score X_MAILER_PRESENT 0.1
1261c1261
< score SJISNOTXMAILER 7.0
---
> score SJISNOTXMAILER 2.0
1323c1323
< score RAZOR2_CF_RANGE_51_100 2.5
---
> score RAZOR2_CF_RANGE_51_100 7.0
2787a2788,2790
> # urara add 05/04/16
> bayes_auto_learn_threshold_nonspam 0.5
> bayes_auto_learn_threshold_spam 30.0
>
> report_safe 0
> rewrite_header subject [SPAM(Score=_SCORE_)]
この設定で先ほどの31通を再テスト。
--spam--
1	42.8 
2	39.8 
3	29.2 
4	29.8 
5	24.1 
6	25.2 
7	40.0 
8	35.9 
9	17.3 
10	23.1 
11	24.8 
12	37.0 
13	37.5 
14	26.8 
15	35.8 
16	20.6 
17	20.8 
18	34.0 
19	16.2 
20	25.0 

--ham--	
1	10.9 
2	 7.6 
3	 5.4 
4	10.0 
5	 7.8 
6	 2.2 
7	11.2 
8	 2.8 
9	 9.2 
10	 3.0 
11	14.1 
ギリギリだが全てham is ham, spam is spamになった。

これで当分運用してみる。そのために、メインのメールをこっちに廻さないと行けないのでそれはまた次回。

最後に忘れないように、spamd用に再起動。
# /etc/init.d/spamassassin restart
注意)
・spamdは再起動しないとコンフィグを読み込まない。
・spamassassinは/etc/spamassassinの*.cfを全部読み込むようだ。

[参考サイト]
わかりやすいのはここ2つかなあ
http://www.kuri3.net/modules/bwiki/?SecureMail
http://www.unix-power.jp/linux/qmail-scanner.html

http://blog.momo-i.org:81/archives/2004/12/
http://cgipocket.com/newhtml/linux/qmail2.html
http://www.nishnet.ne.jp/anti-spam.html
http://www.aconus.com/~oyaji/suse/spamassassin_suse.htm
http://ssss.jp/~trombik/email/spamassassin.html
http://lab.sakasta.com/unix/spamassassin.html

[設定の出所]
http://tlec.linux.or.jp/topic.html
http://www.unix-power.jp/linux/local.txt

[bogofilterの話とか]
http://uva.jp/dh/mt/archives/000509.html
http://hotwired.goo.ne.jp/webmonkey/2003/09/index2a_page4.html

[日本版のRBL]
http://www.rbl.jp/

[日本語訳]
http://www.fkimura.com/SpamAssassin1.html <-最初にここ知ってればねえ。ちょい古ではありますが
http://ssss.jp/~trombik/eng/

[後付でbayesっぽく使う方法]
http://www.siscom.or.jp/spamassassin.html

2005/03/19(土)qmail-scannerインストール時に遭遇した問題

2005/03/18 25:00 PC(Linux)
qmail-scannerインストール時に遭遇した問題メモ

なんか色々あり過ぎて、整理し切れていない。引っかかったところを中心に覚えている限りでメモしておく。作業ログ流れで、通常インストール手順とかぶるところもあり、いい加減なところもあり。
[1]suidperlのパーミッション設定

qmail-scannerインストールに関する多くのドキュメントでは、suidperlのパーミッションを変更するように書いているが、debianの場合suidperlはperlへのシンボリックリンクに過ぎない。よってパーミッション設定は不要。弄ると多分perlが動かなくなる。

(×:動かなくなった悪例)
# chmod 4711 /usr/bin/suidperl
Perl CGIが全滅した。
# chmod 755 /usr/bin/suidperl
で書き戻し。
[2]qmail-scannerのインストールテストが成功しない問題

<qmail-scanner.plの設置等はすでに終わっているとして>

qmail-scannerのsrcフォルダから、
# contrib/test_installation.sh -doit
4通のテストメールのうち1通目(通常メール)だけは送られてくるが、2通目でエラーを出して止まってしまう。エラーは以下の通り。
Sending eicar test virus - should be caught by perlscanner module...
qmail-inject: fatal: qq temporary problem (#4.3.0)
Bad error. qmail-inject died
チェックすべきログは、/var/spool/qmailscan/qmail-queue.logと/var/log/mail.err。

原因としてはclamavが動いていないか、メールデータにアクセス失敗している可能性が高い。

/var/spool/qmailscan/qmail-queue.logを覗くと、
/var/spool/qmailscan/tmp/debian111060900649323497: Access denied. ERROR
がたくさん出ている。アクセス権問題であるので、

/etc/clamav/clamd.conf
User clamav

User qscand
に変更。

clamavを再起動しようとすると、
# /etc/init.d/clamav-daemon restart
psで確認しても存在していない。立ち上がっていないようである。

/var/log/clamav/clamav.logを見ると、
Sat Mar 12 18:05:27 2005 -> ERROR: Socket file /var/run/clamav/clamd.ctl could n
ot be bound: Permission denied
今度はclamavの一時ファイルにアクセスできなくなってしまったようだ。これはパーミッションを弄ってやれば良い。
# chgrp qscand /var/run/clamav
# chmod 775 /var/run/clamav
clamavの実行ディレクトリグループのみをqscandに変えてパーミッションを775にしてやる。若干荒技になるが、でも777よりはましだろう。

再び再起動
# /etc/init.d/clamav-daemon restart
立ち上がった。
# contrib/test_installation.sh -doit
4通送信中、2と3(ウイルス入り)が配信されなくなった(1はノーマル、4はスパム。recipsオプションが無かったので配信されなくなった)。しかしこの状態では外部からの通常メールが配信されないことが発覚。以下次項に続く。
[3]qmail-scannerを使うと通常のメールが配信されない問題

(注:この問題はswap再設定によって再現性が無くなった可能性があります)

qmail-scannerインストールの過程で、テスト時に躓いた問題。結論はメモリ問題だが、エラーメッセージが特殊なのでメモ。

<qmail-scanner.plの設置等はすでに終わっているとして>

外部からウイルスなどが含まれない通常のメールを送っても配信されない。QMAILQUEUEの設定を切り替えて、qmail-scanner.plを介さずqmail-queueに渡すように設定する。
QMAILQUEUE="/var/qmail/bin/qmail-queue"
export QMAILQUEUE
と、きちんと動く(QMAILQUEUEを使っている以外は基本のqmailの挙動と同じ、もちろんウイルスはそのまま)ので、QMAILQUEUEがいけないわけではないらしい。うーん、qmail-scanner-queue.plのどっかで躓いている。

/var/log/mail.errを見ると、
Mar 14 01:38:51 debian X-Qmail-Scanner-1.25: [debian11107319314933436] cannot
 open  /var/spool/qmailscan/quarantine-attachments.db - No such file or directory
もちろん、ファイルは存在している。最初はパーミッション問題かと思ったが、実はメモリ確保が不足している問題。つまずいたところでたまたま出たエラーがNo such~ということのようだ。下記サイトなどを眺めていてやっと分かった。

http://slashdot.jp/journal.pl?op=display&uid=779&id=150799
http://sourceforge.net/mailarchive/message.php?msg_id=6806272
http://qmail-scanner.sourceforge.net/FAQ.php

メモリ確保にはqmailの起動スクリプトのulimit値を上げてやる。

/etc/init.d/qmail
53c53
<       ulimit -v 8192
---
>       ulimit -v 10240
いくつが最適値なのかはちょっと分からない。

#swapが原因だったのか再現性が無くなったようなので、現在ulimitを8192に戻して運用中。

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

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

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

今回長いのとトラブル頻出したので、インストール記事3ステップとトラブル記事に分けて書く。

[1]インストール
debianのtestingでも問題が出たので、unstableを入れた。Versionは0.83-3
# apt-get clamav/unstable
動作確認。
# ps -e | grep clam
19213 ?        00:00:00 freshclam
24801 ?        00:00:03 clamd
ウイルス定義ファイル更新daemonのfreshclamとスキャン用のclamdが動いている。clamdはdaemonで動いているが、別にリアルタイムブロックしてくれるわけではない(はず)。daemonで動いているのは単に定義ファイルの読み込みが1回ですむからという理由のようだ。詳しくは[参考サイト]を見るといい。

[2]user権限変更
必ず必要なのが以下2点。他は設定しなくても大丈夫そうだ。

(1)clamdはqmail-scanner用のユーザqscandで動かす。
/etc/clamav/clamd.conf
User clamav

User qscand
に変更。

再起動
# /etc/init.d/clamav-daemon restart
(2)clamdがtmpやソケットを作れなくなってしまうので、パーミッションを弄る。
# chgrp qscand /var/run/clamav
# chmod 775 /var/run/clamav
このディレクトリ構造はdebianパッケージに強く依存するようなので、ソースからインストールした場合は[参考サイト]を参照した方がよい。

[3]clamのdaemon動作をチェックする
daemontoolsを使えば他のdaemonも含めて管理できるようだが、今回はシェルスクリプトとcronで定期的にプロセスが動いているかどうかを監視することにする。

/etc/cron.daily/check_clamを作成し、以下の内容とする。
#!/bin/sh
if [ `ps -ef| grep /usr/bin/freshclam| grep -v grep| wc -l` != 1 ]; then
  message="freshclam stopped!"
  echo $message | mail -s "daemon Caution! : freshclam" urara@dt8.jp
fi

if [ `ps -ef| grep /usr/sbin/clamd| grep -v grep| wc -l` != 1 ]; then
  message="clamd stopped!"
  echo $message | mail -s "daemon Caution! : clamd" urara@dt8.jp
fi
1日おきにclamdとfreshclamが動いているかどうかを調べ、動いていなかったらメールを投げる。

ps -ef でフルパス指定しないと命名によってはこのスクリプト自体がgrepに引っかかる。grep -v grepは出力結果にgrep自体が含まれるので、"grep"が含まれているものを取り除く(反転する)。最初これを忘れていて混乱した。

なんでこんなことをするかというと、止まってすぐ分かるサービスと違って、freshclamは気づきにくくかつセキュリティへの影響が大きいから。ぶっちゃけ、一時サービスが止まってたことがあって心配なのでしばらくチェックさせたいのだ。本当はcronで書いちゃえばすむ話。

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

clamav本家
http://clamav-jp.sourceforge.jp/jdoc/clamav.html
OK キャンセル 確認 その他