HEARTBEATS

皆さんこんにちは、技術開発室の鈴木です。

弊社では昨年(2022年11月)にメールサーバーの移設を実施し、その際にスパムメール対策ソフトウェアをSpamAssassinからRspamdへ変更しました。
今回はRspamdを数か月運用してみての所感についてお話します。設定やその他細かな仕様などについてはあまり触れないため、その点をご了承ください。

また、Rspamdのバージョンは3.3系、Postfixのバージョンは2.6系以降を前提としています。

目次

  • Rspamdとは
  • Rspamdの導入目的
  • SpamAssassinとの主な違い
  • 良いところ
  • 気になるところ
  • 最後に

Rspamdとは

Rspamdとはオープンソースのスパム対策ソフトウェアです。

Rspamdの基本的な動作はSpamAssassinと似ています。それぞれ標準で用意されているルールや自前で定義した様々なルールを使ってスパムチェックを行い、チェックの結果に応じてスパムメールであるかのスコアを加算していき、最終的なスコアからスパムメールかを判定します。 Rspamdではこのスパムメールの判定だけでなく、最終的なスコアと設定した任意の閾値によって、メールの拒否やヘッダーの追加などといったメールの処理も決定します。

また、Rspamdでは標準で様々な機能がモジュールという形で用意されており、例えばSPF・DKIM・DMARC・RBLのチェック、ベイズ統計によるスコアづけ、Greylistingなど多様な機能を簡単に利用できます。 さらに、スパムチェック時の正規表現マッチなどでマルチバイト文字をそのまま記述できたり、スパムのチェックだけでなくメールへのDKIM署名ができたりもします。

このように、1つのソフトウェアで多様な処理を行えるのがRspamdの大きな特徴となっています。

補足ですが、ベイズ統計で利用するトークンやキャッシュ保持、Greylisitng等でRedisを利用します。そのため、実際にRspamdを運用する際は、Redisのインストールも必要となります。 Redisをインストールしない場合でも動作しますが、期待した動作をしない可能性があるため推奨しません。

Rspamdの導入目的

弊社ではRspamdを以下の目的で導入しました。

  • Greylisting
  • 外部からメールを受信したときのスパムチェックなど
  • 自社メールサーバーを利用してメールを送信したときのウイルスチェック
  • 自社ドメインのメールを送信したときのDKIM署名

上記の「スパムチェックなど」では主に下記のチェックを目的としています。

  • DNSBLの確認
  • SPF・DKIM・DMARCの確認
  • 添付ファイルの拡張子・MIMEタイプの確認
  • 添付ファイルのウイルスチェック
  • 正規表現などによるヘッダー・ボディに対するマッチルールでの確認

ウイルスチェックでは、別途インストールしているウイルス対策ソフトウェアとRspamdを連携させてチェックしています。 Rspamdによるメールの処理決定では、スコアの高い順に破棄(discard)、検疫(quarantine)、受信(no action)となるように設定しています。 これらの処理を決定する閾値やスパムチェックのルールごとに付与されるスコアについては、運用しながら適宜調整しています。

また、メールが検疫に回されたらSlackへ通知するスクリプトをサーバーに配置して動作させており、これを利用してスパムメールと誤判定されたメールの再送対応を行っています。

SpamAssassinとの主な違い

SpamAssassinからRspamdへ移行したときに感じた大きな違いは下記の3点です。 また、公式ドキュメントに比較表がありますので、大まかな機能の違いなどについてはそちらも参照してください。

Rspamdではスコアによるメールの処理まで決定する

SpamAssassinはあくまでフィルタであり、スコアによるタグ付けまでしか行いません。一方、Rspamdではその後のメールの処理の決定も行えます。 どのような処理を行うのかは、最終的なスコアの閾値での設定や特定のチェック時に処理を強制させるといった方法で決定します。

補足ですが、「検疫(quarantine)」処理については、RspamdがPostfixに「検疫」であることを通知し、その後の処理はPostfixに一任されます。Postfix 2.6系以降では、検疫となったメールはholdキューに送られます。

RspamdではGreylistingができる

