メッセージ

2005年03月19日の記事

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