Spamassassin lokalnie


Instalacja
Konfiguracja spamassassin'a
Uruchomienie, zatrzymanie itd. Spamassassina
Konfiguracja Evolution
Test działania
Ustawiamy podstawowe filtry
Filtry (sieci) Bayesian
Konfiguracja użytkownika
Konfiguracja Kmail  dodane 30/04/2004
  • Instalacja

Włączamy konsole i logujemy się jako root


[yaro@yaro /]$ su
Password: *********

[root@yaro /]#


jako, ze działamy pod Mandrake nie musimy się męczyć i instalujemy assassina jednym poleceniem:



[root@yaro /]# urpmi spamassassin
Przygotowywanie...        ##################################################

1:perl-Mail-SpamAssassin  ##################################################

2:spamassassin-tools      ##################################################

3:spamassassin            ##################################################

[root@yaro /]#

 

Jeśli z jakiś powodów ww sposób nie działa musimy zainstalować poniższe pakiety:



perl-Mail-SpamAssassin-2.63-1.i386.rpm
spamassassin-2.63-1.i386.rpm

spamassassin-tools-2.63-1.i386.rpm


poleceniem:


rpm -ivh perl-Mail-SpamAssassin-2.63-1.i386.rpm spamassassin-tools-2.63-1.i386.rpm spamassassin-2.63-1.i386.rpm

Jeśli i to zawiedzie pozostaje kompilacja ze źródeł. Jak to wykonać wykracza po za ramy tego HOWTO... (czyt. nie chce mi sie pisac) :)

 

  • Konfiguracja spamassassin'a

przechodzimy jako root do katalogu:

 

[root@yaro /]# cd /etc/mail/spamassassin


i edytujemy plik local.cf :


[root@yaro /]# jed local.cf

Moja zawartość tego pliku wygląda tak:

[root@yaro /]# cat local.cf

# SpamAssassin config file for version 2.5x
# generated by http://www.yrex.com/spam/spamconfig.php (version 1.01)
# Whether to change the subject of suspected spam
rewrite_subject 1

# Text to prepend to subject if rewrite_subject is used
subject_tag *****SPAM*****

# Encapsulate spam in an attachment
report_safe 0

# Use terse version of the spam report
use_terse_report 0

# Enable the Bayes system
use_bayes 1

# Enable Bayes auto-learning
auto_learn 1

# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1

# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
# - english polish
ok_languages en pl

# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales en

allow_user_rules 1

# How many hits before a message is considered spam.

required_hits 7.5

"Czułość" spamassassina reguluje linia -
required_hits

. W zależności jaka będzie tam liczba mail będzie częściej lub rzadziej kwalifikowany jako spam. Na początku sugeruje ustawienie liczby z okolic 4-6. Potem sukcesywnie powoli ją zwiększać.



Jeśli chcemy móc posiadać własne ustawienia i własne reguły MUSIMY dodać do konfigu linie:

allow_user_rules 1

Swoje własne ustawienie można wygenerować tutaj:

http://www.yrex.com/spam/spamconfig.php

  • Uruchomienie, zatrzymanie itd. Spamassassina:

Sprawdzenie stanu:

[root@yaro /]# /etc/rc.d/init.d/spamassassin status

spamd został zatrzymany

[root@yaro /]#

Restart:


[root@yaro /]# /etc/rc.d/init.d/spamassassin restart

Zamykanie spamd: [NIEUDANE]

Uruchamianie spamd: [ OK ]

[root@yaro /]#

Zatrzymanie:

[root@yaro /]# /etc/rc.d/init.d/spamassassin stop

Zamykanie spamd: [ OK ]

[root@yaro /]#

Uruchomienie:


[root@yaro /]# /etc/rc.d/init.d/spamassassin start

Uruchamianie spamd: [ OK ]

[root@yaro /]#

Teraz gdy mamy juz uruchomionego demona (spamd) możemy do niego podłączyć jakiś program pocztowy.

  • Konfiguracja Evolution

O

piszę konfigurację na przykładzie programu Evolution.
Włączmy program:

[yaro@yaro /]$ evolution

Wybieramy:

Narzędzia / Filtry / Przychodzące / Dodaj
i ustawiamy opcje jak na obrazku poniżej:



klikamy OK i przesuwamy regułę na sam szczyt listy reguł:

potwierdzamy OK.
  • Test działania

Aby przetestować działanie demona wyślijmy do siebie 2 testowe mail'e. Powinniśmy wysłać je na konto na serwerze poza Twoja siecią. Obu nadajmy temat "Test".


Treść pierwszego mail'a :

This is the GTUBE, the
Generic
Test for
Unsolicited
Bulk
Email
If your spam filter supports it, the GTUBE provides a test by which you

can verify that the filter is installed correctly and is detecting incoming
spam. You can send yourself a test mail containing the following string of
characters (in upper case and with no white spaces and line breaks):
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
You should send this test mail from an account outside of your network.

Treśc drugiego mail'a:

