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