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

2004/12/16(木)apache死亡事件顛末 in perl5.8 <-> perl5.6.1

2004/12/16 17:00 PC(Linux)
apacheを殺してしまった問題。

一番最悪の殺人方法で、apacheのパッケージを削除してしまった。

原因。なぜ入れたのかは覚えていないが、現在インストールされているのがperl-5.8(unstable)。で、perl-5.6系でないと動かないパッケージを入れようとしたところ、dselectの依存解決に任せていたら、↓こんなことになった。

The following packages will be REMOVED:
aalib1 abiword abiword-common abiword-gtk abiword-plugins apache
apache-common apache-dev apache-utils apel ark asiya24-vfont autoconf
automake css-mode defoma docbook docbook-xml dpkg-dev emacs21 fontconfig
gconf gdk-imlib1 gdm gnome-s gnome-bin gnome-common gnome-core
gnome-libs-data gnome-panel gnome-panel-data gnome-session gnome-terminal
gnome-users-guide gs gs-common gsfonts gsfonts-x11 html-helper-mode
imagemagick imlib-base imlib1 jdk1.1 jvim-canna kab kaffe-pthreads karm kate
kcalc kcharselect kchart kcoloredit kcron kde kdebase kdebase-audiolibs
kdebase-libs kdelibs3 kdelibs3-bin kdepasswd kdepim-libs kdf kdict kdm kedit
kfind kformula kfract kghostview khexedit kiconedit kinput2-canna-wnn kit
kivio kjots kmail knewsticker knode knotes koffice koffice-libs konqueror
konsole kontour korganizer korn koshell kpackage kpaint kpm kpresenter
kruler kscreensaver ksirc ksnapshot kspread ksysv kterm ktimer kugar kuser
kview kword lbxproxy libapache-mod-ruby libarts libdbd-mysql-perl
libdbi-perl libfontconfig1 libgconf11 libgdk-pixbuf-gnome2 libgdk-pixbuf2
libgimp1.2 libglade-gnome0 libglade0 libgnome-vfs-common libgnome-vfs0
libgnome32 libgnomeprint-bin libgnomeprint-data libgnomeprint15
libgnomesupport0 libgnomeui32 libgnorba27 libgtk1.2 libgtkxmhtml1
libimage-size-perl libkdenetwork1 libkmid libkonq3 libmagick5
libnet-daemon-perl libplrpc-perl libqt2 libungif4g libwmf0.2-2 libxaw7
libxft1 libxft2 mc-common mew mozilla mozilla-browser mozilla-mailnews
mozilla-psm mysql-client mysql-server nessus openssl perl perl-modules php4
php4-dev php4-mysql proftpd proftpd-common proxymngr psfontmgr rep-gtk rpm
sawfish scrollkeeper secpolicy sgml-base sgml-data skk skkinput
ttf-xtt-wadalab-gothic ttf-xtt-watanabe-mincho twm vflib2 watanabe-vfont
x-ttcidfont-conf x-window-system x-window-system-core xaw3dg xbase-clients
xdm xemacs21 xemacs21-basesupport xemacs21-bin xemacs21-mule
xemacs21-support xfonts-abi xfwp xlib6g xlibs xnest xterm yc-el

どうもperl(perl-5.8)を削除しようとしたらしい。慌てて止めたが、後の祭り。消えた可能性があるのを全て確認し、入れ直した。もしかすると、動いてないdaemonがあるかもしれない他、apache上でのperl-CGIの実行速度が落ちた気がする。

実行速度が落ちたことに関して考え得る原因:
1.apacheのパッケージが狂った
2.perlのパッケージが狂った
3.apacheでmod_perl,speedycgiかなんかが動いていた

1. 2.は分からないのでとりあえずおいておくとして、3に関してはmod_perl.soやspeedyCGIが入っていた形跡がないので、可能性としてはmod_pelのapacheへの静的コンパイル。記憶あやふや。

とりあえず、トップページのカウンターを入れ替えてごまかす。
e-counterだとcgiを5回呼び出すことになるので、夢カウンターに。……これで前の実行速度の感覚に近づくってことはやっぱりmod_perlがくさいのだがどうだろう。

perl 5.6への巻き戻し方法はよくわからない。日本語ソースもないが、英語ソースもどうも?

