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 xxx@yyy.de
Learned tokens from 12 message(s) (159 message(s) examined)
Ham training for xxx@yyy.de
Learned tokens from 4 message(s) (49 message(s) examined)
Deleting spam for xxx@yyy.de 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

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

Любая помощь приветствуется.

3
задан 18 December 2020 в 15:03
1 ответ

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

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

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

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

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

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

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

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

1
ответ дан 28 December 2020 в 01:37

Теги

Похожие вопросы