X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Po odebraniu poczty powinno się okazać, że tematy obu mail'i zostały zmienione na "*****SPAM***** Test". Zaglądamy do nagłówka mail'a (Widok / Wyświetlanie listu / Wyświetlanie wszystkich nagłówków) i powinniśmy na jego końcu zobaczyć coś ZBLIZONEGO do tego:

X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on yaro
X-Spam-Level: **************************************************
X-Spam-Status: Yes, hits=1001.0 required=7.5 tests=GTUBE,VIRUS_CLEANED_MYDOOM autolearn=no version=2.63
X-Spam-Report: * 1000 GTUBE BODY: Generic Test for Unsolicited Bulk Email


i tego:

X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on yaro
X-Spam-Level: **************************************************
X-Spam-Status: Yes, hits=501.0 required=7.5 tests=AWL,VIRUS_CLEANED_MYDOOM autolearn=no version=2.63
X-Spam-Report: * 1.0 VIRUS_CLEANED_MYDOOM Failed/cleaned Mydoom infection? * 500 AWL AWL: Auto-whitelist adjustment

jeśli tak będzie nasz zabójca (assassin) działa poprawnie.
  • Ustawiamy podstawowe filtry

Tworzymy nowy filtr:


lub bardziej zaawansowana wersja:




i umieszczamy go PONIŻEJ filtru Assassin. Musimy oczywiście wcześniej stworzyć katalog "!Spam" do którego będziemy przenosić niechcianą pocztę. Później gdy będziemy już pewni działania naszego programu możemy regułę zmienić na poniższą:


W tym miejscu można zostawić juz program albo czytać dalej :)
  • Filtry (sieci) Bayesian

Jeśli w local.cf ustawiliśmy:

use_bayes 1

mamy je włączone.
Jeśli nie trzeba ww frazę dopisać i zrestartować spamd (jak? było podane wcześniej)
Co to są sieci Bayesian?

Bayesian Filtering to metoda filtrowania poczty elektronicznej. Dzięki niej filtry antyspamowe automatycznie dostosowują się do specyfiki otrzymywanej poczty i na bieżąco tworzą jej profil, który może ulegać zmianie w czasie. Idea filtrowania Bayesian opiera się na statystycznej analizie częstotliwości występowania słów (czy też określonych znaków, np. $%&) w normalnych wiadomościach e-mail oraz w tych, które są klasyfikowane jako spam. Zasadę działania analizy Bayesian najlepiej zobrazuje ten oto przykład. Zakładamy, że w danym okresie czasu otrzymaliśmy 2000 listów elektronicznych sklasyfikowanych jako spam. W 700 z nich wystąpiło słowo "zarabiaj", a w tym samym okresie czasu otrzymaliśmy 400 wiadomości, które spamem nie były. W 5 z nich wystąpiło słowo "zarabiaj", stąd wynika równanie:

(700/2000)/(5/400+700/2000) = 0,96

Na podstawie powyższej analizy, wiadomości ze słowem "zarabiaj" traktowane będą jako spam, gdyż prawdopodobieństwo, że faktycznie nim są okazuje się bardzo wysokie, równe 0,96 (maksymalna wartość jest równa 1 i oznacza stuprocentową pewność, minimalna wartość jest równa 0 i odpowiada całkowicie zwyczajnej poczcie). Warto podkreślić elastyczność takiej analizy - jeśli w wiadomościach wychodzących zwiększy się częstotliwość występowania określonego słowa (np. "zarabiaj"), to wynik się zmieni. Całość operacji nie jest oczywiście przeprowadzana dla jednego słowa, analizie poddawana jest cała wiadomość, co zwiększa skuteczność tej metody. Należy także zwrócić uwagę na dodatkową zaletę - niezależność od języka w jakim prowadzona jest korespondencja.

