====== 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 [[http://spamassassin.apache.org/|SA]] w wersji 3.2.x lub nowszej możesz użyć **sa-compile** w celu przyspieszenia przetwarzania reguł przez SA. Zobacz też [[http://wiki.apache.org/spamassassin/FasterPerformance|to]]. ====== Greylisting ====== O tym co to w ogóle jest **greylisting** możesz przeczytać np. [[http://pl.wikipedia.org/wiki/Greylisting|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. [[http://baseciq.org/linux/slac2pld|tu]]. Dla niecierpliwych jest też [[http://linuxvideo.generatedcontent.com/wp-content/uploads/2006/11/002-pld-builder-init.ogg|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 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ć [[http://pl.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#Przyk.C5.82ad_sesji_SMTP|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 ====== * {{pl:przewodniki:exim.conf.txt|exim.conf}} * {{pl:przewodniki:local.cf.txt|local.cf}} * {{pl:przewodniki:whitelist-hosts.txt|whitelist-hosts}} * {{pl:przewodniki:next.gif|}} Jeśli Twoim zdaniem opis jest niepełny lub zawiera błędy to daj znać. --- //[[duddits@pld-linux.org|Paweł Długosz]]//