2004/12/06(月)数式-&gt;画像

2004/12/05 26:00 PC(全般)
数式が1個画像で突然欲しくなった場合どうするか。

Texで1から書くのはいかにもめんどくさい……
ということで、Microsoft数式エディターをPowerPointで使い、「図として保存」コマンドでjpg or gif or pngで書き出すのが楽だろう。

なお、この「図として保存」コマンドは背景色が設定されていないと黒ベタ画像を吐く。

つまり、


  1. 挿入->オブジェクト->Microsoft 数式3.0
  2. 開いた数式エディタWindowで編集->終了
  3. オブジェクトの書式設定->色と線->塗りつぶし->色:白
  4. オブジェクト選択->右クリック->図として保存


という手順になる。保存時のサイズ調整・パレット選択等は出来ないが、PowerPoint上での拡縮は比較的まともに動くのでサイズが合わなかったら目分量でサイズ変えて再出力。

JustSystemやOpenOfficeの数式エディタもさわってみたけれど、手早くということならMSのをWord or PowerPointで使うのが一番使い易かった。

花子あたりでMSの数式エディタが扱えれば良かったのだが、Word,PowerPoint以外だと数式エディタの挙動が変わり、この状態になるとどうも怪しい。BackSpaceが効かなくなることもあるし、編集終了すると画像に固定されるようで、拡縮がうまくできなくなる。

まあそんな感じで。数式が複数出現する文書とかなら、まあやっぱりTexなんだろうな。余程のよれが無い限りTexはあと1年ちょっとで永久卒業。数式コマンドを全部覚えてーなんて考えは持たないようにしたい。WinShell,EasyTexは使えるのかいな…… 次回チェックだな。
<追記>
知り合いからMimeTex.cgi(Texの数式を画像にしてくれるcgi)を使ってはどうかと勧められた。自サーバにおいて、数式を張りたいところに数式コマンドとリンクを書く。

うーん、それがいいやり方の1つだというのは納得できるがイマイチしっくり来ないのはなぜだろう? 外部画像がいやなのか。amazonだったらOKなのに? 著作権問題があるから納得できる?

それと1つ書きたいときというのがたいてい自分であれこれ考えながら数式を書いているときだというのがある。wysiwygじゃないと使えないのだ。あとはCってのはどうなんだろうな。このサーバ潰れたら外部リンクだよな。

2004/10/26(火)tgif format(.obj) -&gt; eps

2004/10/26 16:00 PC(Linux)
拡張子が.objであるtgifフォーマットから、ghostview等で見られる.epsへの変換方法。

tgifがある環境で、コマンドラインから

$ tgif -print -eps *.obj

で一括変換可能。

しかし、tgifはwindows版無いのな。そろそろcygwin包囲網が狭まっている予感。

2004/09/27(月)WinSCP -&gt; CSC(Solaris)

2004/09/27 16:00 PC(Linux)
WinSCPでCSCに入ると、ファイルリストの取得に失敗する問題。

"ディレクトリのリストに不正な行"と言われてしまう。
原因に関してはここを参照。
http://www.tab2.jp/~winscp/requirements.html

上記サイトと見比べながら"ls -al"をあちこちで打ってみて判明。cscではグループがリストされない。グループがないとWinSCPはパースに失敗し、上記のエラーメッセージを出す。

さて、原因はわかったのだが、対処方法にいまいち納得がいかない。WinSCPはこの事態を想定したオプションを備えているようなのだが……

ログイン設定の、環境-SCP-その他のオプション-LSにグループ名を追加、がまさにこれに該当するはずなのだがやったところでうんともすんとも。

そんなわけで以下のようにした。

1.ログイン側の.cshrcに
alias ls 'ls -g'
を追加。

2.ログイン設定の、環境-SCP-その他のオプション-エイリアスのクリアのチェックを外す。

3.ログイン設定の、環境-SCP-シェルの入力で、
/bin/csh
とする。

これで一応動く。なんか変だ。

2004/08/17(火)imp-550の怪

2004/08/17 4:00 家電
iRiver製MP3&CDプレイヤー SlimXことimp-550。

ACアダプタに挿して、充電モードにしても充電されていない事件が多発。ちょいと調査。

・現象 アダプタに挿して、再生->停止長押し->充電モードに移行後1分程度で充電画面が消えてしまう。確認してみると、これ以降充電は行われていない。

