Polska Strona Freesco

No już… przysyłaj mi Viagrę…

Spam staje się problemem numer jeden internetu. W zasadzie nawet małe serwery nie mogą obejść się bez jakiegoś systemu antyspamowego. Chcę zaproponować użytkownikom NND jeden z nich.

DSPAM jest programem napisanym w c++ stosującym w pracy klasyfikator bayesowski oraz testy Chi-Square i ocenę Markowa, chained tokens, BNR (Redukcja szumu bayesowskiego) i inne połączone metody. Nadaje się zarówno na małe, jak i rozbudowane systemy. Jest wydajny, szybki i nieźle wspólpracuje z eximem.
Zaletą jest dość intuicyjny panel ze statystykami i możliwością zarządzania – dla każdego użytkownika z osobna.

Administrator widzi wykresy całego systemu, może oglądać statystyki użytkowników, wykonywać czynności administracyjne dotyczące ich kont.

Oczywiście program może być także używany bez panelu www i z wykorzystaniem wyłącznie własnej bazy tekstowej. Jednak jeśli moc serwera pozwala, warto zainstalować także panel i mysql, aby ułatwić sobie pracę.
Przed przystąpieniem do instalacji należy wypisać sobie wszystkich użytkowników poczty do pliku /etc/mail/mailusers.
Jeśli jest ich kilku, można do zrobic ręcznie, w przypadku większej ilości mozna pomóc sobie poleceniem ls -w 1 /home, które w kolumnie pokaże nam całą zawartość /home i wystarczy zawartość ekranu skopiować oraz usunąć katalogi nienależące do użytkowników (np. httpd). Na końcu pliku musi byc pusta linia inaczej skrypty potraktują ostatniego użytkownika po macoszemu.
Kolejnym krokiem jest instalacja (w zależności od źródła użyjemy opcji -S lub -U). Po instalacji na ekranie wyświetli się instrukcja konfiguracji. Nie jest ona szczególnie skomplikowana, lecz dla tych mają „pamięć dobrą, ale krótką” dobra rada – skopiujcie tekst do jakiegoś edytora, aby można było powtórnie go przeczytać.
Konfiguracja
Są rozmaite możliwości konfiguracji.
A) Najprostsze jest wyłącznie znakowanie maili. Wystarczy jedynie skonfigurować exima z nowym plikiem, oraz zmienić nazwę pliku dspam.conf.hsash na dspam.conf. Można pominąć naukę, choć program będzie się częściej mylił i trzeba będzie go uczyć odsyłając mu wadliwe maile.
Druga możliwość to użycie również pliku dspam.conf.hash (czyli bez bazy mysql) i wstępny ręczny trening na własnych próbkach pojedyncze maile zgromadzone w katalogach (dspam_train nzawa-usera /katalog/spam /katalog/nospam).
Można łatwiej skorzystać z przygotowanych skryptów dspam_mbox_spam i dspam_mbox_nospam, ale trzeba sporządzić w /etc/mail spis użytkowników o nazwie mailusers.
Tak zakończyć można najprostszą konfigurację. Sugeruję jednak więcej wysiłku, co pozwoli cieszyć się potem łatwym zarządzaniem spamem.
B) Pierwszym krokiem będzie zmiana konfiguracji exima, dołączony plik exim.conf.dspam trzeba wyedytować, wpisując własną domenę i zmienić jego nazwę na exim.conf, swój stary plik warto zachować jako exim.conf.old.
Po zainstalowaniu programu utworzyć bazę danych dspam i założyć tabele w tej bazie. Plik dspam.sql znajduje się w /var/dspam. Można to zrobić w linii poleceń, ale zapewne jest to przyjemniejsze przy użyciu phpMyAdmin.
Używanie dspam z bazą mysql jest domyślne, choć można z tego zrezygnować. Z bazą mysql program działa szybciej i sprawniej. Dopiszemy też użytkownika bazy i haslo do pliku dspam.conf.
Następnie należy uruchomić kolejno skrypty automatyzujące czynności konfiguracyjne, ale wcześniej upewnić się, że mamy już w /etc/mail plik mailusers z nazwami użytkowników.
dspam_files – skrypt, który tworzy w /var/dspam/data potrzebne pliki dla każdego użytkownika z /etc/mail/mailusers i nadaje im odpowiednie prawa.
dspam_mbox_spam i dspam_mbox_nospam – te skrypty mają zadanie wykonać uczenie wstępne programu dla każdego użytkownika wpisanego w /etc/mail/mailusers.
Jeśli użytkownik ma własne maile do nauki w postaci jeden plik = jeden mail, może użyć skryptu dspam_learndir.
W późniejszym okresie do powtórnego treningu służy skrypt dspam_train (używany z parametrami user /katalog/spam /katalog/nospam).
dspam_procmail – skrypt domyślnie kieruje spam do skrzynki użytkownika w /var/dspam/$user/$user.mbox, wymaga to oczywiście użycia panelu www. Inaczej użytkownik plików nie obejrzy. Można wcześniej zdecydować się na inne rozwiązanie. Jeśli na serwerze jest używany Squirrelmail, który tworzy w katalogu użytkownika plik FOLDER.Kosz to można tam właśnie skierować spam. Można utworzyć specjalne konto spamcheck i kierować cały spam do /var/mail/spamcheck, administrator może to konto obsługiwac w swoim programie pocztowym i zarządzać spamem. Dwa ostatnie sposoby nie wymagają instalowania panelu, jednak koniecznie trzeba używać opery lub thunderbirda z wtyczką redirect. Korygowanie decyzji dspam wymaga użycia opcji „Przeadresuj”. Ostatnim sposobem jest brak wszelkich akcji, oznaczone maile wędrują do użytkownika i on decyduje, co z nimi zrobić. Jednak moim zdaniem to dla użytkownika nie oznacza żadnej zmiany, nadal będzie dostawał spam, tyle, że może filtrowanie będzie nieco łatwiejsze.
Przykładowy plik .procmailrc wygląda następująco:
MAILDIR=$HOME
PMDIR=$HOME/.procmail
LOGFILE=$HOME/procmail.log
SHELL=/bin/sh

