|
Strona 8 z 9
8. Instalacja i konfiguracja AMaViS (A Mail Virus Scanner)
AMaViS, jak zostało napisane na jego oficjalnej stronie
(http://www.amavis.org/), jest wysoko-wydajnym interfejsem pośredniczącym
pomiędzy MTA i programami (skryptami) zajmujących się filtrowaniem treści:
skanerów antywirusowych lub filtrów antyspamowych. Jest napisany w Perlu, co w
znaczący sposób wpływa (pozytywnie) na jego wydajność. Zwraca się do MTA przez (E)SMTP
lub LMTP, lub używając pomocniczych programów. Najlepiej współpracuje z
Postfixem.Zainstalujmy naszego AMaViS'a. Jak zwykle posłużymy się portami.
Przechodzimy do katalogu gdzie znajduje się AMaViS i wydajemy poniższe
polecenia:
# cd /usr/ports/security/amavisd-new
# make build && make install && make clean
Nie pozostaje nam nic innego jak przystąpić do konfiguracji.
Nie będę tutaj opisywał dokładnie jego wszystkich opcji, jedynie te, które
uznałem za najważniejsze i które należy zmienić abyś mógł używać na swoim
serwerze AMaViS'a. Jego plik konfiguracyjny składa się z 8 sekcji, po bliższe
informacje dotyczące pozostałych parametrów zapraszam na oficjalną stronę
projektu lub skorzystanie z dokumetacji. Edytuj plik `amavisd.conf` i pozmieniaj
w nim następujące linijki. Warto przypomnieć jak wiemy wartość 0 odpowiada słowu
false, a wartość 1 odpowiada słowu true. Oto przykładowe opcje, które powinniśmy
zmienić. Pozostałe zostawiamy bez zmian, lub czytamy dokumentację, aby
dowiedzieć się o nich więcej. Oczywiście definiujemy je według własnych upodobań
i potrzeb. Uwaga, zmieniasz je na własną odpowiedzialność:
# cp /usr/local/etc/amavisd.conf-dist
/usr/local/etc/amavisd.conf
# vi /usr/local/etc/amavisd.conf
--- amavisd.conf ---
# Początek pliku:
use strict;
# Section I - Essential daemon and MTA settings
# Katalog domowy AMaViS'a:
$MYHOME = '/var/amavis';
# Domena Twojego serwera:
$mydomain = 'domena.pl';
# Z poziomu jakiego użytkownika i grupy będzie uruchamiany demon:
$daemon_user = 'vscan';
$daemon_group = 'vscan';
# Roboczy katalog domowy, w którym będą przechowywane rozpakowane wiadomości:
$TEMPBASE = $MYHOME;
# Ustawienie zmiennej środowiskowej `TMPDIR`:
$ENV{TMPDIR} = $TEMPBASE;
# Maksymalna liczba uruchomionych serwerów:
$max_servers = 2;
$max_requests = 10;
$child_timeout=5*60;
</font># Wpisujemy tu nazwy domen obsługiwanych przez nasz serwer w
formacie takim jak poniżej:
@local_domains_acl = ( ".$mydomain",
'.domena2.pl' );
# Section II - MTA specific (defaults should be ok)
# Ścieżka do pliku z gniazdem:
$unix_socketname = "$MYHOME/amavisd.sock";
# Port na którym będzie nasłuchiwał AMaViS:
$inet_socket_port = 10024;
# Dopuszczaj połączenia jedynie poprzez lokalny
adres IP:
@inet_acl = qw( 127.0.0.1 );
# Section III - Logging
# Włączenie logowania od syslog'a, ustawiamy na nie
(0), ponieważ będziemy wszystko logować do osobnego pliku:
$DO_SYSLOG = 0;
# Ścieżka do pliku z logami:
$LOGFILE = "$MYHOME/amavis.log";
# Poziom logowania
# (Standardowo - 0 informacje o uruchomieniu, zatrzymaniu,
komunikaty o niepowodzeniach, wykrytych wirusach):
$log_level = 0;
# Logowanie zarówno zawirusowanych i niezawirusowanych wiadomości:
$log_templ = '[? %#V |[? %#F |[?%#D|Not-Delivered|Passed]|BANNED
name/type (%F)]|INFECTED (%V)], #
<%o> -> [<%R>|,][? %i ||, quarantine %i], Message-ID: %m,
Hits: %c';
# Wybór strony kodowej, kolejno dla nagłówna i dla
sekcji body wiadomości:
$hdr_encoding = 'iso-8859-2';
$bdy_encoding = 'iso-8859-2';
# Ścieżki do plików z szablonem wiadomości
(zawiadomienia), które będą zwracane do nadawcy, odbiorcy i
# administratora, jeśli wiadomość będzie zawierała wirusy, po
więcej informacji zapraszam do `README.customize`:
$notify_virus_sender_templ=
read_text('/var/amavis/notify_virus_sender.txt');
$notify_virus_admin_templ = read_text('/var/amavis/notify_virus_admin.txt');
$notify_virus_recips_templ= read_text('/var/amavis/notify_virus_recips.txt');
# Podajemy naszemu AMaViS co ma zrobić z
wiadomościami:
# D_PASS - Poczta zostanie wysłana do adresata nie patrząc na
jej złą zawartość
# D_DISCARD - Poczta nie zostanie dostarczona do adresata
oraz nadawca nie dostanie o tym zawiadomienia
# D_BOUNCE - Poczta nie zostanie dostarczona do, ale zostanie
do niego wysłane zawiadomienie
# (wyjątek: zawiadomienie nie zostanie dostarczone jeśli
adresat znajduje się w $viruses_that_fake_sender_re)
# D_REJECT - Poczta zostanie odrzucona, a nadawca otrzyma jej
zwrot wraz z informacją o niepowodzeniu od Postfix'a
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_BOUNCE;
$final_spam_destiny = D_REJECT;
$final_bad_header_destiny = D_PASS;
# Zawiadomienie nadawcy o wirusie:
$warnvirussender = 0;
# Zawiadomienie odbiorcy o wirusie:
$warnvirusrecip = 0;
# Definiujemy nazwy najczęściej spotykanych robaków:
$viruses_that_fake_sender_re =
new_RE(
qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i,
qr'tanatos|lentin|bridex|mimail|trojan\.dropper|dumaru|parite|spaces'i,
qr'dloader|galil|gibe|swen|netwatch|bics|sbrowse|sober|rox|val(hal)?la'i,
qr'frethem|sircam|be?agle|tanx|mydoom|novarg|shimg|netsky|somefool|moodown'i,
qr'@mm|@MM', # mass mailing viruses as labeled by f-prot and
uvscan
qr'Worm'i, # worms as labeled by ClamAV, Kaspersky, etc
[qr'^(EICAR|Joke\.|Junk\.)'i => 0],
[qr'^(WM97|OF97|W95/CIH-|JS/Fort)'i => 0],
[qr/.*/ => 1], # true by default (remove or comment-out if
undesired)
);
# Definiujemy konto, na które będą wysyłane
powiadomienia o wirusach itp. Musisz pamiętać aby utworzyć alias lub
# dodać nowe konto wirtualne o nazwie `virusalert`. O tym w
dalszej części artykułu.
$virus_admin = "virusalert\@$mydomain";
# Definiujemy konta, z których będą wysyłane zawiadomienia do użytkowników:
$mailfrom_notify_admin = "virusalert\@$mydomain";
$mailfrom_notify_recip = "virusalert\@$mydomain";
# Wyłączamy kwarantanne, która jest nam niepotrzebna:
$virus_quarantine_to = undef;
# Zmiana nagłówka, aby wyłączyć całkowicie
wyświetlanie nagłówka ustaw de dwie zmienne jako `undef`,
# zmienne te możemy edytować dodając np. swoje nazwy:
$X_HEADER_TAG = 'X-Virus-Scanned';
$X_HEADER_LINE = "by amavisd-new at $mydomain";
# Tytuł wiadomości, ktory będzie wysyłany w wypadku
gdy archiwa będą zabezpieczone hasłem:
$undecipherable_subject_tag = '***UNCHECKED***
'; # undef disables it
# Kasowanie istniejących nagłówków - ustawiamy
wartość false:
$remove_existing_x_scanned_headers
= 0;
# Definiujemy typy plików, których nasz AMaViS ma
nierozpakowywać. Ma je trzymać w spakowanej formie dla narzędzia
# antywirusowego:
$keep_decoded_original_re = new_RE(
# qr'^MAIL$', # retain full original message for virus
checking (can be slow)
qr'^MAIL-UNDECIPHERABLE$', # retain full mail if it contains
undecipherables
qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
# qr'^Zip archive data',
);
# Zabronione nazwy plików, które muszą zostać przepuszczone przez skaner
antywirusowy:
$banned_filename_re = new_RE(
# qr'^UNDECIPHERABLE$', # is or contains any undecipherable
components
qr'\.[^.]*\.(exe|vbs|pif|scr|bat|cmd|com|dll)$'i, # double
extension
# qr'.\.(exe|vbs|pif|scr|bat|cmd|com)$'i, # banned extension
- basic
# qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js|
# jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb|
# vbe|vbs|wsc|wsf|wsh)$'ix, # banned extension - long
# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i, # banned extension -
WinZip vulnerab.
# qr'^\.(zip|lha|tnef|cab)$'i, # banned file(1) types
qr'^\.exe$'i, # banned file(1) types
qr'^application/x-msdownload$'i, # banned MIME types
qr'^application/x-msdos-program$'i,
# qr'^message/partial$'i, qr'^message/external-body$'i, #
block rfc2046
);
# Section V - Per-recipient and per-sender handling,
whitelisting, etc.
# Rezygnujemy z bazy SQL, w której przechowywane są
tzw. whitelist i blacklist:
$sql_select_white_black_list =
undef;
# Czarna lista użytkowników, od których wiadomości będą automatycznie odrzucane:
$blacklist_sender_re = new_RE(
qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou|greatcasino)@'i,
qr'^(investments|lose_weight_today|market.alert|money2you|MyGreenCard)@'i,
qr'^(new\.tld\.registry|opt-out|opt-in|optin|saveonlsmoking2002k)@'i,
qr'^(specialoffer|specialoffers|stockalert|stopsnoring|wantsome)@'i,
qr'^(workathome|yesitsfree|your_friend|greatoffers)@'i,
qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i,
);
# Section VI - Resource limits
# Maksymalny poziom dla rozpakowania/rozkodowania (0 - bez limitu):
$MAXLEVELS = 14;
# Maksymalna liczba rozpakowanych plików (0 - bez limitu)
$MAXFILES = 1500;
# Section VII - External programs, virus scanners
# Ścieżki do narzędzi wymienionych poniżej:
$path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
# Narzędzia, które nasz AMiViS będzie wykorzystywał
do dekompresji plików:
$file = 'file';
$gzip = 'gzip';
$bzip2 = 'bzip2';
$lzop = 'lzop';
$uncompress = ['uncompress', 'gzip -d', 'zcat'];
$unfreeze = ['unfreeze', 'freeze -d', 'melt', 'fcat'];
$arc = ['nomarch', 'arc'];
$unarj = ['arj', 'unarj'];
$unrar = ['rar', 'unrar'];
$zoo = 'zoo';
$lha = 'lha';
$cpio = 'cpio';
# Definiujemy ustawienia dla naszego skanera
antywirusowego, którym będzie ClamAV,
# pamiętaj o poprawnym podaniu ścieżki do pliku socket:
@av_scanners = (
['Clam Antivirus-clamd',
\&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd'],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);
# Możliwe jest również dodanie zapasowego skanera,
którym może być na przykład MKSd, do tego służy zmienna
# @av_scanners_backup = (" ");
# Koniec pliku:
1; |
--- end of amavisd.conf ---
To tylko moim zdaniem najważniejsze opcje, z którymi
powinieneś się zapoznać podczas używania AMaViS'a. Po więcej informacji
dotyczących tego właśnie programu jak wspomniałem już wcześniej zapraszam do
przejrzenia dokumentacji, która znajduje się w katalogu `/usr/local/share/doc/amavisd-new`.Edytuj
teraz plik `main.cf` i dodaj do niego następującą linikę:
# vi /etc/postfix/main.cf
--- main.cf
# AMaViS
content_filter=smtp-amavis:[127.0.0.1]:10024 |
--- end of main.cf ---
Na koniec edytujemy plik `master.cf`, do którego wstawiamy
poniższe linijki:
# vi /etc/postfix/master.cf
--- master.cf ---
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=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 |
--- end of master.cf ---
Pozostało nam już tylko uruchomienie AMaViS'a oraz ClamAV. Do
pliku `rc.conf` wstawiamy poniższe zmienne:
# vi /etc/rc.conf
--- rc.conf ---
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
amavisd_enable="YES" |
--- end of rc.conf ---
Teraz wydajemy polecenia, po których zostaną uruchomione
programy, przed uruchomieniem, jak wspomniałem wcześniej pamiętaj o dodaniu do
bazy wirusów konta wirtualnego, lub aliasa o nazwie `virusalert`. W tym celu
zobacz rozdział 'Administracja Postfix'em' w tym artykule:
# /usr/local/etc/rc.d/clamav-clamd.sh
start
# /usr/local/etc/rc.d/clamav-freshclam.sh start
# /usr/local/etc/rc.d/amavisd.sh start
I oczywiście restartujemy Postfix'a:
# /usr/local/etc/rc.d/postfix.sh
reload
W celu sprawdzenia czy nasz AMaViS uruchomił się i działa
poprawnie, zaloguj się przez telnet na port 10024 naszego serwera, powinieneś
ujrzeć następujący komunikat (QUIT wpisujemy w celu zakończenia sesji):
$ telnet 127.0.0.1 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
QUIT
221 2.0.0 [127.0.0.1] (amavisd) closing transmission channel
Connection closed by foreign host.
Jeśli pojawił Ci się taki lub podobny komunikat to znaczy, że
wszystko działa jak należy. Sprawdź jeszcze w logach, czy system nie pokazuje
żadnych błędów. Jeśli takowe się pojawią, polecam przejrzenie raz jeszcze
wszystkich plików, w celu upewnienia się czy nie popełniliśmy jakiegoś drobnego
błędu (mowa tu o literówkach), lub nie dopisaliśmy jakiejś niezbędnej opcji, bez
której nasz serwer nie mógłby działać poprawnie.
|