私に電子メールを送信せずにprocmailルールをテストできますか?

私に電子メールを送信せずにprocmailルールをテストできますか?

特定の国からスパムをたくさん受けています。ソースにはすべて同じパターンがあります。私はこれらのすべての電子メールを自動的にスパムフォルダに移動するためのprocmailルールを作成したいと思います。

スパムのソースは次のとおりです(個人情報保護のために「[編集済み]」を追加しました)。

Return-Path: <>
X-Original-To: [REDACTED]
Delivered-To: [REDACTED]
Received: from [REDACTED] ([REDACTED] [REDACTED])
    by [REDACTED] (Postfix) with ESMTPS id 2AC8E731E799DC
    for <[REDACTED]>; Sat,  9 Jul 2022 20:16:41 +0000 (UTC)
Received: from [REDACTED].org ([REDACTED].ru [REDACTED])
    by [REDACTED] (Postfix) with ESMTP id 6F1865ECD8
    for <[REDACTED]>; Sat,  9 Jul 2022 20:16:40 +0000 (UTC)
[...]

私が望むのは、「Received」ヘッダーを見て、.ru TLDのすべてをスパムに送信することです。

私の試みは次のとおりです

:0 H
* ^Received:*\.ru
.Spam/

しかし、私はprocmailルールを書くのが初めてです。新しいルールが正しいことを確認するためにどのようにテストできますか?

答え1

procmail標準入力でメールメッセージを受け入れるため、パイプで接続されているすべての項目で機能します。理想的には、パイプで接続されているものは、メール転送エージェントから送信されたものと同じでなければなりません。また、正しいコンテンツに新しいルールを含める前に、カスタムルールファイルを使用してテストしてください.procmailrc

# rm output
# cat testmessage
From [email protected]
To: [email protected]
Subject: foo

test
# cat testrules
:0 H
* ^
output
# procmail testrules < testmessage
# cat output
From [email protected]
To: [email protected]
Subject: foo

test

#

答え2

Procmailには、-mどこにもメッセージを渡さずにルールファイルをテストするオプションがあります。$DEFAULT一致するルールがない場合、受信トレイにメールの送信がオフになります。このオプションを使用するには、実行するルールファイルのファイル名を渡す必要があり、VERBOSE=yesコマンドラインと同様に変数を設定できます。

procmail -m test.rc VERBOSE=yes <test.msg

たぶんまだ見ることができるかもしれません。https://www.iki.fi/era/mail/procmail-debug.html (古いですが、まだ曖昧に関連しています)。

特定のルールでは、誤検知が発生しやすい。正規表現エンジンは部分一致を許可するため、ルールが実行されます。

Received: from postfix.rules.example.com ...

部分文字列と一致するためです.ru。次の後ろに単語の境界を求めることで、これをある程度防ぐことができますru

:0
* ^Received:.*\.ru\>
.Spam/

また、「すべてのテキスト」の正規表現は、任意の1文字と一致し、前の.*式をできるだけ繰り返すが、0回の繰り返しも許可するという意味です。 (したがって、あなたの試みは0個以上のコロンが後に続くことを許可しますが、その後にリテラルテキストが続く場合にのみ可能です。).*Received.ru

さらに強化することができますが、Received:ヘッダーは標準化がうまくいかないと悪名高いです。多くのサーバーは、Received:コロンの後ろの最初の部分がfromHELONAME(RDNS [IP])を意味するヘッダーを生成するPostfixまたはSendmailを実行します。ここで、IPは実際のIPアドレスであり、RDNSはリバースDNSルックアップの結果です(空になる可能性があります)。 HELONAMEはHELO、またはコマンドを使用してSMTPトランザクションを開始したときにリモートクライアントが自分で付与する名前ですEHLO(クライアントはここに必要なものを入力できます。一部はスパムフィルタに良い明白な偽造エントリを入力します!)...同時に、他の多くのサーバーは、さまざまな形式を使用するさまざまなソフトウェアを実行するか、ローカル管理者が独自に設定することをお勧めします(え、Exim)。各Received:メッセージの上部付近のヘッダーは最も近いサーバーからのものであるため、完全に構成された情報を簡単に含むことができる遠いサーバーよりも予測可能性と信頼性が高くなります。

それにもかかわらず、これは最終的にやや不満足です。 SMTP転送中に不要なメッセージをブロックするようにISPを説得できれば、より効率的です(メールボックスが利用できないかのように配信試行を効果的にブロックします)。一部のプロバイダは、ユーザーにロシア語のメッセージをブロックすることができるSpamAssassinなどのアクセスを提供するため(正確さはあまり良くなく、メカニズムはロシア語とセルビア語などを区別しないが)、ブロックまたは許可する必要があります。ほとんどすべてがキリル文字です)、一部は既知のスパマーが接続できないようにIPレベルでトラフィックをブロックします。しかし、破壊者に対する最後の防御線として、Procmailはないよりもはるかに優れています。

関連情報