
Спам от известной организации, которая продает большие партии подделок всего, от дронов до пылесосов 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
.fr
many.labels.here
.co.uk
.com.au
k12.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
строк, что, как я считаю, никогда не было правильным.
Если вам нужен совет, касающийся конкретно предоставленных вами образцов, поймите, что даже глубоко исследованные и абсолютно правдивые факты, которые могли бы позволить вам отбросить эти конкретные сообщения с полной уверенностью в отсутствии ложных срабатываний, будут совершенно бесполезны для обработки любых других сообщений и/или устареют завтра или на следующей неделе.