【AlmaLinux 10】RspamdをインストールしてPostfixと連携する方法

記事内に広告が含まれています。

VPS上のAlmaLinux 10に、高速なメールフィルタリングシステム「Rspamd」をインストールし、Postfixと連携させる手順を解説します。

「Rspamd」は、迷惑メール(スパム)の自動検出だけでなく、「SPF」「DKIM」「DMARC」「ARC」といった送信ドメイン認証機能も併せ持つ非常に高機能なフィルタリングエンジンです。

一度にすべての設定を説明すると長くなってしまうため、本シリーズでは以下の2回に分けて段階的に解説します。

  1. RspamdのインストールとPostfix連携、Web管理画面の設定(本記事)
  2. Rspamdを使ったDKIM・ARC・DMARCの設定(次記事)

本手順は、これまでのステップで構築したPostfix + SMTP-AUTH + Dovecot環境を前提としています。

※コマンドは一般ユーザーから「sudo」を実行する形式で記載しています。行頭のプロンプト記号は省略しているため、そのままコピー&ペーストして実行可能です。

作業工程

作業工程は下記のとおりです。

  1. インメモリDB(Valkey)のインストールと設定
  2. Rspamdのインストール(公式リポジトリ追加)
  3. 初期設定(rspamadm configwizard)
  4. WebUI(管理画面)のアクセスパスワード設定
  5. Rspamdの起動と自動起動設定
  6. PostfixとRspamdの連携設定(Milter設定)
  7. WebUI(管理画面)へのアクセス確認

インメモリDB(Valkey)のインストールと設定

Rspamdがキャッシュや各種データ(統計情報・レート制限等)を一時保存するために使用するインメモリデータベースをインストールします。

AlmaLinux 10(RHEL 10系)では、従来のRedisに代わり、完全互換のオープンソース版である「Valkey」が標準パッケージとして採用されています。Redisと同じポート(6379番)で動作し、設定ファイルやサービス名も「valkey」に統一されています。

sudo dnf install -y valkey

メモリ上限設定

メモリの過剰消費を防ぐため、キャッシュ上限サイズとメモリ解放ポリシーを設定します。

sudo cp -p /etc/valkey/valkey.conf /etc/valkey/valkey.conf.orig
sudo vi /etc/valkey/valkey.conf

設定ファイル内で以下の項目を探し、編集します。

##### 変更前 #####
# maxmemory <bytes>
# maxmemory-policy noeviction

##### 変更後 #####
maxmemory 500mb
maxmemory-policy volatile-ttl

今回はメモリの使用上限(maxmemory)を「500mb」(Rspamd公式ドキュメントの目安値)に設定していますが、メモリ1GB〜2GB程度の小規模なVPSで運用している場合は、サーバーの搭載メモリに合わせて「100mb」や「250mb」など小さめの値に調整してください。

「maxmemory-policy volatile-ttl」は、メモリ上限到達時、有効期限(TTL)が設定されている一時キャッシュから優先的に自動削除するという設定です。(永続化されている重要なスパム学習データは削除されずに保護されます)

設定が完了したら、サービスを起動してOS起動時の自動起動を有効化します。

sudo systemctl enable --now valkey

Rspamdのインストール

Rspamdの公式サイトからAlmaLinux 10向けのリポジトリを追加してインストールします。

リポジトリの追加

Rspamdパッケージおよび依存関係のあるパッケージを取得するため、必要なリポジトリを追加します。

EPELリポジトリの有効化

依存パッケージを取得するため、あらかじめEPELリポジトリを有効化しておきます。

sudo dnf install -y epel-release

Rspamd公式リポジトリの追加

OSのバージョン情報を自動取得して、Rspamd公式リポジトリ設定ファイルをダウンロード・配置します。

source /etc/os-release
export EL_VERSION=$(echo -n $PLATFORM_ID | sed "s/.*el//")
sudo curl -s https://rspamd.com/rpm-stable/centos-${EL_VERSION}/rspamd.repo -o /etc/yum.repos.d/rspamd.repo
sudo rpm --import https://rspamd.com/rpm/rspamd.asc

作成されたリポジトリは、以下のような内容になっています。

[rspamd]
name=Rspamd stable repository
baseurl=http://rspamd.com/rpm-stable/centos-10/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://rspamd.com/rpm/rspamd.asc

Rspamd本体のインストール

dnfコマンドを使ってRspamdをインストールします。

sudo dnf install -y rspamd

初期設定(rspamadm configwizard)

Rspamd付属の対話型ウィザード「rspamadm configwizard」を使って、Valkey(Redis互換)やPostfixとの基本連携設定を行います。
※WebUIのパスワード設定、DKIM/ARC署名設定は、後ほど個別に行うためここでは行いません。

