【AlmaLinux9】Rspamdをインストールする方法

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

Almalinux9に「Rspamd」をインストールする手順です。

「Rspamd」は多機能なスパムフィルタで「SPF」「DKIM」、「DMARC」、「ARC」などの認証機能も持っています。

これらの機能の設定方法を一度に説明すると非常に長くなってしまうため、今回は「Rspamd」のインストールとWebインターフェースへのログイン方法に絞って説明します。

Rspamd構築手順

  1. 【AlmaLinux9】Rspamdをインストールする方法
  2. 【AlmaLinux9】RspamdにDKIM、ARC、DMARC機能を追加する方法‎
  3. 【AlmaLinux9】Rspamdに許可・不許可リスト(ホワイトリスト・ブラックリスト)の設定を追加する方法

Rspmapdについて

「Rspamd」はスパムフィルタリングシステムで、メールサーバーと連携させることで迷惑メール(スパム)を自動的に検出し、受信ボックスに届く前にフィルタリングすることができます。

その他にも以下の認証機能も持っています。

  • SPF(Sender Policy Framework)
  • DMARC(Domain-based Message Authentication, Reporting, and Conformance)
  • DKIM(Domainkeys Identified Mail)
  • ARC(Authenticated Received Chain)

前提条件

今回は事前に構築してある「Postfix + SMTP-AUTH + Dovecot + SSL/TLS + SPF」と連携するように、同じサーバに「Rspamd」をインストールしています。

「Postfix + SMTP-AUTH + Dovecot + SSL/TLS + SPF」のインストール・設定方法は下記のページで確認をお願いします。

通信経路の暗号化は必須ではないのですが、セキュリティレベルが上がるので導入することをお勧めします。

Redisインストール

「Rspamd」をインストールするために必要であるNoSQLのデータベースである「Redis」をインストールします。

「Redis」は、高速なインメモリデータベースの一種でデータは主にメモリ上に保存されるため、ハードディスクに比べて圧倒的に高速な読み書きが可能です。

# dnf install -y redis

設定

「Redis」が使用するメモリについての設定を「/etc/redis/redis.conf」に、下記のRspamd公式サイトの情報を参考にして設定を行いました。

https://rspamd.com/doc/tutorials/quickstart.html#caching-setup

maxmemory 500mb
redisが使用するメモリ量を設定
maxmemory-policy volatile-ttl
メモリ使用量の上限を超えた際に、有効期限(TTL)が設定されているキーのうちで最も早く期限切れになるものを優先的に削除するというポリシー
# cd /etc/redis
# cp -p redis.conf redis.conf_$(date +%Y%m%d-%H%M%S)
# vi redis.conf

設定変更は以下のように行っています。

変更前  # maxmemory <bytes>
変更後  maxmemory 500mb

変更前  # maxmemory-policy noeviction
変更後  maxmemory-policy volatile-ttl

起動・自動起動設定

設定が完了したら「Redis」の起動と自動起動設定を行います。

# systemctl start redis
# systemctl enable redis

Rspamdインストール

「Rspamd」の公式サイトから取得できるリポジトリを使用してインストールします。

EPELリポジトリ追加

「Rspamd」をインストールするために必要な「EPEL」リポジトリの追加を行います。

# dnf install -y dnf-plugins-core
# dnf config-manager --enable crb

「EPEL」リポジトリのインストールについては、より詳しい説明を下記ページで行っていますので、よければ参照してみてください。

https://www.server-memo.net/almalinux/almalinux9_epelrepo.html

Rspamd リポジトリ追加

Rspamdのリポジトリを公式サイトから取得して追加します。

# 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

追加したリポジトリの内容は下記のとおりです。

# cat /etc/yum.repos.d/rspamd.repo
[rspamd]
name=Rspamd stable repository
baseurl=http://rspamd.com/rpm-stable/centos-9/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://rspamd.com/rpm/rspamd.asc

インストール

「dnf」を使って「Rspamd」のインストールを行います。

# dnf install -y rspamd

初期設定

「rspamadm configwizard」という設定用のコマンドがあるので、それを使用して設定を行っていきます。

なお、以下のWebインターフェースへアクセス用パスワードとDKIMの設定については、後ほど手動で設定を行うことにします。

  • パスワード設定: Controller password is not set, do you want to set one?[Y/n]: nを入力しEnterキーを押下
  • DKIM設定: Do you want to setup dkim signing feature?[y/N]: Enterキーを押下
# rspamadm configwizard
  ____                                     _
 |  _ \  ___  _ __    __ _  _ __ ___    __| |
 | |_) |/ __|| '_ \  / _` || '_ ` _ \  / _` |
 |  _ < \__ \| |_) || (_| || | | | | || (_| |
 |_| \_\|___/| .__/  \__,_||_| |_| |_| \__,_|
             |_|

Welcome to the configuration tool
We use /etc/rspamd/rspamd.conf configuration file, writing results to /etc/rspamd
Modules enabled: hfilter, force_actions, regexp, bayes_expiry, dkim_signing, whitelist, spf, mime_types, dmarc, metadata_exporter, dkim, once_received, fuzzy_check, milter_headers, asn, mid, arc, trie, settings, rbl, maillist, chartable, multimap, forged_recipients, phishing
Modules disabled (explicitly): http_headers, p0f, known_senders, dcc, aws_s3, external_relay, mx_check, bimi, gpt, spamtrap, rspamd_update, elastic
Modules disabled (unconfigured): dynamic_conf, clustering, emails, reputation, maps_stats, spamassassin, fuzzy_collect, clickhouse, metric_exporter, external_services, antivirus, ip_score
Modules disabled (no Redis): history_redis, neural, ratelimit, replies, greylist, url_redirector
Modules disabled (experimental): 
Modules disabled (failed): 
Do you wish to continue?[Y/n]: 
Setup WebUI and controller worker:
Controller password is not set, do you want to set one?[Y/n]: n   # nを入力しEnterキーを押下
Redis servers are not set:
The following modules will be enabled if you add Redis servers:
        * history_redis
        * neural
        * ratelimit
        * replies
        * greylist
        * url_redirector
Do you wish to set Redis servers?[Y/n]: 
Input read only servers separated by `,` [default: localhost]: 127.0.0.1   # 127.0.0.1と設定
Input write only servers separated by `,` [default: 127.0.0.1]: 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」キーを押下
Do you want to setup dkim signing feature?[y/N]:           # 「Enter」キーを押下 DKIMの設定を行わない
File: /etc/rspamd/local.d/redis.conf, changes list:
write_servers => 127.0.0.1
read_servers => 127.0.0.1

Apply changes?[Y/n]:    # 「Enter」キーを押下
Create file /etc/rspamd/local.d/redis.conf
1 changes applied, the wizard is finished now
*** Please reload the Rspamd configuration ***

Rspamdの設定方法について

「Rspamd」の設定は「/etc/rspamd」にある設定ファイルを書き換えるのではなく、設定変更する部分を記述したファイルを「/etc/rspamd/local.d/」に追加して設定を行います。

これにより、デフォルトの設定とユーザーの設定が分離されて管理がしやすくなります。

例えば、「Rspamd」をバージョンアップした際にデフォルトの設定が変更されても、「/etc/rspamd/local.d/」の設定ファイルは上書きされないため、ユーザー設定を維持することができるようになっています。

Webインターフェイスのパスワード設定

Webインターフェイスにログインするためのパスワード設定を行っていきます。

「rspamadm configwizard」の初期設定でも設定可能ですが、パスワードを忘れた際の再設定に備え、ここでは手動設定の手順を説明します。

まず、Webインターフェースの管理用と閲覧用それぞれのパスワードを「rspamadm pw」コマンドで生成します。

# rspamadm pw
Enter passphrase: パスワードを入力

コマンド実行後、入力したパスワードの暗号化されたパスワードが表示されます

次に、表示された管理用と閲覧用それぞれの暗号化されたパスワードを「/etc/rspamd/local.d/worker-controller.inc」に設定していきます。

管理用パスワードの設定

管理用のパスワードは、「rspamadm pw」で暗号化されたパスワードを、「enable_password = "暗号化されたパスワード";」といった書式で設定します。

# rspamadm pw
Enter passphrase: パスワードを入力
$2$m7ebmh...79kiau4gy   # 暗号化されたパスワードが表示される

閲覧用パスワードの設定

閲覧用パスワードは「password = "暗号化されたパスワード";」といった書式で設定します。

# rspamadm pw
Enter passphrase: パスワードを入力
$2$jzy49n...d6gs37h1b   # 暗号化されたパスワードが表示される

worker-controller.inc編集

作成した管理用と閲覧用のパスワードを「/etc/rspamd/local.d/worker-controller.inc」に設定します。

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

設定内容は下記の通りです。

enable_password = "$2$m7ebmh...79kiau4gy";
password = "$2$jzy49n...d6gs37h1b";

Rspamdの起動と自動起動設定

設定が完了したら、「Rspamd」の自動起動設定と起動を行っていきます。

$ sudo systemctl enable rspamd
$ sudo systemctl start rspamd

Postfix連携設定

「Postfix」と「Rspamd」を連携させる設定を、「Postfix」の設定ファイルである「/etc/postfix/main.cf」で行います。

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

以下の設定を追記します。

smtpd_milters = inet:localhost:11332
milter_default_action = accept
milter_protocol = 6

Postfixを再起動して設定を反映させます。

# systemctl restart postfix

Webインターフェースへ接続方法

Webインターフェースに接続する方法として以下の方法を紹介します。

  • SSHのポートフォワード機能を使用
  • ファイアウォールで11334番ポートの通信を許可
  • NginxのProxy機能を使用

「Rspamd」のWebインターフェースには、Webブラウザで11334番ポートを使用してアクセスしますが、初期設定では下記の通りlocalhostからの接続のみを受け付けていて、「Rspamd」がインストールされたサーバからしか接続できません。

# lsof -i | grep 11334
rspamd    529162  _rspamd   71u  IPv4 11217432      0t0  TCP localhost:11334 (LISTEN)
rspamd    529162  _rspamd   73u  IPv6 11217433      0t0  TCP localhost:11334 (LISTEN)
rspamd    529165  _rspamd   71u  IPv4 11217432      0t0  TCP localhost:11334 (LISTEN)
rspamd    529165  _rspamd   73u  IPv6 11217433      0t0  TCP localhost:11334 (LISTEN)

SSHのポートフォワード機能やNginxのプロキシ機能を使用すると、外部ホストからの接続もlocalhostへ転送されるため、「Rspamd」の設定を変更せずに接続できます。

ファイアウォールで11334番ポートの通信を許可し、外部ホストから接続する場合は、「Rspamd」の設定を変更して、localhost以外の接続も許可する必要があります。

SSHのポートフォワード機能を使用して接続する方法

こちらの方法は、SSH接続しているクライアントからのみWebインターフェースに接続できるため、意図しないユーザーのアクセスを防ぎ、安全性を確保することができます。

ただし、SSH接続できない環境からは接続できなくなるというデメリットがあります。

以下のコマンドを実行すると、SSH接続元クライアントの11334番ポートへの通信が、Rspamdがインストールされたサーバーの11334番ポートに転送されます。

ssh -L 11334:localhost:11334 SSHユーザ@rspamdサーバ

これにより、接続元がlocalhostであると解釈され、Webインターフェースに接続できるようになります。

SSH接続用のポート番号を変更していたり、鍵認証方式の場合は下記のようになります。

ssh -p SSH接続ポート番号 -i 秘密鍵 -L 11334:localhost:11334 SSHユーザ@rsmapdサーバ

接続例

「Rspamd」がインストールされているサーバのアドレスが「mail.server-memo.net」で、SSHで接続するためのユーザ名が「user」である場合は、下記のようにSSH接続を行います

$ ssh -L 11334:localhost:11334 user@mail.server-memo.net

SSHの接続ポートを変更していて、秘密鍵も必要な場合は下記のようにSSH接続を行います。

  • SSH接続ポート: 10022
  • 秘密鍵: id_ed25519
$ ssh -p 10022 -i ./id_ed25519 -L 11334:localhost:11334 user@mail.server-memo.net

接続確認

Webブラウザで下記URLにアクセスし、「Rspamd」のWebインターフェースに接続できることを確認してください。

http://localhost:11334

接続出来るとパスワードの入力を求められるので、「/etc/rspamd/local.d/worker-controller.inc」に設定した管理用のパスワードを入力し「Connect」をクリックして下さい。

ログインすると、以下のような画面が表示されます。

ファイアウォールで11334番ポートの通信を許可

こちらの方法でWebインターフェースに接続する場合、最初に「Rspamd」の設定を変更して「loocalhost」以外からの接続を受け付けるようにする必要が有ります。

Rspamd設定変更

「Rspamd」のWebインターフェースで「localhost」以外からのアクセスを受け付けるには、下記の設定を「/etc/rspamd/local.d/worker-controller.inc」に追加する必要が有ります。

bind_socket = "*:11334";
設定

「/etc/rspamd/local.d/worker-controller.inc」のバックアップを行ってから設定の追加を行っていきます。

# cd /etc/rspamd/local.d/
# cp -p worker-controller.inc worker-controller.inc_$(date +%Y%m%d-%H%M%S)
# vi worker-controller.inc 

下記のように「bind_socket = "*:11334";」の設定を追加します。

bind_socket = "*:11334";
enable_password = "$2$m7ebmh...79kiau4gy";
password = "$2$jzy49n...d6gs37h1b";
設定反映

設定の追加が完了しましたら、「Rspamd」を再起動して設定を反映させます。

# systemctl restart rspamd

「lsof -i」で11334番ポートの確認を行い「*:11334(LISTEN)」となっていることを確認してください。

# lsof -i | grep 11334
rspamd    533091  _rspamd   71u  IPv4 11324104      0t0  TCP *:11334 (LISTEN)
rspamd    533091  _rspamd   73u  IPv6 11324105      0t0  TCP *:11334 (LISTEN)
rspamd    533094  _rspamd   71u  IPv4 11324104      0t0  TCP *:11334 (LISTEN)
rspamd    533094  _rspamd   73u  IPv6 11324105      0t0  TCP *:11334 (LISTEN)

ファイアウォールで11334ポートを通信許可

ファイアウォールで「Rspamd」のWebインターフェースで使用している11334番ポートの通信を許可する設定を行います。

# firewall-cmd --permanent --add-port=11334/tcp
# firewall-cmd --reload

設定した内容が反映されているか確認を行ってください。

# firewall-cmd --list-all
接続確認

下記URLでWebインターフェースにアクセスすることが出来るようになりますので、実際にWebブラウザで接続できるかを確認してくてください。

http://サーバアドレス:11334

NginxのProxy機能を使用

こちらの方法では、外部のホストからWebブラウザで接続した通信はlocalhostの11334番ポートへ転送されます。

以上の理由から、「Rspamd」の設定を変更する必要がなく、Webインターフェースへの接続が「localhost」のみで問題ありません。

ただし、この方法はURLさえ分かってしまえばインターネット上の不特定多数から接続されてしまいます。

そのため、Webインターフェースのログインにはパスワードが必要ですが、セキュリティ強化のため「Nginx」で「Basic認証」を設定することをおすすめします。

「Nginx」に「Basic認証」を設定する方法は、以下のページで説明していますのでよろしければ参照してみて下さい。

https://www.server-memo.net/server-setting/nginx/basic_auth.html

Nginx設定

すでにNginxの設定が完了していてWebサーバとして機能していることが前提ですが、「Rspamd」のWebインターフェイスを表示させるための「location」を下記のように設定を追加します。

「location」の場所は「rspamd」以外でも構いませんので、変更した場合は適宜読み替えて下さい。

location /rspamd/ {
	proxy_pass       http://localhost:11334/;

        proxy_set_header Host      $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

その後、「nginx -t」で設定ファイルの書式に間違いが無いか確認後、「Nginx」を再起動して設定を反映させてください。

# nginx -t
# systemctl restart nginx

動作確認

webブラウザでWebインターフェースに接続出来るか確認を行ってください。

接続するためのURLは今回の設定例であれば下記の通りとなります。

httpまたはhttps://サーバアドレス/rspamd

httpかhttpsかは、webサーバがどちらで公開しているかによって異なります。

コメント

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