Помогите обучить 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

[24855] dbg: textcat: loading languages file...
[24855] dbg: textcat: loaded 73 language models
[24855] dbg: config: fixed relative path: /var/lib/spamassassin/3.002001/updates_spamassassin_org/25_textcat.cf
[24855] dbg: config: using "/var/lib/spamassassin/3.002001/updates_spamassassin_org/25_textcat.cf" for included file
[24855] dbg: config: read file /var/lib/spamassassin/3.002001/updates_spamassassin_org/25_textcat.cf
[24855] dbg: textcat: classifying, skipping: yi sco lv is bs sl la ga sa eu et rm cy eo fy gd lt
[24855] dbg: textcat: can't determine language uniquely enough
[24855] dbg: textcat: X-Languages: "", X-Languages-Length: 2735

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

Все по мануалам:

mysql -u root -p
create database spamassassin;
GRANT SELECT,UPDATE,DELETE,INSERT on spamassassin.* to assassin@localhost identified by 'password';
mysql -u root -p spamassassin < bunzip2 /usr/share/doc/spamassassin-3.2.1-r1/sql/awl_mysql.sql.bz2
mysql -u root -p spamassassin < bunzip2 /usr/share/doc/spamassassin-3.2.1-r1/sql/bayes_mysql.sql.bz2
mysql -u root -p spamassassin < bunzip2 /usr/share/doc/spamassassin-3.2.1-r1/sql/userpref_mysql.sql.bz2

mail sql # cat /etc/spamassassin/sql.cf
user_scores_dsn DBI:mysql:spamassassin:localhost
user_scores_sql_username assassin
user_scores_sql_password password

auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:spamassassin:localhost
user_awl_sql_username assassin
user_awl_sql_password password

bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:localhost
bayes_sql_username assassin
bayes_sql_password password

#/etc/init.d/amavisd restart

P.S. не забудьте собрать с doc:
echo "mail-filter/spamassassin doc mysql">>/etc/portage/package.use
Без doc таблиц не будет :)

Круто

Разговариваю тут сам с собой

:)

andribas написал(а):
Разговариваю тут сам с собой

Получилось howto ^_^

Чтобы легче

Для обучения сделал так:

#cat /etc/amavisd.conf | grep trap
$spam_quarantine_to       = 'trap@domain.ru';

mail sql # cat /etc/postfix/main.cf | grep bcc
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc

mail sql # cat /etc/postfix/recipient_bcc
@domain.ru   

#/etc/postfix/master.cf
Для 
127.0.0.1:10025 inet    n       -       n       -       -       smtpd
нужно добавить
  -o receive_override_options=no_address_mappings
(два пробела)
Чтобы не сыпалось по два раза

#postmap /etc/postfix/recipient_bcc
#/etc/init.d/postfix reload

После этого вся почта сыпется в

весь СПАМ в

Ручная обработка.
После этого в

остается false negatives - ham

- false positives - spam
Кормим этим sa-learn.
Поскольку кормить обычным ham и spam смысла нету, только неверные срабатывания.

Чтобы было легче spam и trap беру клиентом imap, там раскидываю по папкам.
Хорошо бы конечно пользователям сделать папку spam, но они сейчас сидят на pop3 и будут спам кидать не будут, я не уверен. Вот если бы веб-клиент (roundcube,horde) и добавить кнопку "Это спам" как в mail.ru и т.д. Это я так мечтаю...
Еще видел настройку для Kmail ? там привязываются фильтром sa-learn чтобы было легче кормить.
Я просто крон поставил.

Замучался исправлять чужие ошибки

Замучался пересылать письма из

Проанализровал лог за неделю добавил такие настройки


score FORGED_MUA_OUTLOOK=0 #кривой оутлук

#крвые руки админов - нет кодировки, спамеры так не делают
score FROM_ILLEGAL_CHARS 0
score HEAD_ILLEGAL_CHARS 0
score SUBJ_ILLEGAL_CHARS 0

#письма из 2-х банков
score MY_CID_AND_ARIAL2 0.5
score MY_CID_AND_STYLE 0.5
score MY_CID_ARIAL_STYLE 0.5
score MY_CID_AND_CLOSING 0.5
score MY_CID_ARIAL2_CLOSING 0.5

#много весят и попадались несколько раз
score FROM_EXCESS_BASE64 0
score INVALID_MSGID 0
score BAD_ENC_HEADER 0
score CHARSET_FARAWAY_HEADER 0

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

Как поставить

mail postfix # cat /etc/postfix/helo_regexp
/([0-9]{1,3}(\.|-)){3}[0-9]{1,3}/i      REJECT  IP-able helo SPAM
/etc/postfix/main.cf:
smtpd_helo_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 check_helo_access regexp:/etc/postfix/helo_regexp

Отсекает почти половину СРАЗУ.

Есть такая штука -

Есть такая штука - 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

Попробую это поставить вместо костыля - проверим что лучше

Уже стояло?

# cat /var/log/mail.log | grep -c IP-able
231427
# cat /var/log/mail.log | grep -c "Helo command rejected: need fully-qualified hostname"
221354

smtpd_helo_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 reject_non_fqdn_helo_hostname
 check_helo_access regexp:/etc/postfix/helo_regexp

Оказывается у меня и так это было
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 : Helo command rejected: need fully-qualified hostname; from= to= proto=ESMTP helo=
- вот такие ответы, значит надо и то и это

Извиняюсь

RFC это не соответствует (IP helo)- нарушает, но работает хорошо. Нормальные серверы всегда представляются именем.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".