====== 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]]//