Назад | Перейти на главную страницу

Debian Jessie, Postfix + amavisd-new + spamassassin: не уверен, работает ли Байес

Дорогие вежливые люди на этом форуме,

Недавно я перешел на новый почтовый сервер. Поскольку «возрастной разрыв» в оборудовании был слишком большим, было бы трудно одновременно просто обновить Debian Squeeze до Jessie (и, возможно, это не решило бы мою проблему). Я просто установил чистую Jessie и вручную переместил учетные записи пользователей, старую электронную почту и т. Д. По крайней мере, я знаю больше о внутреннем устройстве.

Единственное, с чем я, кажется, борюсь, - это байесовская база данных, управляемая Spamassassin - как порабощенный Amavisd-New. (Хех уже узнал, когда я хотел включить заголовки оценок СПАМА в каждый сообщение электронной почты: $ sa_tag_level_deflt находится в Амавис config файл.)

я должен

use_bayes 1
bayes_path /var/lib/spamassassin/.spamassassin/bayes

в spamassassin / local.cf. Мне кажется любопытным, что путь заканчивается словом «байес», но эта последняя строка не является фактическим каталогом, это, кажется, просто префикс для файлов _toks и _seen.

Если я попробую "spamassassin -D --lint 2> & 1 | less", я увижу похвалу:

Jul  9 11:21:15.091 [5076] dbg: bayes: tie-ing to DB file R/O /var/lib/spamassassin/.spamassassin/bayes_toks
Jul  9 11:21:15.091 [5076] dbg: bayes: tie-ing to DB file R/O /var/lib/spamassassin/.spamassassin/bayes_seen

Возможно, в зависимости от каталога, в котором я его запустил, я однажды видел и BAYES_20 в этом списке.

Кроме того, похоже, что sa-learn-cyrus отлично обновляет базу данных, и sa-sync тоже не жалуется.

Я фактически перенес файлы БД Bayes со старого сервера, используя

sa-learn --backup 
sa-learn --restore=...

и мне пришлось настроить некоторые разрешения после обслуживания памяти ... sa-learn-cyrus.conf содержит пользователя и группу, под которой он должен работать, что должно соответствовать владельцу базы данных.

А теперь любопытный момент:

Я не вижу никаких следов того, что байесовский фильтр действительно работает с проходящей электронной почтой. Amavis действительно работает, я могу видеть его действия в /var/log/amavis.log, иногда он ловит СПАМ на основе своего Другой эвристические правила. Но мне не удалось получить оценку BAYES в полученных электронных письмах (которые теперь действительно содержат ожидаемый заголовок X-Spam-Status) или в очень положительных материалах, помещенных на карантин в / var / virusmails.

Другими словами, если я запустил "grep -ri bayes *" в / var / log / и / var / virusmails /, я ничего не получу :-(

Возможно ли, что байесовский фильтр работает, а я просто не знаю?

Если фильтр Байеса на самом деле не работает (в spamassassin под amavisd-new), в каких еще местах мне следует искать соответствующую конфигурацию?

Если он может работать нормально, есть ли способ повысить его многословность? Чтобы его оценка всегда печаталась в каком-нибудь журнале или, что лучше, включалась в заголовок X-Spam-Status?

Кроме того, могу ли я сопоставить оценку Байеса с приращением оценки Spamassassin? Я имею в виду - посмотреть и, возможно, настроить, как Amavis или SA добавляют байесовский вклад ...

Мне также было интересно, не хватает ли мне чего-то в системе, например, не установленного пакета. Но "aptitude search bayes" возвращает только "spambayes", это некий проект на основе Python, конкурирующий с байесовским фильтром, который является частью spamassassin ...

Любые идеи приветствуются :-)

Фрэнк

похоже, что нашел ответ: в /etc/spamassassin/local.cf вам нужно:

use_bayes 1
bayes_auto_learn 1
use_bayes_rules 1

В моем случае это была третья строка.

Кстати, пока я искал проблему, мне удалось вставить "зонд регистрации" в внутренности модуля Perl Spamassassin, который распечатал для меня трассировку стека вызовов Perl:

В /usr/share/perl5/Mail/SpamAssassin/BayesStore/DBM.pm:

sub tie_db_readonly {
...
  my $iii = 1;
  print dbg("Stack Trace:");
  while ( (my @call_details = (caller($iii++))) ){
  dbg( $call_details[1].":".$call_details[2]." in function" . \
    $call_details[3] );
  }

Взято почти дословно из Публикация Тариамы здесь .

Очевидно, мне нужен был какой-то переключатель отладки, чтобы отображать отладочные сообщения:

В /etc/amavis/conf.d/50-user:

$DO_SYSLOG = 0;
$LOGFILE = "/var/log/amavis.log";
$sa_tag_level_deflt = -9999; # always add spam info headers

$log_level = 2;
$sa_debug = 1;

На самом деле только две последние строки являются ключевыми для отладки в Amavis и SpamAssassin. Строки выше просто к сведению.

==== ИЗМЕНИТЬ через час: ====

... но подождите, есть еще кое-что, похоже, это еще не конец игры :-)

Сразу после того, как я отправил предыдущее оптимистическое сообщение, меня принял холодный душ: оценки BAYES снова исчезли. Поэтому я вернулся к серьезному уровню отладки, попытался удалить некоторую конфигурацию, связанную с автоматическим истечением срока действия, с которой я играл в то же время, но даже когда я вернул конфигурацию туда, где она работала, байесовский код просто исчез. . Те же симптомы.

Пока я грустно рылся в журнале отладки, я заметил еще одно многообещающее предупреждение:

_WARN: plugin: eval failed: небезопасная зависимость в sprintf при работе с переключателем -T в /usr/share/perl5/Mail/SpamAssassin/Logger.pm, строка 241.

Что, черт возьми, за переключатель -T ...

человек перл

не могу найти его прямо здесь (если бы я знал правильную главу).

Исходный код spamassassin тоже не сильно помог.

Но после небольшого поиска в Google, после того, как я сузил запрос, я получил следующее:

http://search.cpan.org/~bdfoy/PerlPowerTools-1.012/bin/printf

И еще несколько указателей на

"Небезопасная зависимость в eval при запуске setuid"

То же самое? Наверное. Ключ -T предназначен для "режима заражения".

https://perldoc.perl.org/perlsec.html#Taint-mode

И это мера безопасности, так что ваши случайные «сообщения с printf внутри» нелегко перехватить для «внедрения кода».

Теперь, где, черт возьми, этот переключатель -T вступает в игру.

SpamAssassin работает как модуль Amavis.

Я уже знал, что Amavis на самом деле был сценарием Perl.

Интерпретатор Perl, вероятно, вызывается с использованием символа #! спецификация оболочки в первой строке в / usr / sbin / amavisd-new.

Еще бы.

Оттуда обходной путь прост.

Но ... УП! Наверное, не стоит никому рассказывать: ->

Тем не менее ... я не понимаю, почему это внезапно сработало какое-то время, а потом вдруг перестало, больше нет. Где скрытое состояние? Я перезапускал Amavis после каждого изменения в файлах конфигурации, то есть каждый раз перезапускал интерпретатор Perl ...

"Это какой-то жуткий $ # | т, что мы здесь, сержант ..."

(перефразируя Генри Роллинза в «Затерянном шоссе»)

Фрэнк