FreeBSD 14.3 RELEASE - postfix - セキュリティ対策 - Rspamd 詳細


クラウディア 


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

AbemaTV 無料体験
earthcar(アースカー)
ベルリッツ
ネットオークションの相場、統計、価格比較といえばオークファン
葬送のフリーレン Prime Video
マイニングベース