spamdの -H オプション

投稿: 2004年1月19日

Spam対策に SpamAssassin を使うようになって久しい。導入直後から、 spamassassinコマンドではなく、 spamd/spamcの組み合わせを使いたいと思っていたのだが、どうも思うような 結果が得られずに困っていた。

背景

SpamAssassinの機能的な面や、 spamに対する効果の点では、かなり満足し ているといっていいだろう。しかし、 spamassassinコマンドは Perlスクリプ トで、フィルタリングにこれまた Perlスクリプトの mailagentを使っている と、いちいち spamassassinを呼ぶのはなかなか重いものである。 (特に今使っ ている PCの状況からすると、ときどきこれは苦しいことがある。) そこで、 ずいぶん前から (焼け石に水という気がしなくもないが) spamassassinコマン ドではなく、 spamd/spamcの組み合わせに置き換えたいと考えていた。

ところがである。なぜか同じメールを渡してやっても、 spamassassinと spamcでは違う結果が返ってくる、という現象が、初めて spamd/spamcを試し たときから発生していた。特に、 spamcを使ったときには razor2のチェック がされていないように見えるのだ。 mailagentのルールの中で、 razor2 にリ ストされているメールは、有無を言わさず spamフォルダに落とす、という設 定にずいぶん助けられている私にとって、これは致命的な問題だった。という ことで、しばらく spamassassin を使い続けてきたのである。

ところが最近、管理しているメーリング・リストのモデレータのところに 落ちてくる spamの量が劇的に増えていて、これがかなりうっと〜しく感じら れる。そこで、モデレータに落ちる前に spamassassinで弾きたい、という欲 求が日に日に強くなってきた。しかし、それをやるならやはり spamd/spamcに したい、という気持ちもあり、結局、若干の現実逃避の必要性があった今日、 取り組んでみることになった。

やったこと

利用環境は、 FreeBSD Ports Collectionから p5-Mail-SpamAssassin を入 れたものである。 (当然現時点での最新の port を使っている。) これで入る /usr/local/etc/rc.d/spamd.sh を使って spamdを起動してあれこれ試してみ た。が、やはり spamc経由と spamassassinコマンド経由だと結果が異なる。

そこで、今度は -Dオプションをつけて詳しい debug情報を取りながら動か してみた。すると、どうやら spamcを実行している一般ユーザに、 spamdが setuid() した後に、そのユーザのホーム・ディレクトリの下にある .razorを 見に行っていないことが分かった。あれこれ悩んだあげく、環境変数 HOMEを 空にして試してみると、これでうまくいった。

解決策

ということで、 /usr/local/etc/rc.d/spamd.sh の中で、 ${HOME} を空に してから spamdが起動されるようにすれば無事解決…、と書こうと思ってから もう一度 spamdの man pageを見てみると、なんと -Hなるオプションがあるで はないか…。そして、ちゃんと読んでみると、これを適切に設定しないと razorなどが正しく動かない、ということが分かる記述もある…。ということ で、 /etc/rc.conf に
spamd_flags="-a -c -d -H"
と書いてやって無事解決…、と思ったら、今度は /var/run/spamd.pid が作ら れなくなった。 (って、これは当然なんだけれど…。) ということで、正解は
spamd_flags="-a -c -d -r /var/run/spamd.pid -H"
ということだ。 (最初から spamd専用のユーザを作ってやってればこういう目 には会わずにすんだような気がすごくするのだが…。)

結論

man pageはちゃんと読もう

そうしていれば、ほんとにちょっとした現実逃避、で終わったはずなのだ。 (^^;;