.procmailrc のヘッダー内のランダムなドメイン名からのスパムを検出します

.procmailrc のヘッダー内のランダムなドメイン名からのスパムを検出します

ドローンからルンバまであらゆるものの模造品を大量に販売している有名な組織からのスパムは、、、およびFrom:フィールドでランダムなドメインを使用しています。 Message-ID:Reply-To:すべて違う共通の末尾の さえありませんxyz.com
(非スパムメールは、少なくともMessage-ID:と のドメイン名を共有する傾向がありますReply-To:。)

~/.procmailrc のレシピでこのようなスパムを検出し、スパム フォルダーに転送することはできますか?

  • 名前付きキャプチャグループを使用した高度な正規表現ですか?

  • 「A」または「a」でアクションを連鎖させるということでしょうか?

  • マニュアルページで提案されているように、procmail を再帰的に呼び出しますか?

  • より優れた文字列処理を備えた言語で書かれたスクリプトにメールのヘッダーを渡す「フィルター」ですか?


例: namebrandwigs.com、mysuburbankitchen.com、aliyun.com。

From [email protected]  Wed Mar 17 09:27:54 2021
Return-Path: <[email protected]>
X-Original-To: ---
Delivered-To: ---
Received: from mysuburbankitchen.com (unknown [5.253.84.113])
        by --- (Postfix) with ESMTP id 332025E236
        for <--->; Wed, 17 Mar 2021 09:27:53 -0500 (CDT)
To: ---
Subject: drone with new features
Message-ID: <[email protected]>
Date: Wed, 17 Mar 2021 08:13:03 +0100
From: "Jake Allen" <[email protected]>
Reply-To: [email protected]
MIME-Version: 1.0
X-Mailer-Sent-By: 1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Status: RO

<html>
<head>
</head>
<body>
<span style="display: block; text-align: left;"><span style="display:
block; text-align: left;">Hi,<br /><br /><span>Hope all is well.</span><br
/>We are contacting you today to let you know that we have got the
following new drone, ready to ship to worldwide customers.<span><span><br
/><br /></span></span></span></span><span style="display: block;
text-align: left;"><span style="display: block; text-align:
left;"></span></span><span style="display: block; text-align: left;"><span
style="display: block; text-align: left;"><span style="display: block;
text-align: left;"></span></span></span><span style="display: block;
text-align: left;">Explore new places and amp up your videography skills
with the our F9 4K HD camera drone.
...

同様の形式ですが、メッセージ本文にフラグ付け可能なテキストがない他の例:

  • momentumwatch.com / musicalley.com の革製マッサージチェア
  • mtndewkid.com / myhondafitev.com / constructiongear.com のルンバ
  • hairrehablondon.com / hairocean.com / hotmail.com のビデオプロジェクター

答え1

これは私が実装したProcmailのレシピです考えるあなたは尋ねるかもしれません。

それは使用しています得点これは少しわかりにくいですが、時々役に立つ機能です。簡単に言うと、ドメイン名を含むヘッダーがある場合From:(常に存在するため) にスコア 1 を割り当て、Reply-To:またはMessage-Id:ヘッダーの の後に同じ文字列がある場合はスコアから 1 を引きます@

:0:
*    1^0 ^From:.*@\/[^@<>   ]+
* $ -1^0 ^Message-Id:.*@$\MATCH\>
* $ -1^0 ^Reply-To:.*@$\MATCH\>
suspicious

これによって誤検出率がかなり高くなると予想されますが、この特定のパターンを含むスパムを大量に受信する場合、特にホワイトリストと組み合わせることができれば、価値を提供できる可能性があります。

suspiciousそれでも、定期的にフォルダーをチェックして、誤検知されたメールを通常の受信トレイに戻すことをお勧めします。

以下は、提供されたサンプルを使用したデモ実行です。/dev/nullデモのみを目的として、 に配送されます。

