Potrzebujemy paczek:
spamassassin spamassassin-compile spamassassin-spamc spamassassin-spamd spamassassin-update
exim jest już ładnie połatany exiscanem, więc cała operacja sprowadza się do dopisania paru linijek w exim.conf
Zakładając, że SA będzie na tym samym pudle:
spamd_address = 127.0.0.1 783
Powyższe oczywiście w sekcji głównej.
Kolejnym krokiem będzie włączenie skanowania zawartości (content scanning). Jeśli skonfigurowałeś sobie już wcześniej sprawdzanie poczty antywirusem (np. clamav), to prawdopodobnie poniższe linijki masz odhaszowane:
acl_smtp_mime = acl_check_mime acl_smtp_data = acl_check_content
Jeśli nie to teraz jest odpowiedni moment by to zrobić.
PLD-owy konfig do eksima jest już wstępnie skonfigurowany do połączenia z SA, my to tylko trochę zmodyfikujemy dla naszych potrzeb.
W sekcji ACL - acl_check_content modyfikujemy blok:
warn message = X-Spam-Score: $spam_score ($spam_bar) spam = nobody:true
w ten sposób:
accept condition = ${if>{$message_size}{100k}{1}{0}}
warn message = X-Spam-Score: $spam_score ($spam_bar)
condition = ${if<{$message_size}{100k}{1}{0}}
spam = nobody:true
Co bystrzejsi pewnie zauważyli, że oznaczamy emalie do 100k. Dlaczego ? Bo to wystarcza (wyczytałem, że styka nawet 80k), spamerzy zwykle nie próbują wpychać nam większych. Po drugie SA ma tendencję do wykładania się kiedy musi oflagować emalię o wielkości 25M.
To właściwie wszystko co musimy zmienić w konfiguracji eksima odnośnie SA. Zwracam tylko uwagę, by w linii:
condition = ${if >{$spam_score_int}{100}{1}{0}}
Ustawić taką punktację jak w local.cf SpamAssassina. Tu mamy 10 punktów {100}. Na początek proponuję ustawić 8 {80}.
No i to tyle jeśli chodzi o dłubanie przy MTA. Teraz pora zająć się konfiguracją SA. Są ogólnie dwa sposoby:
Ja z różnych przyczyn wybrałem pierwsze rozwiązanie.
By SA działał w trybie system-wide configuration zmieniamy w /etc/sysconfig/spamd przełączniki na:
SPAMD_OPTS="-d "
Ogólnie config do SA leży w /etc/mail/spamassassin.
Jak zwykle nie napracujemy się specjalnie
Edytujemy plik local.cf:
required_score 5.0
Czyli identycznie jak w configu eksima (jak już mówiłem na start dajcie sobie gdzieś około 8-miu)
use_bayes 1 bayes_auto_learn 1 bayes_path /etc/mail/spamassassin/db/bayes bayes_file_mode 0666
Jak widać używam bayes'a. Można jak ktoś chce być bardziej pr0 dołożyć sobie jeszcze np. razora. Nie chciało mi się kombinować z prawami dostępu do tego katalogu /etc/mail/spamassassin/db, więc dałem 777. Jak ktoś nie chce żeby ”/” mu puchło to niech wrzuci w/w katalog np. gdzieś na /var. U mnie mniej więcej po pół roku wygląda to tak:
sudo ls -l /etc/mail/spamassassin/db razem 20569 -rw-rw-rw- 1 nobody nobody 81456 2007-01-23 13:37 bayes_journal -rw-rw-rw- 1 nobody nobody 21004288 2007-01-23 13:37 bayes_seen -rw-rw-rw- 1 nobody nobody 5341184 2007-01-23 13:37 bayes_toks
Możemy przy okazji poprosić aby SA do nagłówka zamiast rozbudowanego podsumowania dodawał zwięzły raport ze swojej analizy:
clear_report_template report Content analysis details: (_SCORE_ points, _REQD_ required)
Co w efekcie może nam dać coś takiego:
X-Spam-Report: Content analysis details: (1.6 points, 8.0 required)
No i to tyle. Teraz tylko:
sudo /sbin/service spamd start sudo /sbin/service exim restart
By uniknąć:
auto-whitelist: open of auto-whitelist file failed: locker: safe_lock: cannot create tmp lockfile /home/users/nobody/.spamassassin/auto -whitelist.lock.domena.com.pl.5884 for /home/users/nobody/.spamassassin/auto-whitelist.lock: Permission denied
Ważne jest by nobody miał swój katalog domowy
Jeszcze jedno. Tu jest dobra strona o konfigurowaniu SA http://wiki.apache.org/spamassassin/
Wymaga to trochę manualnej roboty, ale znakomicie przyspiesza naukę naszego SA. Tworzymy sobie jakiś folder (SPAM) i ręcznie wpychamy do niego wszystkie emalie, które uważamy za syf. Jak mamy już tam trochę śmiecia (ja uzbierałem ~500 szt.) To dajemy:
sa-learn --showdots --spam --dir ~/katalog/ze/spamem
Natomiast wszystkie dobre wiadomości oznaczamy:
sa-learn --showdots --ham --dir ~/katalog/z/dobrymi/mailami
Powyższe dla maildirów. Jak ktoś ma nieszczęście używać formatu mbox to man sa-learn
Jezeli SA nie zacznie sam sprawdzać i przydzielać ilości punktów wykonaj:
sa-update -D --nogpg
potem:
service spamd restart
Jeśli używasz SA w wersji 3.2.x lub nowszej możesz użyć sa-compile w celu przyspieszenia przetwarzania reguł przez SA. Zobacz też to.
O tym co to w ogóle jest greylisting możesz przeczytać np. tu.
Jak to zwykle w PLD sprawa jest prosta
Ponieważ w repozytorium nie ma gotowej paczki musimy sobie demona greylistd ugotować sami. Nie będę w tym miejscu opisywał jak to zrobić, wspomnę tylko, że o przygotowaniu środowiska do samodzielnego budowania paczek w PLD można przeczytać np. tu. Dla niecierpliwych jest też filmowa wersja
W domyślnej konfiguracji greylistd nie bardzo jest co zmieniać, domyślne ustawienia powinny w większości przypadków wystarczyć (mail jest odbijany na 10 minut).
Włączenie greylistingu w eksimie sprowadza się do skopiowania przykładu z dokumentacji (w chwili pisania tego poradnika to było /usr/share/doc/greylistd-0.8.5). Z pliku exim4-acl-example.txt.gz kopiujemy:
defer message = $sender_host_address is not yet authorized to deliver \
mail from <$sender_address> to <$local_part@$domain>. \
Please try later.
log_message = greylisted.
!senders = :
!hosts = : +relay_from_hosts : \
${if exists {/etc/greylistd/whitelist-hosts}\
{/etc/greylistd/whitelist-hosts}{}} : \
${if exists {/var/lib/greylistd/whitelist-hosts}\
{/var/lib/greylistd/whitelist-hosts}{}}
!authenticated = *
!acl = acl_whitelist_local_deny
domains = +local_domains : +relay_to_domains
verify = recipient/callout=20s,use_sender,defer_ok
condition = ${readsocket{/var/run/greylistd/socket}\
{--grey \
$sender_host_address \
$sender_address \
$local_part@$domain}\
{5s}{}{false}}
I wklejamy ten blok do exim.conf tuż pod acl_check_rcpt:.
Na koniec jeszcze jedna acz istotna uwaga. Demon greylistd tworzy sobie gniazdko z właścicielem i grupą mail (mail:mail, 0660). Przy takim ustawieniu exim nie ma szans by się tam dostać. Mamy tu dwa wyjścia: zmieniamy uprawnienia do gniazdka lub dopisujemy eksima do grupy mail. Ja wybrałem to drugie rozwiązanie.
Restartujemy eksima:
sudo /sbin/service exim restart
I testujemy co nam z tego wszystkiego wyszło:
sudo exim -bh <jakieś_dowolne_IP>
Jeśli po wpisaniu adresu mailowego (rcpt to:) w czasie testu pojawi nam się coś takiego:
temporarily rejected RCPT adres@odbiorcy.pl: greylisted.
To znaczy, że ACL-ka działa jak należy
Ogólnie jak wysyłać maile wykorzystując telnet możesz przeczytać na stronie Wikipedii. Sesja eksima (exim -bh) jest tylko “na niby”, więc można eksperymentować do woli bez stresu, że komuś zasypiemy jakimś śmieciem skrzynkę.
Na koniec skonfigurujemy jeszcze autoryzację.
Znowu specjalnie się nie napracujemy. Dopoldkowujemy pakiet cyrus-sasl-saslauthd. Jego domyślna konfiguracja (autoryzacja przez PAM) jest dokładnie tym czego tu potrzebujemy (dla przypomnienia zakładamy, że autoryzujemy konta shellowe). Startujemy demona:
sudo /sbin/service saslauthd start
A w exim.conf w bloku AUTHENTICATORS odkomentowujemy:
begin authenticators
# Uncomment lines below to enable SMTP AUTH support. Be aware that this
# requires cyrus-sasl-saslauthd package to be installed.
plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_condition = ${if saslauthd{{$2}{$3}{smtp}}{1}{0}}
server_set_id = $2
login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = ${if saslauthd{{$1}{$2}{smtp}}{1}{0}}
server_set_id = $1
Teraz już tylko restart eksima:
sudo /sbin/service exim restart
I szybkie sprawdzenie jak to działa:
telnet localhost 25 Trying 127.0.0.1.25... Connected to localhost. Escape character is '^]'. 220 th.domena.pl ESMTP Exim 4.68 Tue, 13 Nov 2007 09:21:59 +0000 ehlo test 250-th.domena.pl Hello localhost [127.0.0.1] 250-SIZE 52428800 250-DSN 250-PIPELINING 250-AUTH PLAIN LOGIN 250-STARTTLS 250 HELP
No i pięknie.
Jeśli Twoim zdaniem opis jest niepełny lub zawiera błędy to daj znać.