.

Jak pisać własne reguły SpamAssassina?

Własne ustawienia możemy zapisywać w pliku konfiguracyjnym user_prefs znajdującym się na serwerze w katalogu .spamassassin/ lub za pośrednictwem panelu serwera → Konfiguracja SpamassassinaKonfiguruj plik konfiguracyjny ręcznie.

SpamAssassin poza podstawowymi ustawieniami dostępnymi w panelu serwera pozwala również na pisanie własnych reguł oraz zmian dotyczących przydzielania liczby punktów dla wiadomości na podstawie domyślnych reguł SpamAssassina.

Przykład 1.

header		SUB_BAZA 	Subject =~ /Biznesowa baza danych/i
describe	SUB_BAZA 	W temacie 'Biznesowa baza danych'
score		SUB_BAZA 	10.0

Powyżej znajduje się prosta reguła, która sprawdza wiadomość na podstawie pola temat (Subject) w nagłówku (header). W powyższym przykładzie sprawdzamy, czy temat zawiera frazę „Biznesowa baza danych”. Jeżeli tak, to filtr dodaje do wiadomości 10 punktów (score) i dodaje do nagłówka wiadomości opis filtra (describe). Cały filtr nazwany został SUB_BAZA.

Na końcu wiersza, w pierwszej linii została dodana mała litera ”i”, która powoduje, że filtr nie będzie rozróżniał wielkich i małych liter. Tak zapisany filtr zadziała, gdy w temacie będzie fraza „biznesowa baza danych” lub „Biznesowa Baza Danych”.

Wstawiając w regule pojedyncze słowo, np. ”baza”, filtr za prawdziwe uzna również słowa i wyrażenia, w których słowo baza występuje, np. ”bazar”, ”bazalt”, itp. Aby ograniczyć regułę do konkretnego słowa, możemy użyć znaczników ”\b”, np. „Subject=~/\bbaza\b/”. Znacznik ten można stosować na początku wyrazu, na końcu lub na początku i na końcu jednocześnie.

Przykład 2. Filtrowanie po treści wiadomości (sekcja body):

body		SUB_BAZA 	/Biznesowa baza danych/i
describe	SUB_BAZA 	W treści występuje Biznesowa baza danych
score		SUB_BAZA 	10.0

Powyższa reguła sprawdza czy w treści wiadomości występuje fraza „Biznesowa baza danych”.

Przykład 3. Sprawdzanie kilku elementów jednej wiadomości:

header		__SUB_BAZA_1 	Subject =~ /Biznesowa baza danych/i
body		__SUB_BAZA_2 	/Biznesowa baza danych/i
meta		SUB_BAZA 	__SUB_BAZA_1 && __SUB_BAZA_2
describe	SUB_BAZA	Biznesowa baza danych w temacie i w tresci
score		SUB_BAZA	10.0

W przykładzie nr 3 poszczególne reguły (header i body) zapisane są z podwójnym podkreśleniem oraz oznaczone cyfrą dla ich rozróżnienia. Podwójne podkreślenie powoduje nienaliczanie punktów za poszczególne filtry. Punkty naliczane są dopiero po końcowym sprawdzeniu warunków w sekcji (meta). W tym przypadku sprawdzamy czy w temacie oraz w treści występuje fraza „Biznesowa baza danych”. Następnie sprawdzamy warunek (meta). Jeżeli w temacie i w treści występuje podana fraza to wynik uznany jest za prawdziwy i doliczone jest wówczas 10 pkt. jeżeli jeden z warunków nie był by spełniony to cała reguła nie będzie poprawna.

Zamiast znacznika && (i) możemy użyć również znacznika || (lub) oraz znaczników negacji (!) np.

__SUB_BAZA_1 && ! __SUB_BAZA_2

W celu lepszego dopasowania reguły do konkretnej wiadomości można używać wyrażeń regularnych np.:

. - dowolny jeden znak
* - dowolna liczba wystąpień znaku poprzedzającego gwiazdkę
+ - co najmniej jeden znak poprzedzający znak plus
? - jeden znak lub wcale poprzedzający znak zapytania
{} - w nawiasach klamrowych określamy liczbę występujących znaków np. {3} oznacza dokładnie 3, {1,3} od 1 do 3 znaków lub {3,} co najmniej 3 znaki. 
\d - pojedyncza cyfra

[A-Z] - duże litery
[a-z] - małe litery
[0-9] - cyfry

W konfiguracji własnych reguł możemy również używać reguł stworzonych już dla SpamAssassina i samodzielnie przypisywać im określoną liczbę punktów, np. aby ustalić liczbę punktów na 10 dla wiadomości, w których temat pisany jest tylko wielkimi literami, należy dopisać do konfiguracji:

score SUBJ_ALL_CAPS  10.0

W dokumentacji SpamAssassina opisane są wszystkie reguły, z których możemy korzystać: Rules List

Reguły te można również łączyć ze sobą np.

Przykład 4.

meta FILTR_1 SUBJ_ALL_CAPS && HTML_MESSAGE
describe FILTR_1 Wiadomosc html z tematem capslock
score FILTR_1 10.0

Powyższa reguła sprawdza, czy wiadomość zawiera temat pisany wielkimi literami i czy wiadomość napisana jest przy użyciu kodu html.