SpamAssassinはそもそもGreylistingの機能がないため、PostfixでGreylistingを行うには別途PostgreyやtaRgreyなどの導入が必要でした。 一方Rspamdでは、Greylisting機能がモジュールとして標準でサポートされており、Rspamd単体で簡単にGreylistingを行えます。

RspamdではDKIM署名ができる

Rspamdは受信時のスパムフィルタとしてだけでなく、メール送信時のDKIM署名も行うことができます。また、DKIM署名用のTXTレコードと鍵ファイルを下記のコマンド1つで生成できるため大変便利です。

rspamadm dkim_keygen -s 'selectorname' -d example.com

良い点

Rspamdを運用して良いと感じた点は下記の4点です。

多機能であるのに負荷が高くない

 Rspamdは1つのソフトウェアで多様な処理を行えますが、分間で300通のメールを処理したときであっても、2vCPUで全体の使用率が20%程度、メモリ使用量も全体で200MB弱程度の増加で済み、Rspamdの動作が重くなることもなく正常に動作していました。

WEB UIで過去数百件の履歴を簡単に見られる

 WEB UIで過去数百件の履歴を簡単に見られるため、運用当初にメールがどのようなルールでどの程度の評価を受けているのかを視覚的にわかりやすく把握するのに役立ちました。

SpamAssassinのルールを一部そのまま利用できる

 SpamAssassinのルールを一部そのまま利用できるため、移設前のメールサーバーで利用していた自前のSpamAssassinルールの一部をRspamdで新たに書き直す必要がなく、楽に移行できました。 どのようなSpamAssassinのルールが利用できるかは公式ドキュメントに記載されています。

特定条件のメールだけチェック内容を変えるなどが簡単にできる

 特定条件のメールだけチェック内容を変えるなどが簡単にできるため、特定のメールではウイルスチェックをしないといった要件に柔軟に対応できました。 補足ですが、複数のマッチルールがある場合は、設定した3段階の優先度の順で評価され、同一優先度内ではマッチルール名のアルファベット昇順で評価されます。 また、1つのルールに一致すると、それ以降のルールは評価・適用されません。 詳細は公式ドキュメントを参照してください。

気になった点

Rspamdを運用して気になった点は下記の2点です。

日本語のベイズ統計精度が低い

日本語の文として解析が行われてるわけではないため、ハムメール(スパムメールでない正当なメール)をスパムメールと誤判定して、スコアを大きく加算されることが多々あります。 反対に、スパムメールがハムメールとして評価されることでスコアが下がってしまい、結果としてスパムメールが受信者に届いてしまうということも多いです。 そのため、スパムメールと判定したときに加算するスコアとハムメールと判定したときに減算するスコアの絶対値を小さくすることで、誤判定の影響を減らすようにしています。

multimapモジュールでの正規表現ルール追加がやや不便

設定ファイルのルールに直接正規表現を書くのではなく、正規表現を記述したマップファイルを追加する必要があるため、様々なルールを追加するとそれに応じてファイル数が増加してしまいます。 1つのファイルを複数のルールで共有できますが、どのルールがそのファイルを利用しているのかを把握していないと思わぬ影響がでるため、弊社ではそれぞれのルールごとにマップファイルを分けて管理しています。

最後に

今回は簡単な所感をお伝えしました。

Rspamd単体でスパムチェックやメール処理の決定、Greylistingなど多様な処理を行えるため、スパム対策ソフトウェアとして優秀であると感じています。

気になった点でも書きましたが、正規表現ルールマップの追加などで設定ファイル数が増えて管理がやや大変になるため、運用する際は事前に管理方法を決めておき、どこでどういった設定をしているかのドキュメントを用意しておくと良いと思います。 弊社ではAnsible Playbookで設定ファイル等を一括管理し、ホワイトリストの整備方法やスコアの調整方法などについては別途手順を用意することで対応しています。

現状(2023年3月時点)では、企業レベルでのRspamd事例紹介があまり見られなかったため、このブログでRspamd運用の雰囲気が少しでも伝われば幸いです。

参考

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。



ハートビーツをフォロー

  • Twitter:HEARTBEATS
  • Facebook:HEARTBEATS
  • HATENA:HEARTBEATS
  • RSS:HEARTBEATS

殿堂入り記事