純規の暇人趣味ブログ

首を突っ込んで足を洗う

[Dovecot]スパム判定されたメールを迷惑メールフォルダに振り分ける

      HimaJyun

相変わらずメールサーバを設定しています、正直言って今まで建てたサーバの中で一番難しいかも。

というわけでその過程で得た知見を一つ、Dovecot+SpamAssassin(amavisd-new)でスパム判定されたメールを迷惑メールフォルダに振り分ける方法を。

スパムメールを振り分ける

amavisd-newとSpamAssassinを組み合わせていると、スパム判定されたメールを拒否したりする事は出来ますが、迷惑メールフォルダに送ったりは出来ないみたいです。

流石に勝手に拒否したりされるのは誤検出が怖いので、Dovecot(Sieve)でSpamAssassinが付けたヘッダを見て、スパム判定されていたら奈落(迷惑メールフォルダ)に送ってやろう、という訳です。(本当はSieve無しでやりたいんだけど、無理っぽい)

ちなみに使用したバージョンは以下の通りです。

  • Ubuntu 16.04
  • Dovecot 2.2.22
  • amavisd-new 2.10.1
  • SpamAssassin 3.4.1

準備

Sieveを使うのでdovecot-sieveを入れておく必要があります、aptなら以下の通り。

sudo apt-get install dovecot-sieve

また、Sieveに食わせるために、amavisdがスパム判定したメールを破棄しないようにする必要があります。

amavisdの設定(Ubuntuなら/etc/amavis/conf.d/50-user)に以下の一行を追加

$final_spam_destiny = D_PASS;

メール自体はPostfixからLMTPを使用してDovecotにぶん投げています、そうしないとSieveが利用できないです。

ゴミはゴミ箱へ

SpamAssassinが迷惑メールと判定する(迷惑度が閾値を超える)とヘッダに「X-Spam-Flag: YES」が追加されます。

要はこれを見るだけです、簡単ですね、簡単でしょうか?

設定

sieveを使うためには、mail_pluginsにsieveを追加する必要があります。

/etc/dovecot/conf.d/20-lmtp.confでlmtpがsieveを利用できるように設定します。

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

/etc/dovecot/conf.d/90-sieve.confで振り分けを行うsieveスクリプトを指定します。

sieve_before = /etc/dovecot/spam.sieve
# ディレクトリでの指定も可、この場合はディレクトリに含まれるスクリプトが実行される
#sieve_before = /etc/dovecot/sieve.d/

でもって、sieve_beforeで指定した場所にファイルを作成し、以下のスクリプトを入れる。

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
  fileinto "Junk";
}

「Junk」の部分は15-mailboxes.confで指定した物です。「Spam」とかに変更している方は合わせる必要があります。

Sieveはコンパイルが必要みたいなので、コンパイルを実行します。

sudo sievec /etc/dovecot/spam.sieve

あとはDovecotやAmavisdを再起動すればOK

sudo systemctl restart amavis dovecot

テスト

迷惑メールをテストするためにはGTUBEというテスト用の文字列を使えば楽です。

早い話が、本文を以下の一行にして送信する。

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

余談ですが、アンチウイルスをテストしたい場合にはEicarを使えばいいです。

Eicarの作り方は以下の一行のみを含むファイルを作成する。

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

とはいっても、普通のOSでEicarを保持しようものならアンチウイルスに邪魔されて苦戦すると思う。

テスト環境などでcurlを使ってダウンロードする方が楽かも?

curl -O http://www.eicar.org/download/eicar.com

完了

これで迷惑メールが自動でJunkフォルダに行くようになった。

Junkフォルダ自体はautoexpungeで自動削除するようにしておくとGood

これでメールサーバがより便利になる、というより不便だったのが普通に近づく。

スパマーは消えろ

 - サーバ運営