sudo rspamadm configwizard

以下のように対話形式で進めます(赤字部分を入力またはEnterキーを押します)。

ほとんどの項目はデフォルト(Enterキー)のままで進められますが、以下の項目のみデフォルト以外の入力・変更を行います。

  • 管理画面パスワード(Controller password)
    入力:n(デフォルトはYesですが、後ほど専用コマンドで設定するため「n」でスキップします)
  • Redisサーバー指定(Redis servers)
    入力:127.0.0.1(read / write の2箇所に入力)
    ※デフォルトの「localhost」だと環境によって通信エラーが起きる場合があるため、明示的にIPアドレスを指定します。
  • Milter手順の表示(instructions for milter setup)
    入力:n(デフォルトはYesですが、Postfix連携手順は後ほど本記事内で設定するためスキップします)

※ 送信ドメイン認証の「ARC signing」や「dkim signing」の確認は、初期値がNo([y/N])となっているため、そのままEnterキーを押してスキップして問題ありません(次回の記事で本格的に設定を行います)。

Do you wish to continue?[Y/n]: Enter
Setup WebUI and controller worker:
Controller password is not set, do you want to set one?[Y/n]: n
Redis servers are not set:
The following modules will be enabled if you add Redis servers:
        * neural
        * url_redirector
        * ratelimit
        * replies
        * history_redis
        * greylist
Do you wish to set Redis servers?[Y/n]: Enter
Input read only servers separated by `,` [default: localhost]: 127.0.0.1
Input write only servers separated by `,` [default: 127.0.0.1]: 127.0.0.1
Do you have any username set for your Redis (ACL SETUSER and Redis 6.0+)[y/N]: Enter
Do you have any password set for your Redis?[y/N]: Enter
Do you have any specific database for your Redis?[y/N]: Enter
Setup Postfix integration:

Found Postfix configuration: /etc/postfix/main.cf
Found local domains from mydestination:
  - localhost.$mydomain

Do you want to enable the aliases module for Postfix integration?[Y/n]: Enter
Use system aliases from /etc/aliases?[Y/n]: Enter
Use local domains from mydestination?[Y/n]: Enter

Checking milter configuration...
No milter configuration found.
Do you want to see instructions for milter setup?[Y/n]: n

Do you want to configure rate limiting for outbound mail?[y/N]: Enter
Do you want to configure ARC signing?[y/N]: Enter

Postfix setup complete!
Do you want to setup dkim signing feature?[y/N]: Enter
File: /etc/rspamd/local.d/redis.conf, changes list:
read_servers => 127.0.0.1
write_servers => 127.0.0.1

File: /etc/rspamd/local.d/aliases.conf, changes list:
local_domains => {[1] = localhost.$mydomain}
system_aliases => /etc/aliases
enabled => true

Apply changes?[Y/n]: Enter
Create file /etc/rspamd/local.d/redis.conf
Create file /etc/rspamd/local.d/aliases.conf
2 changes applied, the wizard is finished now
*** Please reload the Rspamd configuration ***

これで以下の2つの設定ファイルが自動生成されました。

  • /etc/rspamd/local.d/redis.conf:Valkey(Redis互換)との通信設定(※Rspamdの内部仕様によりファイル名は「redis.conf」となりますが、先ほど起動したValkeyサーバーとそのまま正常に通信します)
  • /etc/rspamd/local.d/aliases.conf:Postfixの「/etc/aliases」およびローカル宛先ドメインの連携設定

Rspamdの設定ファイルの仕組みについて

Rspamdの設定は、「/etc/rspamd/rspamd.conf」などのデフォルト設定ファイルを直接編集するのではなく、上書きしたい部分のみを「/etc/rspamd/local.d/」ディレクトリ配下に作成して管理する仕組みになっています。
これにより、将来Rspamdがバージョンアップされても独自の設定が上書きされず、安全に維持されます。

WebUI(管理画面)のアクセスパスワード設定

RspamdにはWebブラウザから動作状況やスパム判定スコアを確認できるWeb管理画面が備わっています。
管理画面へログインするための暗号化パスワードを手動で生成して設定します。

「rspamadm pw」コマンドを実行し、設定したいパスワードを入力します。

sudo rspamadm pw

実行結果の例です。

Enter passphrase: (設定したいパスワードを入力)
$2$m7ebmh...79kiau4gy

表示されたハッシュ文字列($2$...)をコピーしておきます。

パスワード設定用のファイル「/etc/rspamd/local.d/worker-controller.inc」を作成します。

sudo vi /etc/rspamd/local.d/worker-controller.inc

以下の内容を記述します(コピーしたハッシュ文字列を貼り付けます)。

password = "$2$m7ebmh...79kiau4gy";
secure_ip = "";

