Русский язык SpamAssassin
Если использовать
/etc/spamassassin/local.cf normalize_charset 0
по умолчанию, то писать свое правило на русском языке надо в 3-х кодировках - KOI8-R, WIN1251, UTF8.
то есть
body PORNO /порно_в_кодировке_koi8r|порно_в_кодировке_win|порно_в_кодировке_utf8/ score PORNO 1.0
Если
/etc/spamassassin/local.cf normalize_charset 1
то достаточно
body PORNO /порно_в_кодировке_utf8/ score PORNO 1.0
Из коробки SpamAssassin не работает с normalize_charset 1
Исправил так:
/usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/Message.pm после use warnings; #=========== use bytes; #=========== /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/Plugin/Check.pm после use warnings; добавил #===================== use utf8; use POSIX qw (locale_h); POSIX::setlocale(&POSIX::LC_CTYPE,'ru_RU.UTF-8');
взято с http://www.opennet.ru/openforum/vsluhforumID1/77201.html
таблица кодировок - http://www.utf8-chartable.de/unicode-utf8-table.pl
генератор правил - http://www.spamassassin.tu2.ru/index.php
Тесты:
utf8.msg
Return-Path: <1@1.ru> Received: from localhost ([127.0.0.1]) To: "1@1.ru" <1@1.ru> From: <1@1.ru> Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit порно
http://uralpress.ru/my/utf8.msg
То же в кодировке windows-1251:
http://uralpress.ru/my/win.msg
Правила:
http://uralpress.ru/my/russian.cf
normalize_charset=0
для win.msg срабатывает LOCAL_WIN
для utf8.msg срабатывает LOCAL_UTF
normalize_charset=1
для win.msg срабатывает LOCAL_UTF
для utf8.msg срабатывает LOCAL_UTF
Если не вносить исправления - то ничего не срабатывает.
/etc/spamassassin/russian.cf
body LOCAL_TEST /test/ score LOCAL_TEST 1.0 body LOCAL_WIN /\xEF\xEE\xF0\xED\xEE/ score LOCAL_WIN 1.0 body LOCAL_UTF /\xd0\xbf\xd0\xbe\xd1\x80\xd0\xbd\xd0\xbe/ score LOCAL_UTF 1.0
spamassassin <utf8.msg Return-Path: <1@1.ru> X-Spam-Level: **** X-Spam-Status: No, score=4.8 required=6.3 tests=AWL,LOCAL_UTF,MISSING_DATE, MISSING_MID,MISSING_SUBJECT,NO_DNS_FOR_FROM,UNPARSEABLE_RELAY autolearn=no version=3.2.5 X-Spam-Relay-Country: Received: from localhost ([127.0.0.1]) To: "1@1.ru" <1@1.ru> From: <1@1.ru> Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit порно
Что меня смутило до этого это TextCat.
Приношу свои извинения что неправильно понял.
http://spamassassin.apache.org/full/3.2.x/doc/Mail_SpamAssassin_Plugin_TextCat.html
DESCRIPTION This plugin will try to guess the language used in the message text. You can then specify which languages are considered okay for incoming mail and if the guessed language is not okay, UNWANTED_LANGUAGE_BODY is triggered It will always add the results to a ``X-Language'' name-value pair in the message metadata data structure. This may be useful as Bayes tokens. The results can also be added to marked-up messages using ``add_header'', with the _LANGUAGES_ tag. See the Mail::SpamAssassin::Conf manpage for details. Note: the language cannot always be recognized with sufficient confidence. In that case, UNWANTED_LANGUAGE_BODY will not trigger.
Вот для чего он нужен.
Соответственно при normalize_charset=1 все переводится в UTF-8,
Сначала переводится, а потом запускается TextCat.
а там TextCat язык определяет
только для (Serbia and Montenegro) и Armenia.
cat /usr/share/spamassassin/languages | grep -a "^0 " | grep utf-8 0 am.utf-8 0 yi.utf-8
З.Ы. А баг который я отправил - это определение русского языка для UTF-8 TextCat.
То есть файл ru.utf-8.lm для сборки - feature request.
- Для комментирования войдите или зарегистрируйтесь
Теперь ответ на вопрос про
Теперь ответ на вопрос про базу GeoIP:
Меняем IP::Country::Fast на IP::Country::MaxMind
Базу лучше брать свежую - http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
и класть ее в /usr/share/GeoIP/GeoIP.dat
Прогнал по всему архиву писем - последний релей всегда не XX!!!
Кстати пропали и непонятные EU - GeoIP точно лучше
Ура!!!
Теперь ответ на вопрос почему
Теперь ответ на вопрос почему не ставятся заголовки:
http://www.ijs.si/software/amavisd/#faq-spam
План следующих действий.Из
План следующих действий.
Из нерешенных вопросов остается:
настройка фильтров
1. Relay-Country - пересчитать статистику и откнуть ненужные страны.
2. Language - возможно, добавить scores небольшой письмам на русском не из россии, на не русском добавить побольше.
Подбор оптимального значения засыпания:
smtpd_client_restriction = sleep 5
и включить проверку описанную http://www.spamhaus.org/effective_filtering.html URIBL_SBL
посмотреть что это даст.
И, конечно, написание русских фильтров.
За приближене можно взять эти темы -
порно, ДВД, часы, вебсайты, рассылки и т.д.
для англйского языка этх тестов больше сотни - чем мы хуже?
В дальнейшем по настройке буду писать в эту тему.
Хочу ее закрыть до 1 февраля.
З.Ы. Большинство либо поднимает scores для Байеса, чтобы он ловил больше 6 с 80%, либо кушают спам.
Начнем со статистики. По
Начнем со статистики.
По странам:
ХАМ:
СПАМ, который просочился:
По темам, пока приблизительно:
Соответственно, пишу правила для Relay-Country и X-Language. Больше их трогать не буду.
А вот и мои первые русские
А вот и мои первые русские правила.
Идея гениальная.
Сначала отрезаем письма, в которых встречаются последовательно русские-нерусские буквы.
scores надо поставить побольше, чтобы в остальных правилах на этот казус не обращать внимания.
Таким образом, самые "умные" спамеры - веб-сайты, рассылки и т.д. отпадут сразу.
Почему не страшно писать об этом правиле вслух :
если им не будут пользоваться - оно будет отлично срабатывать у меня.
если им будут пользоваться - спамеры больше не будут так делать.
И то, и то хорошо.
Чтобы это по-нормальному сделать пришлось подумать.
В документации по SpamAssassin очень мало написано как писать правила, но смый лучший способ оказался плагин.
Чтобы не мучаться с трехэтажными regexp'ами, а писать нормальные правила на перле.
Вот первое правило:
LOCAL_RUS_LAT - это то самое правило.
LOCAL_TEST - это тест.
Следующие правила будут такие - куча тестов на вхождение определенного слова, написанного на русском языке, а не на корявых \xD0\xA1 в текст сообщения.
При проверке этого теста выявились ошибки:
если regexp = "123", то $body приходит нормально.
если regexp = "кл", то $body приходит абракадабра. Думаю как его раскодировать. Что-то я сделал неправильно.
Буква Р (Эр русская заглавная) - не понимается перлом как я не бился.
Можете не сомневаться, я проверил весь алфавит в обоих регистрах.
У других товарищей это тоже не получается - http://www.spamassassin.tu2.ru/index.php (выбрать UTF и поставить букву Р) причина непонятна.
Согласно http://www.utf8-chartable.de/unicode-utf8-table.pl
Для тех, кто не согласен писать русские правила привожу кусок английских.
Ну что - нужны они Вам?
Теперь листинг плагина:
Если все пойдет нормально, то будем писать regexp'ы на русском, еще хочу чтобы /i работало.
Вот это настоящая русификация!!!
Жду Ваших комментариев и конечно же, критики.
А вот и первый
А вот и первый клиент:
=C5-m=E0il pa=F1=F1=FB=EB=EAa = Е-mаil paссылкa
$count = 4.
O=D0=C5p=C1=D4u=D7=CE=C1=D1 =D0e=DE=C1=D4=D8 =D0o=CCu=C7=D2=C1=C6=C9u = Oпеpатuвная пeчать пoлuграфиu
$count = 82!!!
Следующее правило будет тоже
Следующее правило будет тоже общее - телефоны.
Вот эти символы там встречаются, оставим только [:digit:].
а эти - выкинем:
Вопрос - как написать на regexp правило вида
[xy]{7}, но не x{7} или, чтобы y встречался минимум 2 раза?
З.Ы.
Вместо
читать
Иначе не проверит все части multipart. Сейчас столкнулся - в первой части (text) все ок, а во второй (html) обманывают :)
И еще какой-то перл там странный - пишу в my.pl - все ок.
Перетаскиваю в плагин - ошибка компиляции. - например @{$text} вместо @text пришлось писать.
Почему так? я перл вообще плохо знаю.
А Вы знаете что челябинские
А Вы знаете что челябинские спамеры самые суровые спамеры в мире?
Со вчерашнего числа стала приходить почта с домена зарегистрированного на адрес Челябинск с местным телефоном
Предлагают купить рассылки по челябинску и Уральскому регону.
Пересчитал статистику после
Пересчитал статистику после фильтров без учета Байеса, заодно перевел архив спама в utf-8 на русском для дальнейшего анализа. Отброшены письма по стране, языку, изменению базовых scores и с учетом 1 моего правила - стали СПАМом.
Было - 744
Всего осталось - 293
Итого отрезалось - 60%
Осталось:
На русском - 234 = 80%
На английском - 59 = 20%
Теперь приходит в среднем 1 письмо в день на одного пользователя СПАМ.
Так и не могу русский язык
Так и не могу русский язык получить.
Вот письмо utf8.msg
Русский алфавит.
Если тест сделать
то в функцию check_count_regexp приходит
Про букву Р я уже писал.
Если же сделать
то приходит
При этом body "портится" если печатать сразу $body и $regexp.
Видимо они в разных кодровках.
Если печатать только $body то результат одинаковый в обоих случаях. - алфавит.
Тем не менее regexp не дает ни одного срабатывания.
Если в функцию отправлять коды - \xd0\xa0, то они так и печатаются, срабатыванй тоже 0.
Если же эти коды посылать без функции
то срабатывания есть.
Я так понимаю это связано с use bytes и use utf8;
Пробовал поставить use locales; в Conf.pm - не помогает.
Как сделать русский язык?
Не, не кузяво как-то..
Это ж, получается, после каждого обновления порта (у меня FreeBSD) снова .pm ручками править?
Муторно...
UTF-8 и TextCat
Честно говоря не нашел багрепорта, поэтому сделал отдельный тикет:
https://issues.apache.org/SpamAssassin/show_bug.cgi?id=6364