обнаружить спам из случайных доменных имен в заголовке, в .procmailrc

обнаружить спам из случайных доменных имен в заголовке, в .procmailrc

Спам от известной организации, которая продает большие партии подделок всего, от дронов до пылесосов Roomba, использует случайные домены в полях From:, Message-ID:, и Reply-To:, все разные, даже без общего завершающего xyz.com.
(Неспамовая почта имеет тенденцию использовать общие доменные имена по крайней мере для Message-ID:и Reply-To:.)

Может ли рецепт в ~/.procmailrc обнаружить такой спам, чтобы затем переслать его в папку для спама?

  • Хотите регулярные выражения с именованными группами захвата?

  • Что-нибудь о цепочке действий с «А» или «а»?

  • Вызвать 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
  • Roomba от mtndewkid.com / myhondafitev.com / constructiongear.com
  • видеопроектор от hairrehablondon.com / hairocean.com / hotmail.com

решение1

Вот рецепт Procmail, который реализует то, что ядуматьВы, возможно, спрашиваете.

Оно используетподсчет очковчто является немного неясной, но иногда полезной функцией. Вкратце, мы присваиваем оценку 1, если есть From:заголовок с доменным именем (как это всегда будет), затем вычитаем единицу из оценки, если заголовок Reply-To:или Message-Id:имеет ту же строку после @.

: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

Конкретная сложность заключается в том, что это не позволяет учитывать поддомены; разрешить отправителя было бы несложно, но обратный сценарий гораздо сложнее, поскольку в общем случае вы не можете точно знать, является ли доменное имя (как в доменах верхнего уровня и , например) или (как в доменах верхнего уровня и т. д.) или даже длиннее (как в случае с и некоторыми префектурами Японии и т. д.).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присваивает 1оценку за первое попадание в первую строку рецепта и не присваивает дополнительную оценку за дополнительные попадания. Маркер \/захватывает строку после себя из совпавшей строки, т. е. все после последнего @знака в заголовке. MATCHЗатем переменная используется в следующих строках рецепта для ссылки на эту захваченную строку; синтаксис $\MATCHсоздает экранированный регулярным выражением шаблон, который соответствует буквальной строке. Последующие рецепты имеют флаг, $сообщающий Procmail о необходимости интерполяции любых переменных (т. е. $MATCH) в условие рецепта, и -1^0инструкцию по подсчету очков для вычитания единицы за первое попадание в условие, а затем ничего, если оно снова совпадает.

Страницы руководства объясняют все эти конструкции, но могут быть довольно сложными; возможно, см. такжеКраткая справка по Procmailчто еще более насыщенно, но, возможно, и быстрее читается и понимается.

Я разместил это как отдельный ответ, чтобы не смешивать содержимое с моим другим ответом, который по сути пытается отговорить вас от создания собственных спам-фильтров, используя только Procmail.

решение2

На основе нескольких ограниченных примеров трудно придумать что-то конкретное, что работало бы сегодня и продолжало бы работать завтра. Если вашдействительныйВопрос на самом деле звучит так: «Как мне предотвратить спам от Procmail?» Очевидный, простой и хорошо документированный ответ на него — «запустите полнофункциональный спам-фильтр, такой как SpamAssassin, и проверьте его результаты». Даже в этом случае ваша точность, вероятно, никогда не будет 100%; но SpamAssassin неплохо справляется с задачей для инструмента, который вы просто настраиваете и забываете. Он в значительной степени полагается на внешние сервисы, которые предоставляют динамическую информацию о репутации для IP-адресов, URL-адресов и других сетевых ресурсов, используемых спамерами, так что на самом деле за кулисами происходит довольно много действий.

ИспользуетсяViaProcmail на вики SpamAssassinесть больше инструкций. Короче говоря, как только вы установили и настроили SpamAssassin, попробуйте что-то вроде

:0fw
* < 512000
| spamassassin

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

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

Второе двоеточие :0:верно только в том случае, если вы доставляете почту в почтовый ящик, требующий блокировки (например, файл mbox, но определенно не каталог Maildir; но, судя по примеру в вашем вопросе, вы, похоже, используете mbox). Если вы регулярно получаете большие спам-сообщения, возможно, уберите условие размера * < 512000или измените число. Стандартный шаблон Procmail SpamAssassin включает файл блокировки, который не нужен в вашей личной системе и, возможно, сомнителен на общих хостах, и какое-то странное вуду карго-культа вокруг сломанных Fromстрок, что, как я считаю, никогда не было правильным.

Если вам нужен совет, касающийся конкретно предоставленных вами образцов, поймите, что даже глубоко исследованные и абсолютно правдивые факты, которые могли бы позволить вам отбросить эти конкретные сообщения с полной уверенностью в отсутствии ложных срабатываний, будут совершенно бесполезны для обработки любых других сообщений и/или устареют завтра или на следующей неделе.

Связанный контент