さくらのレンタルサーバの「高精度迷惑メールフィルタ」と「簡易迷惑メールフィルタ」を併用した話

「高精度迷惑メールフィルタ」がメルマガ系をことごとく迷惑メール判定するので困ったなということで工夫した話


さくらのレンタルサーバの迷惑メールフィルタに高機能版が増えた

長らくSpamAssassinだけだったので、直近見逃しが増えていた、さくらのレンタルサーバの迷惑メールフィルター。

Vade社のソリューションが入ったと聞き、

喜び勇んで入れて見たところ…

ということで、誤検知率が高め、是正情報を送っても(どうやらユーザ別カスタマイズをしているわけではないようで)反映された体感が得られず、微妙に悲しい結果になってしまいました。

誤検知されるカテゴリのメールだけ簡易迷惑メールフィルタ(SpamAssassin)を使えないか?

が、メルマガ系のメールをmaildropを使って自動でフォルダ分類していたので、よく考えると、以下の様な迷惑メールフィルタの使い分けが出来るのでは?と調べて見ました。

  • メルマガ系のメールの送信者を名乗る迷惑メールは(今のところ)少なめで、こちらであれば過去からトレーニングしているSpamAssasin(簡易迷惑メールフィルタ)でも十分に弾けるのでこちらを使う

  • それ以外の送信者を名乗る迷惑メールは、確かにSpamAssasinで弾けなくなったので、Vade社の汎用フィルタ(高精度迷惑メールフィルタ)を使いたい

簡易迷惑メールフィルタ(SpamAssassin)、高精度迷惑メールフィルタ(Vade社フィルタ)それぞれの実装

さくらのレンタルサーバでは、maildropを使って迷惑メールフィルタのホワイトリストを実装しています。

簡易迷惑メールフィルタ…メールはまずmaildropに渡され、maildropがホワイトリストに含まれないメールだけをSpamAssassinに渡し、迷惑メールフラグが付いたメールをフォルダに振り分ける

if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) )
{
        xfilter "/usr/local/bin/spamc"
}
if ( /^X-Spam-Flag:.*YES/ )
{
        to "maildir/.spam/"
}

高精度迷惑メールフィルタ…メールはまずVade社フィルタに渡され迷惑メール判定フラグが付く。受けとったmaildropがフラグがあり、ホワイトリストに含まれないメールをフォルダに振り分ける

if ( /^X-VADE-SPAMSTATE:/ )
{
        if ( ! /^X-VADE-SPAMSTATE:\s*clean/ )
        {
                if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) )
                {
                        to "maildir/.spam/"
                }
        }
}

SpamAssassin+高精度迷惑メールフィルタの併用maildrop例

ということで、前述の希望をほぼそのまま実装したのが以下のmaildropです。(.newsaddressに「メルマガの送信者アドレス」を入れてある)

if ( /^X-VADE-SPAMSTATE:/ )
{
        if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".newsaddress") )
        {
                if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) )
                {
                        xfilter "/usr/local/bin/spamc"
                }
                if ( /^X-Spam-Flag:.*YES/ )
                {
                        to "maildir/.spam/"
                }
                if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".newsaddress") )
                {
                        to "maildir/.News/"
                }
        }
        if ( ! /^X-VADE-SPAMSTATE:\s*clean/ )
        {
                if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) )
                {
                        to "maildir/.spam/"
                }
        }
}
if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".newsaddress") )
{
        to "maildir/.News/"
}

こうすることで、メルマガ系は誤検知を回避しつつ、非メルマガ系の迷惑メールは高精度迷惑メールフィルタでガンガンはじくことが出来るようになりました。

今のところの困りごと、そのうち何とかしたい

今のところの困りごとはこんな感じです。

  • メルマガ系じゃないが誤検知されるメールがある

    • LinkedInメールなどがよく誤検知されている(とはいえ、本物の迷惑メールもLinkedInを名乗りそうなので安易に「簡易フィルタ対象」にはしたくない)

  • Vadeが見落としたメールを教えてあげるのが面倒

    • Thunderbirdでも迷惑メールフィルタをかけていて、そこそこ迷惑メールを拾う性能がある

    • Vadeに教えるには、さくらのWebメールUIを起動して「迷惑メールではない」と教える必要がある

  • 個別の迷惑メールをさくら/Thunderbirdのどちらに教えたか記憶があやふやになる ⇒ 操作手順を決める必要がある

    • が、あまり学習が反映されなさそうなVade社にデータを送るのを諦めるというのも一案…

  • さくらのWebメールUIでは、簡易迷惑メールフィルタをすり抜けたメールをSpamAssasinに学習させることが出来ない

まあ、このように検知率の底上げと誤検知率の抑制を同時にできるのも、さくらのレンタルサーバだからだよなぁ…

この記事が気に入ったらサポートをしてみませんか?