「secure_ip = "";」について

Rspamdの初期設定では、「127.0.0.1」(ローカルホスト)からの接続を信頼済みIPとみなしパスワード認証が省略されます。

後述のSSHポートフォワード(localhost経由)でアクセスした際にも必ずログイン画面を表示させ、パスワード入力を必須にしたい場合は、上記のように「secure_ip = "";」を設定してください。

パスワード入力を必須にする必要がなければ、「secure_ip = "";」の行は省略して構いません。

Rspamdの起動と自動起動設定

Rspamd設定ファイルの構文にエラーがないか確認します。

sudo rspamadm configtest

「syntax OK」と表示されれば構文チェックは合格です。

Rspamdを起動して自動起動を有効化します。

sudo systemctl enable --now rspamd

サービスが正常に稼働しているかステータスを確認します。

sudo systemctl status rspamd

「Active: active (running)」となっていれば正常に起動しています。

PostfixとRspamdの連携設定(Milter設定)

Postfixが送受信するメールをRspamdに検査させるため、Milter(メールフィルタ機構)の設定を行います。

cd /etc/postfix/
sudo cp -p main.cf main.cf_$(date +%Y%m%d-%H%M%S)
sudo vi main.cf

main.cf の末尾に以下の設定を追記します。

# Rspamd (Milter) 連携設定
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
milter_default_action = accept
milter_protocol = 6
  • smtpd_milters:外部から届く受信メール(25番ポート)や、Thunderbird等のメールソフトから送られる送信メール(587番・465番ポート)など、SMTP経由のメールをRspamd(11332番ポート)へ渡します。
  • non_smtpd_milters:サーバー内部(cronの通知、PHPのmail()関数、Linuxのmailコマンド等)から送信されたメールもRspamdへ渡します。
  • milter_default_action = accept:Rspamdが万一停止している場合でも、メール配送を完全に停止させずそのまま通過(配送)させる安全設定です。
  • milter_protocol = 6:PostfixとMilterが通信する際のプロトコルバージョン(Milterプロトコルバージョン6)を指定します。

設定ファイルに文法上の誤りがないかチェックします(問題がなければ何も表示されません)。

sudo postfix check

問題がなければ、Postfixの設定を再読み込みします。

sudo systemctl reload postfix

Postfixが正常に稼働しているかステータスを確認します。

sudo systemctl status postfix

「Active: active (running)」となっていれば正常に稼働しています。

【補足】なぜ「non_smtpd_milters」も必要なのか?

「smtpd_milters」だけでは、Webサイトのお問い合わせフォーム(PHP等)やcronのバッチ処理など、サーバー内部から直接送信されるメールはSMTP通信を経由しないため、Rspamdを素通りしてしまいます。

その結果、次回の記事で設定する「DKIM」や「ARC」の電子署名が付与されず、DMARC認証にも失敗してGmail等で迷惑メール判定や受信拒否される原因になりますが「non_smtpd_milters」も指定しておくことで、サーバー内部から送信されるすべてのメールに確実に電子署名を付与し、正常に届くようになります。

WebUI(管理画面)へのアクセス確認

RspamdのWeb管理画面は、セキュリティのため初期状態では外部(インターネット)からの直接アクセスが遮断され、「localhost:11334」でのみ接続を待ち受けています。

手元のPCから安全にアクセスするため、SSHポートフォワード(SSHトンネル) を使って接続するのが最も安全でおすすめです。

作業端末(ご自身のPCのターミナルやコマンドプロンプト)で以下のコマンドを実行します。

ssh -L 11334:localhost:11334 ユーザー名@サーバーのIPアドレス

SSH接続が確立された状態で、お使いのブラウザから下記のアドレスにアクセスします。

http://localhost:11334/

ログイン画面が表示されたら、先ほど「/etc/rspamd/local.d/worker-controller.inc」に設定したパスワードを入力して「Connect」をクリックします。

※「secure_ip = "";」を設定していない場合は、ローカル接続と判定されてパスワード認証が行われないため、ログイン画面を挟まずに直接ダッシュボード画面が表示されます。

ダッシュボード画面が表示されれば、Rspamdの基本導入はすべて完了です!

まとめ&次のステップ

以上で、AlmaLinux 10へのRspamdのインストールと、Postfix連携、Web管理画面の導入は完了です。

これでスパムフィルタの基盤が整いましたので、次のステップとしてGmailやYahoo!メールの受信要件に対応する「DKIM」「ARC」「DMARC」の送信ドメイン認証設定に進みます。

次のステップの手順については、下記ページで詳しく解説しています。

【次ステップ】AlmaLinux 10:RspamdでDKIM・ARC・DMARCを設定する方法(送信ドメイン認証編)

コメント

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