CentOS Stream 10 + Rspamd(OpenDKIMの代替)

OpenDKIMはほぼ開発停止状態らしいので代替ソフトを探しているときの覚書。
Gemini 3 Pro Previewと対話。

環境: CentOS Stream 10, Postfix 3.8.5, Rspamd 3.14.1

Postfixのバージョンを確認。
# postconf -d mail_version


1. Rspamdとは?

「アール・スパム・ディー( Rapid Spam Deamon)」。
メールサーバーで使用する高機能スパムフィルター。
参考: Rspamd - Open Source Email Security
参考: Rspamd - Wikipedia

Nginxのようなイベントループモデルを採用し、大量の同時接続を低リソースで処理する。
モジュールでDKIM, ARCに対応可能。

  • 初回リリース:  2008年
  • ライセンス: Apacheライセンス2.0
  • 開発国: 開発者はロシア人。現在は英国に拠点移動。

導入するデメリットは多機能すぎて、学習コストが高め。


2.Rspamdをインストール

公式サイトの通り実行する。
参考: Downloads | Rspamd Documentation

リポジトリを追加してインストール。
# source /etc/os-release
# export EL_VERSION=`echo -n $PLATFORM_ID | sed "s/.*el//"`
# curl https://rspamd.com/rpm-stable/centos-${EL_VERSION}/rspamd.repo > /etc/yum.repos.d/rspamd.repo
# dnf install rspamd

起動、自動起動オン、確認。
# systemctl start rspamd
# systemctl enable rspamd
# systemctl status rspamd


3. Valkey(Redis)をインストール

RspamdはRedisのインストールを推奨しているようなのでインストールして設定する。
Redisはライセンス問題で後継のValkeyに移った。
参考: Redisの代わりにValkeyをインストール 


4. RspamdのDKIM設定

このサーバーはメール送信専用(メール受信しない)。
OpenDKIMの代替としてRspamdを利用する。

初期設定ウィザードを実行。
# rspamadm configwizard

秘密鍵の権限をrspamdの実行ユーザーに変更。
サービスファイルで実行ユーザーを確認。
# less /usr/lib/systemd/system/rspamd.service
# chown _rspamd:_rspamd /var/lib/rspamd/dkim/hoge.jp.server01.key
# chmod 440 /var/lib/rspamd/dkim/hoge.jp.server01.key

表示された公開鍵をDNSに記述。

Rspamdを再読み込み。
# systemctl reload rspamd

公開鍵を再表示されるコマンド。
# openssl rsa -in /var/lib/rspamd/dkim/hoge.jp.server01.key -pubout -outform PEM

DNSに問い合わせするコマンド。
# dig +short txt server01._domainkey.hoge.jp

DNSサーバーを指定して問い合わせる。
# dig @8.8.8.8 txt server01._domainkey.hoge.jp

待ち受けポートの確認。
# ss -nplt

  • -n: 名前解決をしない(数値で表示する)。
  • -p: プロセスを表示する。
  • -l: 待ち受け(Listening)状態のみ表示する。
  • -t: TCP通信のみ表示する。

Rspamdが使用してるポートと役割

  • 11332: Postfixとの接続用 (Milter)
    メールサーバー(Postfix)がメールを受け取った際、このポートにアクセスして検査を依頼。また、自己監視用のHTTPリクエストも受け付けます。
  • 11333: コマンドライン・スキャン用
    rspamc コマンドなどが使用します。標準的なスキャンエンジンとしての入り口
  • 11334: Web管理画面・制御用
    ブラウザで管理画面を表示したり、設定を動的に変更したり、学習(Learn)を行ったりするためのAPIポート

Postfixにmilter設定。
milter_protocolはspamdと通信するプロトコルを明示する。なくても動作するらしい。
# less /etc/postfix/main.cf

# Milter設定 (Rspamdはデフォルトで 11332ポートを使用)
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = $smtpd_milters
milter_protocol = 6
milter_default_action = accept

テストしてPostfix再起動。
# postfix check
# systemctl restart postfix
# systemctl status postfix

別コンソールを開いてメールログを監視。
# tail -f /var/log/maillog

メール送信テスト。
# sendmail hoge@gmail.com

メールヘッダーの確認。

確認事項


5. メール送信時にARC署名する設定(不要)

どのようなメールサーバーを中継するか分からないので、送信時にARC署名した方が信頼が増す。

と思ったけど、
Gemini 3 Pro Previewではメール送信サーバーはARC署名不要と論破された。
(Gemini 2.5 Proではメール送信サーバーでもARC署名すべきと言われた)
参考: FreeBSD14 + PostfixにOpenARCをインストール


6. WebUIをNginxからリバースプロキシ

コンソールからWebUI(ウェブ管理画面)のAPIを叩いて動作確認。
参考: Controller WebUI Endpoints Development Guide | Rspamd Documentation
# curl http://127.0.0.1:11334/stat

Rspamdウェブ管理画面はデフォルトでlocalhostからのアクセスのみ許可されている。
Nginxのリバースプロキシで転送する。
(最後のスラッシュがないと「rspamd_http_router_finish_handler: path: /rspamd/ not found」になる)
# cd /etc/nginx/conf.d/
# less 01_tools.conf

    location /rspamd/ {
        proxy_pass http://127.0.0.1:11334/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

確認して再読み込み。
# nginx -t
# systemctl reload nginx

ブラウザで確認。


7. Rspamdの設定ファイル構成

Rspamdの設定ディレクトリ(/etc/rspamd/)の構成。

  • rspamd.conf: エントリーポイント。ここから全ファイルを include しています。
  • actions.conf: スコアの閾値(reject/greylistなど)のデフォルト定義。
  • modules.d/: 各モジュール(dkim, spf, bayesなど)のデフォルト設定ファイル群。
  • scores.d/: スパム判定ルールのスコア定義(R_DKIM_ALLOW 1.0 など)。
  • maps.d/: デフォルトで使われるマップファイル置き場。
  • local.d/: ユーザー設定用ディレクトリ (ここだけ触る)

公式ドキュメントの「設定の基礎」は読んだ方がいい(日本語に訳せば早い)。
参考: Configuration Fundamentals | Rspamd Documentation


8. Rspamdが占有するメモリ

下記コマンドで確認。
# ps --no-headers -o rss -C rspamd | awk '{sum+=$1} END {print int(sum/1024) " MB"}'

トップコマンドで見る。
# top -u _rspamd


▼ 関連記事