2005/03/31(木)mixer.exeの罠

2005/03/31 10:00 PC(全般)
どうも長時間動かしてるとPCの調子が悪くなる。原因を探ってみる。

タスクマネージャで見てみたところ、mixer.exeが300MB超のメモリを消費している事が判明。調べてみたところCreative系のミキサーソフトでメモリリークは頻出問題のようだ。

とりあえず、窓の手で"C-Media Mixer"自動起動を無効に。タスクマネージャからプロセスを殺す。そういやMP3で音飛びしていたのも多分これが原因だろう。Creative系のボードやドライブは入れた記憶がないんだが……

2005/03/21(月)またまた日記CGIで悩む

2005/03/21 6:00 PC(全般)
まあ結論としては、また

カテゴリ本格搭載->全部Nicky!
今のところ->Memo:華式、日記:Nicky!

ということになった。

他のは結局色々試しても、なんか違うんだよなあ。

不満点は色々自己解決。

[1]Nicky!・華式とも検索が大文字・小文字を区別する
特に華式は現在の使い方からすると区別してほしくない。ソースを以下のように改変すれば解決。

nicky.cgi
4413c4414
<               next if( ($Message !~ /$SerchWord/) && ($Title !~ /$SerchWord/) );
---
>               next if( ($Message !~ /$SerchWord/i) && ($Title !~ /$SerchWord/i) );
KShiki.cgi
532c532
<               if($line4Search =~ /\Q$theWord[$n]\E/){
---
>               if($line4Search =~ /\Q$theWord[$n]\E/i){
iオプションを足しただけです。

[2]ソースやコマンドラインが見づらい
<pre>をスタイルでちょっといじってやってつかうことにした。開始・終了タグ行直後の改行が<br>に変換されるの挙動について、Nicky!の作者さんに投げてみる。当たり前なんだが、タグだけの行は<br>にしなければいいような気もする。

[3]華式バグ
今度余裕ができたらまとめて作者さんに投げよう。まだ色々あった気がする。
(1)検索に"式"と入れると文字化け
(2)最近のリファのリンクがおかしい

[4]Nicky!カテゴリ機能
検索とかはきちんと動いてるのだが、各エントリにカテゴリ名が表示されない。自分でいじくってやろうかと思ったのだが、ポケットリファレンスが手元にないのとソースのコピペをやることになりそうなのでげんなりして止めた。書こうと思えば書けないこともない。

#<pre>にするのは暇見つけて書き直してきます。

2005/03/19(土)CPANを使ってみる

2005/03/19 5:00 PC(Linux)
spamassassinやらrazorのソース導入で、aptでperlを管理することに限界を感じてきたので一発CPANを使ってみようかと思い立った。

[1]CPANの基本設定
CPANをインストール
# perl -MCPAN -e shell
インストール手順は盲目的に http://www.kuri3.net/modules/bwiki/?SecureMailに従うことにする。
初回起動なので設定を聞かれので、全部yes,Enter連発で通すが以下2箇所だけ変更。
Parameters for the 'make install' command?
Typical frequently used setting:

    UNINST=1         to always uninstall potentially conflicting files

Your choice:  [] UNINST=1
(1) <a HREF="ftp://ftp.dti.ad.jp/pub/lang/CPAN/">ftp://ftp.dti.ad.jp/pub/lang/CPAN/</a>
(2) <a HREF="ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/">ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/</a>
(3) <a HREF="ftp://ftp.kddilabs.jp/CPAN/">ftp://ftp.kddilabs.jp/CPAN/</a>
(4) <a HREF="ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/">ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/</a>
(5) <a HREF="ftp://ftp.u-aizu.ac.jp/pub/CPAN">ftp://ftp.u-aizu.ac.jp/pub/CPAN</a>
(6)     <a HREF="http://ftp.cpan.jp/" TARGET=_top>http://ftp.cpan.jp/</a>
Select as many URLs as you like (by number),
put them on one line, separated by blanks, e.g. '1 4 5' [] 2 4 5 6
む、ftpにアクセスできない。そういえば、このマシンだとPassive FTPに設定しないとFTPは動いてくれないのだった。

[2]passive FTPに設定する
CPAN上で動く、LWPやNet::FTPでpassive FTPを動かすようにするには環境変数FTP_PASSIVEの設定が必要。
環境変数FTP_PASSIVE=1をセット。とりあえず、/home/urara/.bash_profileに書くことにする。
19a20,21
> export FTP_PASSIVE=1
>
CPANの起動時に設定したいなら、
# perl -MCPAN -e '$ENV{FTP_PASSIVE} = 1; shell'
その他、passive FTP関係の設定を詰めておく。

wgetをpassive FTPで使うために、/etc/wgetrcのpassive_ftpオプション変更
42c42
< #passive_ftp = off
---
> passive_ftp = on
lynxをpassive FTPで使うために、/etc/lynx.cfgのFTP_PASSIVEオプション変更
3154c3154
< #FTP_PASSIVE:FALSE
---
> FTP_PASSIVE:TRUE
ftpコマンドは-pオプションをつけるか、pftpコマンドで起動すればpassive FTPになるようだ。

今のところ必要ではないが、CPAN上でconfをいじってやる。
cpan> o conf ftp /usr/bin/pftp
[3]qmail-scannerに必要なモジュールをインストール
さて、 http://www.kuri3.net/modules/bwiki/?SecureMailに従って必要なモジュールを全部つっこむことにする。で、あれこれインストール。

ところが、
BerkeleyDB,IP::Country::Fast,Pod::Usage
がうまく入らない…… うーん、

BerkeleyDBインストール時のエラー
# : ./not_there/__db_lock.share: そのようなファイルやディレクトリはありません
t/env..........FAILED test 10
と思ったら、後日やり直したところIP::Country::Fast,Pod::Usageに関してはきちんと入った。

ちゃんと入らない原因は、
(1)perl本体もCPANで入れなければいけない
(2)少なくともモジュール類はCPANで全部入れ直さなきゃいけない
(3)単に一部パッケージの依存関係が解決していない
どれだろうか。

CPANだと、/usr/local/以下に入ってしまうのでその関係だろうか(debianだとデフォルトは/usr/bin/perlなどになる)。時間もないのでここで断念。Perlは考えどこだなあ。あっちこっちのディレクトリに分散しちゃってるよ……

[参考サイト]
http://www.fuji.sakura.ne.jp/~yada/talk2000/perl.shtml
http://homepage3.nifty.com/hippo2000/perltips/CPAN.htm
http://tech.bayashi.net/svr/doc/wget.html
http://x68000.q-e-d.net/~68user/net/ext-module.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/18(金)環境変数に関する勘違い

2005/03/18 23:00 PC(Linux)
qmail-scannerインストールに際して、QMAILQUEUE環境変数で混乱したことがあったのでメモ。原因はUnix系の環境変数に関する勉強不足。

これまでの自分の理解だと、Unixの環境変数をシステムにを大域的というか、ユーザーがシェル起動時に設定するものと、システムが起動時に設定するもので構成されていてどちらもシステム全体に影響を及ぼすようなものだと考えていた(Windowsチック)。だからログインシェルでMAILQUEUEを設定してやれば他のプロセスの環境変数もそれに従うように考えていた。

正しくは、Unixの環境変数は個々のプロセスが保持する。環境変数は親プロセスから子プロセスに継承されるものと、そのプロセスだけでしか有効でないものがある。bash系のシェルスクリプトで代入した時点でそのプロセスで有効となり、exportすると子プロセスでも有効になる。

だから、シェルスクリプトに環境変数の設定を書いて実行(シェルの子プロセスでは設定されたが)させ、シェルから確認したら「アレ、設定されてないぞ???」(親に戻ってきたらその設定は消えた)ってのは当たり前なのだな。

正規の環境変数の調べ方は以下。

例:qmailのMAILQUEUE環境変数を調べる
$ ps -e | grep qmail-send
$ cd /proc/<proc_number>/environ
# cat environ | tr '\00' '\n' | grep MAILQUEUE
で、ちゃんと設定されていればOK。trを使っているのは、environに記載される環境変数は\00で区切られているから。

[参考サイト]
man-pagesはちゃんと活用しないとダメだっつの。
http://www.linux.or.jp/JM/html/LDP_man-pages/man5/environ.5.html
http://www.atmarkit.co.jp/flinux/special/proctune/proctune01b.html

2005/03/18(金)swap領域の確保しなおし

2005/03/18 5:00 PC(Linux)
障害対応なので純粋なログ形式で。

spamassassinを使っていると凄まじく重くなっていた問題。原因は物理メモリを使い切ったことなのだが、にしてもこんなに重くなるのは挙動不審だと思ったら、どうやらスワップが設定されていないらしい。

スワップ領域の確認
# free
             total       used       free     shared    buffers     cached
Mem:        124552     110944      13608          0       3608      20852
-/+ buffers/cache:      86484      38068
Swap:            0          0          0
おいおいおいおい!
swapを0にしたことはないぞ。

別の方法で確認。
# cat /proc/meminfo
MemTotal:       124552 kB
MemFree:         13584 kB
Buffers:          3636 kB
Cached:          20856 kB
SwapCached:          0 kB
Active:          45332 kB
Inactive:         4764 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       124552 kB
LowFree:         13584 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:               4 kB
Writeback:           0 kB
Mapped:          31944 kB
Slab:            50476 kB
Committed_AS:   115528 kB
PageTables:       1096 kB
VmallocTotal:   909276 kB
VmallocUsed:       724 kB
VmallocChunk:   908552 kB
# cat /proc/swaps
#
やっぱり動いていない。

起動設定を確認。
# cat /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>               <dump>  <pass>
/dev/hda1       /               ext2    errors=remount-ro       0       1
/dev/hda2       none            swap    sw                      0       0
proc            /proc           proc    defaults                0       0
/dev/fd0        /floppy         auto    user,noauto             0       0
/dev/cdrom      /cdrom          iso9660 ro,user,noauto          0       0
おかしいな。やはり起動設定(fstab)には書かれているし、インストール後にswapの確認をした記憶がある。HDDを入れ替えたときになんかやっちゃったか。
# fdisk /dev/hda

コマンド (m でヘルプ): p

ディスク /dev/hda: ヘッド 16, セクタ 63, シリンダ 77520
ユニット = シリンダ数 of 1008 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/hda1   *         1     73504  37045858+  83  Linux
領域 1 はシリンダ境界で終わっていません:
     物理=(1023, 254, 63) (1023, 15, 63) であるべきです
/dev/hda2         73504     75592   1052257+  83  Linux
領域 2 はシリンダ境界で終わっていません:
     物理=(1023, 254, 63) (1023, 15, 63) であるべきです
/dev/hda3         75592     77520    971932+  82  Linux スワップ
領域 3 はシリンダ境界で終わっていません:
     物理=(1023, 254, 63) (1023, 15, 63) であるべきです
ビンゴ。パーティションがおかしいっつね。うちは色々な理由(ウソ)があってswap以外パーティション切らないでやっているが、hda2は切った記憶がない。サイズも中途半端だし、こいつはなんだろう。

マウント確認。どうでもいいけど、mountって打つとPC-8001を思い出す。
# mount
/dev/hda1 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
sysfs on /sys type sysfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
マウントされてない。

確認のためにマウントして覗いてみる。
# mkdir /mnt/hda2
# mount -r -t ext2 /dev/hda2 /mnt/hda2
# ls -alF /mnt/hda2/
合計 56
drwxr-xr-x    3 root     root         4096  4月 19  2003 ./
drwxr-xr-x    3 root     root         4096  3月 17 20:45 ../
drwxr-xr-x    2 root     root        49152  4月 19  2003 lost+found/

debian:/mnt/hda2/lost+found# ls -alF
合計 52
drwxr-xr-x    2 root     root        49152  4月 19  2003 ./
drwxr-xr-x    3 root     root         4096  4月 19  2003 ../
使われていないよう。hda2パーティション消そう。Linux上でhda3->hda2への差し替え方法が無いか調べてみたけど、なんか怖いことが書いてある情報しか出てこなかったのと今回は時間がないのでPartitionExpertで強引に切り直す。fdiskもようわからんし。

hda2消去、hda1をhda1+hda2まで拡張する。で処理時間3分強。swapがデバイスID:hda3のままなのでいったん消去して確保し直す。PartitionExpertはlinuxのデバイスIDが確認できるところがすばらしいが、変更できるとなおいいのにな。

再起動
# free
             total       used       free     shared    buffers     cached
Mem:        124552     115604       8948          0       2668      40500
-/+ buffers/cache:      72436      52116
Swap:       971924          0     971924
いよし。

[参考サイト]
http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html
http://www.glasscom.com/tone/linux/SysManage/Disk.htm
http://www.a-yu.com/opt/fdisk.html
http://x68000.q-e-d.net/~68user/unix/pickup?mount

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 キャンセル 確認 その他