迷惑メール対策、Rspamdのメール振り分け。Postfix,CentOS7

この記事は約9分で読めます。

Rspamdの判定による動作

Rspamdで判定されたメールは、主に
1)問題ないメール(緑部分)
2)問題のあるメール(黄色部分)
3)怪しいメール(青部分)
4)疑いの無いスパム(迷惑メール)(赤部分)
という4つに分類されます。

デフォルトの設定では、
1)の問題無いメールは、「通常通り受信」されます。
2)の問題のあるメールは、「メールのヘッダに情報を付加」して、受信します。
3)の怪しいメールは、「一定の時間受信しないようにする」などの処置を行います。
4)疑いの無いスパム(迷惑メール)は、受信されずに、「送信者に返送」されます。

メールの配送を振り分ける。

上記の黄色の部分「2)問題のあるメール」に分類されたもののうち、「迷惑メールであることが濃厚」なメールは、「別フォルダ」に移動させたいと思います。

別フォルダに移動したメールは、WEBからログインできる、「Rainloop」でログインしてチェックすることができるようにしたいと思います。

SpamAssasin時代は、「maildrop」というツールを使っていましたが、今回、
dovecotの拡張機能である「Pigeonhole」という機能で補完ができ、「sieve」という言語で、ローカル配送を振り分けたいと思います。

Pigeonhole、Sieve Support for Dovecot

メール振り分け言語である「sieve」を実装した、「Pigeonhole」をインストールします。
Dovecot本体をソースからインストールしているので、Pigeonholeもソースから入れたいと思います。

「pigeonhole」インストール

# wget https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-0.5.7.1.tar.gz
# tar xzvf dovecot-2.3-pigeonhole-0.5.7.1.tar.gz
# cd dovecot-2.3-pigeonhole-0.5.7.1
# ./configure --with-dovecot=/usr/lib/dovecot/
# make
# make install

↑「Pigeonhole」をインストールします。

「pigeonhole」設定

# cp /usr/share/doc/dovecot/example-config/conf.d/90-sieve.conf  /etc/dovecot/conf.d/

↑Dovecotの設定ファイルをコピーします。
# vi /etc/dovecot/conf.d/90-sieve.conf

#sieve_default = /var/lib/dovecot/sieve/default.sieve
 ↓
sieve_default = /var/lib/dovecot/sieve/default.sieve

↑デフォルトの設定を有効にします。
# mkdir -p /var/lib/dovecot/sieve/

# vi /var/lib/dovecot/sieve/default.sieve
-------------------------------------------------
require ["fileinto", "reject"];

if header :contains ["X-Spam"] "spam" {
      fileinto "Junk";
      stop;
}
if header :contains ["X-Spam-Flag"] "YES" {
      fileinto "Junk";
      stop;
}
if header :contains ["X-Spam-Status"] "YES" {
      fileinto "Junk";
      stop;
}
-------------------------------------------------

↑メールのヘッダ情報に「Spam」が「Yes」となったものを「Junk」フォルダに移動させる記述です。

「Junk」は、

vi /etc/dovecot/conf.d/15-mailboxes.conf
--------------------------
  mailbox Junk {
    special_use = \Junk
  }
--------------------------

で、指定する、mailboxと一致しなければいけません。
vi /etc/dovecot/conf.d/15-mailboxes.conf
--------------------------
  mailbox Junk {
    special_use = \Junk
  }
 
 ↓

  mailbox Junk {
    special_use = \Junk
    auto = subscribe
  }
--------------------------

↑と、Junkフォルダを自動生成するようにします。
# cd /var/lib/dovecot
# chown -R vuser.vuser sieve

↑sieveのデフォルト設定の権限関係を調整します。

振り分けのサンプルは、
dovecot-2.3-pigeonhole-0.5.7.1/examples/
以下にあります。

https://wiki2.dovecot.org/Pigeonhole/Sieve
には、機能一覧の説明があります。

「pigeonhole」個別の設定

vi /etc/dovecot/conf.d/90-sieve.conf

sieve = file:~/sieve

↑上記を有効にします。

この設定は、デフォルトの設定は、
/var/lib/dovecot/sieve/default.sieve
で行うようにしたが、メールアドレス毎の設定を、Maildir以下の「sieve」ファイルで設定可能にするものです。

つまり

/mail/ドメイン/@の左/
のフォルダに
に「sieve」のファイルがあると、この設定が優先されます。
「sieve」のファイルは、「vuser.vuser」にします。

dovecot その他設定

vi /etc/dovecot/dovecot.conf

#base_dir = /var/run/dovecot/
 ↓
base_dir = /var/run/dovecot/

service stats {
    unix_listener stats-reader {
        user = vuser
        group = vuser
        mode = 0660
    }

    unix_listener stats-writer {
        user = vuser
        group = vuser
        mode = 0660
    }
}

↑上記を加える
# mkdir /var/run/dovecot/

# vi /etc/dovecot/conf.d/15-lda.conf

-------------------------

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  #mail_plugins = $mail_plugins
}

 ↓

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = sieve
}

postfix設定

vi /etc/postfix/main.cf

virtual_transport = virtual
 ↓
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

↑「virtual」の配送から「dovecot」に変更をします。
vi /etc/postfix/master.cf

-------------------------------------------

dovecot  unix  -       n       n       -       -       pipe
  flags=DRhu user=vuser:vuser argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}

↑上記を追加します。

-f は、送信元アドレス。
「${sender}」は、エンベロープの送信元アドレス

-d は、宛先アドレス。「${recipient}」は、受信者アドレス。

postfix再起動後、

ログにおいて

postfix/virtual[XXXXX]: to=<(メールアドレス)>, relay=virtual, delay=0.57, delays=0.57/0/0/0, dsn=2.0.0, status=sent (delivered to maildir)

と、「relay=virtual」
となっている箇所が、
postfix/pipe[XXXXX]: to=<(メールアドレス)>, relay=dovecot, delay=0.92, delays=0.85/0.01/0/0.07, dsn=2.0.0, status=sent (delivered via dovecot service)

と、「relay=dovecot」
となっていて、迷惑メールフォルダに振り分けられたら、成功!

Rspamd変更

# vi /etc/rspamd/local.d/actions.conf
greylist = null;

↑今回、greylistのモジュールは、無効にします。

迷惑メールの振り分け 結果

これで、

1)問題ないメール(緑部分)
2)問題のあるメール(黄色部分)(今回、迷惑メールフォルダに振り分け)
3)怪しいメール(青部分)(この「greylist」は、今回設定しない)
4)疑いの無いスパム(迷惑メール)(赤部分)

と、上記、2)のメールが、「迷惑メールフォルダ」に振り分けられました。

/mail/(ドメイン)/(@より左)/
には、正常メール
/mail/(ドメイン)/(@より左)/.Junk/
には、迷惑メールに入ります。

そもそも、「疑いの無いスパム」は、排除されます。この、Rspamのフィルタにより、迷惑メールを受信する日常から解放されると思います。

タイトルとURLをコピーしました