Spamassassin 工作但不學習?貝葉斯過濾精度沒有提高

Spamassassin 工作但不學習?貝葉斯過濾精度沒有提高

我有一個郵件伺服器,安裝了可用的 spamassassin(debian 上的 postfix、dovecot、amavis、clamav、spamassassin)。

一切都運作良好。 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-spamdamavis,因此在自動學習過程中,該使用者的資料庫將被更新。如果您希望手動更新資料庫,您可能需要指定正確的用戶,否則您只會將訓練資料儲存到不同的、不相關的資料庫中。

怎樣說呢?如果您有(除了備份之外)訓練資料檔案的兩個實例,則您一直在調用斯巴馬刺客在兩個不同的使用者下(可能一個來自您的郵件伺服器,一個來自您的 shell):

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

這兩個檔案可能具有最近的修改時間戳,因為一旦資料庫充分播種,spamassassin 可能選擇足夠明確的郵件來自動訓練這是從收到的郵件中學習令牌,無需手動操作(此行為可以配置,並且您通常希望啟用它)。

怎麼修?將相同的郵件輸入正確的資料庫 - 透過調用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旨在處理一遍又一遍地發送相同的郵件而不會產生不利影響。

相關內容