Konfiguracja SpamAssassina

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:

  • system-wide configuration
  • per-user configuration

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 8-) 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/

Jak karmić SA z ręki ?

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.

Greylisting

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ę.

Autoryzacja SMTP (plain auth)

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.

Przykładowe pliki konfiguracyjne

Jeśli Twoim zdaniem opis jest niepełny lub zawiera błędy to daj znać.

Paweł Długosz

pl/przewodniki/exim-spamassasin-globalnie-greylisting-sasl.txt · ostatnio zmienione: 2009/11/16 14:41 przez duddits
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 Powered by Lighttpd - fly light