・試験
1.ファームウェア1.7,1.50b,1.4と試して全部アウト。
2.load default効果無し。
3.再生していると充電はしている。
4.以前は間違いなくこの状態で充電できた。
5.charge functionをdischarge & charge on(放電してから充電)にすると、充電まで問題なく完了。ただし、charge functionの設定は1回ごとに(?)消える。

・搦め手
ガム型2次電池の充電器を捜索。
1.専用充電器だとSony製(BC-9HM,BC-7HT)を発見。9HMが急速充電器。それ以外の仕様が見つからず、2本同時に充電できるかも分からない。その他のは、ほとんどがMD等の付属品。ただ、メーカー製のガム型電池はそれぞれサイズが微妙に異なるらしく、人によってはビニル被膜を剥かなきゃ入らないとかいう記事をいくつかみかける。値段はそれぞれ3k前後。

2.Saitek製、ニュースーパーチャージャーとかいうガム電池対応にも対応した充電器発見。ただしバカ高い。8k前後する。

3.太陽光発電のもの発見。ただこれは結局電池をもう1セット買えということだから本末転倒。どうかと思う。

搦め手全滅。結局、毎回放電設定にするのが正解くさいのです。同様の症状は掲示板でもよく見かけ、大抵iRiverに修理を求めるという対策。iRiverの対応は宜しいらしいので、悩みどこですが、私の場合その他の不具合が出てないのが実は当たりのような気もしてるので、うかつに修理・交換に走ると後悔する羽目になるやもしれません。いやもう、多いんですよ掲示板見てると。故障報告が。

しばらく騙し騙し使ってみます。あと、fw1.7は変な報告が多いので1.50bにしてあります。

2004/08/16(月)超急速充電器 TC-S40

2004/08/16 23:00 家電
テクノコアのTC-S40を買いました。仕様雑感、というか充電時間のメモ。

東芝 1550mAh x 4 で、2時間45分程度。もうちょっと早く終わるはずでは? という気がするものの、今までと比べると雲泥の差。なにより、東芝充電器だと最早満充電でQV-SX8000のバッテリーランプが一杯にならなかったのですが、きちんと真っ白になってます。

問題は\5,500というこの価格ですが…… 代替がなければ出していい値段かも。他の超急速とかだと、メーカー限定になっちゃうしこれで良いと思うんだよなー

そんなわけで、購入目的であるところの利点はばっちり体感できました。熱くならないのもイイネ。

ただ、しばらく使って確認してみないと何とも言えませんけども過充電(というかこいつの場合は暴走?)は怖いので、自宅にいるときしか充電は出来ないです。でも東芝充電だと充電できてないのと変わらないのだ。
さて、一応ざっとメモリ効果とか調べたのでまとうめ。

とりあえず、2chの家電-デジカメ&家電に充電池スレ有り。
参考、こことか。
http://www.geocities.co.jp/HeartLand-Icho/4112/Digicame/Ni_Hd.html

不活性化-自己放電により電流が流れにくくなる現象。見かけ上容量も電圧も下がる?
メモリー効果-継ぎ足し充電により電池容量が見かけ上下がっていく現象。
自然放電-ニッケル水素電池の場合30~50%/月程度放電してしまいます!

理解は間違っているかもしれないが、おおざっぱこんな感じでいいと思う。メモリー効果は実際気にしなくても良いらしい。せいぜい10%くらい? 一般にメモリー効果と思われているものは、安全第一or適当検出で一杯まで充電しない充電器の問題だそうな。

問題になるのは不活性状態だとか。TC-S40だと、大電流で充電するためにこいつの活入れが出来るらしい……

リチウムイオンならこういった現象はおこらないですが、充電器の自作は私の腕じゃ無理&危険! ファイナル。

2004/08/12(木)Comic Studio-縁取り

2004/08/12 15:00 お絵かき
縁取りしたいところを選択してから、選択範囲の拡張、メニュー-編集-選択範囲の塗りつぶし-透明部分に描画・白。もう1度選択範囲の拡張、選択範囲の塗りつぶし-透明部分に描画・黒。

多分代替手段だと思う。選択範囲を線に、が無いはずはないと思うのだが……
OK キャンセル 確認 その他