Дорогие вежливые люди на этом форуме,
Недавно я перешел на новый почтовый сервер. Поскольку «возрастной разрыв» в оборудовании был слишком большим, было бы трудно одновременно просто обновить 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 ...
"Это какой-то жуткий $ # | т, что мы здесь, сержант ..."
(перефразируя Генри Роллинза в «Затерянном шоссе»)
Фрэнк