spamassassin - фильтрация определенных кириллических / русских букв UTF-8 (в кодировке base64)
У меня возникли проблемы с настройкой моей личной spamassassin
правила. Моя проблема: я получаю много русского спама с кириллицей, многие в UTF-8
, Из-за этого поиска кодировки недостаточно. Поэтому я хочу найти несколько типичных русских букв (например): (д|ж|з|и|й)
,
Я попробовал шаблон /(д|ж|з|и|й)/i
так же как /(\xd0\xb4|\xd0\xb6|\xd0\xb7|\xd0\xb8|\xd0\xb9)/i
(эти шаблоны регулярных выражений должны делать то же самое, верно?) в Subject
поиск:
header CYRILLIC_LETTER_PRESENT Subject =~/(д|ж|з|и|й)/i
Результат: UTF-8
Спам все еще приходит. Я проанализировал электронные письма, приходящие через. Все они имеют похожую структуру. Источник (важная часть) ищет один пример спамовой почты следующим образом
Subject: =?UTF-8?B?0KLQtdCx0LUg0L/QvtC90YDQsNCy0LjRgtGM0YHRjyEg0J/QvtC60LDQt9GL?= =?UTF-8?B?0LLQsNGOINC+0YLQu9C40YfQvdGL0Lkg0LLQsNGA0LjQsNC90YIg0L/QvtC7?= =?UTF-8?B?0YPRh9C10L3QuNGPINC00L7RhdC+0LTQsCEg0J/RgNC+0YHRgtC+0Lkg0Lgg?= =?UTF-8?B?0YDQtdC30YPQu9GM0YLQsNGC0LjQstC90YvQueKAiyE=?=
MIME-Version: 1.0
Date: Wed, 8 Mar 2017 06:57:11 +0100
From: =?UTF-8?B?0KDQsNC00LjQuSDQn9C40YjRgg==?= <radiypisht140@zarabotokfm8.ru>
Sender: radiypisht140@zarabotokfm8.ru
Message-ID: <904499458.39893@zarabotokfm8.ru>
X-Priority: 3
List-Unsubscribe: <http://ie8qrshyns.zarabotokfm8.ru/uns/tFRyGZzisv/58dhKEk2im53c/DBetz>
Content-Type: multipart/alternative;
boundary="291e4fd846a7aa548d279e9eb1f199e9_1"
--291e4fd846a7aa548d279e9eb1f199e9_1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
....encoded....body....
--291e4fd846a7aa548d279e9eb1f199e9_1
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
....2nd(?)....encoded....body....
--291e4fd846a7aa548d279e9eb1f199e9_1--
Я погуглил и нашел только один вид полезной информации: http://shallowsky.com/blog/programming/decoding-email-headers.html
Итак, это subject
использования RFC2047
: =?UTF-8?B?msg_subject?= =?UTF-8?B?msg_subject2?= [...]
, Эта линия говорит нам, subject
использует utf-8
кодировка и base64
кодирование (сравните http://www.ietf.org/rfc/rfc2047.txt).
Очевидно, что spamassassin
не декодирует это (правильно). Я не нашел никакой возможности заставить это работать. Я также нашел этот сайт: https://dropbear.xyz/2007/08/07/filtering-base64-encoded-spam/
Но это не помогает мне, поскольку он просто описывает, как фильтровать строки в кодировке base64, которые достаточно длинные. Поскольку я ищу отдельные символы, я не могу использовать этот подход.
Я что-то пропустил? Спасибо за вашу помощь!
редактировать: я также попробовал rawbody
поиск, потому что это должно декодировать кодировку base64, как указано в документации:
rawbody CYRILLIC_LETTER_PRESENT /(д|ж|з|и|й)/i
У меня это тоже не сработало, хотя нужно было обыскивать и все тело, и оно полно кириллических букв.
edit2: я пытался исследовать проблему дальше. Если я попытаюсь проверить textcat с spamassassin -D textcat -t spamtest
, это говорит мне, что это "can't determine language uniquely enough
".
Более того, в итоге я получаю следующий результат:
X-Spam-Flag: YES
X-Spam-Level: *******
X-Spam-Status: Yes, score=7.3 required=3.0 tests=HTML_FONT_LOW_CONTRAST,
HTML_MESSAGE,LOCAL_CYRILLIC,RDNS_NONE,SPF_SOFTFAIL,T_DKIM_INVALID
autolearn=no autolearn_force=no version=3.4.0
Похоже, это работает. Все было хорошо. Мое правило здесь называется LOCAL_CYRILLIC
работает как задумано. НО, проблема в том, что это письмо прошло, не будучи распознанным как спам, поскольку то же правило присутствовало в файле конфигурации. Я попытался переслать мне ту же почту снова, а затем источник электронной почты выглядит так:
X-Spam-Level: **
X-Spam-Status: No, score=2.7 required=3.0 tests=LOCAL_CYRILLIC,
RCVD_IN_DNSWL_MED autolearn=no autolearn_force=no version=3.4.0
Таким образом, кажется, есть разница между выполнением этого теста локально для файла и фактически входящей электронной почты. Зачем? Я всегда перезапускаю spamassassin с systemctl restart spamassassin
, Я проверил это с systemctl status spamassassin
и все выглядит хорошо, spamd
перезагружается так же, как и должно быть. Там я также могу найти следующую информацию для пересылаемого письма:
spamd: clean message (2.7/3.0) for spamd:5555 in 6.0 seconds, 8371 bytes.
spamd: result: . 2 - LOCAL_CYRILLIC,RCVD_IN_DNSWL_MED scantime=6.0,size=8371,user=spamd,uid=5555,required_score=3.0,[...]
1 ответ
Очевидно, что spamassassin не расшифровывает это (правильно). Я не нашел никакой возможности заставить это работать
У меня работает с Ubuntu 14.04
, spamassassin 3.4
, Perl 5.18.2
, язык: fr_FR.UTF-8
,
Правило в ~/.spamassassin/user_prefs
:
header RUSSIAN_CHARS Subject =~ /(д|ж|з|и|й)/i
describe RUSSIAN_CHARS Russian characters in header
score RUSSIAN_CHARS 10
Когда вы берете почтовый файл и заменяете необработанную строку темы тем, что у вас в вопросе:
Тема: = UTF-8 В 0KLQtdCx0LUg0L/QvtC90YDQsNCy0LjRgtGM0YHRjyEg0J/QvtC60LDQt9GL = UTF-8 В 0LLQsNGOINC+0YLQu9C40YfQvdGL0Lkg0LLQsNGA0LjQsNC90YIg0L/QvtC7 = UTF-8 В 0YPRh9C10L3QuNGPINC00L7RhdC+0LTQsCEg0J/RgNC+0YHRgtC+0Lkg0Lgg?????????? = =?UTF-8?B?0YDQtdC30YPQu9GM0YLQsNGC0LjQstC90YvQueKAiyE=?=
Результат:
$ spamc -RПредварительный просмотр содержимого: ** отредактировано ** [...] Детали контент-анализа: (10,0 балла, 5,0 обязательно) описание имени правила pts ---- ---------------------- -------------------------------------------------- 10 RUSSIAN_CHARS русских символов в шапке 0.0 DKIM_ADSP_CUSTOM_MED Нет действительной подписи автора, adsp_override CUSTOM_MED 0.0 FREEMAIL_FROM Отправитель электронной почты обычно злоупотребляет поставщиком почты конечного пользователя (** отредактированное ** [в]gmail.com) -0.0 NO_RELAYS Информационный: сообщение не было передано через SMTP
Это также хиты с rawbody RUSSIAN_CHARS /(д|ж|з|и|й)/i