bash$ procmail -m VERBOSE=yes /tmp/procmailrc </tmp/sample 
procmail: [16] Fri Mar 19 09:06:29 2021
procmail: Rcfile: "/tmp/procmailrc"
procmail: Assigning "MAILDIR=/home/tripleee"
procmail: Assigning "MATCH="
procmail: Matched "namebrandwigs.com"
procmail: Score:       1       1 "^From:.*@\/[^@<>  ]+"
procmail: Score:       0       1 "^Message-Id:.*@()namebrandwigs\.com\>"
procmail: Score:       0       1 "^Reply-To:.*@()namebrandwigs\.com\>"
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: drone with new features
  Folder: /dev/null                            1373

特に複雑なのは、サブドメインのヒットが認められないことです。送信者を認めるのはそれほど難しくありませんが、逆のシナリオははるかに難しくなります。なぜなら、一般的なケースでは、ドメイン名が( やTLDなど)なのか、 ( などのTLDなど)、あるいはさらに長い (や日本の一部の都道府県など) のかを実際に知ることができないからです。Message-id: <[email protected]>From: real name <[email protected]>From: sender <[email protected]>labels.here.com.frmany.labels.here.co.uk.com.auk12.place.name.us

もう少し詳しく説明すると、最初のレシピ行の最初のヒットにスコアを1^0割り当て、それ以降のヒットには追加のスコアを割り当てません。トークンは、一致した文字列からその後の文字列、つまりヘッダーの最後の記号の後のすべてをキャプチャします。変数は、キャプチャされたこの文字列を参照するために、後続のレシピ行で使用されます。構文は、リテラル文字列に一致する正規表現エスケープされたパターンを生成します。後続のレシピには、レシピ条件に変数 (つまり) を挿入するように Procmail に指示するフラグと、条件の最初のヒットに対して 1 を減算し、再度一致した場合は何もしないというスコアリング命令があります。1\/@MATCH$\MATCH$$MATCH-1^0

manページではこれらすべての構成要素について説明していますが、かなり難解です。Procmail クイックリファレンスさらに密度は高くなりますが、おそらくより早く読んで理解できるでしょう。

私は、基本的に Procmail だけを使用して独自のスパム フィルターを作成することを思いとどまらせようとする他の回答とここでの内容を混同しないように、これを別の回答として投稿しました。

答え2

いくつかの限られた例に基づいて、今日機能し、明日も機能し続ける具体的なものを思いつくのは難しいです。実際の質問は実際には「Procmail からのスパムを防ぐにはどうすればよいか」であり、その答えは明白で単純で、十分に文書化されています。「SpamAssassin のようなフルスペクトラムのスパム フィルターを実行して、その結果を調べる」です。それでも、おそらく 100% の精度は得られないでしょう。しかし、SpamAssassin は、基本的に設定して忘れるだけのツールとしては、十分な機能を果たします。SpamAssassin は、スパマーが使用する IP アドレス、URL、およびその他のネットワーク リソースの動的な評価情報を提供する外部サービスに大きく依存しているため、実際には舞台裏でかなりの処理が行われています。

SpamAssassin wiki の UsedViaProcmail詳しい手順については、こちらを参照してください。簡単に言うと、SpamAssassinをインストールして設定したら、次のようにしてください。

:0fw
* < 512000
| spamassassin

:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
almost-certainly-spam

:0:
* ^X-Spam-Status: Yes
probably-spam

2 番目のコロンは、:0:ロックが必要なメールボックス (mbox ファイルなど、Maildir ディレクトリではないことは確かですが、質問のサンプルに基づくと、mbox を使用しているようです) に配信する場合にのみ正しいです。大きなスパム メッセージを定期的に受信する場合は、サイズ条件を削除するか* < 512000、数値を調整してください。SpamAssassin 標準の Procmail 定型文には、個人のシステムでは不要で、共有ホストでは疑わしいロック ファイルと、実際には正しくないと思われる破線に関する奇妙なカーゴ カルトの呪術が含まれていFromます。

提供したサンプルに固有のアドバイスが必要な場合は、誤検知がないという完全な自信を持ってこれらの特定のメッセージを破棄できるような、徹底的に調査された絶対的に真実の事実であっても、他のメッセージの処理にはほとんど役に立たず、明日または来週には時代遅れになっている可能性があることを理解してください。

関連情報