Spamassassin работает, но не учится? Точность фильтра Байеса не улучшается

Spamassassin работает, но не учится? Точность фильтра Байеса не улучшается

У меня есть почтовый сервер с работающей установкой spamassassin (postfix, dovecot, amavis, clamav, spamassassin на Debian).

Все работает отлично. Spamassassin отфильтровывает спам и я получаю заголовки:

X-Virus-Scanned: Debian amavisd-new at xxx.yyy.de
X-Spam-Flag: YES
X-Spam-Score: 8.025
X-Spam-Level: ********
X-Spam-Status: Yes, score=8.025 tagged_above=-9999 required=3
    tests=[BAYES_50=0.8, DKIM_INVALID=0.1, DKIM_SIGNED=0.1,
    HTML_IMAGE_ONLY_24=1.618, HTML_MESSAGE=0.001,
    RAZOR2_CF_RANGE_51_100=1.886, RAZOR2_CHECK=0.922,
    RCVD_IN_BL_SPAMCOP_NET=1.347, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
    URIBL_ABUSE_SURBL=1.25, URIBL_BLOCKED=0.001]
    autolearn=no autolearn_force=no

Я тренирую Spamassassin (пока что вручную) с помощью нового спама и хама, когда он появляется:

Tue Dec 15 22:22:14 2020
Spam training for [email protected]
Learned tokens from 12 message(s) (159 message(s) examined)
Ham training for [email protected]
Learned tokens from 4 message(s) (49 message(s) examined)
Deleting spam for [email protected] older than 30 days
Syncing the SpamAssassin journal
bayes: synced databases from journal in 0 seconds: 2711 unique entries (2711 total entries)
Statistics for this run:
0.000          0          3          0  non-token data: bayes db version
0.000          0       5288          0  non-token data: nspam
0.000          0        855          0  non-token data: nham
0.000          0     124148          0  non-token data: ntokens
0.000          0 1602145027          0  non-token data: oldest atime
0.000          0 1608066788          0  non-token data: newest atime
0.000          0 1608067345          0  non-token data: last journal sync atime
0.000          0 1607672985          0  non-token data: last expiry atime
0.000          0    5529600          0  non-token data: last expire atime delta
0.000          0      50552          0  non-token data: last expire reduction count
Run finished Tue Dec 15 22:22:27 2020

Кажется, все работает. Однако недавно я обнаружил, что некоторый спам, который всегда выглядит одинаково, все равно попадает в почтовые ящики. Это тот же тип спама, и после нескольких недель обучения он все еще попадает. Байесовский балл не меняется.

X-Virus-Scanned: Debian amavisd-new at xxx.yyy.de
X-Spam-Flag: NO
X-Spam-Score: 1.852
X-Spam-Level: *
X-Spam-Status: No, score=1.852 tagged_above=-9999 required=3
    tests=[BAYES_00=-1.9, DIGEST_MULTIPLE=0.293, DKIMWL_WL_MED=-0.001,
    DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249,
    HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, PYZOR_CHECK=1.392,
    RAZOR2_CF_RANGE_51_100=1.886, RAZOR2_CHECK=0.922, SPF_HELO_NONE=0.001,
    SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01]
    autolearn=no autolearn_force=no

Я не могу найти никаких проблем, и все, что я проверил до сих пор, похоже, работает. Минимальное значение по умолчанию в 200 спамов/хамов, очевидно, пройдено. Так что это не должно быть проблемой. Я тренирую Spamassassin с помощью этой команды:

/usr/bin/sa-learn --no-sync --spam /var/vmail/$domain/$user/Maildir/.Junk/{cur,new} >> /var/log/sa-learn.log 2>&1
/usr/bin/sa-learn --no-sync --ham /var/vmail/$domain/$user/Maildir/{cur} >> /var/log/sa-learn.log 2>&1
/usr/bin/sa-learn --sync >> /var/log/sa-learn.log 2>&1

В чем может быть проблема? Я уже не знаю, где искать.

Любая помощь будет принята с благодарностью.

решение1

РезультатспамассасинОбучение Байеса хранится в базе данных, состоящей из нескольких файлов, которые обычнохранится в домашнем каталоге пользователя, под которым он запущен. Если вы звоните с другим пользователем, вы не получаете доступ к тому же набору данных или не обновляете его.

(расширенная версия предыдущего комментария)

Для разделения привилегий,спамассасинобычно запускается под отдельным пользователем, например debian-spamdили amavis, поэтому во время автообучения база данных этого пользователя будет обновлена. Если вы хотите вручную обновить базу данных, вам может потребоваться указать правильного пользователя, в противном случае вы просто сохраните данные обучения в другой, несвязанной базе данных.

Как это определить?Если у вас есть (не считая резервных копий) два экземпляра файлов обучающих данных, вы вызывалиспамассасинпод двумя разными пользователями (вероятно, один с вашего почтового сервера, другой из вашей оболочки):

# find / -name bayes_toks
/var/lib/amavis/.spamassassin/bayes_toks
/root/.spamassassin/bayes_toks

Оба файла могут иметь метку времени недавнего изменения, поскольку как только база данных будет достаточно заполнена,спамассассин можетвыберите достаточно хорошо идентифицированную почту, чтобыавтопоездкоторый заключается в том, чтобы изучать токены из полученной почты без ручного вмешательства (это поведение можно настроить, и обычно оно вам нужно).

Как исправить?Отправьте те же письма в нужную базу данных, вызвав ее sa-learnс именем пользователя/домашним каталогом, которые она использует при вызове с почтового сервера (проверять(имя папки может не совпадать с именем пользователя!):

sudo -H -u amavis sa-learn --no-sync --spam /var/vmail/$domain/$user/Maildir/.Junk/{cur,new} >> /var/log/sa-learn.log 2>&1
sudo -H -u amavis sa-learn --no-sync --ham /var/vmail/$domain/$user/Maildir/{cur} >> /var/log/sa-learn.log 2>&1
sudo -H -u amavis sa-learn --sync >> /var/log/sa-learn.log 2>&1

Я не рекомендуюслияниенепреднамеренно разделенные наборы данных, поскольку внутренний формат файла может быть немного запутанным (хотя этоможетбыть сброшен с использованием --backupиразрушительноперезаписано с помощью --restore), тогда как повторное обучение на тех же данных о спаме гораздо проще и sa-learnпредназначено для того, чтобы справляться с повторной отправкой одних и тех же писем без негативных последствий.

Связанный контент