# segregowanie spamu
:0
*^X-DSPAM-Result: Spam
# kosz usera w squirrelmail (nie wymaga panelu dspam)
#/home/nazwa/FOLDER.Kosz
# domyślnie – skrzynka dspam usera (wymaga panelu dspam
/var/dspam/data/nazwa/nazwa.mbox
# mbox usera spamcheck (trzeba go utworzyć, nie wymaga panelu dspam)
# mbox musi mieć prawa 660 (jest 600)
#/var/spool/mail/spamcheck

# reszta poczty
:0
/var/spool/mail/nazwa

Jeśli w przyszłości administrator bedzie dodawał ręcznie nowe konta i będzie chciał włączyć segregację spamu dla użytkownika, musi pamiętać dokonaniu koniecznych zmian w pliku.
To jest ostatni skrypt jaki trzeba wykonać.
Użytkowanie
Jeśli już wykonane zostały wszystkie czynności konfiguracyjne, mozna uruchomić /etc/rc.d/dspam start. Jak już wcześniej napisałem, możemy używać dspam bez mysql, procmaila, apacza i panelu. Jednak sprawniej będzie jeśli zainstalujemy także dodatki.
Opcją zalecaną jest dopisanie dspam do sekcji DAEMONS w rc.conf. Program działa dzięki temu sprawniej, nie jest wywoływany osobny proces dla każdego maila. Wyniki są natychmiast zapisywane do bazy mysql (w przeciwnym razie należałoby co pewien czas używać programu dspam_2sql).
Jeśli używamy dspam bez panelu, każdy spam trzeba odesłać na adres login-spam@twoja.domena, w ten spsoób program się uczy. Ze znanych mi programów jedynie opera i thunderbird (z wtyczką redirect) mają opcję „Przeadresuj”.
W panelu można użyć opcji „Retrain”.
Zarządzanie spamem dobrze jest zorganizowane własnie w panelu, ponieważ może to robić i administrator, i każdy użytkownik.
System przetestowałem najpierw kilkakrotnie na serwerze testowym, a potem na działającym serwerze produkcyjnym. Przez kilka dni zbierałem cały spam na osobnym koncie pocztowym. Pomyłek typu false_positives było naprawdę niewiele i takie maile forwardowałem użytkownikom na ich konta. Po kilku dniach praktycznie ich już nie było. Obserwując pracę systemu na bieżąco widzę, że ilość przepuszczonego spamu jest naprawdę minimalna.
Uwagi końcowe
Przygotowując pakiet starałem się, aby jego konfiguracja po instalacji była maksymalnie uproszczona. Dlatego też wbrew opinii niektórych kolegów zdecydowałem, że opcją domyślną będzie użycie panelu i kierowanie tam spamu. Uważałem, że dostarczenie programu, który domyślnie nic nie robi, a jego faktyczne uruchomienie wymaga dopiero działania, nie bardzo ma sens. Oczywiście jeśli komuś bardzo zależy aby przynajmniej na poczatku program faktycznie nic nie robił, wystarczy, że wybierze najprostszą wersję konfiguracji i pominie trening, nawet wtedy program będzie działać. Uczyć program można ogladając w nagłowku znacznik X-DSPAM-Result, jeśli będzie błędna diagnoza, mail odsyłamy na user-spam@domena (dla spamu) lub user-notspam@domena (jeśli znacznik wskazuje na spam, a mail spamem nie jest).
Więcej informacji o codziennym używaniu programu można znaleźć w artykule o panelu www dspam.

Notatka: autor: W. Trąmpczyński (Maciek)


Dodaj komentarz