Poprawne używanie Bayesa w SA

Podczas używania i konfiguracja Spamassassina wielu z was często na pewno spotyka się ze zmiennymi ze słowem Bayes. Cóż to jest to określenie, skąd się wzięło i jak poprawnie skonfigurować. Przedstawię to w tym wpisie ponieważ nie znalazłem kompletnego opisu tego problemu.

Czemu akurat Bayes?

Nie wchodząc w szczegóły matematyczne schemat ten na podstawie nauczonych i pokazanych spamów/niespamów potrafi rozróżnić czy dana wiadomość jest spamem.Określa to prawdopodobieństwem. Czym wyższe ty większa szansa, ze to poczta której nie chcemy na serwerze. A czemu Bayes? Bo działa:)

Czego nie robić w związku z Bayesem

Na pewno nie należy ściągać przykładowych maili. Są różne bazy którymi możemy nauczyć filtr. Ale.. Po pierwsze dużo z nich jest po angielsku a najwięcej spamu jest jednak z Polski. baza będzie bezużyteczna. Po drugie jednak na każdym serwerze samem jest coś innego wiec lepiej poduczyć filtr pod swoje potrzeby.

Konfiguracja Bayesa.

Podstawowe parametry konfiguracyjne Bayesa:

bayes_auto_learn 1 #wlacza autonauke bayesa
use_bayes 1 # uzywanie bayesa

bayes_min_ham_num – ilość niespamu po jakiej filtr zacznie działać (po autonauce) np 300
bayes_min_spam_num    ilość spamu po jakiej filtr zacznie działać (po autonauce) np 300

bayes_auto_learn_threshold_nonspam       poniżej tej wartości mail jest traktowany jako niespam i wliczany do nauki
bayes_auto_learn_threshold_spam         powyżej tej wartości mail jest traktowany jako spam i wliczany do nauki

Jedna uwaga: maile odrzucone z powodu istnieją ich w Blackliscie nie są brane pod uwagę do autonauki. Trzeba pamiętać o tym.

Jak uczyć

Jak dobrac te parametry? Właściwie zostaje tylko doświadczalnie. Dwa parametry bayes_min_ham_num i bayes_min_spam_num ustawiamy np na 500.

 

bayes_min_ham_num                       500
bayes_min_spam_num                      500

Gdy ilośc spamu i niespamu przekroczy po 500 wtedy zacznie nam działać filtr. Ale jak go dobrze nauczyć? Ważne jest to aby ilość maili dobrych i złych były zblizone. To można tylko doświadczalnie zrobić. Ustawiamy parametry

bayes_auto_learn_threshold_nonspam 0.2
bayes_auto_learn_threshold_spam  12.0

i sprawdzamy czy jest równomiernie przy pomocy komendy:

sa-learn –dump magic

najbardziej interesujące linie to

0.000          0     57659          0  non-token data: nspam
0.000          0      52567          0  non-token data: nham

nspam- to number spam a nham number ham(czyli niespam). Obie powinny równomiernie rosnąć. Jeśli któraś za szybko rośnie poprawiamy parametry. Za dużo spamu to należy zwiększyć  bayes_auto_learn_threshold_spam (aby mniej było traktowane jako spam do nauki) lub zwiększyć bayes_auto_learn_threshold_nonspam (aby przyspieszyć naukę niespamu). Po dobraniu parametrów dobrze możemy skasować bazę i naukę rozpocząć od początku.Komenda sa-learn –clear. otem należy utworzyć pliki bayes_seen i bayes_toks (w Debianie w katalogu /var/amavis/.spamassassin) i nadać prawa 666. Oczywiście jak ktoś nie używa bazy.

Podumowanie

Dobrze dobrane początkowe parametry pozwalają utrzymać równowage między spamem/niespamem. Powoduje to, ze filtr działa bardzo dobrze. Nauka na swoim serwerze powoduje, ze Bayes uczy się spamu jaki naprawdę do nas dochodzi

One thought on “Poprawne używanie Bayesa w SA

  1. Zakładając, że spamassassin działa w systemie z użytkownikiem przykładowo : amavis, a bayes zapisuje swoje nauki w bazie danych. Zauważyłem w bazie, że spamassasin uczy się i dla użytkownika amavis. Rozumiem, że taka nauczony filtr będzie działał globalnie dla wszystkich użytkowników gdy amavis sprawdza w bazie rekordy dla użytkownika amavis.

    Co jednak jeżeli pozwolimy aby użytkownicy sami uczyli filtr (oznaczając wiadomości jako spam lub jako nie spam), tym samym w bazie bayes pojawiają się rekordy dla konkretnych użytkowników ale gdy spamassassin działa dla użytkownika amavis to rozumiem, że będzie on czytał z bazy rekordy dotyczące użytkownika amavis i nie będzie brał pod uwagę danych dotyczących nauki per user.

    Jak skonfigurować spamassassin aby brał pod uwagę bayes globalnie nauczone np. przez auto_learn ale również sprawdzał bazę pod kątem konkretnego użytkownika ?

    Próbowałem to robić tak, że najpierw amavis sprawdza pocztę globalnie a później zapisując wiadomość do skrzynki lmtp uruchamia spamassassina per user.

    Jednak nie wiem czy to dobry pomysł. Bo co jeżeli filtr globalny uzna wiadomość za spam a użytkownik uczył filtr, że to nie spam albo odwrotnie , globalny filtr uznał pocztę jako nie spam a użytkownik uczył, że jest to spam, bayes musiałby działać w tym wypadku jakoś wyliczając wypadkową z nauczonego global i per user bayes ???

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *