さてさて、先日のSPAMの記事の最後の方に書いた通り、ベイジアンフィルタを導入してみた。あれからちょっと時間が空いてしまったのには理由がある。
オープンソースで有名なベイジアンフィルタと言えば
- bsfilter
- SpamAssassin
等が挙げられる(っていうか、この2つか知らない:-) )
前職で後者のSpamAssassinを使用していたので今回もサクッと導入出来るであろうと踏んでいたが、それは大きな間違いであった。「やりたいこと」は明確であったのだけど、その「やりたいこと」の1歩手前までは上手く行くんだけど最後の最後でどうしても解決方法が見つからない事ばかり。
「やりたいこと」というのは
- ベイジアンフィルタを導入する
- ベイジアンフィルタにてSPAMと判定された場合はサーバーサイドでSPAMフォルダ(IMAP)に移動する
- 個々のユーザ(メールアドレス)ごとにベイジアンフィルタの判定DBを持たせる
- 以上のことを仮想ドメイン・仮想ユーザ環境で実現する
これだけ。たったのこれだけなのに全てを満たすのに苦労した。
構築にあたって、必須の構成要素は
- MTA: Postfix
- ベイジアンフィルタ: SpamAssassin
とした。(この構成を変更しだすとキリがないので)
巷のWebページでも「Postfix + SpamAssassinによる迷惑メール対策」的な解説ページが多数見受けられたのだが、どのページを見ても、上の「やりたいこと」を全て満たすものではなかった。大抵のWebページが仮想ドメイン・仮想ユーザを想定しておらず、システムの実ユーザ環境での構築方法であった。
そう考えると前職で扱っていた環境は、MTAこそPostfixではなくqmailであったのだけど、「やりたいこと」を全て満たせていたので見事であった。(自分で言うな)
前職で扱っていた仕組みはこんな感じ↓(もう構成とか設定方法をだいぶ忘れているので適当に)
- qmailの仮想ユーザ環境と言えば、vpopmaiが定番であるが、これは使わない。
- qmailの control/virtualdomains を駆使して、仮想ユーザと実ユーザーを紐付ける
- 実ユーザへのローカルメール配送から .qmail経由でprocmailを呼び出す。
- procmailのレシピにてspamassassin(spamc)を呼び出す
- procmailのレシピにてSPAM判定メールをフォルダ振り分け
但し、短所としては赤色文字にあるように仮想ドメイン+仮想ユーザの組み合わせ分だけ実ユーザを作成しなければならなかったので管理が煩雑であった。
今の構成は Postfix + LDAP で仮想ドメイン・ユーザー環境を構成しており、仮想ユーザ宛のメール配送先等の情報はLDAPに格納している。Postfixでもqmailのような仮想ユーザと実ユーザの紐付けは可能であるが、上に挙げた短所を許容したくないためにこのような構成をとった。
よって「やりたいこと」の 4. の条件を次のように厳しくすることとする。
- ベイジアンフィルタを導入する
- ベイジアンフィルタにてSPAMと判定された場合はサーバーサイドでSPAMフォルダ(IMAP)に移動する
- 個々のユーザ(メールアドレス)ごとにベイジアンフィルタの判定DBを持たせる
- 以上のことを仮想ドメイン・仮想ユーザ環境で実現する(完全な仮想ドメイン・ユーザ環境とする)
次記事以降に実際の構築方法を「苦労した点」「解決方法」と共に書いていきたいと思います。




