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 Spamassassina → Konfiguruj 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.