Filtrowanie poczty w Gentoo
1.
Wprowadzenie
W przewodniku opisano krok po krok sposób instalacji bramki antyspamowej i
antywirusowej. Jest to proste rozwiązanie, które można stosować dla pojedynczego
serwera.
Wprowadzenie
W dokumencie tym opisano w jaki sposób skonfigurować bramę filtrującą pocztę pod
kontem spamu (ze zbiorową domeną). Serwer ten powinien znajdować się przed
serwerami poczty elektronicznej, na których aktualnie utrzymywane są konta
pocztowe, takimi jak Microsoft Exchange czy Lotus Notes.
W tym przykładzie będziemy posługiwać się aplikacjami zapewniającymi wysoki
poziom zabezpieczeń oraz posiadającymi czytelne pliki konfiguracyjne. Jako MTA
wybraliśmy postfixa, która posiada wysoki poziom zabezpieczeń oraz jest wygodny
i dość prosty w konfiguracji. W normalnych warunkach postfix nasłuchuje
przychodzącej poczty na porcie 25. Po otrzymaniu poczty elektronicznej zostaje
on przekierowany do Amavisd-new na port 10024. Amavisd-new filtruje wiadomość
przy użyciu kilku różnych filtrów przed zwróceniem tejże wiadomości z powrotem
do Postfixa na port 10025, który następnie skieruje go do serwera poczty
elektronicznej.
Amavisd-new jest szkieletowym filtrem zawartości, który wykorzystuje inne
aplikacje do filtrowania antywirusowego i antyspamowego. W tym przykładzie
używać będziemy dwóch takich aplikacji, ClamAV do filtrowania antywirusowego
oraz Spamassassin do filtrowania antyspamowego. Sam Spamassassin może pełnić
funkcję jako kolejna warstwa szkieletowego filtra zawartości i wykorzystywać do
pomocy aplikację Vipul Razor2 i DCC.
W odróżnieniu od innych technologii antyspamowych takich jak RBL-e, Spamassassin
nie odrzuca lub akceptuje w prosty sposób wiadomości bazując na pojedynczym
teście. Używa wielu wewnętrznych testów i zewnętrznych aplikacji wspomagających
do obliczania wartości spamu dla każdej wiadomości, która przez niego przejdzie.
Wartość ta wyliczana jest za pomocą następujących testów:
- Filtrowanie Bayesa
- Statyczne regułki bazujące na regularnych wyrażeniach
- Sieci rozproszone i współpracujące:
Pierwsza część tego przewodnika (rozdziały od 1 do 4) opisuje podstawy
konfiguracji bramki filtrującej pocztę. Wiadomości z kolejnych rozdziałów mogą
zostać zaimplementowane indywidualnie i bez zależności pomiędzy poszczególnymi
rozdziałami. W rozdziałach tych opisano w jaki sposób:
-
Skonfigurować specjalne foldery IMAP do nauki filtru Bayesa i doręczania
fałszywego spamu
-
Skonfigurować greylisting z Postfixem
-
Skonfigurować Amavisd-new tak, aby używał interfejsu MySQL do zarządzania
preferencjami użytkowników
-
Skonfigurować Spamassassina tak, aby używał interfejsu MySQL dla danych
Bayesa i AWL.
Uwaga:
Foldery IMAP używać będą formatu maildir. Utrzymywanie każdego maila w osobnym
pliku sprawia, że obsługa staję się prostsza. Użytkownikom mbox proponujemy
wypróbowanie maildir. Jeżeli jeszcze nie używamy maildir potrzebne narzędzia
należy zainstalować poprzez wydanie polecenia emerge courier-imap.
|
Planowana piąta część zwierać będzie wszelakie wskazówki odnośnie wydajności i
rzeczy, które warto wiedzieć (uruchamianie chroot, restrykcje postfix, itd.).
Uwaga:
Przekazywanie odpowiedzialności na dodatkowe programy nie może obejść się bez
ryzyka. Należy znać i ufać tym programom. W tych ustawieniach jedynie decyzja
związana z kwarantanną zainfekowanej wirusami poczty elektronicznej bazuje na
pojedynczym dodatkowym programie. Używanie systemu punktów, z którego korzysta
Spamassassin, do zatrzymywania poczty elektronicznej zawierającej spam, nie jest
podejmowane przy wykonaniu pojedynczej weryfikacji, z wyjątkiem własnych
statycznych reguł Spamassassina.
|
Ostrzeżenie:
Odrzucając pocztę elektroniczną zawierającą spam na poziomie MTA należy zachować
ostrożność w wyborze RBL-a, którego chcemy używać. Przykładowo SpamCop byłby
złym wyborem, aby go używać na poziomie MTA ponieważ doświadczać będziemy
sporej ilości dobrych wiadomości traktowanych jako spam, z racji tego, że system
nasłuchu tego programu jest zbyt agresywny. Więcej informacji na ten temat można
znaleźć w
Realtime Blackhole Lists Are Bad i The
Spam Problem: Moving Beyond RBLs
|
Przygotowania
Zanim zaczniemy, powinniśmy sprawdzić czy posiadamy działającą instalację
programu Postfix, przy pomocy której będziemy mogli odbierać i wysyłać pocztę.
Dodatkowo należy posiadać również "backend" serwera poczty elektronicznej.
Jeżeli nie mamy doświadczenia w konfiguracji programu Postfix, szybko może się
okazać, że jest to zadanie zbyt skomplikowane, gdyż wszystko powinno zostać
ustawione w jednym czasie. Jeśli potrzebujemy pomocy, możemy ją znaleźć w
znakomitym przewodniku opisującym Wirtualny system pocztowy oparty o
Postfix.
2.
Instalacja potrzebnego oprogramowania
Zaczynamy instalując najważniejsze programy: Amavisd-new, Spamassassin and
ClamAV.
Listing 2.1: Instalacja Amavis, Spamassasin i Clamav |
# emerge amavisd-new spamassassin clamav
|
Uwaga:
Jak wcześniej wspomnieliśmy, należy posiadać działającą już instalację programu
postfix na naszym komputerze. Instalacja powinna się ograniczyć jedynie
do emerge postfix i do rozumienia
podstaw na jakich działa Postfix.
|
Ustawianie DNS
Uwaga:
Jeśli nie ustawiamy serwera-bramy, a skrzynki pocztowe znajdują się na tym samym
serwerze, musimy jedynie stworzyć wpisy MX-Record.
|
W czasie kiedy programy się instalują, należy uruchomić kolejny terminal i
stworzyć potrzebne wpisy DNS.
Zacznijmy od utworzenia wpisu MX dla bramy pocztowej i wpisu A dla
następnego celu.
Listing 2.2: Ustawianie DNS-a |
MX 10 mailgateway.mydomain.tld.
mailgateway A mgw.ip.add.here
mail A ms.ip.add.here
|
Uwaga:
Niektórzy z dostawców Internetu technologią ADSL, mogą blokować port 25 i przez
to zmuszać nas do przekazywania poczty przez jeden z ich serwerów. Zazwyczaj
musimy stworzyć drugi wpis MX w postaci: MX 20
backup-mx.some-isp.tld
|
Otwieranie firewalla
Dodatkowo musimy otworzyć kilka portów, aby pozwolić na swobodny przepływ poczty
między aplikacjami ją weryfikującymi.
| Aplikacja |
Protokół |
Port |
| DCC |
UDP |
6277 |
| Razor(wychodzący ping) |
TCP |
7 |
| Razor |
TCP |
2703 |
Razor używa polecenia ping do badania, które serwery znajdują się najbliżej
niego.
Konfiguracja aplikacji Postfix
Na początku należy powiedzieć aplikacji postfix, aby nasłuchiwała na
porcie 10025 oraz że została usunięta większość restrykcji, które zostały
nałożone w związku z domyślnym nasłuchiwaniem tej aplikacji na porcie 25.
Dodatkowo zadbamy również o to, aby program nasłuchiwał jedynie lokalnych
połączeń na porcie 25. Aby tego dokonać musimy dodać następujące linijki na
końcu pliku /etc/postfix/master.cf.
Listing 2.3: Przykładowy plik /etc/postfix/master.cf |
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
|
Uwaga:
Linijka smtp-amavis określa maksymalną liczbę procesów, które mogą
działać w tym samym czasie. Jeśli potrzebujemy większej rangi tego procesu, po
prostu dostosowujemy liczbę do naszych potrzeb. Należy jednak pamiętać, aby ta
liczba zgadzała się z liczbą wpisaną do zmiennej $max_servers w pliku
amavisd.conf.
|
Uwaga:
Jeśli chcemy odrzucić spam wcześniej, możemy użyć metody Before-Queue (proxy)
zamiast metody filtrowania. Po odkomentowaniu trzech linijek będziemy musieli
ustawić zmienną content_filter= w pliku main.cf. Działanie
takie jednak, nie jest zalecane w przypadku serwerów o dużym natężeniu ruchu,
ponieważ ilość równoczesnych połączeń jest ograniczona przez liczbę instancji
programu amavisd.
|
Ostrzeżenie:
Metoda Befor-Queue(proxy) nie jest jeszcze odpowiednio przetestowana.
|
Uwaga:
Jeśli z jakichkolwiek powodów chcemy wysłać pocztę elektroniczną z tego
komputera i nie chcemy, aby była ona skanowana, należy dodać kolejną instancję
programu postfix poprzez odkomentowanie ostatnich dwóch linijek i zastąpienie
ich poprawnym adresem IP.
|
Plik master.cf mówi głównemu programowi postfix jak uruchamiać
każdy indywidualnym proces postfix. Więcej informacji znajdziemy w manualu po
wydaniu komendy man 8 master.
Następnie instancja programu postifx nasłuchującego na porcie 25 musi
przefiltrować pocztę elektroniczną przez amavisd-new, który nasłuchuje na
porcie 10024.
Musimy również ustawić kolejny cel dla poczty elektronicznej. Postfix
powinien wiedzieć, że musi filtrować całą pocztę elektroniczną poprzez
zewnętrzny filtr zawartości. Należy również uaktywnić jawny routing tak, aby
Postfix wiedział gdzie kierować dalej pocztę.
Listing 2.4: Modyfikacja /etc/postfix/main.cf |
biff = no
empty_address_recipient = MAILER-DAEMON queue_minfree = 120000000
content_filter = smtp-amavis:[127.0.0.1]:10024
transport_maps = hash:/etc/postfix/transport
relay_domains = $transport_maps |
Postfix posiada ogromną ilość opcji, które można ustawić w pliku
main.cf. Po dalsze wyjaśnienia należy udać się do manuala man 5
postconf lub na stronę internetową gdzie znajduje się ten sam dokument Postfix Configuration
Parameters.
Plik transport jest to normalny plik hash programu Postfix. Poczta
elektroniczna z lewej strony przekierowywana jest do celu znajdującego się z
prawej strony.
Listing 2.5: /etc/postfix/transport |
mydomain.tld smtp:mail.mydomain.tld
|
Po edycji tego pliku należy wydać komendę postmap. Postfix
aktualnie nie czyta tego pliku więc należy go przekonwertować do odpowiedniego
formatu przy użyciu komendy postmap /etc/postfix/transport. W wyniku tego
polecenia zostanie utworzony plik /etc/postifx/transport.db. Nie ma
potrzeby, aby przeładowywać program, gdyż Postfix automatycznie zatwierdzi
zmiany.
Uwaga:
Jeśli następny serwer pocztowy nie nasłuchuje na standardowym 25 porcie
protokołu SMTP, można powiedzieć aplikacji postfix, aby nasłuchiwała na danym
porcie, wskazując na ten port: smtp:mail.mydomain.tld:25000.
|
Jeśli pierwsza próba wysłania wiadomości zakończy się niepowodzeniem i wiadomość
zostanie zwrócona, będzie to najprawdopodobniej oznaczało błąd w konfiguracji.
Najlepiej jest wtedy tymczasowo włączyć soft_bounce do czasu rozwiązania
problemu. Postfix będzie przetrzymywał wiadomości w kolejce aż do momentu, kiedy
soft_bounce zostanie wyłączone lub usunięte. Zapobiegnie to zwrotom
wiadomości do nadawcy przy błędach w jej dostarczeniu.
Listing 2.6: Aktywowanie soft_bounce |
# postconf -e "soft_bounce = yes"
# /etc/init.d/postfix reload
|
Po stworzeniu w pełni działającej konfiguracji, należy się upewnić, że
soft_bounce jest wyłączone lub usunięte, a następnie przeładować postfix.
Konfiguracja Amavisd-new
Amavisd-new może być używany do zebrania wszystkich filtrów i następnie pozwala
w łatwy sposób korzystać z kilku różnych technologii razem. Po odebraniu
wiadomości zostanie ona rozpakowana, przefiltrowana przez kilka zwyczajnych
filtrów, przechwycona przez białą i czarną listę (whitelist i blacklist).
Następnie zostanie przeskanowana po raz kolejny przez filtry, tym razem
antywirusowe, aby na końcu została przeskanowana przy użyciu programu
SpamAssassin.
Amavisd-new sam w sobie posiada kilka dodatkowych funkcji:
-
Rozpoznaje niebezpieczne załączniki oraz wie jak sobie z nimi radzić
- Zasady dla użytkownika, dla domeny, dla całego systemu:
- Białe listy (whitelists)
- Czarne listy (blacklists)
- Progi punktowe spamu
- Polityka antywirusowa i antyspamowa
Wyłączając postfix i freshclam wszystkie pozostałe aplikacje będą
uruchamiane z użytkownika amavis.
Należy wedytować następujące linie w pliku /etc/amavisd.conf
Listing 2.7: Edycja /etc/amavisd.conf |
$mydomain = 'example.com';
$inet_socket_bind = '127.0.0.1';
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
$virus_admin = "virusalert\@$mydomain";
$sa_tag_level_deflt = -100;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$sa_dsn_cutoff_level = 10;
$final_virus_destiny = D_DISCARD; # (defaults to D_DISCARD)
$final_banned_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_spam_destiny = D_DISCARD; # (defaults to D_BOUNCE)
|
Uwaga:
Za pomocą linii $sa_tag2_level_deflt = 5; ustawiamy wynik spamu w
programie SpamAssasin na 7. Może się on okazać jednak za niski, ponieważ jak już
mogliśmy zauważyć domyślnym wynikiem w Amavisd-new jest 6.3. Jeśli nie
chcemy widzieć w skrzynce pojedynczych wiadomości ze spamem należy wybrać
wartość 5, jednak jeśli nie chcemy mieć do czynienia z fałszywym spamem
należy wpisać wartość 6.3.
|
Należy stworzyć katalog na kwarantanny dla pocztę elektroniczną zarażoną
wirusami, gdyż nie chcemy, aby takie wiadomości docierały do naszych
użytkowników.
Listing 2.8: Tworzymy katalog na kwarantannę dla zainfekowanej poczty elektronicznej |
# mkdir /var/amavis/virusmails
# chown amavis:amavis /var/amavis/virusmails
# chmod 750 /var/amavis/virusmails
|
Uwaga:
Dzięki użyciu banku polityk, Amavisd-new oferuje szersze możliwości ich
dostosowywania.
|
Konfiguracja ClamAV
Jako skanera antywirusowego użyjemy programu ClamAV. Posiada on duże możliwości
wykrywania wirusów, porównywalne z produktami komercyjnymi, jest bardzo szybki i
dodatkowo jest oprogramowaniem typu Open Source. Kochamy pliki log, dlatego też
sprawimy, iż clamd będzie logował zdarzenia przy użyciu syslog
oraz włączymy szczegółowe logowanie. Nie należy uruchamiać clamd jako
root. Edycja pliku /etc/clamd.conf.
Listing 2.9: Edycja /etc/clamd.conf |
LogSyslog
LogVerbose
LogFacility LOG_MAIL
PidFile /var/run/amavis/clamd.pid
LocalSocket /var/amavis/clamd
StreamMaxLength 10M
User amavis
ScanMail
ScanArchive
|
Uwaga:
Należy również pamiętać, aby usunąć przykładowe wpisy, w przeciwnym wypadku
ClamAV może nie działać poprawnie.
|
ClamAV dostarczany jest z demonem freshclam przeznaczonym do okresowego
sprawdzania aktualizacji sygnatur wirusów. Zamiast aktualizować sygnatury
wirusów dwa razy na dzień, ustawimy demona freshclam, aby robił to co
dwie godziny.
Listing 2.10: Edycja /etc/freshclam.conf |
LogSyslog
LogVerbose
DatabaseOwner clamav
Checks 12
DatabaseMirror db.XY.clamav.net
|
Należy uruchomić clamd razem z freshclam używając skryptów
inicjujących poprzez modyfikację pliku /etc/conf.d/clamd.
Listing 2.11: Modyfikacja /etc/conf.d/clamd |
START_CLAMD=yes
FRESHCLAM_OPTS="-d"
|
Na koniec należy zmodyfikować plik amavisd.conf, dodając nową
lokację gniazda.
Listing 2.12: Modyfikacja /etc/amavisd.conf |
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/amavis/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
|
Ostrzeżenie:
Nie należy zmieniać linijki $unix_socketname jeżeli nie wiemy do czego
się odnosi ta zmienna.
|
Konfiguracja programu Vipul Razor
Razor2 jest łatwą w obsłudze rozdzieloną siecią do sprawdzania sumy kontrolnej
spamu. Instalujemy go przy pomocy polecenia emerge razor. Należy utworzyć
również potrzebne pliki konfiguracyjne. Wykonujemy to jako użytkownik
amavis, uruchamiając polecenie su - amavis, a następnie
razor-admin-create.
Listing 2.13: Tworzenie potrzebnych plików konfiguracyjnych |
# emerge razor
# usermod -s /bin/bash amavis
# su - amavis
$ razor-admin -create
$ exit
# usermod -s /bin/false amavis
|
Konfiguracja dcc (Distributed Checksum Clearinghouse)
Tak samo jak Razor2, dcc jest łatwą w obsłudze rozdzielną siecią do sprawdzania
sumy kontrolnej spamu. Jego filozofią jest liczenie liczby odbiorców danej
wiadomości elektronicznej identyfikując każdą z tych wiadomości przy pomocy
rozmytej sumy kontrolnej.
Listing 2.14: Instalacja DCC |
# emerge dcc
|
Konfiguracja Spamassasin
Amavis używa bezpośrednio bibliotek perl programu Spamassassin, więc nie ma
potrzeby, aby uruchamiać ten serwis. Przez takie zachowanie programu amavis
tworzy się małe zamieszanie, związane z konfiguracją. Cześć opcji aplikacji
Spamassassin można ustawić w pliku /etc/mail/spamassassin/local.cf,
które są nadpisywane przez opcje z pliku /etc/amavisd.conf.
Listing 2.15: Tworzenie pliku /etc/mail/spamassassin/local.cf |
use_bayes 1
skip_rbl_checks 0
ok_languages pl en no sv
ok_locales en
bayes_path /var/amavis/.spamassassin/bayes
|
Uwaga:
Od wersji 3.1 spamassassin, aby uruchomić DCC i Razor2, należy odkomentować
odpowiednie linie w pliku v310.pre.
|
Uwaga:
Inspiracji do pisania naszego pliku local.cf możemy szukać w publikacji
SpamAssassin Configuration
Generator.
|
Uwaga:
Możemy zmieniać bez przeszkód zmienne ok_languages i ok_locales.
|
3.
Każda dobra reguła ma także dobre wyjątki
Kiedy już wiadomości zaczną przepływać przez naszą bramkę pocztową,
prawdopodobnie zauważymy, że powyższe ustawienia nie są idealne. Zapewne
niektórzy z naszych klientów będą chcieli otrzymywać wiadomości, które innej
uznają za spam. Możemy łatwo dodać ukrytych nadawców do białej lub czarnej listy
(whitelist or blacklist). Wystarczy odkomentować poniższą linię w pliku
amavisd.conf.
Listing 3.1: Modyfikacja pliku amavisd.conf, aby używał punktowania typu sitewide |
read_hash("/var/amavis/sender_scores_sitewide"),
|
W pliku sender_scores_sitewide należy umieścić adres poczty
elektronicznej lub tylko część domeny wraz z wartością dodatnią/ujemną, która
będzie dodawana do wartości spamu.
Listing 3.2: Przykładowy plik whitelist_sender |
postmaster@example.net -3.0
.example.net 1.0
|
Uwaga:
W pliku /etc/amavisd.conf znajduje się więcej przykładów.
|
Uwaga:
Wpisywanie tych adresów poza plik amavisd.conf jest rozwiązaniem
lepszym i bezpieczniejszym.
|
Uwaga:
Alternatywnie można to zrobić w pliku konfiguracyjnym programu Spamassassin
/etc/mail/spamassassin/local.cf, jednak lepszym rozwiązaniem jest
robienie tego w pliku /etc/amavisd.conf.
|
Uwaga:
W następnych rozdziałach zostanie przedstawiona polityka użytkowników dotycząca
MySQL.
|
Oczekując na lepszą metodę możemy dodać adresy poczty elektronicznej do pliku
amavisd.conf tak, aby obejść filtry antyspamowe dla skrzynek
pocztowych użytkowników postmaster oraz abuse.
Listing 3.3: Obchodzenie filtrów antyspamowych dla poczty elektronicznej skierowanej do abuse i postamster |
map { $bypass_spam_checks{lc($_)}=1 } (qw(
postmaster@
abuse@
));
|
Ważne:
Nigdy nie należy ignorować poczty elektronicznej, która dociera na konta
postmaster lub abuse. Więcej informacji w dokumencie RFC 2142 MAILBOX NAMES FOR COMMON
SERVICES, ROLES AND FUNCTIONS. W przeciwnym razie domeny mogą zostać
dopisane do listy mieszczącej się na stronie rfc-ignorant.org.
|
4.
Dodawanie kolejnych reguł
Można dodać więcej regułek, które dostarczane są przez SARE Ninjas poprzez SpamAssassin Rules Emporium. Można je
łatwo dodać i zaktualizować używając mechanizmu sa-update zawartego w
Spamassasin.
Przejrzysty przedownik jak używać zestawów reguł SARE wraz z sa-update
można znaleźć tutaj.
5.
Testowanie i ostatnie poprawki
Testowanie ustawień
Przed uruchomieniem freshclam można ręcznie zweryfikować poprawność
działania.
Listing 5.1: Testowanie freshclam |
# freshclam
ClamAV update process started at Sun May 2 09:13:41 2004
Reading CVD header (main.cvd): OK
Downloading main.cvd [*]
main.cvd updated (version: 22, sigs: 20229, f-level: 1, builder: tkojm)
Reading CVD header (daily.cvd): OK
Downloading daily.cvd [*]
daily.cvd updated (version: 298, sigs: 1141, f-level: 2, builder: diego)
Database updated (21370 signatures) from database.clamav.net (193.1.219.100).
|
Zaktualizowaliśmy już definicje wirusów i przekonaliśmy się, że plik
freshclam.conf działa prawidłowo.
Należy przetestować freshclam oraz amavisd pocztą testową od cli i amavisd.
Należy uruchomić programy clamd oraz amavis wpisując poniższe
polecenia:
Listing 5.2: Uruchomienie amavisd i clamd oraz przeładowanie aplikacji postfix |
# /etc/init.d/clamd start
# /etc/init.d/amavisd start
# /etc/init.d/postfix reload
|
Jeżeli wszystko pójdzie dobrze postfix powinien od tej chwili nasłuchiwać
nadchodzącej poczty na porcie 25 i ponownie przesłanej do niego samego na porcie
10024. Aby to zweryfikować powinniśmy sprawdzić pliki log.
Listing 5.3: Sprawdzanie plików log |
# tail -f /var/log/mail.log
|
Uwaga:
Zależnie od ustawień logów poprawną ścieżką do nich może być
/var/log/messages.
|
Jeżeli nie pojawiają się żadne dziwne wiadomości w plikach log pora na kolejny
test.
Należy użyć netcat, aby ręcznie połączyć się do amavisd, który
nasłuchuje na porcie 10024 oraz do postfix, który nasłuchuje na porcie
10025.
Uwaga:
Programu Netcat możemy używać jak zaawansowanego zamiennika programu
telnet. Instalujemy go przy pomocy polecenia emerge netcat.
|
Uwaga:
Z pewnych nie do końca jasnych powodów nie można ręcznie połączyć się do
amavisd przy pomocy programu netcat. Zamiast tego powinniśmy użyć
programu telnet.
|
Listing 5.4: Sprawdzanie ręcznie czy amavisd i postfix nasłuchują na nowych portach |
# nc localhost 10024
220 [127.0.0.1] ESMTP amavisd-new service ready
nc localhost 10025
220 example.com ESMTP Postfix
|
Uwaga:
Jeśli chcemy zobaczyć pełną informację z procesu uruchamiania programu
amavisd-new należy wykonać polecenie amavisd debug-sa jako użytkownik
amavis oraz wysłać jakąkolwiek wiadomość elektroniczną. Aby to
zadziałało najprawdopodobniej należało będzie zmienić domyślną powłokę w pliku
/etc/passwd.
|
Dodajemy amavisd i clamd do domyślnego poziomu uruchomieniowego.
Listing 5.5: Dodawanie amavisd i clamd do domyślnego poziomu uruchomieniowego |
# rc-update add clamd default
# rc-update add amavisd default
|
Uwaga:
Nie należy dodawać spamd do domyślnego poziomu uruchomieniowego ponieważ
amavisd używam bibliotek Perl programu Spamassassin bezpośrednio.
|
Uwaga:
W pliku log możemy zauważyć linie typu Net::Server: Couldn't POSIX::setuid to
... [] Zgodnie z amavis chroot
README jeśli UID procesu równy jest 0 (root) taki program zostanie
automatycznie wyłączony. W przeciwnym wypadku możesz potraktować tą wiadomość
jako czysto informacyjną. Dzieje się tak dlatego, że POSIX:setuip()
zwraca komunikat 0 but true.
|
Ważne:
Jeśli umożliwimy logowanie dla programu amavis należy pamiętać, aby z powrotem
ustawić domyślną powłokę w /etc/passwd na /bin/false.
|
6.
Automatyczna nauka i filtrowanie poczty
Tworzenie użytkownika spamtrap
Należy utworzyć konto spamtrap oraz wszystkie katalogi z nim związane.
Listing 6.1: Tworzymy konto spamtrap |
# useradd -m spamtrap
# maildirmake /home/spamtrap/.maildir
# chown -R spamtrap:mailusers /home/spamtrap/.maildir
# passwd spamtrap
|
Jeśli chcemy ręcznie sprawdzić niektóre z wiadomości elektronicznych, aby
upewnić się czy nie posiadamy fałszywego spamu należy użyć skryptu
procmail do ograniczenia niechcianego spamu w folderach pocztowych.
Tworzenie skryptu .procmailrc
Listing 6.2: Creating /home/spamtrap/.procmailrc |
MAILDIR=$HOME/.maildir
SPAM_FOLDER=$MAILDIR/.spam-found/
LIKELY_SPAM_FOLDER=$MAILDIR/.likely-spam-found/
:0:
* ^X-Spam-Status: Yes
* ^X-Spam-Level: \*\*\*\*\*\*\*
$SPAM_FOLDER
:0:
* ^X-Spam-Status: Yes
$LIKELY_SPAM_FOLDER
:0
*
./
|
Ostrzeżenie:
Jeśli spodziewamy się, że serwer będzie odbierał znaczące ilości wiadomości
elektronicznych, nie należy używać makr "likely-spam". W zamian można ustawić
odpowiednio wysoką wartość zmiennej $sa_tag2_level_default, aby uniknąć
fałszywego spamu i przenosić od razu właściwy bezpośrednio do folderu
$SPAM_FOLDER.
|
Uwaga:
Jeśli nie mamy jeszcze zainstalowanego procmail należy to zrobić przy
pomocy polecenia emerge procmail.
|
Teraz należy upewnić się czy Postfix używa procmail do dostarczania
poczty.
Listing 6.3: Modyfikacja pliku /etc/postfix/main.cf |
mailbox_command = /usr/bin/procmail -a "DOMAIN"
|
Tworzenie folderów pocztowych
Powinniśmy teraz utworzyć współdzielony folder dla wiadomości typu ham oraz
spam.
Listing 6.4: Tworzenie niezbędnych folderów pocztowych |
# maildirmake /var/amavis/.maildir
# maildirmake -S /var/amavis/.maildir/Bayes
# maildirmake -s write -f spam /var/amavis/.maildir/Bayes
# maildirmake -s write -f ham /var/amavis/.maildir/Bayes
# maildirmake -s write -f redeliver /var/amavis/.maildir/Bayes
|
Program Amavisd-new musi mieć takie same uprawnienia do czytania powyższych
plików jak użytkownicy poczty. Dlatego też należy dodać wszystkich odpowiednich
użytkowników do grupy mailuser, razem z użytkownikiem amavis.
Listing 6.5: Ustawianie właściwych zezwoleń |
# groupadd mailusers
# usermod -G mailusers spamtrap
# chown -R amavis:mailusers /var/amavis/.maildir/
# chown amavis:mailusers /var/amavis/
# chmod -R 1733 /var/amavis/.maildir/Bayes/
# chmod g+rx /var/amavis/.maildir/
# chmod g+rx /var/amavis/.maildir/Bayes/
|
Ostrzeżenie:
Powyższe polecenia spowodują, że członkowie grupy mailusers posiądą
dostęp do wiadomości elektronicznych użytkownika amavis.
|
Sprawią one, że folder na pocztę typu "spam" i "ham" będzie posiadał zezwolenia
do zapisywania w nim, ale nie odczytywania. W ten sposób użytkownicy w łatwy
sposób mogą składować swoją pocztę typu ham bez obaw, iż ktoś inny będzie mógł
ją odczytywać.
Należy uruchomić następującą komendę jako użytkownik spamtrap:
Listing 6.6: Dodawanie współdzielonych folderów do folderów pocztowych użytkowników |
$ maildirmake --add Bayes=/var/amavis/.maildir/Bayes $HOME/.maildir
|
Uwaga:
Należy przydzielić grupie zezwolenia do czytania folderu Bayes co
pozwoli widzieć katalogi używane przez IMAP.
|
Dodawanie zadań do crona
Należy uruchomić polecenia crontab -u amavis -e, aby wyedytować crontaba
programu amavis powodując uruchomienie automatycznej nauki filtru Bayesa co
godzinę.
Listing 6.7: amavis crontab |
0 * * * * /usr/bin/sa-learn --spam /var/amavis/.maildir/Bayes/.spam/{cur,new} \
> /dev/null 2>&1
0 * * * * /usr/bin/sa-learn --ham /var/amavis/.maildir/Bayes/.ham/{cur,new} > \
/dev/null 2>&1
|
Uwaga:
Użytkownik amavis powinien być członkiem grupy cron, aby
uruchamiać programy przy pomocy crona.
|
Uwaga:
Wygląda na to, że współdzielone katalog i z pocztą powodują dwukrotne
egzaminowanie sa-learn. Nie powinno to być problemem. Wynik pokaże także,
że co najmniej połowa z przeegzaminowanych wiadomości została używa do nauki.
|
Modyfikacja pliku amavisd.conf
Teraz należy zmodyfikować amavis w taki sposób, aby przekierowywał wiadomości
elektroniczne oznaczone jako spam do konta spamtrap oraz zatrzymywał
nagłówki spamu.
Listing 6.8: Modyfikacja pliku /etc/amavisd.conf |
$spam_quarantine_to = "spamtrap\@$myhostname";
|
Redystrybucja fałszywego spamu
Jeśli ustawimy wynik spamu zbyt nisko prawdopodobnie będziemy otrzymywać
fałszywy spam. Będzie on przechowywany w folderze likely-spam.
Wiadomości są ręcznie przeglądane i każdy fałszywy spam zostaje przeniesiony
do folderu pocztowego redeliver. Stamtąd jest przekierowywany
najpierw do sa-learn --ham, a następnie ze wszystkimi nagłówkami wysyłany
do smtpclient Ralfa
S. Engelschalla.
Oryginalna wersja 1.0.0 programu smtpclient znajduje się w Portage.
Jednak, aby wszystkie nagłówki pozostały nienaruszone należy użyć zmodyfikowanej
wersji. Poniżej opisano w jaki sposób należy zainstalować zmodyfikowaną wersję:
Listing 6.9: Instalacja zmodyfikowanej wersji smtpclient |
# wget http://home.coming.dk/files/smtpclient.tar.gz
# tar xzf smtpclient.tar.gz
# echo "mail-client/smtpclient ~x86" >> /etc/portage/package.keywords
# echo "mail-client/smtpclient fullheaders" >> /etc/portage/package.use
# emerge smtpclient
|
Przy pomocy crona należy sprawdzać co minutę czy w folderze
redeliver znajdują się wiadomości.
Listing 6.10: amavis crontab |
* * * * * find /var/amavis/.maildir/Bayes/.redeliver/cur/ -type f -name \
"[0-9]*" -exec cp {} /var/amavis/.maildir/Bayes/.ham/cur/ \; \
&& find /var/amavis/.maildir/Bayes/.redeliver/cur/ -type f \
-name "[0-9]*" -exec /usr/local/bin/redeliver.pl {} \;
|
Należy przekopiować plik redeliver.pldo katalogu
/usr/local/bin/. Można go ściągnąć lub użyć
poniższego przykładu.
Listing 6.11: redeliver.pl |
use strict;
if(!($#ARGV == 0)) {
die "Usage:\n$0 maildir_mail\n";
}
my $mail = $ARGV[0];
my $to = "";
my $from = "";
sub prunefile ( $ );
open (MAIL, $mail) or die "Could not open $mail: $?\n";
while(<MAIL>) {
if(($to eq "") || ($from eq "")) {
chop;
(my $key, my $value) = split (/:/);
if($key eq "X-Envelope-To") {
$to = $value;
$to =~ s/[\<\>,]//g; # Należy usunąć "<", ">" and ","
$to =~ s/^\s+|\s+$//g; # Należy usunąć whitespace przed i po
}
if($key eq "X-Envelope-From") {
$from = $value;
$from =~ s/[\<\>,]//g;
$from =~ s/^\s+|\s+$//g;
if($from eq "") {
$from = "postmaster";
}
}
}
}
if($to eq "") {
prunefile($ARGV[0]); # Just nuke it if to is empty
} else {
my $redelivercmd = "cat $ARGV[0] | smtpclient -F -S 127.0.0.1 -P 10025 -f $from $to";
unless (system($redelivercmd) == 0 ) {
die "Unable to redeliver: $?";
}
prunefile($ARGV[0]); # Clean up
}
sub prunefile ( $ ) {
my ($file) = @_;
unless (unlink $file) {
die "Unable to remove mail: $?";
}
}
|
Sprzątanie
Należy uruchamiać regularnie czyszczenie wiadomości programem tmpwatch.
Instalujemy go przy pomocy emerge i polecenia emerge tmpwatch. Jedynie
użytkownik root jest w stanie uruchomić tmpwatch, dlatego też
trzeba zmodyfikować crontaba dla tego użytkownika.
Listing 6.12: Modifying root crontab |
15 0 * * * /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/virusmails/
15 0 * * * /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/.maildir/Bayes/
|
7.
Greylisting
Wprowadzenie
Greylisting jest jedną z najnowszych metod walki ze spamem. Jak sama nazwa
wskazuje, jest czymś więcej niż whitelistingiem i blacklistingiem. Za każdy
razem kiedy nieznany serwer poczty próbuje dostarczyć wiadomość, ta wiadomość
jest odrzucana z komunikatem spróbuj ponownie później ("try again
later"). Oznacza to, iż wiadomość zostanie dostarczona z opóźnieniem, jednak
roboty spamerskie, które nie mają zaimplementowanego protokołu RFC odrzucą próbę
dostarczenia spamu i nie będą tego nigdy powtarzały. Z biegiem czasu roboty
zapewne przystosują się, jednak zanim to nastąpi inne technologię będą miały
zapewniony czas, aby udoskonalić swoje metody identyfikacji spamu.
Uwaga:
Jeśli ISP blokuje przychodzący ruch na porcie 25 i przekazuje pocztę przez ich
serwer pocztowych wyżej opisana metoda nie będzie prawidłowo działała.
|
Postfix 2.1 dostarczany jest z prostym, napisanym w Perlu serwerem greylistingu,
który implementuje taki schemat. Jednak w sytuacji kiedy zabraknie miejsca na
partycji, na której znajduje się baza danych greylistingu, serwer ten sprawia
nieprzewidziane problemy. Istnieje udoskonalona wersja, która nie cierpi już na
ten problem. Wpierw pokażemy jak zainstalować wbudowane wsparcie dla metody
greylisting, następnie skonfigurujemy silniejszego zastępcę.
Uwaga:
Istnieją inne serwery greylistingu dla środowiska programu Postfix (np. Gld, który znajduje się w Portage
oraz SQLgrey). Cześć z nich
współpracuje z bazami danych, auto whitelistingiem i posiada kilka dodatkowych
możliwości.
|
Prosty greylisting
Uwaga:
Jeśli chcemy używać ulepszonego greylistingu wraz z serwerem postgrey możemy
bez obaw ominąć ten rozdział.
|
Potrzebujemy pliku greylist.pl, jednak ebuild nie instaluje go
domyślnie.
Listing 7.1: Tworzenie pliku greylist.pl |
# cp /usr/portage/distfiles/postfix-your-version-here.tar.gz /root/
# tar xzf postfix-your-version-here.tar.gz
# cp postfix-2.1.0/examples/smtpd-policy/greylist.pl /usr/bin/
|
Kiedy plik znajduje się już we właściwym miejscu należy utworzyć katalog, w
którym znajdzie się baza danych greylistingu:
Listing 7.2: Tworzenie katalogu dla bazy danych greylistingu |
# mkdir /var/mta
# chown nobody /var/mta
|
Ostrzeżenie:
Nie należy tworzyć katalogu dla wyżej wymienionej bazy danych na partycji, na
której może zabraknąć miejsca. Mimo, iż postfix może odzyskać wiadomości
elektroniczne w takiej sytuacji, jednak nie zrobi tego w przypadku bazy danych
greylistingu. Jeśli plik zostanie uszkodzony możemy nie być zdolni do odebrania
wiadomości elektronicznej, dopóki nie skasujemy tego pliku ręcznie.
|
Konfiguracja greylistingu
Kiedy już mamy wszystko przygotowane, pozostało nam jedynie dodać to do
konfiguracji programu postfix. Najpierw dodajemy wymagane informacje do pliku
master.cf:
Listing 7.3: Modyfikacja master.cf, aby używał greylistingu |
policy-greylist unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/bin/greylist.pl
|
Demon uruchamiający postfix'a zabija wszystkie procesy dzieci po 1000 sekund,
ale dla potrzeb graylistingu jest to zdecydowanie za krótko, dlatego też
zwiększymy ten czas w pliku main.cf:
Listing 7.4: Modyfikacja pliku main.cf, aby używał greylistingu |
policy-greylist_time_limit = 3600
check_sender_access hash:/etc/postfix/sender_access
restriction_classes = greylist
greylist = check_policy_service unix:private/policy-greylist
|
Ostrzeżenie:
Należy mieć pewność, że określimy zmienną check_sender_access po
reject_unauth_destination, w przeciwnym wypadku nasz system może stać się
otwartym przekaźnikiem wiadomości elektronicznych.
|
Uwaga:
Baza danych greylistingu szybko zostaje zaśmiecona fałszywymi adresami. Warto
dodać tu także inne zabezpieczenie, jak na przykład odrzucania poczty z
nieznanymi autorami lub/i adresatami.
|
Nie ma potrzeby używać greylistingu dla wszystkich domen, ale tylko dla tych,
które często są nadużywane przez spamerów. Mimo wszystko sprawi to, iż
wiadomości elektroniczne będą dostarczane z opóźnieniem. Listę często
zapominanych domen MAIL FROM można znaleźć w internecie.
Domeny, z których nadchodzi duża ilość spamu należy dodać do pliku
/etc/postfix/sender_access:
Listing 7.5: Format pliku sender_access |
aol.com greylist
hotmail.com greylist
bigfoot.com greylist
|
Jeżeli chcemy posiadać bardziej szczegółową listę:
Listing 7.6: Dodawanie wszystkich domen do pliku sender_access |
# wget http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in
# cat sender-domain-validate.in | sort | awk {'print $1 "\t\t greylist"'} > /etc/postfix/sender_access
|
Należy zainicjować bazę danych sender_access:
Listing 7.7: Inicjalizacja sender_access |
# postmap /etc/postfix/sender_access
|
Na tym kończy się konfiguracja prostego greylistingu.
Ostrzeżenie:
Powyższego sposobu wypróbowano na jednej ze skrzynek obsługującej tysiące
wiadomości elektronicznych dziennie i rezultaty były prawie całkowitą
katastrofą. Po czterech dniach skrzynkach grzęzła w setce starych procesów
greylist.pl.
|
Konfiguracja ulepszonego greylistingu zaimplementowanego w serwerze postgrey
Rozszerzoną politykę gerylistingu możemy zainstalować poprzez proste wydanie
komendy emerge:
Listing 7.8: Instalacja serwera postgrey |
# emerge postgrey
|
Po instalacji serwera postgrey należy wyedytować plik
main.cf. Zmiany są praktycznie identyczne jak przy wbudowanym
greylistingu.
Listing 7.9: Modyfikacja pliku main.cf do używania greylistingu |
check_sender_access hash:/etc/postfix/sender_access
smtpd_restriction_classes = greylist
greylist = check_policy_service inet:127.0.0.1:10030
|
Uwaga:
SMTPD_POLICY_README Postifxa używa jedynie restriction_classes, jednak
wydaje się, iż to nie działa.
|
Uwaga:
Jeśli do wszystkiego ma być stosowany greylisting należy dodać wpis
check_policy_service inet:127.0.0.1:10030.
|
Na koniec, uruchamiamy serwer i dodajmy go do odpowiedniego poziomu
uruchomieniowego.
Listing 7.10: Uruchamianie postgrey |
# /etc/init.d/postgrey start
# rc-update add postgrey default
|
Uwaga:
Niektórzy użytkownicy lubią otrzymywać swoje wiadomości elektroniczne szybko,
dlatego też greylisting jest bezwartościowy. Jednak jeżeli zaangażujemy do pracy
zapasowy serwer w bezpieczny sposób możemy ustawić na nim greylisting. Moje
ograniczone doświadczenie mówi mi, że może on zatrzymywać co trzecią wiadomość
będącą spamem.
|
8.
SPF (Sender Policy Framework)
Wprowadzenie
SPF pozwala właścicielom domen stwierdzić, w ich wpisach DNS, które adresy IP
mogą wysyłać wiadomości elektroniczne z ich domen. Uniemożliwi to spamerom
spoofowanie Return-Path.
Uwaga:
Jeśli nasz ISP blokuje przychodzący ruch na porcie 25 i przekazuje całą pocztę
elektroniczną do nas przez ich serwer, to SPF nie będzie funkcjonował
prawidłowo.
|
Pierwsi właściciele domen muszą posiadać specjalny wpis DNS, TXT. Wtedy
MTA może przeczytać taki wpis i jeśli wiadomość pochodzi z serwera, który nie
jest wpisany do SPF, może zostać odrzucona. Przykładowy wpis może wyglądać tak:
Listing 8.1: Przykładowy wpis SPF |
example.com. IN TXT "v=spf1 a mx ptr -all"
|
Wpis -all każe odrzucać domyślnie wszystkie wiadomości, jednak dopuszcza
wiadomości z wpisów DNS A(a), MX(mx) i
PTR(ptr). Większej ilości informacji należy szukać w dalszej
części przewodnika.
Uwaga:
Jeśli przekazujemy wychodzącą pocztę przez naszego ISP należy dodać linijke:
include:yourisp.com.
|
Wersja 3.0 programu Spamassassin posiada wsparcie dla SPF, jednak domyślnie nie
jest ono uaktywnione. Nowy demon w programie Postfix wspiera SPF, dlatego też
zainstalujemy teraz wsparcie SPF dla Postfix.
Uwaga:
Jeśli chcemy używać SPF razem ze Spamassassinem po prosty wydajemy polecenie
emerge dev-perl/Mail-SPF-Query i restartujemy Amavisd-new.
|
Przygotowania
Wpierw należy zainstalować Postfix 2.1 w sposób opisany powyżej. Kiedy już
źródła znajdą się na naszym dysku skopiujemy plik spf.pl w podany
poniżej sposób:
Listing 8.2: Instalacja spf.pl |
# cp postfix-<version>/examples/smtpd-policy/spf.pl /usr/local/bin/
|
Uwaga:
Plik spf.pl dostarczany z programem Postfix jest odrobinę dziurawy
dlatego należy znaleźć i odkomentować następujące linie: push @HANDLERS,
"sender_permitted_from"; use Mail::SPF::Query;. Ponadto w okolicach 199
linii należy zastąpić słowo comemnt, słowem comment. Ewentualnie
możemy ściągnąć wersję deweloperską.
|
Powyższy skrypt Perl potrzebuje również kilku bibliotek Perl, których nie ma w
Portage, jednak ich instalacja nie powinna sprawić problemu:
Listing 8.3: Instalacja wymaganych bibliotek Perl |
# emerge Mail-SPF-Query Net-CIDR-Lite Sys-Hostname-Long
|
Gdy mamy wszystko już na swoim miejscu należy jedynie skonfigurować Postfixa
zgodnie z nową polityką.
Listing 8.4: Modyfikacja master.cf, aby zapewnić wsparcie SPF |
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/local/bin/spf.pl
|
Należy dodać sprawdzanie SPF do pliku main.cf. Poprawnie
skonfigurowany SPF nie powinien wyrządzić żadnej krzywdy, więc możemy sprawdzić
jego działanie dla wszystkich domen:
Listing 8.5: Modyfikacja main.cf, aby zapewnić wsparcie dla SPF |
check_policy_service unix:private/policy-spf
|
Uwaga:
Jeżeli SPF sprawia problemy, np. kiedy używamy fetchmail, należy
uaktywnić SPF jedynie dla pewnych domen.
|
9.
Konifguracja amavisd-new ze wsparciem dla MySQL
Konfiguracja MySQL
Uwaga:
Nie testowano tego rozwiązania na wersjach wyższych niż 2.2. Wszelkie opinie
będą mile widziane. :)
|
Dla dużych domen domyślne wartości można, które można ustawić w pliku
amavisd.conf, mogę nie pasować do wszystkich użytkowników. Jeśli
skonfigurujemy amavisd-new ze wsparcie dla MySQL-a, będzie można stosować
indywidualne ustawienia dla użytkowników i grupy użytkowników.
Listing 9.1: Tworzenie bazy danych i użytkownika MySQL |
# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database maildb;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON maildb.* TO 'mail'@'localhost' IDENTIFIED BY 'very_secret_password';
mysql> use maildb;
|
Kiedy baza danych jest już utworzona należy stworzyć potrzebne tabele. Można
skopiować i wkleić poniższe polecenia do linii komend mysql:
Listing 9.2: Układ tabel MySQL |
CREATE TABLE users (
id int unsigned NOT NULL auto_increment,
priority int NOT NULL DEFAULT '7', -- 0 is low priority
policy_id int unsigned NOT NULL DEFAULT '1',
email varchar(255) NOT NULL,
fullname varchar(255) DEFAULT NULL, -- not used by amavisd-new
local char(1), -- Y/N (optional field, see note further down)
PRIMARY KEY (id),
KEY email (email)
);
CREATE UNIQUE INDEX users_idx_email ON users(email);
CREATE TABLE mailaddr (
id int unsigned NOT NULL auto_increment,
priority int NOT NULL DEFAULT '7', -- 0 is low priority
email varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY email (email)
);
CREATE UNIQUE INDEX mailaddr_idx_email ON mailaddr(email);
(white or blacklisted sender)
CREATE TABLE wblist (
rid int unsigned NOT NULL, -- recipient: users.id
sid int unsigned NOT NULL, -- sender: mailaddr.id
wb char(1) NOT NULL, -- W or Y / B or N / space=neutral
PRIMARY KEY (rid,sid)
);
CREATE TABLE policy (
id int unsigned NOT NULL auto_increment,
policy_name varchar(32), -- not used by amavisd-new
virus_lover char(1), -- Y/N
spam_lover char(1), -- Y/N (optional field)
banned_files_lover char(1), -- Y/N (optional field)
bad_header_lover char(1), -- Y/N (optional field)
bypass_virus_checks char(1), -- Y/N
bypass_spam_checks char(1), -- Y/N
bypass_banned_checks char(1), -- Y/N (optional field)
bypass_header_checks char(1), -- Y/N (optional field)
spam_modifies_subj char(1), -- Y/N (optional field)
spam_quarantine_to varchar(64) DEFAULT NULL, -- (optional field)
spam_tag_level float, -- higher score inserts spam info headers
spam_tag2_level float DEFAULT NULL, -- higher score inserts
-- 'declared spam' info header fields
spam_kill_level float, -- higher score activates evasive actions, e.g.
-- reject/drop, quarantine, ...
-- (subject to final_spam_destiny setting)
PRIMARY KEY (id)
);
|
Uwaga:
Jeśli mamy problem używając metody kopiuj/wklej można skopiować powyższe
polecenia w inne miejsce i oczyścić je z niepotrzebnych znaków.
|
Uwaga:
Przeszukiwania próbujące dopasować email są dokonywane za pomocą adresów w
postaci czystego tekstu (rfc2821-unquoted i bez nawiasów) jako kluczy (np.
John "Funny" Smith@example.com.
|
Uwaga:
Przeszukiwania są dokonywane w następującym porządku: SQL, LDAP,
hash, ACL, regexp, constant. Pierwsze dopasowanie
kończy proces.
|
Jeżeli chcemy używać whitelistingu i blacklistingu musimy dodać nadawcę i
odbiorcę do mailadr po czym należy stworzyć relację pomiędzy dwoma
adresami poczty elektronicznej w wblist i ustalić czy jest to
whitelisting (W) czy blacklisting (B).
Kiedy tabele zostaną już utworzone należy utworzyć testowego użytkownika i
przykładową politykę:
Listing 9.3: Tworzenie użytkownika testowego oraz przykładowej polityki |
INSERT INTO users
SET
id =1,
priority =9,
policy_id =1,
email ="johndoe@example.com",
fullname ="John Doe",
local ="Y";
INSERT INTO policy
SET
id =1,
policy_name ="Test policy 1",
virus_lover ="N",
spam_lover ="N",
banned_files_lover ="N",
bad_header_lover ="N",
bypass_virus_checks ="N",
bypass_spam_checks ="N",
bypass_banned_checks ="N",
bypass_header_checks ="N",
spam_modifies_subj ="N",
spam_quarantine_to =NULL,
spam_tag_level =-50.0,
spam_tag2_level =7.0,
spam_kill_level =10.0;
|
Uwaga:
Należy skopiować gdzieś powyższe polecenia i dostosować je, aby pasowały do
naszego środowiska.
|
Uwaga:
Pole local powinno być ustawione jako Y, w przeciwnym wypadku
wiadomości nie będą skanowane pod względem obecności spamu.
|
Dzięki powyższym poleceniom umieścimy w bazie danych testowego użytkownika i
przykładową politykę. Należy dopasować powyższy przykład, aby dopasować go do
własnych potrzeb. Dalsze wyjaśnienia dotyczące zmiennych konfiguracyjnych można
znaleźć w pliku amavisd.path.
Konfiguracja amavisd ze wsparcie dla MySQL
Kiedy mamy już przygotowanego MySQL-a, należy sprawić, aby amavis zaczął go
używać:
Listing 9.4: Modyfikacja pliku amavisd.conf |
@lookup_sql_dsn =
( ['DBI:mysql:maildb:host1', 'mail', 'very_secret_password'] );
$sql_select_policy = 'SELECT *,users.id FROM users,policy'.
' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
' ORDER BY users.priority DESC';
$sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
' WHERE (wblist.rid=?) AND (wblist.sid=mailaddr.id)'.
' AND (mailaddr.email IN (%k))'.
' ORDER BY mailaddr.priority DESC';
|
10.
Konifguracja Spamassassin ze wsparciem dla MySQL
W Spamassassin 3.0 możliwe jest przechowywanie danych filtrów Bayesa i AWL w
bazie danych MySQL. Pokażemy tutaj w jaki sposób można tego łatwo dokonać.
Należy utworzyć nowego użytkownika MySQL, a następnie utworzyć potrzebne tabele.
Listing 10.1: Tworzenie nowej bazy danych i użytkownika MySQL |
# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database dbname;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON dbname.* TO 'dbuser'@'localhost' IDENTIFIED BY 'another_very_secret_password';
mysql> use dbname;
|
Kiedy baza danych jest już gotowa pora na utworzenie potrzebnych tabel. Można to
zrobić poprzez skopiowanie i wklejenie poniższych poleceń do linii poleceń
mysql:
Listing 10.2: Układ tabel MySQL |
CREATE TABLE bayes_expire (
id int(11) NOT NULL default '0',
runtime int(11) NOT NULL default '0',
KEY bayes_expire_idx1 (id)
) TYPE=MyISAM;
CREATE TABLE bayes_global_vars (
variable varchar(30) NOT NULL default '',
value varchar(200) NOT NULL default '',
PRIMARY KEY (variable)
) TYPE=MyISAM;
INSERT INTO bayes_global_vars VALUES ('VERSION','3');
CREATE TABLE bayes_seen (
id int(11) NOT NULL default '0',
msgid varchar(200) binary NOT NULL default '',
flag char(1) NOT NULL default '',
PRIMARY KEY (id,msgid)
) TYPE=MyISAM;
CREATE TABLE bayes_token (
id int(11) NOT NULL default '0',
token char(5) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
atime int(11) NOT NULL default '0',
PRIMARY KEY (id, token),
INDEX (id, atime)
) TYPE=MyISAM;
CREATE TABLE bayes_vars (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(200) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
token_count int(11) NOT NULL default '0',
last_expire int(11) NOT NULL default '0',
last_atime_delta int(11) NOT NULL default '0',
last_expire_reduce int(11) NOT NULL default '0',
oldest_token_age int(11) NOT NULL default '2147483647',
newest_token_age int(11) NOT NULL default '0',
PRIMARY KEY (id),
UNIQUE bayes_vars_idx1 (username)
) TYPE=MyISAM;
CREATE TABLE awl (
username varchar(100) NOT NULL default '',
email varchar(200) NOT NULL default '',
ip varchar(10) NOT NULL default '',
count int(11) default '0',
totscore float default '0',
PRIMARY KEY (username,email,ip)
) TYPE=MyISAM;
|
Ważne:
Wymagana jest linia INSERT, w przeciwnym wypadku Spamassassin nie będzie
działał.
|
Uwaga:
Powyższe polecenia są również dostępne w źródłach w plikach
awl_mysql.sql i bayes_mysql.sql.
|
Konfiguracja Spamassassin, ze wsparciem backend MySQL
Jeśli posiadamy starą bazę danych Bayesa w bazie danych DBM i chcemy ją
zatrzymać należy kierować się poniższym instrukcjami:
Listing 10.3: Konwertowanie danych Bayesa z bazy danych DBM |
su - amavis
sa-learn --sync
sa-learn --backup > backup.txt
sa-learn --restore backup.txt
|
Uwaga:
Należy zauważyć, iż ostatni krok można wykonać jedynie w przypadku gdy baza
danych MySQL i plik secrets.cf zostaną zaktualizowane.
|
Należy podać programowi Spamassassin potrzebne informację:
Listing 10.4: Modifyikacja pliku /etc/mail/spamassassin/secrets.cf |
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:sa_bayes:localhost:3306
bayes_sql_username db_name
bayes_sql_password another_very_secret_password
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:sa_bayes:localhost:3306
user_awl_sql_username db_name
user_awl_sql_password another_very_secret_password
|
Następnie, ustawiamy dla bezpieczeństwa odpowiednie zezwolenia:
Listing 10.5: Zmiana zezwoleń |
# chmod 400 /etc/mail/spamassassin/secrets.cf
|
Uwaga:
Aby utworzyć bezpieczne hasło należy wykonać dwa polecenia, emerge
app-admin/makepasswd i makepasswd -chars=8.
|
Na koniec należy zrestartować amavisd wydając polecenie /etc/init.d/amavisd
restart.
11.
Rozwiązywanie problemów
Amavisd-new
Aby rozwiązać problemy dotyczące Amavisd-new, musimy zacząć od zatrzymania
samego programu wydając komendę /etc/init.d/amavisd stop, następnie
uruchamiając go w trybie debug poleceniem amavisd debug, obserwując
wszelkie anomalie jakie pojawią się na wyjściu.
Spamassassin
Aby rozwiązać problemy dotyczące programu Spamassassin można przefiltrować
wiadomość ręcznie przy jego pomocy, używając polecenia spamassassin -D <
mail. Aby upewnić się, że nagłówki są nienaruszone możemy je przenieść z
innego komputera przy pomocy IMAP.
Uwaga:
Jeżeli chcemy rozwiązać problem należy uaktywnić logowanie się dla użytkownika
amavis poprzez zmianę powłoki w pliku /etc/passwd ma
/bin/bash.
|
Jeżeli chcemy możemy uzyskać takie same informacje, a nawet więcej z
Amavisd-new. W tym celu należy użyć amavisd debug-sa.
Uzyskiwanie pomocy
Jeżeli potrzebujemy pomocy dobrym miejscem na szukanie jej, jest lista
mailingowa użytkowników amavis. Przed wysłaniem postu należy przeszukać archiwum listy mailingowej
użytkowników programu Amavis. Jeżeli nie znajdziemy odpowiedzi na nasze
pytanie, w tym miejscu możemy zapisać się na listę mailingową
użytkowników programu Amavis
Jeżeli nasze pytanie odnosi się do SpamAssassin, DCC, Razor lub Postfixa,
należy udać się na ich strony domowe, których adresy znajdziemy poniżej.
12.
Zasoby
Więcej informacji
Ogólne zasoby
Inne HOWTO
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|
|
Zaktualizowano 2 sierpnia 2007 |
Oryginalna wersja tego dokumentu została
po raz ostatni zaktualizowana 29 kwietnia 2012. Jeśli chcesz pomóc w aktualizacji
tego dokumentu do najnowszej wersji, skontaktuj się z Łukaszem Damentko, koordynatorem
polskiego projektu tłumaczeń dokumentacji Gentoo.
|
Podsumowanie:
W przewodniku tym opisano krok po kroku proces instalacji technologii
antyspamowych w Postfixie, między innymi Amavisd-new używający Spamassassin,
ClamAV, greylistingu i SPF.
|
Sune Kloppenborg Jeppesen
Autor
Jens Hilligsøe
Współpracownik
Joshua Saddler
Redaktor
Damian Kuras
Tłumaczenie
|
|
Donate to support our development efforts.
|
|
|