(Na podstawie http://www.it-faq.pl/itfaqarticle.asp?id=341)


Jak teraz nauczyć czegoś nasz filtr?

Zaznaczamy wszystkie mejle które uznajemy za spam (trzymamy CTRL i klikamy kolejne), klikamy prawym, wybieramy "Zapisz jako" i zapisujemy np. do /tmp jako plik o nazwie box. Zapisane mail'e (czyt. spam) KASUJEMY.

Następnie otwieramy konsole JAKO ODPOWIEDNI UŻYTKOWNIK, np. jeśli logujemy się jako jacek i jako jacek używamy evolution to w konsoli ma być coś podobnego:

[jacek@localhost jacek]

teraz klepiemy:


[yaro@yaro yaro]$ sa-learn --spam --showdots --mbox /tmp/box
.... ........... ......
Learned from 43 message(s) (48 message(s) examined).
[yaro@yaro yaro]$

Gotowe! Jak widać z 48 mail'i filtr użył do nauki 43 (pozostałe zapewne juz były wcześniej analizowane). Dobrze jest teraz pokazać mu jakieś dobre listy. Zaznaczamy NIE-SPAM, zapisujemy jako /tmp/box (nadpisujemy poprzedni plik). I wykonujemy polecenie:

[yaro@yaro yaro]$ sa-learn --ham --showdots --mbox /tmp/box
......................................................................
Learned from 243 message(s) (243 message(s) examined).

[yaro@yaro yaro]$


I to wszystko. Co jakiś czas warto powtórzyć ww operacje z nowymi mail'ami. Wg moich spostrzeżeń po przeanalizowaniu 80-250 listów ze spamem, zaczyna to wszystko działać naprawdę dobrze.
  • Konfiguracja użytkownika

Spamassassin wszystkie spersonalizowane ustawienia trzyma w katalogu ~/.spamassassin . Znajdziemy tam zapewne kilka różnych plików ale nas interesuje konkretnie jeden - user_prefs . Jeśli takiego nie ma należy go stworzyć.
Zasadniczo nie ma potrzeby tworzenia własnych regułek jeśli stosujemy Bayesian, ale jeśli chcemy...

Ja sobie dopisałem (aby wyżej punktować pewne frazy) takie coś:

body ONET_SPAM /List został wysłany za zgodą użytkowników OnetPoczty/i
score ONET_SPAM 5
describe ONET_SPAM reklamowka_onetu

body WP_SPAM /List został wysłany zgodnie z regulaminami kont/i
score WP_SPAM 5
describe WP_SPAM Wp_spam

body TERAZ_TYLKO /teraz tylko/i
score TERAZ_TYLKO 0.3
describe TERAZ_TYLKO teraz_tylko

body YARO_GRATIS /gratis/i
score YARO_GRATIS 0.4
describe YARO_GRATIS gratis

body CHEAP /Cheap/i
score CHEAP 0.5

describe CHEAP cheap

body PRICE /price/i
score PRICE 0.3
describe PRICE price

body COCK /cock/i
score COCK 1.7
describe COCK cock

body SUCKED /sucked/i
score SUCKED 1.5
describe SUCKED sucked

body CHICKS /chicks/i
score CHICKS 1
describe CHICKS chicks

body YARO_PAY /pa(?:y|i)(?:|d|ment|out)/i
score YARO_PAT 0.5

body YARO_REFFERAL /refe(?:r|rr)(?:al|ed)/i
score YARO_REFFERAL 0.5

body YARO_PROFIT /profit/i
score YARO_PROFIT 0.4

body YARO_MONEY /money/i
score YARO_MONEY 0.4

body YARO_MONEY3 /gold/i
score YARO_MONEY3 0.4

body YARO_SHOP /shop/i
score YARO_SHOP 0.6

body YARO_REACH /reach/i
score YARO_REACH 0.2

body YARO_AFFILIATE /affiliate/i
score YARO_AFFILIATE 0.7

body YARO_INCREASE /increase/i
score YARO_INCREASE 0.4

body YARO_CUSTOMER /customer/i
score YARO_CUSTOMER 0.3

body YARO_PRICE /pric(?:e|ing|ed)/i
score YARO_PRICE 0.3

body YARO_ORGASM /orga(?:s|z)m/i
score YARO_ORGASM 1

body YARO_EJACUL /ejaculat(?:i|e)/i
score YARO_EJACUL 1

header X_WP_AntySpam_Rezultat X-WP-AntySpam-Rezultat =~ /TAK-SPAM/i
score X_WP_AntySpam_Rezultat 2.5

O co w tym chodzi? To dość proste. Tworzymy pewną grupę. np. o nazwie ONET_SPAM która będzie w TREŚCI mail'a (body)
wyszukiwać frazę "List został wysłany za zgodą użytkowników OnetPoczty":

gdzie_szukac nazwa /szukany ciag znakow/ znacznik
body ONET_SPAM /List został wysłany za zgodą użytkowników OnetPoczty/ i

czyli:

body ONET_SPAM /List został wysłany za zgodą użytkowników OnetPoczty/i

W ww przypadku znacznikiem jest „i” - co oznacza, że regułka nie będzie sprawdzać wielkości liter. Następnie podajemy jak wysoko punktujemy daną regułkę:

score ONET_SPAM 5
Raczej łatwe do zrozumienia - Reguła o nazwie ONET_SPAM jeśli jest spełniona daje 5 pkt. I na koniec MOŻEMY dopisac:
describe ONET_SPAM reklamowka_onetu
Jak łatwo się domyślić do reguły ONET_SPAM zostaje przypisany opis "reklamowka_onetu".
Pokaże jeszcze jedną rzecz. Trochę bardziej zaawansowane pisanie regułek:
body YARO_PRICE /pric(?:e|ing|ed)/i
score YARO_PRICE 0.3
Czym to się różni? Tylko zapisem szukanego ciągu znaków. Ten zapis obejmuje słowa price, pricing, priced (pisane literami dowolnej wielkości). Konstrukcja jest taka:
/ciag_znakow(?:ciag_znakow_1| ciag_znakow_2| ciag_znakow_3|...)ciag_znakow/

Comments