Debian etchでDSPAMを試す
Postfixと連動させるSPAMフィルタとしてここ2週間ほどDSPAMを試しているのだけど、情報が少ないこともあって悪戦苦闘している。まだちゃんと動いていないのだけど、とりあえずこれまでのあれこれを忘れない為にメモ。
DSPAMのパッケージを見てみると、以下のものが用意されている。
# apt-cache search dspam dspam - is a scalable, fast and statistical anti-spam filter dspam-doc - Documentation for dspam dspam-webfrontend - DSPAM is a scalable and statistical anti-spam filter libdspam7 - DSPAM is a scalable and statistical anti-spam filter libdspam7-dev - DSPAM is a scalable and statistical anti-spam filter libdspam7-drv-db4 - DSPAM is a scalable and statistical anti-spam filter libdspam7-drv-mysql - DSPAM is a scalable and statistical anti-spam filter libdspam7-drv-pgsql - DSPAM is a scalable and statistical anti-spam filter libdspam7-drv-sqlite3 - DSPAM is a scalable and statistical anti-spam filter #
今回は、ストレージにMySQLを使用するので以下をインストール。WEBベースのインターフェースは全て設定できてからインストールしても大丈夫なはず。
# apt-get install dspam dspam-doc dspam-webfrontend libdspam7-drv-mysql
なお、libdspam7-drv-mysqlのインストール途中、MySQLの設定を色々聞かれるので任意の値を指定する。途中でキャンセルして後で設定ファイルを直接いじるのでもOK。
インストール後、DSPAMの各設定ファイルは以下のディレクトリに配置される。
/etc/dspam admins default.prefs dspam-apache.conf dspam-apache2.conf dspam.conf dspam.d rgb.txt webfrontend.conf
多分Debian独自の構成と思われるのは、default.prefsとdspam.dかな。default.prefsにはDSPAMの主要な設定項目だけが抜き出されている。なので、メインのdspam.confをあれこれいじっていて何で動かないんだー、てな事が何度あったことやら。
dspam.dの下には、MySQL用の設定項目だけ抜き出されたmysql.confが配置される。
で、今回(今現在)の設定した内容は以下のとおり。有効になっている項目と変更・コメントアウトしたものだけ抜粋。
/etc/dspam/dspam.conf Home /var/spool/dspam StorageDriver /usr/lib/dspam/libhash_drv.so #StorageDriver /usr/lib/dspam/libmysql_drv.so #TrustedDeliveryAgent "/usr/bin/procmail" DeliveryHost 127.0.0.1 DeliveryPort 10026 DeliveryIdent localhost DeliveryProto SMTP OnFail error Trust root Trust dspam Trust mail Trust mailnull Trust smmsp Trust daemon Debug * DebugOpt process classify spam fp inoculation corpus TrainingMode teft TestConditionalTraining on Feature chained Feature whitelist Algorithm graham burton PValue graham SupressWebStats on Preference "spamAction=tag" Preference "signatureLocation=message" # 'message' or 'headers' Preference "showFactors=on" Preference "spamSubject=[SPAM]" AllowOverride trainingMode AllowOverride spamAction spamSubject AllowOverride statisticalSedation AllowOverride enableBNR AllowOverride enableWhitelist AllowOverride signatureLocation AllowOverride showFactors AllowOverride optIn optOut AllowOverride whitelistThreshold HashRecMax 98317 HashAutoExtend on HashMaxExtents 0 HashExtentSize 49157 HashMaxSeek 100 HashConnectionCache 10 Notifications off PurgeSignatures 14 # Stale signatures PurgeNeutral 90 # Tokens with neutralish probabilities PurgeUnused 90 # Unused tokens PurgeHapaxes 30 # Tokens with less than 5 hits (hapaxes) PurgeHits1S 15 # Tokens with only 1 spam hit PurgeHits1I 15 # Tokens with only 1 innocent hit LocalMX 127.0.0.1 SystemLog on UserLog on Opt in ServerPort 10025 ServerPID /var/run/dspam/dspam.pid ServerMode standard ServerParameters "--deliver=innocent" ServerIdent "localhost.localdomain" #ServerDomainSocketPath "/tmp/dspam.sock" ProcessorBias on
本当はMySQLを使用するはずだったのだけど、どうにもうまくいかず実際にはHashを使用するように変更。Hashの方で正常動作が確認できたら再チャレンジの予定。
MySQLは、libdspam7-drv-mysqlのインストール時に設定したパスワードに特殊文字を1文字使用していたのだけど、作成された/etc/dspam/dspam.d/mysql.confの中ではその特殊文字が1文字抜けた形で保存された形で保存されていたので、そこら辺に原因があるのかなあと思っているんだけど(違うかな)。
一応、MySQLの設定は以下のとおり。
MySQLServer 192.168.0.100 MySQLUser dspam MySQLPass hogehoge MySQLDb dspam #MySQLCompress false
「MySQLServer」には、デフォルトだとローカルで動いているものとして「/var/run/mysqld/mysqld.sock」というようにソケットが指定されているけど、今回はリモートでMySQLが動いているのでIPアドレスを指定する。「MySQLCompress」は多分パケット圧縮してやりとりするよ、てな事だと思うけどちゃんと調べてないのでとりあえずコメントアウトのまま。
なお、MySQLの設定に関するドキュメントは以下にあります。
/usr/share/doc/libdspam7-drv-mysql/
で、dspam.confに戻って、以下はPostfixから受け取ったメールをフィルタリングして戻すときの設定。Postfix側では、こいつ用のトランスポートを追加しておけばOK。DSPAMはPostfixに戻すときはSMTPがしゃべれるみたい。
DeliveryHost 127.0.0.1 DeliveryPort 10026 DeliveryIdent localhost DeliveryProto SMTP
次はログの設定。そもそもDSPAMがよくわかってないので、デバッグメッセージに出せるものはすべて出すようにしてしまう。ちゃんと設定出来て正式に運用するときにまた絞ってあげればいい、というポリシーでひとまず。
Debug * DebugOpt process classify spam fp inoculation corpus SystemLog on UserLog on
次が、メイン(だったと気づくことになる)DSPAMをデーモンとして動かす設定。
ServerPort 10025 ServerPID /var/run/dspam/dspam.pid ServerMode standard ServerParameters "--deliver=innocent" ServerIdent "localhost.localdomain" #ServerDomainSocketPath "/tmp/dspam.sock"
今回はPostfixからDSPAMにメールが渡ってくるときに、DSPAMをデーモンとして動作させておいてPostfixでコンテンツフィルタを設定してフィルタリングさせるように設定した。このときコンテンツフィルタを経由してPostfixのキューからDSPAMにメールが渡されるときに使用するプロトコルがLMTPで、使用するポートが10025となる。
参考にさせていただいたこことかを見るとUNIXドメインソケットで渡していたりするのだけど、この方法だとうまくいかなかったのと、こちらやオライリーのPostfix本でのコンテンツフィルタリングの章を参考にした結果うまく動いてくれたので、結局このような方法になった。
それで今回もっともハマったのは、このUNIXドメインソケットを使った方法だと「ServerDomainSocketPath」の指定が必要になるのだけど、そうでないのならこの「ServerDomainSocketPath」はコメントアウトしておかなければならないということ。コメントアウトしていないと、デーモンとしてDSPAMが起動できてもIPでつながらない状態になる。telnetで10025につなごうとしてもはじかれてしまって、なんでやねん!と何日一人ツッコミしていたか・・・
てなことで、DSPAMの設定としては以上でとりあえずはOK。
長くなったので、その2に続きます。