Rspamdの設定 (Rmilter無し)

Rspamdは1.6.0以降は単独でmilterモードが利用できるようになっているのでMTAとの連携にRmilterを使わなくてもよくなった。
でも、RspamdにはRmilterに備わっているspamd_never_rejectに相当するオプションが存在しないのでRmilterを併用していた。
今回Rmilter無しの設定に変更してみたのでメモ。
以下は主にRmilter併用からの変更点。

Rmilter併用の過去記事
/etc/rc.conf (FreeBSDの設定)
1
2
3
#rmilter_enable="YES"  #←Rmilterを起動させないようコメント化 または行削除
rspamd_enable="YES"
redis_enable="YES"
/usr/local/etc/postfix/main.cf
1
2
3
4
5
6
7
8
9
mtpd_milters = 
        inet:localhost:10025
        inet:localhost:11332  #←Rspamd
        unix:/var/run/clamav/clmilter.sock #Rspamdとは全く別でClamAVを使う場合

non_smtpd_milters =
        inet:localhost:10025
        inet:localhost:11332  #←Rspamd
        unix:/var/run/clamav/clmilter.sock  #Rspamdとは全く別でClamAVを使う場合

MTAにPostfixを使う場合のmilter周りの設定。

/usr/local/etc/rspamd/local.d/worker-proxy.inc
1
2
3
4
5
6
milter = yes;  #←これがmilterモードの設定
timeout = 120s;
upstream "local" {
  default = yes;
  self_scan = yes;
}
/usr/local/etc/rspamd/local.d/milter_headers.conf
extended_spam_headers = true;

この記事ではこれだけを指定。

基本的には以上でOKだが、spamd_never_rejectが無いのでメールのスコアがRejectの点に達すると破棄されてしまう。自動判断に絶対間違いないのであれば構わないがfalse positiveはどうしても発生するのでこれは困る。Rmilterのサポートを見るとRejectのスコアを上げてしまうという方法もあると書かれているけど今回はRejectを使わずにAdd headerを使うことにした。(これが正しい方法かは不明だが動作としては期待通りに動く)

/usr/local/etc/rspamd/override.d/metrics.conf
1
2
3
4
5
actions {
#    reject = 10;      #←以前の記事では初期値の15点から10点に変更した
#    reject = 999;     #←rejectの点を上げてしまうという手もある
    add_header = 10;   #←この記事ではこれ
}

Add headerの確認
Rspamdを再起動して暫くしてからWeb UIでHistoryを確認する。Actionの列に赤色の"reject"ではなくオレンジ色の"add header"が出ていること。その迷惑メールが破棄されずにメールボックス(迷惑メール用フォルダ)に届いていることを確認できればOK.
この記事の方法だとメールヘッダにSpamフラグが付くだけなのでメールボックスへの配送時の振り分けは前の記事のようにMaildrop等を使う。

UNIX Socketを使う場合

ポート11332を使うのではなくUNIX Socketを使いたいなら以下。

/usr/local/etc/postfix/main.cf
1
2
3
4
5
6
7
8
9
mtpd_milters = 
        inet:localhost:10025
        unix:/var/run/rspamd/rspamd.sock  #←Rspamd
        unix:/var/run/clamav/clmilter.sock #Rspamdとは全く別でClamAVを使う場合

non_smtpd_milters =
        inet:localhost:10025
        unix:/var/run/rspamd/rspamd.sock #←Rspamd
        unix:/var/run/clamav/clmilter.sock  #Rspamdとは全く別でClamAVを使う場合

MTAにPostfixを使っている場合。milterの設定にRspamdのsocketを指定する。
/var/run/rspamd/rspamd.sockは新規のsocket

/usr/local/etc/rspamd/override.d/worker-proxy.inc (新規1行)
bind_socket = "/var/run/rspamd/rspamd.sock mode=0666";

MTAからRspamdのSocketを利用できないと話しにならないので今回はmode=0666を指定した。本来はmode=0660 owner=nobody group=vmailなどと指定すればそのユーザー名/グループ名でsocketファイルが作成されてMTAから利用できるようになる筈だと思うんだけどnobody:nobodyでしか作成されない。(だからMTAから利用できない)
若しくはRspamd起動後に/var/run/rspamd/rspamd.sockのユーザー/グループを変更するか。

% ls -l /var/run/rspamd
total 4
-rw-r--r--  1 nobody  nobody  3  7月 13 16:37 rspamd.pid
srw-rw-rw-  1 nobody  nobody  0  7月 13 16:37 rspamd.sock
%

これが嫌なら/etc/groupを編集、例えばvmailというグループ(MTAから利用可能なグループ名とする)にnobodyを追加する(など)。でも、あまりやりたくない。

/etc/group
vmail:*:9000:maildrop,cyrus,postfix,nobody

2017年7月13日追記:
UNIX Socket用の設定を追加

関連記事: