Almalinux9に「Rspamd」をインストールする手順です。
「Rspamd」は多機能なスパムフィルタで「SPF」「DKIM」、「DMARC」、「ARC」などの認証機能も持っています。
これらの機能の設定方法を一度に説明すると非常に長くなってしまうため、今回は「Rspamd」のインストールとWebインターフェースへのログイン方法に絞って説明します。
Rspamd構築手順
- 【AlmaLinux9】Rspamdをインストールする方法
- 【AlmaLinux9】RspamdにDKIM、ARC、DMARC機能を追加する方法
- 【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」のインストール・設定方法は下記のページで確認をお願いします。
- 【AlmaLinux9】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築する方法
- 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
- 【AlmaLinux9】PostfixでSSL/TLSを使って通信を暗号化
- 【AlmaLinux9】DovecotをSSL/TLSで通信暗号化する方法
通信経路の暗号化は必須ではないのですが、セキュリティレベルが上がるので導入することをお勧めします。
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サーバがどちらで公開しているかによって異なります。
コメント