- 1. 概要
- 2. ログ
- 3. 件名変更
- 4. オフライン試験
- 5. オンライン試験
- 6. 学習
- 7. ホワイトリスト
- 8. 参考サイト
1. 概要
本ページでは、「Rspamd」の少し細かな設定について記述します。
2. ログ
「rspamd」のログは、デフォルトで、下記へ出力されます。
/var/log/rspamd/rspamd.log
メールのログと同じファイルへ出力したい場合は。
vi /usr/local/etc/rspamd/local.d/logging.inc
(「/usr/local/etc/rspamd/logging.inc」という既存のファイルがありますが、それではなく、新規にファイルを作成します)
下記を記述します。
type = "syslog";
facility = "mail";
通常、ログは、インフォメーションのレベルで出力されますが、やたら多い場合は、抑制したりできます。
下記のように記述します。
level = "level";
レベルは、次の意味を持ちます。
| レベル | 出 力 内 容 | 備 考 |
| error | 重要なエラーのみを記録 | |
| warning | エラーと警告 | 異常の可能性 |
| notice | 重要な通知のみログに記録 | |
| info | デバッグ以外のメッセージをすべて記録(デフォルト) | マップ更新ログもここ |
| silent | 起動時に「info」、起動後「notice」 | |
| debug | 非常に詳細なデバッグ情報 | 通常は開発用 |
何か問題があったときに、特定のモジュールのみ、レベルを「debug」にしたりできます。
「ClamAV」に関するログをデバックレベルにするには、下記のように記述します。
debug_modules = [ "clamav" ];
「Rspamd」は、「lua」の文法で、「[]」の中は、カンマで区切って、「""」で挟みつつ、複数列挙できます。
主なモジュールをあげておきます。
| モジュール名 | 用途 | 備考 |
| cfg | 設定ファイル読み込み | |
| main | メインプロセス | |
| map | マップの取得や更新 | |
| milter | Lua スクリプト実行系 | |
| monitored | ホストの可用性チェック | |
3. 件名変更
「Rspamd」のデフォルトのふるまいは。
/usr/local/etc/rspamd/actions.conf
に記述されています。
主な個所は、下記になります。
actions {
reject = 15; # Reject when reaching this score
add_header = 6; # Add header when reaching this score
greylist = 4; # Apply greylisting when reaching this score (will emit `soft reject action`)
#unknown_weight = 1.0; # Enable if need to set score for all symbols implicitly
# Each new symbol is added multiplied by gf^N, where N is the number of spammy symbols
#grow_factor = 1.1;
# Set rewrite subject to this value (%s is replaced by the original subject)
#subject = "***SPAM*** %s"
.include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/actions.conf"
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/actions.conf"
}
上記の定義では。
・スコア 15 受信拒否
・スコア 6 ヘッダ追加
・スコア 4 グレーリストへ追加
明示的に定義されていませんが、「rewrite_subject」が有効なスコアになったとき。
件名を「件名」から「***SPAM*** 件名」へと書き換えます。
これを、「qmail」「Spamassassin」時の以前の設定と合わせるため、わたしは、下記のファイルを作成して。
/usr/local/etc/rspamd/local.d/actions.conf
下記のように記述しています。
reject = null;
rewrite_subject = 6;
subject = "*****spam***** %s";
greylist = null;
上記の意味は。
・受信拒否、グレーリストへの追加を無効化
・スコア 6 以上をスパムと判定して、「件名」を「*****spam***** 件名」へと書き換え
になります。
「Spamassasin」のように、受信メールを添付ファイルにする機能はないようです。
今は、自作する元気はないので、とりあえず、このままにしておきます。
ちなみに、アクションには、次の定義があるようです。
| アクション | 意 味 | 備考 |
| discard | メールをドロップするが、送信者には成功を返す | |
| reject | 受信拒否 | |
| rewrite_subject | 件名を書き換え | |
| add_header | ヘッダを追加 | |
| no_action | 正常に受信 | |
| soft_reject | 一時的に受信を遅延 | |
4. オフライン試験
実際のメールを使わなくても「Rspamd」の設定を試験することができます。
「rspamc」というコマンドを使用します。
実際の「.eml」ファイルを用意しておいて、そいつに食わせれば、「Rspamd」の結果がどうなるか調べることができます。
cat email.eml | rspamc
まぁまぁ、普通のメールを食わせると下記の結果が得られました。
Results for file: stdin (1.05 seconds)
[Metric: default]
Action: no action
Spam: false
Score: 1.95 / 6.00
Symbol: ARC_ALLOW (-1.00)[i.softbank.jp:s=isoftbank202401:i=1]
Symbol: DATE_IN_PAST (1.00)[38]
Symbol: FROM_EQ_ENVFROM (0.00)
Symbol: FROM_HAS_DN (0.00)
Symbol: MANY_INVISIBLE_PARTS (0.05)[1]
Symbol: MIME_BASE64_TEXT (0.10)
Symbol: MIME_HTML_ONLY (0.20)
Symbol: MIME_TRACE (0.00)[0:~]
Symbol: MISSING_XM_UA (0.00)
Symbol: PREVIOUSLY_DELIVERED (0.00)[showkit@i.softbank.jp]
Symbol: RCPT_COUNT_ONE (0.00)[1]
Symbol: RCVD_COUNT_TWO (0.00)[2]
Symbol: RCVD_NO_TLS_LAST (0.10)
Symbol: TO_DN_ALL (0.00)
Symbol: TO_EXCESS_BASE64 (1.50)
Message-ID: 20250728092028684.SOID.13865.ebmts116sc.i.softbank.jp@ebmts116sb.mailsv.softbank.jp
Urls: ["www.ckaijmyxw.ne.jp","www.kyikposuw.ne.jp","www.acdclguigq.ne.jp"]
Emails: []
5. オンライン試験
ウィルスのテストパターンとして。
本文に、下記の文字列をいれると、「EICAR」というウィルス定義パターン、「GTUBE」というスパムメールパターンの試験ができます。
「EICAR」
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
「GTUBE」
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
これを外部のメールサーバから送れば、実行結果で、「Rspamd」が機能しているか確認できます。
ただし、アンチウィルスが機能していると、送信しようとしたり、ファイルを作成した時点で、ウィルスと判定して、ファイルを隔離されたりしますので。
アンチウィルスを一時、無効にしたりする必要があるかもしれません。
ちょっとわからんのが「GTUBE」パターンは、スパムメールパターンのはずなのですが、どんな定義をしても「reject」されてしまいます。
「EICAR」パターンを送ると、受信側で、下記のようなヘッダが添付されます。
X-Rspamd-Pre-Result: action=rewrite subject;
module=clamav;
clamav: virus found: "Eicar-Signature"
X-Spam-Level: ******
X-Rspamd-Server: example.com
6. 学習
「Rspamd」には、「Spamassasin」のように、スパムメールとそうでないものを学習する機能が備わっているようです。
下記のコマンドで、学習させます。
学習させる「.eml」を用意しておいて。
スパムとして学習。
rspamc learn_spam < spam.eml
ハム(正常メール)として学習。
rspamc learn_ham < ham.eml
学習しているかどうかは、下記のコマンドで確認できます。
rspamc stat
およそ、下記のような出力結果となります。
Results for command: stat (0.291 seconds)
Messages scanned: 54
Messages with action reject: 15, 27.78%
Messages with action soft reject: 0, 0.00%
Messages with action rewrite subject: 8, 14.81%
Messages with action add header: 5, 9.26%
Messages with action greylist: 0, 0.00%
Messages with action no action: 26, 48.15%
Messages treated as spam: 28, 51.85%
Messages treated as ham: 26, 48.15%
Messages learned: 2
Connections count: 1
Control connections count: 5
Average scan time: 1.622 sec
Pools allocated: 38
Pools freed: 13
Bytes allocated: 25751072
Memory chunks allocated: 139
Shared chunks allocated: 3
Chunks freed: 0
Oversized chunks: 5
Fuzzy hashes in storage "rspamd.com": 10914561392
Fuzzy hashes stored: 10914561392
Statfile: BAYES_SPAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 2; users: 1; languages: 0
Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0; total blocks: 0; free: 0.00%; learned: 0; users: 0; languages: 0
Total learns: 2
これまでの、判定結果等も出力されています。
ここで、重要なのは、11行目。
ちょうど、2つのメールをスパムとして学習させた直後なのですが・・・。
「Messages learned: 2」となっています。
7. ホワイトリスト
わたしは、今んとこ、ブラックリスト・グレーリストはまだ必要ない。
いずれ、作成するかもしれませんがね。
まずは、自分および友人・仕事関係のメールを誤判定しないように、ホワイトリストを作成したい。
vi /usr/local/etc/rspamd/local.d/multimap.conf
下記を記述します。
whitelist_ip {
type = "ip";
map = "/usr/local/etc/rspamd/maps.d/whitelist_ip.map";
symbol = "WHITELIST_IP";
action = "no_action";
}
whitelist_from {
type = "from";
filter = "email";
map = "/usr/local/etc/rspamd/maps.d/whitelist_from.map";
symbol = "WHITELIST_FROM";
action = "no_action";
}
上が、ホワイトリストの「IP」です。
下が、ホワイトリストの送信者です。
「IP」ホワイトリストを作成します。
vi /usr/local/etc/rspamd/maps.d/whitelist_ip.map
下記のように記述します。
127.0.0.1
192.0.2.0/24
送信者ホワイトリストを作成します。
vi /usr/local/etc/rspamd/maps.d/whitelist_from.map
下記のように記述します。
user@example.com
*@example.net
ワイルドカードを使えるのはありがたいですね。
チェックして、再起動。
rspamadm configtest
service rspamd restart
下記で、定義を確認できます。
rspamadm configdump multimap
末尾の方に、さきほど記述した。
whitelist_ip {
type = "ip";
map = "/usr/local/etc/rspamd/maps.d/whitelist_ip.map";
symbol = "WHITELIST_IP";
action = "no_action";
}
whitelist_from {
type = "from";
filter = "email";
map = "/usr/local/etc/rspamd/maps.d/whitelist_from.map";
symbol = "WHITELIST_FROM";
action = "no_action";
}
が表示されるはずです。
ホワイトリスト内の送信者からメールと送ると、ヘッダに下記のようなものが付与されています。
X-Rspamd-Pre-Result: action=no action;
module=multimap;
Matched map: WHITELIST_FROM
8. 参考サイト
本章は、下記のサイトおよび、「ChatGPT」くんを参考にさせていただきました。
「Rspamd Support | Rspamd Documentation」
|