Rspamd 1.7系のアクション設定の変更

Rspamdでは迷惑メールの判定アクションでこれまでReject(破棄)とAdd header (迷惑メールフラグ付加)のようなアクション別に点数を指定するような設定になっていた。
自動の迷惑メール判定はRspamdに限らずだけど誤判定のFalse Positiveが怖い。False Negativeであれば迷惑メールが普通にメールボックスに届くだけなので問題とはならないが、False Positiveが発生するともしかしたら重要なメールが迷惑メールと判定される可能性がある。しかも、RspamdのRejectは「受信したメールをメールボックスに届けないで破棄」なので誤判定の結果その(重要な)メールが消滅することになる。自分専用のメールサーバでもこれはイヤだが、他人のメールも預かるメールサーバでは絶対にマズい。
そこで、Rspamdを運用する際はRejectの判断基準点としてとんでもなく高い数値を指定して実質無効にして、Add headerに迷惑メール判定のしきい値となる数値を指定するという使い方が多かったのではないかと思う。

しかし、このやり方だと届いたメールのメールヘッダには迷惑メールの判定結果と判定基準点が記載されるので、例えば下。

正常なメール(非迷惑メール):
X-Spamd-Result: default: False [6.77 / 100.00]

Rejectは100点(見かけ上の判定基準点)、Add headerは10点(非表示で本当の判定基準点)、このメールは6.77点で非迷惑メールとして判定された。これは見ためには矛盾した結果ではない。

迷惑メール:
X-Spamd-Result: default: False [11.06 / 100.00]
X-Spam: Yes

Rejectは100点(見かけ上の判定基準点)、Add headerは10点(非表示で本当の判定基準点)、このメールは11.06点で迷惑メールとして判定された。これはメールサーバの管理者から見ると10点(Add header)の基準点を超えたので迷惑メールとして判断されたのは正しいのだが、メールの利用者から見ると表示されている100点の基準点に遥かに届かないのに迷惑メールとして判定されているように見える。見かけ上は矛盾しているので気持ち悪い。

これまで、Rspamdではこの表示の矛盾が嫌だなと思っていたのだが、1.7.0から?1.7.1からこのアクションの点数にnullを指定できるようになった。ただし、1.7.1までは設定でnullを指定する方法があるというのはサポートフォーラムみたいなところに書かれた情報しかなかったのとrspamadm configtestによる設定内容の正常性確認でエラーとして指摘されたので本当に使って良いのか怪しい状態だった。1.7.2ではrspamadm configtestでもエラーとならず、changelogにも書かれて正式に使えるものとなったみたい。

/usr/local/etc/rspamd/local.d/actions.conf
1
2
3
4
reject = null;
add_header = 10;
greylist = null;
他省略

上のように設定した場合、Rejectは無効になりAdd headerは10点になる。設定する側からすると大きな数値を指定して実質無効にするのとnullを指定して無効にするのはそれほど違うというわけではない。
しかし、メールヘッダが変わる。

正常なメール(非迷惑メール):
X-Spamd-Result: default: True [1.55 / 10.00]

Add headerが判定基準点となりそれが10点で、メールは1.55点と判断されたので非迷惑メールという判定になった。これは問題無い。

迷惑メール:
X-Spamd-Result: default: False [28.93 / 10.00]
X-Spam: Yes

Add headerが判定基準点となりそれが10点で、メールは28.93点と判断されたので基準点超えで迷惑メールになった。これは設定をする側はもちろんメール利用者にとっても矛盾の無い情報。

これが当然というか今までが異常だっただけだが、嬉しい変更といえる。

同様にGreylistingもこれまでは非常に高いスコアを指定することで無理やり動作させないようにしていたが、nullを指定することで実質無効にできる(みたい)。数時間ではあるが試した限りでは期待通りの動作をしている。

関連記事: