セキュリティ対策 - fail2ban - rspamd


クラウディア 


1. 概要
2. フィルタ
3. 設定
4. 参考サイト

1. 概要

 「rspamd」で、頻繁に「spam」を送りつけてくる送信者を監視対象とします。

2. フィルタ

 まずは、「rspamd」のログのチェック方法を定義。  「root」ユーザ権限で。

vi /usr/local/etc/fail2ban/filter.d/rspamd.conf
 下記を記述します。

[Definition]
failregex = ^.* \[(?:[^\]]+)\] <[^>]+>; lua; (?:[^:]+): result: reject; .* \(IP: <HOST>\)$
ignoreregex =
 2行目で、「rspamd」のログから「result: reject」となった行の「IP」アドレスを抽出するパターンを定義しています。  とまぁ、これは通常のもので。  わたしは、「spam」と判断したものは、「subject」を変えております。

/usr/local/etc/rspamd/local.d/actions.conf

reject = null;
greylist = null;
add_header = null;
rewrite_subject = 6;
subject = "*****spam***** %s";
 となっており、「spam」判定時のログには、下記のように出力されます(1行です)。

2026-02-27 15:59:42 #33117(normal) <687a58>; task; rspamd_task_write_log: id: <fPP2ceHUk@hantzacha.com>, qid: <35E8219CB73D>, ip: 34.104.178.223, from: <server@hantzacha.com>, (default: F (soft reject): [17.90/6.00] [DBL_SPAM(6.50){sousouxinfang.com:url;hantzacha.com:rdns;hantzacha.com:mid;hantzacha.com:helo;hantzacha.com:from_smtp;},ABUSE_SURBL(5.00){sousouxinfang.com:url;},RBL_SPAMHAUS_CSS(2.00){34.104.178.223:from;},DMARC_POLICY_QUARANTINE(1.50){saisoncard.co.jp : SPF not aligned (relaxed), No valid DKIM;quarantine;},TO_EXCESS_QP(1.20){},PH_SURBL_MULTI(1.00){sousouxinfang.com:url;},FORGED_SENDER(0.30){point@saisoncard.co.jp;server@hantzacha.com;},MIME_HTML_ONLY(0.20){},BAD_REP_POLICIES(0.10){},ONCE_RECEIVED(0.10){},ARC_NA(0.00){},ASN(0.00){asn:396982, ipnet:34.104.176.0/20, country:US;},FROM_HAS_DN(0.00){},FROM_NEQ_ENVFROM(0.00){point@saisoncard.co.jp;server@hantzacha.com;},GREYLIST(0.00){greylisted;Fri, 27 Feb 2026 07:04:42 GMT;new record;},HAS_X_PRIO_THREE(0.00){3;},MIME_TRACE(0.00){0:~;},MISSING_XM_UA(0.00){},RCPT_COUNT_ONE(0.00){1;},RCVD_COUNT_ZERO(0.00){0;},R_DKIM_NA(0.00){},R_SPF_ALLOW(0.00){+ip4:34.104.178.223;},SURBL_MULTI_FAIL(0.00){saisoncard.co.jp:server fail;},TO_DN_ALL(0.00){},TO_MATCH_ENVRCPT_ALL(0.00){}]), len: 12257, time: 5382.965ms, dns req: 37, digest: <515c5a0f094a2453490b1461a041849c>, rcpts: <any@sing.ne.jp>, mime_rcpts: <any@sing.ne.jp>, forced: soft reject "Try again later"; score=nan (set by greylist)
 なので、実際の「failregex」の定義は。  「rspamd_task_write_log」の行を狙い撃ちし、前方の複雑な部分はスルーして、「ip:」以降を確実に捕まえます。

failregex = ^.* rspamd_task_write_log:.* ip: <HOST>,.* \(default: [F|S] \(
 現在のログで、ヒットするか、チェックします。

fail2ban-regex /var/log/rspamd/rspamd.log /usr/local/etc/fail2ban/filter.d/rspamd.conf

Running tests
=============

Use      filter file : rspamd, basedir: /usr/local/etc/fail2ban
Use         log file : /var/log/rspamd/rspamd.log
Use         encoding : UTF-8


Results
=======

Failregex: 9 total
|-  #) [# of hits] regular expression
|   1) [9] ^.* rspamd_task_write_log:.* ip: <HOST>,.* \(default: [F|S] \(
'-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1086] {^LN-BEG}ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T|  ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
'-

Lines: 1086 lines, 0 ignored, 9 matched, 1077 missed
[processed in 0.07 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 1077 lines
 「9 matched」で、9個捕まえたようです。

3. 設定


vi /usr/local/etc/fail2ban/jail.local
 最下部あたりに下記を記述します。

[rspamd]
enabled = true
filter = rspamd
logpath = /var/log/rspamd/rspamd.log
banaction = ipfw
findtime = 3600
maxretry = 2
bantime = 604800
 1時間以内に 2回「Spam」判定されたらアウト、とりあえず 1週間「BAN」としています。  設定をチェック。

fail2ban-client -d
 良さそうであれば、再読み込みして有効化します。

service fail2ban reload

3. 参考サイト

 本ページは、「Gemini」伍長を参考にさせていただきました。

TikTok Shop 【リピート用プログラム】
AbemaTV 無料体験