spamassassin - фильтрация определенных кириллических / русских букв UTF-8 (в кодировке base64)

1349
nox

У меня возникли проблемы с настройкой моих личных 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, которые достаточно длинные. Поскольку я ищу отдельные символы, я не могу использовать этот подход.

Я что-то пропустил? Спасибо за вашу помощь!

edit: я также попробовал 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,[...] 
0
Вы пытались настроить `ok_locales`? https://spamassassin.apache.org/full/3.2.x/doc/Mail_SpamAssassin_Conf.html#language_options AnFi 7 лет назад 0
@ AndrzejA.Filip `ok_locales` просто ищет типичные региональные кодировки. Это мне не поможет, так как электронные письма находятся в `utf-8` = / nox 7 лет назад 0
Извините, `ok_languages` более уместен. `UNWANTED_LANGUAGE_BODY` - 2,8. https://spamassassin.apache.org/full/3.1.x/doc/Mail_SpamAssassin_Plugin_TextCat.html AnFi 7 лет назад 0
@ AndrzejA.Filip Может быть, вы правы, но все же это не работает для моего случая, я тоже попробовал, должен был написать это, может быть. Электронные письма все еще приходят через эту опцию. Я предполагаю, что это из-за их кодировок `utf-8` в сочетании с кодировкой` base64`. nox 7 лет назад 0
Вы пытались проверить работу плагина texcat? `spamassassin -D textcat -t spam_message_file` AnFi 7 лет назад 0
@ AndrzejA.Filip см. Новое редактирование. Спасибо за вашу помощь до сих пор! nox 7 лет назад 0
Правило строится с использованием UTF-8? Эти глифы могут быть получены с использованием разных кодовых страниц, не так ли? Yorik 7 лет назад 0
@Yorik Я не уверен, что вы хотите спросить здесь. Сам файл конфигурации находится в кодировке `utf-8`. Я думаю, что коды Unicode уникальны для этих букв. nox 7 лет назад 0

1 ответ на вопрос

0
Daniel Vérité

Очевидно, что 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 <mailtest 10.0 / 5.0 Программное обеспечение для обнаружения спама, работающее в системе ** отредактировано ** ...  Предварительный просмотр содержимого: ** отредактировано ** [...]  Детали контент-анализа: (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

К счастью, мне не так уж и повезло. В любом случае, смотрите новое редактирование для получения дополнительной информации. nox 7 лет назад 0
@nox: Если я правильно понимаю, фильтрация тоже работает для вас. Теперь у вас другой вопрос, поэтому некоторые другие правила соответствуют или не совпадают в зависимости от того, как называется spamassassin. Daniel Vérité 7 лет назад 0
Может быть, это был мой вопрос с самого начала. Чтобы уточнить: я хочу применить это правило для входящих писем (конечно), и это правило не работает, в то время как другие работают отлично там. Тем не менее, мой настроенный фильтр действительно работает локально. nox 7 лет назад 0

Похожие вопросы