Помогите обучить SpamAssassin![SOLVED]
У меня стоит postfix+amavisd+spamassassin
SpamAssassin+MySQL
Все работает.
Но вот научить я его ничему не могу.
как его "научить" русскому языку?
languages
Не хочу хвастаться но вот статистика за неделю:
Rejected=506000
Received=2112
25-30 сообщений в день - СПАМ
2112/506000=0,4%, то есть откидывается 99,6%
Основную работу делает postfix, так я его настроил.
Загрузка процессора на amavisd-new небольшая т.к. реально до него доходит максимум 1.2 сообщения в минуту.
из этих сообщений СПАМ - 30*7/2112 = 10%
Вот эти 10% мы и уничтожаем.
Для чего нужен
normalize_charset 1
в spamassassin?
Представьте, что Вам приходит спам со слово мсекс и т.д.
если normalize_charset=0 (по умолчанию) то придется изучить (sa-learn) этот спам в 3 кодировках - koi8-r, cp1251, utf-8 чтобы он больше не приходил.
Когда я поставил normalize_charset=1, то обнаружил ошибку - язык перестал опознаваться.
Проверил письмо utf - он тоже не определяет язык.
Вывод - ошибка в /usr/shares/spamassassin/languages
Там неправильные токены для определения русского UTF-8
Я их вставил из phpclasses.org
После этого все заработало.
[2849] dbg: generic: Converting... [2849] dbg: message: decoding quoted-printable [2849] dbg: generic: Using labeled charset koi8-r [2849] dbg: generic: Converting... [2849] dbg: textcat: classifying, skipping: yi sco lv is bs sl la ga sa eu et rm cy eo fy gd lt [2849] dbg: textcat: language possibly: ru.iso-8859-5 [2849] dbg: textcat: X-Languages: "ru.iso-8859-5", X-Languages-Length: 2735
То есть письмо сначала переводится в UTF, а потом язык определяется textcat.
Файл languages смотрите во вложении под графиками.
Проверить ошибку просто - берем любое сообщение в UTF-8
sa-learn - язык не определится. То есть - язык не определяется если сообщение в UTF-8 никогда.
Вопрос: как это изменение внести в сообщество? Не хочется после emerge каждый раз менять файл.
- Для комментирования войдите или зарегистрируйтесь
Пример
Нашел на opennet.ru
ссылку на http://sa-russian.narod.ru/downloads.html
русские правила. Там две кодировки koi8-r cp1251
Но это не gentoo-way
у меня стоит локаль RU_ru.UTF-8
mysql - utf8
в /etc/spamassassin/local.cf
ok_locales ru en
normalize_charset 1
то есть он должен все перевести в utf8
dev-perl/Encode-Detect стоит
когда запускаю sa-learn в токенах абракадабра
Это у всех так или есть способ туда слова на русском засовывать?
Или всем хватает whitelisting?
Ответьте пожалуйста кто использует, как это победить в генту
из поиска
Ребята opennet советуют
1) Испрасить файл /usr/local/lib/perl5/site_perl/5.8.8/Mail/SpamAssassin/Plugin/Check.pm
1a)добавить
use utf8;
2a)Факультативно туда же:
use POSIX qw (locale_h);
die "Could not set locale ru_RU.UTF-8" unless setlocale(LC_CTYPE,'ru_RU.UTF-8');
die "Could not set locale ru_RU.UTF-8" unless setlocale(LC_COLLATE,'ru_RU.UTF-8');
Но мне это не помогло. Там еще что-то у них написано, но пишут танец с бубном нужен только если локаль не ru_RU.UTF-8, а у меня она самая :)
А в генту при emerge пишут что-то про export LANG=en_US иначе работать не будет (особенно с UTF-8)
Как это все понимать?
Теперь нашел вот это в дебаге:
[24172] dbg: textcat: classifying, skipping: yi sco lv is bs sl la ga sa eu et rm cy eo fy gd lt
[24172] dbg: textcat: can't determine language uniquely enough
[24172] dbg: textcat: X-Languages: "", X-Languages-Length: 6508
Теперь надо учить textcat?
Может у кого-то это
Вот типичный спам на русском - рассылки.
Во вложении письмо выдернутое из maildir
По сценарию там koi8-r потом переводим в utf8 (или нет?)
очищаем от тэгов
берем токены из /usr/share/spamassassin/languages
loaded 73 language models
и сравниваем чтобы угадать язык.
Вопрос: почему он не угадывает? Или так и должно быть?
P.S. Модуль надо загрузить
/etc/spamassassin/v310.pre:
loadplugin Mail::SpamAssassin::Plugin::TextCat
sample.msg
Может у кого-то это работает?
#wget http://www1.uralpress.ru/sample.msg
#sa-learn -D --spam sample.msg 2>&1 | grep textcat
normalize_charset 0
При
normalize_charset 0
в /etc/spamassassin/local.cf
[27552] dbg: textcat: language possibly: ru.koi8-r,uk.koi8-r
[27552] dbg: textcat: X-Languages: "ru.koi8-r uk.koi8-r", X-Languages-Length: 1649
Для прошлого сообщения.
Так что, вести базу сразу в 3-х кодировках?
значит dev-perl/Encode-Detect
masked ~x86 keyword так что не работает.
Как его засунуть в MySQL
Все по мануалам:
P.S. не забудьте собрать с doc:
echo "mail-filter/spamassassin doc mysql">>/etc/portage/package.use
Без doc таблиц не будет :)
Круто
Разговариваю тут сам с собой
:)
Получилось howto ^_^
Чтобы легче
Для обучения сделал так:
После этого вся почта сыпется в
весь СПАМ в
Ручная обработка.
После этого в
остается false negatives - ham
- false positives - spam
Кормим этим sa-learn.
Поскольку кормить обычным ham и spam смысла нету, только неверные срабатывания.
Чтобы было легче spam и trap беру клиентом imap, там раскидываю по папкам.
Хорошо бы конечно пользователям сделать папку spam, но они сейчас сидят на pop3 и будут спам кидать не будут, я не уверен. Вот если бы веб-клиент (roundcube,horde) и добавить кнопку "Это спам" как в mail.ru и т.д. Это я так мечтаю...
Еще видел настройку для Kmail ? там привязываются фильтром sa-learn чтобы было легче кормить.
Я просто крон поставил.
Замучался исправлять чужие ошибки
Замучался пересылать письма из
Проанализровал лог за неделю добавил такие настройки
Доходило до того? что с базовыми настройками блокировались письма из локалки как спам, блокировались письма, которые пользователи пересылали другим, получив от меня из trap.
После того, как я накормил 10 писем из trap как ham, они все равно попадали в trap.
Фактически
AWL=-1.0
trusted_networks=-1.4
FORGED_MUA_OUTLOOK=4
поэтому whitelisting дает мало эффекта
еще получил для тупого клиента в локалке DCC=1.3 - (кстати на нем был раньше замечен вирус из аутлук, отсылающий спам) это как?
Теперь вся надежда на Bayes
Старые все данные я стер (почистил таблицы в MySQL)
Люди добрые, скажите я правильно делаю?
Mailgraph
Какие настройки нужны amavisd-new чтобы mailgraph показывал SPAM?
Никакие. mailgraph имеет
Никакие. mailgraph имеет доступ по чтению к maillog?
Не грусти, товарищ! Всё хорошо, beautiful good!
Ну да
Я его запустил рутом
Эта статистика из maillog'a
Если в /etc/amavis.conf
$DO_SYSLOG = 1;
То он будет писать туда же
Только какой вот нужен
$log_level = 1;
Чтобы он писал, что поймал СПАМ?
Это?
При $log_level = 1;
он пишет "Blocked SPAM" этого хватит mailgraph?
$syslog_priority = 'info'
Какие RBL кто использует?
Поставил эти:
reject_rbl_client zen.spamhaus.org
reject_rbl_client dul.dnsbl.sorbs.net
reject_rbl_client bl.spamcop.net
После первого второй еще как-то робит
а третий думаю вообще убрать - срабатываний - 3-5 в день
Еще статистики:
mail log # cat /var/log/mail.log | grep -c "IP-able helo SPAM"
213869
mail / # cat /var/log/mail.log | grep -c zen.spamhaus.org
39186
mail / # cat /var/log/mail.log | grep -c dul.dnsbl.sorbs.net
386
mail / # cat /var/log/mail.log | grep -c bl.spamcop.net
34
Очень крутая штука этот IP-able helo SPAM", причем соответствует RFC
После этого никакие grey-listing не нужны, остаются только нормальные smtp серверы.
Как поставить
Отсекает почти половину СРАЗУ.
Есть такая штука -
Есть такая штука - reject_non_fqdn_hostname, делает то же самое. Подозреваю, что еще и быстрее.
Не грусти, товарищ! Всё хорошо, beautiful good!
Да только она стоит в smtpd_sender_restrictions
И IP она принимает
helo_restrictions быстрее хоть и regexp
потому что нам только сказали helo
а мы уже до свидания
обмен данными не происходит.
От кого оно пришло мы уже не спрашиваем.
smtpd_sender_restrictions
обрабатывается позднее.
Хм. Кто вам сказал, что она
Хм. Кто вам сказал, что она туда пихается? Ни разу в smtpd_sender_restrictions она не кладется. Погуглите, как работает smtpd_helo_restrictions и что туда можно добавлять.
Не грусти, товарищ! Всё хорошо, beautiful good!
Зачем гуглить?
Есть официальный мануал что куда пихать - http://www.postfix.org/postconf.5.html
smtpd_helo_restrictions (default: empty):
там есть параметр reject_non_fqdn_helo_hostname
Попробую это поставить вместо костыля - проверим что лучше
Уже стояло?
Оказывается у меня и так это было: Helo command rejected: need fully-qualified hostname; from= to= proto=ESMTP helo=
Dec 19 23:10:05 mail postfix/smtpd[14515]: NOQUEUE: reject: RCPT from 78-106-169-0.broadband.corbina.ru[78.106.169.0]: 450 4.5.2
- вот такие ответы, значит надо и то и это
Извиняюсь
RFC это не соответствует (IP helo)- нарушает, но работает хорошо. Нормальные серверы всегда представляются именем.