Вопрос или проблема
Это своего рода общий вопрос о тренировке Spamassassin. У меня недавно настроен почтовый сервер, который фильтрует входящую почту через Spamassassin. Недавно у меня было забронировано место на рейс, помеченное как спам (оценка 5), и я бы хотел сообщить Spamassassin, что это не спам. (Возможно, это также отправит письмо повторно без модифицированных заголовков Spamassassin?)
Я пытался искать информацию, но нахожу только материалы о том, как заставить Spamassassin отмечать сообщения как спам (и ничего о том, как исправить ложные срабатывания) или для людей, пишущих электронные письма – как не попасть в спам.
Итак, в отношении предоставления обратной связи Spamassassin о неправильных вызовах:
-
Есть ли способ сделать это из почтового клиента (например, Thunderbird)
-
Есть ли способ сделать это через командную строку на почтовом сервере?
Я хотел бы сделать процесс как можно более простым, но пусть это будет любой способ, если он справится с задачей.
Детали от SpamAssassin относительно письма:
0.0 FSL_HELO_NON_FQDN_1 Нет доступного описания.
0.6 HK_RANDOM_ENVFROM Имя пользователя отправителя выглядит случайным
-0.0 RCVD_IN_DNSWL_NONE RBL: Отправитель перечислен на http://www.dnswl.org/, нет доверия [82.150.225.129 указан в list.dnswl.org]
-0.0 RCVD_IN_MSPIKE_H3 RBL: Хорошая репутация (+3) [82.150.225.129 указан в wl.mailspike.net]
0.0 HEADER_FROM_DIFFERENT_DOMAINS From и EnvelopeFrom 2 уровней доменов почты отличаются
1.0 SPF_SOFTFAIL SPF: отправитель не соответствует записи SPF (softfail)
1.6 SUBJ_ALL_CAPS Тема полностью в заглавных буквах
1.1 MIME_HTML_ONLY BODY: Сообщение содержит только текст/html MIME части
0.7 HTML_IMAGE_ONLY_20 BODY: HTML: изображения с 1600-2000 байтами слов
0.0 HTML_MESSAGE BODY: HTML включен в сообщение
-0.0 RCVD_IN_MSPIKE_WL Mailspike хорошие отправители
0.0 UNPARSEABLE_RELAY Информационный: сообщение имеет нераспознаваемые строки ретрансляции
0.0 T_REMOTE_IMAGE Сообщение содержит внешнее изображение
Очевидно, главные виновники это тема со всеми прописными SUBJ_ALL_CAPS и MIME_HTML_ONLY (я полагаю, отсутствие текстовой альтернативы).
Письмо было подтверждением бронирования рейса, и тема выглядела так:
Subject: JENNINGS/NICK MR 23 JAN MOF DPS
Заголовки:
X-Envelope-From: <[email protected]>
X-Envelope-To: <[email protected]>
Received: from mail1.amadeus.net (unknown)
by 147-49-15-51.rev.cloud.scaleway.com(Postfix 3.1.0/8.13.0) with SMTP id unknown
Fri, 20 Jan 2017 07:55:10 +0000
(envelope-from <[email protected]>
Received: from obeap115 (nat-dns-mnp.amadeus.net [82.150.225.129])
by mail1.amadeus.net (Postfix) with ESMTP id 3F7A9200042
for <[email protected]>; Fri, 20 Jan 2017 07:55:10 +0000 (GMT)
From: [email protected]
TO: [email protected]
Message-ID: <CTS/GA/C50D54421A07/[email protected]>
FND-Request-ID: <CTS/GA/C50D54421A07/[email protected]>
Job-ID: 1
Subject: JENNINGS/NICK MR 23 JAN MOF DPS
Date: Fri, 20 Jan 2017 07:55:09 +0000
Content-Type: multipart/mixed;
boundary="----=_Part_191904_1900935199.1484898909762"
MIME-Version: 1.0
Есть как конкретные, так и общие советы, которые могут быть полезны в этом случае.
Конкретные
Основная проблема здесь заключается в том, что Garuda Airlines, удружили нам, отправив подтверждающие письма, которые имеют много признаков спама. Тематическая строка ОЧЕНЬ ГРОМКАЯ, они отправляют электронные письма, содержащие много изображений и очень мало текста, отправитель-конверт ([email protected]
) явно создан машиной, и провайдер электронной почты для их (аутсорсинговой) системы подтверждения (amadeus.com) имеет бесполезную запись SPF (несмотря на все наши рекомендации наоборот, некоторые люди ошибочно полагают, что в записи, которая перечисляет некоторые из их систем отправки и заканчиваются на ~all
, есть какой-то смысл).
С большинством из этого вы не сможете много сделать. Если вы хотите быть уверенным, что они пройдут, строка в вашем ~/.spamassassin/user_prefs
с указанием whitelist_from *@amadeus.com
позволит этим сообщениям проходить к вам. Вносить дальнейшие изменения и изменять вес срабатываемых правил, вероятно, плохая идея. Набор правил SpamAssassin (SA) создан путём фильтрации большого количества спама и определения характеристик, которые применяются к большинству из них; вы, скорее всего, откроете свой ВХОДЯЩИЙ для множества других писем, а не только для подтверждений Garuda, отключив эти правила.
Общие
Это как раз тот случай, который хорошо решает байесовский движок. Он предназначен для фильтрации электронной почты, которая не вызывает другие правила, но содержит то, что вы не хотите читать, помогая при этом через электронную почту, которая вызывает те правила, но содержит то, что вы хотите читать.
Если я правильно помню, движок ничего не сделает, если вы его не натренируете. Самый простой способ его тренировки – поддерживать две папки, называемые, скажем, spam
и ham
. В spam
вы помещаете копии электронных писем, которые попали в ваш ВХОДЯЩИЙ, но вы их не хотели; в ham
вы помещаете копии электронных писем, которые оказались ложными положительными для SA, но вы их хотели, например, это подтверждение.
Каждую ночь (или около того) у вас есть задание cron, которое говорит:
sa-learn --spam --mbox mail/spam
sa-learn --ham --mbox mail/ham
соответственно изменяя пути. Со временем это научит движок тому, что вы действительно хотите и не хотите читать. Поскольку высокий байесовский балл может добавить +4.0 балла к оценке SA письма, в то время как низкий может вычитать 1.9, хорошо обученный движок может действительно помочь SA различать то, что вы хотите читать, от того, что вы не хотите – но вам нужно приложить усилия, чтобы его научить.
Кажется, вы используете Dovecot. Я потратил несколько недель на поиск гладкой интеграции, которая позволяет пользователям легко тренировать серверные фильтры спама без необходимости копирования писем.
Ключевой частью является плагин Antispam для Dovecot. Плагин antispam срабатывает при операциях перемещения между тремя группами папок: trash
, unsure
и spam
. В частности, когда обнаруживается переход из любой папки (кроме spam
) в spam
, срабатывает действие по обучению спама, а когда обнаруживается переход из spam
в unsure
, срабатывает действие по обучению с хамом.
Он поддерживает различные задние обработки обучения. Простой является mailtrain
, который просто выполняет команду и помещает почту на стандартный ввод. Конфигурация для этого может выглядеть так:
plugin {
antispam_backend = mailtrain
antispam_mail_sendmail = /usr/local/bin/sa-learn-stdin.sh
antispam_mail_spam = spam
antispam_mail_notspam = ham
antispam_mail_sendmail_args = -L
antispam_spam = Junk;INBOX.Junk
antispam_trash = Trash;INBOX.Trash
antispam_allow_append_to_spam = no
}
Вместе с /usr/local/bin/sa-learn-stdin.sh
:
#!/bin/bash
/usr/bin/spamc "$@" >> /tmp/sa-learn-log
exit 0
Эта конфигурация говорит “Чтобы учить как спам, выполните /usr/local/bin/sa-learn-stdin.sh -L spam
и чтобы учить как не-спам, выполните /usr/local/bin/sa-learn-stdin.sh -L ham
.” Аргументы настроены через antispam_mail_spam
, antispam_mail_notspam
и antispam_mail_sendmail_args
.
Это уже довольно удобно. Если вы сможете настроить свой клиент на перенесение почты, которую вы отмечаете как спам, в папку спама, это уже довольно автоматическая интеграция между клиентом и сервером. Точно так же, если вы настроите сервер для хранения писем как спам в папке спама при доставке (например, используя Sieve), сообщение будет обучено как хам, когда пользователь перемещает его из папки спама.
Чтобы улучшить интеграцию с Thunderbird и KMail, я написал патч для antispam, который, к сожалению, не получил никакой обратной связи от вышестоящей организации; используйте на свой страх и риск.
Он добавляет конфигурационный параметр в antispam, который можно просто добавить в секцию plugin
в конфигурации dovecot:
antispam_spam_flags = "Junk;$JUNK"
(Кавычки важны, чтобы предотвратить $
от возможного нежелательного поведения.)
С патчем antispam также будет запускать обучение, если сообщение получает флаг спама или теряет все свои флаги спама. Флаги – это функция IMAP и используются клиентами для хранения кусочков информации на сервере. Оказывается, Thunderbird и KMail используют эти флаги для хранения статуса спама/не-спама сообщений.
Флаг Junk
устанавливается Thunderbird, когда вы отмечаете сообщение как нежелательное. Аналогично с флагом $JUNK
для KMail. Таким образом, с этой конфигурацией вы можете активировать обучение на стороне сервера, отмечая почту как спам/не спам в Thunderbird или KMail.
Другие клиенты, такие как K9-Mail, тоже хорошо работают, потому что там по умолчанию почта перемещается в папку спама, на что также сработает antispam.
Вы можете реализовать ту же функциональность, я думаю, в IMAPSieve. Это в моем списке задач, но, к сожалению, в настоящее время у меня нет готовой к тестированию среды с достаточно свежей версия Dovecot.
Ответ или решение
Обучение SpamAssassin корректной классификации электронной почты
Если SpamAssassin пометил письмо как спам, хотя это не так, важно научить его правильно распознавать такие сообщения в будущем. Это особенно важно, если ваш почтовый сервер только недавно был настроен, и вы столкнулись с ложными срабатываниями на примере письма о бронировании авиарейса.
Способы корректировки
Через почтовый клиент (например, Thunderbird)
-
Используйте фильтры: В Thunderbird можно настроить фильтры, которые будут автоматически перемещать определенные сообщения в папки, основываясь на их характеристиках.
-
Плагины и расширения: Некоторые плагины способны интегрироваться с серверными настройками и осуществлять пересылку определённых сообщений для обучения. Воспользуйтесь дополнениями, которые могут автоматизировать эту задачу.
Через командную строку на почтовом сервере
-
Обучение Bayesian-фильтру: Это позволяет SpamAssassin лучшего различать спам от нужных сообщений. Обучение можно произвести с помощью следующих команд:
sa-learn --spam --mbox /путь/к/спам/папке sa-learn --ham --mbox /путь/к/нужным/письмам
Регулярно проводите это обучение, чтобы фильтр становился точнее.
-
Использование
whitelist_from
: Чтобы гарантировать доставку писем от определённых отправителей, добавьте адрес в белый список. Например, добавьте в~/.spamassassin/user_prefs
:whitelist_from *@amadeus.com
Интеграция через Dovecot
-
Плагин Antispam для Dovecot: Это решение позволяет обучать SpamAssassin через перемещение писем между папками.
-
Настройка через скрипты: Реализуйте обработку переноса сообщений с помощью скриптов, таких как
sa-learn-stdin.sh
, чтобы автоматизировать процесс обучения.
Специфические рекомендации
Проблема с авиарейсовыми письмами связана с тем, что они имеют некоторые характеристики спама, такие как заголовки в верхнем регистре и HTML-формат без текстовой альтернативы. Чтобы минимизировать ложные срабатывания, рассмотрите возможность настройки специфических правил, которые будут учитывать определённые особенности таких писем без изменения глобальных параметров SpamAssassin.
Заключение
Обучение SpamAssassin — это непрерывный процесс, требующий времени и внимания. При регулярной корректировке правил и настройке важных параметров такие инструменты как SpamAssassin могут стать надёжной защитой вашего почтового ящика от ненужной корреспонденции, одновременно пропуская важные для вас сообщения. Не забывайте о регулярном обновлении вашего подхода на основе новых случаев и анализа ошибок системы.