WaterMind PC Blog

PCとネットワークに関するニュースコラム.

バーチャルドメインにおけるPostfix+amavisd-newでSpam判定ができない?

2009-04-14 16:09:07 | ソフト
昨日の続き.Postfix+Postfix.admin+MySQL+Dovecotの組み合わせで,バーチャルドメイン,SMTP認証,TLS暗号化によるメールサーバ構築中なのだが,Spam及びウイルス対策として,amavisd-new+clamav+spamassassinを組み込むことになった.

 ClamAVのインストールと設定は,比較的簡単であり,amavisd-newをインストールすればspamassassinもインストールされるため,比較的順調に作業は進んだ.

 ほぼ設定が完了したところで,テストウイルスを添付してクライアントで送受信を行ったところ,どちらもメールは削除された.これでメールウイルス対策は問題ないだろう.続いてSpam判定のテストを行うために,テスト用Spamメールをサーバに送信してみた.クライアントで受信したところ,なんとSpam判定されていない!

 受信したメールのヘッダには,amavisd-newを経由した証拠である「X-Virus-Scanned: amavisd-new at …」が存在しているため,フィルターは経由しているようだった.

 とりあえずログを見てみると,なんとしっかりとSpamと判定している!それでは,なぜメールに,Spam関係のヘッダ追加や,amavisd.confで指定してあるメールタイトルの変更が起こらないのか?いままで,設定してきた他のサーバでは,現在の設定で問題なくSpam判定ができていたのに…

 そこから,ネットをさまよい,各種設定ファイルをいじくり,サーバの再起動を繰り返し,テストを行うという果てしない放浪の旅が始まった.

 うまくいっていた以前のサーバと異なるのは,今回はバーチャルドメインによる運用という点だ.従っておそらく原因は,バーチャルドメインにあるのだろう.ネット上には,やはりバーチャルドメイン運用者で同じような悩みを持った者もいたのだが,なぜかその質問にはレスがついていない.困った…

 ほぼあきらめかけていた頃,ネット上に「X-Spamのヘッダが入らない」という同じ悩みを持つブログを発見した.それはまさにこの問題に対する直接的な答えだった.その答えとは

amavisd.conf:

# @local_domains_maps = # using ACL lookup table
# ( [ ".$mydomain", 'sub.example.net', '.example.com' ] );

すなわちamavisdのローカルドメインの指定にあった.デフォルトではここの部分は
@local_domains_maps = ( [ ".$mydomain"] );
となっているはずで,このローカルドメイン変数$mydomainには,最初に取得したドメイン名を設定ファイルの冒頭で指定していた.

 ところが今回はバーチャルドメインであり,複数のドメイン名を扱っているため,$mydomainはドメイン省略名としてあまり意味がなかったのだ.この@local_domains_mapには,バーチャルドメインで扱っているすべてのドメイン名を指定する必要がある.

 テストの時に使用していたメールアドレスが,偶然にも,$mydomainで指定してあったドメイン名と異なっていたため,Spam判定はしても,そのメール自体には何の変化もなかったわけだ.

 とりあえず@local_domains_mapにすべてのドメイン名を指定して,amavisdを再起動し,再びテスト用のSpamメールを送信してみた.すると今度は,見事にSpam判定のヘッダが追加され,タイトルには,Spamであることを知らせる文字列が冒頭に追加されていた.できた\(^O^)/

 というわけで,バーチャルドメイン運用でSpam判定のできない方は,amavisd.confの@local_domains_mapをチェックしてみてください.<完>


postfix エラー「sql_select option missing」

2009-04-14 00:02:50 | ソフト
SMTPサーバソフトの代表格「Postfix」は多機能なフリーのSMTPサーバソフトだ.ただ様々な運用形態に対応しているため,設定がややこしい.特に「Postfix.admin」を使って,webによってサーバ管理を行う場合は,データベースも絡んでくるために,なおさらだ.

 今回,watermindでは,Postfix+Postfix.admin+MySQLによるSMTPサーバ構築を試みた.メールは,バーチャルドメイン,SMTP認証,TLSを使用した.ほぼ構築が完了した後,テストを開始したのだが,その時に奇妙なメッセージがログに出ていることに気づいた.それが

sql_select option missing
auxpropfunc error no mechanism available

の2つだ.

 SMTP認証をMySQLで直接行うために,sasl2用のsmtpd.confを作成してあったのだが,その記述に間違いがあったようだった.

 ところが実際に,smtpd.confを見ても,何もおかしいことはなかった.しかもメールの送信は,クライアントから問題なくできていた.なんだろう?

 いろいろ試行錯誤したあげく,「もしかしたらsmtpd.confが読み込まれておらず,別の認証方法が採用されているのでは?」と思いついた.

 とりあえず,smtpd.conf内に記述されているMySQLデータベース接続用のパスワードを,わざと間違った物に変えてみた.その後,クライアントから送信すると,なんと送信できてしまった!これはまずい!

 そこでとりあえず,インターネットをさぐってみると,意外にもこのメッセージで悩んでいる人が多かったのだが,その答えは単純だった.その答えとは,

このメッセージは,sasl2とopenldapの両方を
インストールする場合に表示されるが,
別段害はないので無視してもよかろう.

というものだった.確かにサーバにはopenldapもインストールされていたため,エラーメッセージの原因はそんなところだろうと納得した.

 この答えを見つけて,やや安堵したが,まだsmtpd.confの問題が解決されていないではないか!そこでさらにネットの闇の中を探索していくこととなった.

 そしてようやく答えにたどり着くことができた.その答えとは

32bit版(/usr/lib/sasl2)と
64bit版(/usr/lib64/sasl2)とでは,
smtpd.confの配置ディレクトリが異なる
そうだったのだ!今回のサーバはレンタルサーバだったのだが,詳しいスペックを確認していなかったため,てっきり32bit版だと思っていたのだ.ところが実際は64bitであったため,自分が/usr/lib/sasl2に作成したsmtpd.confは全く無視されていたというわけだ.

 そういえばサーバ構築の参考にしたページでは,まるで最初からそのディレクトリ(/usr/lib/sasl2)が存在しているかのような書き方だったのだが,こちらのサーバ(CentOS4)には,そのディレクトリが存在せず,自力でディレクトリを作成したのだ.その時に,いやな感じが確かにあったのを覚えている.また/usr/libディレクトリ内が妙に寂れているのも不気味に思えたのだが…

 さっそく,/usr/lib64に移動してみると,そこは大都会!ファイルのごった返す華やかなディレクトリであり,その中にsasl2ディレクトリも存在していた.さらにsasl2内にはデフォルトのsmtpd.confが存在し,saslauthdをパスワード確認の方法として採用していた.メール送信ができてしまった謎も解けた!

 というわけで,smtpd.confを書き換え,MySQLデータベースによるパスワード確認の方法に切り替えてみたところ,例の2つのエラーメッセージは,きれいにログから消え去っていた.クライアントからのメール送信も問題なし.こうしてやっと一件落着したものの,このエラーメッセージが出続けている他のサーバは大丈夫なのか?と思い,少し身震いをした.<完>