Postfix jest serwerem MTA (Mail Transport
Agent). Jest on o wiele przyjemniejszy i łatwiejszy w
konfiguracji, bardziej wydajny oraz bezpieczniejszy niż
powszechnie używany sendmail, którego kod źródłowy
zintegrowany jest z kodem źródłowym systemów *BSD. Mówiąc
krótko, jest to bardzo dobry serwer poczty pozbawiony wad i
błędów, które posiada sendmail. Warto również wspomnieć, że
Postfix zdobywa ostatnio coraz większą popularność i jest
godnym konkurentem dla innych serwerów MTA, takich jak np.
Qmail, Exim i wcześniej wspomniany sendmail.
"Postfix - bezpieczny i wydajny serwer
MTA"
Opis konfiguracji: Postfix + SASL2 + TLS + popa3d + AMaViS
+ Clam AntiVirus
Autor: Tomasz Stala [tomek(at)zso.tbg.net.pl]
Napisano:
17.04.2004 r.
Wersja: 1.2 (poprawiona)
Postfix jest serwerem MTA (Mail Transport Agent). Jest on o
wiele przyjemniejszy i łatwiejszy w konfiguracji, bardziej
wydajny oraz bezpieczniejszy niż powszechnie używany sendmail,
którego kod źródłowy zintegrowany jest z kodem źródłowym
systemów *BSD. Mówiąc krótko, jest to bardzo dobry serwer
poczty pozbawiony wad i błędów, które posiada sendmail. Warto
również wspomnieć, że Postfix zdobywa ostatnio coraz większą
popularność i jest godnym konkurentem dla innych serwerów MTA,
takich jak np. Qmail, Exim i wcześniej wspomniany sendmail. W
niniejszym artykule chciałbym przedstawić krótki opis jego
instalacji oraz konfiguracji. Artykuł ten powstał z myślą o
użytkownikach systemu FreeBSD, którzy chcieli by na swojej
maszynie zainstalować Postfix'a z autoryzacją i szyfrowanym
połączeniem SMTP oraz dodatkowo skaner antywirusowy. Ma on być
wyjaśnieniem niektórych zagadnień, które nie zostały opisane w
innych podobnych artykułach, lub zostały one opisane w sposób
niezrozumiały dla przeciętnego użytkownika. Opisane tu
informacje są już dostępne w internecie, ja jednak postarałem
się to wszystko zebrać do kupy i opisać w jednym możnaby
powiedzieć "krótkim" artykule, tak aby zaoszczędzić Twój czas
na żmudnym przeszukiwaniu zasobów sieci. Mam nadzieję, że po
przeczytaniu go nie będziesz miał problemów z zainstalowaniem
Postfix'a i wszystkie informacje zawarte w tym artykule będą
dla Ciebie jasne i przejrzyste. Życzę miłego czytania. Z góry
przepraszam za być może mnóstwo błędów wynikających z
niedopatrzeń lub braku czasu na sprawdzenie artykułu, który
pisany był w wolnych chwilach spędzonych przy komputerze.
Zakładam, że czytający ten artykuł posiada chociaż podstawową
wiedzę w zakresie administracji systemami FreeBSD z linii 4.x
oraz 5.x, na takich też systemach operacyjnych artykuł ten był
testowany.
Źródła Postfix'a są dostępne do ściągnięcia na oficjalnej
stronie projektu - http://www.postfix.org/. Do tego dochodzi
ściągnięcie najnowszych poprawek (patch'y), jak również bardzo
potrzebnej aby móc korzystać z autoryzacji SMTP biblioteki
(SASL2). Dlatego najprostrzym i najłatwiejszym sposobem na
zainstalowanie tego wszystkiego może być skorzystanie z drzewa
portów, jak wiemy nasz komputer wszystkie te powyższe
czynności (instalacja, patchowanie) wykona za nas
automatycznie. No to do dzieła.Pierwszym krokiem, który
powinniśmy wykonać jest zainstalowanie wyżej wymienionej
biblioteki, jak już wspomniałem będziemy je instalować z
portów, czyli wykonujemy poniższe polecenia:
# cd /usr/ports/security/cyrus-sasl2
# make build && make install && make clean
# cd /usr/ports/security/cyrus-sasl2-saslauthd
# make build && make install && make clean
Teraz powinniśmy skonfigurować SASL2, przechodzimy do
katalogu /usr/local/lib/sasl2, tworzymy w nim plik
`smtpd.conf`, następnie edytujemy go i ustawiamy metodę
autoryzacji użytkowników:
# touch /usr/local/lib/sasl2/smtpd.conf
# vi /usr/local/lib/sasl2/smtpd.conf
-- smtpd.conf --
pwcheck_method: saslauthd
mech_list: plain login
-- end of smtpd.conf --
Przechodzimy teraz do katalogu z postfixem i instalujemy
go. System automatycznie powinien pobrać najświeższe pliki (o
ile uaktualniliśmy nasze drzewo portów) oraz najnowsze patche.
# cd /usr/ports/mail/postfix
# make build && make install && make clean
Po wydaniu tych poleceń powinno nam się pokazać menu, w
którym wybieramy potrzebne nam opcje, z którymi nasz Postfix
będzie współpracował. Wybieramy więc - DB3, SASL2, TLS.
Opcjonalnie możemy także zaznaczyć opcję MySQL, która w
późniejszym czasie będzie nam też potrzebna.
Zacznijmy od wyłączenia sendmaila, edytujemy więc plik
`rc.conf` i ustawiamy w nim następujące zmienne:
# vi /etc/rc.conf
-- rc.conf --
sendmail_enable="NONE"
mta_start_script=""
sendmail_outbound_enable="NO"
sendmail_submit_enable="NO"
sendmail_msp_queue_enable="NO"
-- end of rc.conf --
Teraz możemy stworzyć dowiązanie symboliczne do katalogu z
postfixem, oraz do pliku z aliasami, czyli tak zwany `symbolic
link` - nie jest to obowiązkowe, lecz dla zachowania estetyki
polecam ich utworzenie:
# ln -s /usr/local/etc/postfix /etc/postfix
# ln -s /usr/local/etc/postfix/aliases /etc/aliases
Jeśli już wyłączyliśmy sendmaila, możemy przystąpić do
konfiguracji naszego serwera, edytujemy plik `main.cf`
następnie zmieniamy w nim co nam potrzeba, w zasadzie to
mógłbyś zastąpić cały przykładowy plik konfiguracyjny tym,
który jest poniżej. Początkowo nie zamierzałem tu opisywać
dokładnie wszystkich opcji, jedynie te najważniejsze. Jednak
skoro ma to być w pewnym sensie pomocnik, poszedłem na
kompromis i postarałem się w miarę zrozumiale opisać
poszczególne opcje. Zakładam, że masz skonfigurowany serwer
DNS lub jakąś wydelegowaną domenę. W opisanym przeze mnie
konfigu domeny te będą nosić nazwy `domana.pl` oraz
`domena2.pl`, przy czym `domena2.pl` będzie domeną wirtualną,
o czym napiszę w dalszej części artykułu. Niektóre z opcji są
ustawione defaultowo i nie musisz ich zmieniać. Oto plik
konfiguracyjny:
# vi /etc/postfix/main.cf
-- main.cf --
# LOCAL PATHNAME INFORMATION
# (Definiujemy ścieżki do katalogów)
# Katalog z plikami komunikującymi się z naszym MTA.
queue_directory = /var/spool/postfix
# Katalog zawierający pliki do administracji Postfixem.
command_directory = /usr/local/sbin
# Katalog z programami demona.
daemon_directory = /usr/local/libexec/postfix
# QUEUE AND PROCESS OWNERSHIP
# Ustawiamy właściciela.
mail_owner = postfix
# INTERNET HOST AND DOMAIN NAMES
# Wpisujemy nazwę naszego serwera lub domenę:
myhostname = domena.pl
# Ustawiamy nazwę naszej domeny:
mydomain = $myhostname
# SENDING MAIL
# Opcja ta odpowiedzialna jest za definicję pola "From: " w nagłówkach:
myorigin = $myhostname
# RECEIVING MAIL
# Adresy interfejsów na których będzie nasłuchiwał Postfix:
inet_interfaces = $myhostname, localhost
# Opcja wskazująca Postfix'owi nazwy domen, na które serwer ma akceptować pocztę przychodzącą wyłącznie na te domeny:
mydestination = $myhostname, domena2.pl
# REJECTING MAIL FOR UNKNOWN LOCAL USERS
# Opcja odpowiedzialna za listę nazw odbiorców wiadomości:
local_recipient_maps = $alias_maps unix:passwd.byname
# Numer kodu, który będzie zwracany, gdy w systemie nie ma odbiorcy:
unknown_local_recipient_reject_code = 550
# Ustawiamy limit ilości wiadomości, które mogą być dostarczone do użytkownika w tym samym czasie:
local_destination_concurrency_limit = 2
# Ustawiamy limit ilości użytkowników, których Postfix może obsłużyć równocześnie w tym samym czasie:
default_destination_concurrency_limit = 10
# TRUST AND RELAY CONTROL
# Adresy sieci, z których będzie można przekierować pocztę:
mynetworks = 127.0.0.0/8, 192.168.1.0/24
# Adresy komputerów, z których można będzie przekierować pocztę (relay):
relay_domains = 127.0.0.0/8
# ALIAS DATABASE
# Ścieżka do pliku i bazy z aliasami:
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# DELIVERY TO MAILBOX
# Katalog, w którym przechowywane będą wiadomości:
mail_spool_directory = /var/mail
# SHOW SOFTWARE VERSION OR NOT
# Ustawienia nagłówna i banner'a naszego serwera:
mail_name = Postfix
smtpd_banner = $myhostname ESMTP $mail_name
# DEBUGGING CONTROL
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
# INSTALL-TIME CONFIGURATION INFORMATION
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no
# OTHERS
# Maksymalna wielkość wysyłanej wiadomości (10 mb):
message_size_limit = 10240000
# Maksymalna pojemność skrzynki pocztowej (25 mb):
mailbox_size_limit = 25600000
# Maksymalna ilość wiadomości wysłanych za jednym razem przez użytkownika:
smtpd_recipient_limit = 10
# Opcja odpowiedzialna za blokowanie komendy SMTP VRFY:
disable_vrfy_command = yes
# Parametr odpowiedzialny za dostarczanie maili jeżeli server jest wyłączony.
# (sprawdzaj zdalny server co pół godziny i zwracaj błąd do nadawcy po trzech dniach):
queue_run_delay = 30m
maximal_queue_lifetime = 3d
# Ustawienia czasów oczekiwania na komunikaty o błędach:
smtpd_error_sleep_time = 3
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 5
--- end of main.cf --
Oczywiście powyższe opcje musisz dostosować do własnych
potrzeb. Myślę, że powyższe wyjaśnienie "niektórych" opcji
zostało napisane w sposób dla Ciebie zrozumiały, jeśli nie to
obszerny opis wszystkich parametrów konfiguracyjnych
znajdziesz w dokumentacji i na stronach manuali, na które
gorąco polecam zaglądnąć.
No to mamy już skonfigurowanego Postfix'a, teraz wypadałoby
zająć się serwerem POP3. Dobrym, solidnym, a zarazem
bezpiecznym serwerem POP3, jest demon popa3d Solar Designer'a.
Jest on bardzo prosty w instalacji, więc na początek możemy go
zainstalować. Jak już opisałem wcześniej najwygodniejszym
sposobem jest instalacja z portów, tak też uczynimy z popa3d.
Wchodzimy do katalogu z demonem i wydajemy polecenia do
instalacji naszego serwera POP3:
# cd /usr/ports/mail/popa3d
# make build && make install && make clean
Teraz edytujmy plik `inetd.conf` do którego wstawimy
poniższą linijkę:
# vi /etc/inetd.conf
-- inetd.conf --
pop3 stream tcp nowait root /usr/local/libexec/popa3d popa3d
-- end of inetd.conf --
Spowoduje to uruchamianie demona popa3d z poziomu inetd,
jako standardowego serwer POP3. Pozostało więc tylko
przeładować demona inetd w celu uruchomienia popa3d, aby to
zrobić wydajemy polecenie:
# killall -HUP inetd
Skoro mamy już skonfigurowany i uruchomiony serwer POP3,
został nam do uruchomienia serwer SMTP, utwórzmy plik
`postfix.sh`, który będzie odpowiadał za uruchomienie
Postfix'a przy starcie systemu i nie tylko. Będziesz mógł za
jego pomocą również przeładować jego konfigurację (reload),
edytuj teraz ten plik i wstaw do niego to co zostało napisane
poniżej:
# touch /usr/local/etc/rc.d/postfix.sh
# vi /usr/local/etc/rc.d/postfix.sh
-- postfix.sh --
#!/bin/sh
case $1 in
start)
if [ -x /usr/local/sbin/postfix ]; then
/usr/local/sbin/postfix start
fi
;;
stop)
/usr/local/sbin/postfix stop
;;
reload)
/usr/local/sbin/postfix reload
;;
*)
echo "USAGE $0 (start|stop|reload)"
exit 1
esac
-- end of postfix.sh --
Jak już wspomniałem użyjmy tego pliku do uruchomienia
Postfix'a:
# /usr/local/etc/rc.d/postfix.sh start
Jeśli wszystko pójdzie dobrze, powinniśmy ujrzeć
następujący komunikat "postfix/postfix-script: starting the
Postfix mail system" Zalogujmy się teraz na nasz serwer na
port 25 używając programu telnet, aby sprawdzić czy wszystko
działa prawidłowo:
# telnet 127.0.0.1 25
Wpisz `EHLO domena.pl`, jeśli wyświetli się komunikat taki
jak poniżej, znaczy to że udało nam się poprawnie
skonfigurować serwer SMTP + POP3 i wszystko działa w należytym
porządku.
$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 domena.pl ESMTP Postfix
EHLO domena.pl
250-domena.pl
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-XVERP
250 8BITMIME
Wpisujemy `QUIT` aby zakończyć połączenie.
Autoryzacja poczty wychodzącej (SMTP AUTH) to
zabezpieczenie uniemożliwiające wysyłkę poczty bez uprzedniego
zalogowania się do konta. Dzięki niemu nikt nie będzie mógł
podszyć się pod Twój adres e-mail, a odbiorca danej wiadomości
będzie miał pewność, że jesteś jej autorem. Funkcja ta
zabezpiecza także przed wysłaniem poczty za pośrednictwem
Twojego serwera przez nie autoryzowanego nadawcę lub spamera.
Opisana tu konfiguracja zapewnia taką autoryzację za pomocą
biblioteki Cyrus-SASL2. Aby móc wysyłać pocztę z użyciem
autoryzacji poczty wychodzącej, należy wejść w programie
pocztowym do właściwości konta i w zakładce 'Serwery' włączyć
opcję 'Serwer wymaga uwierzytelnienia', a w jego
właściwościach wybrać 'Użyj tych samych ustawień co mój serwer
poczty przychodzącej'.To było krótkie wyjaśnienie na jakiej
zasadzie działa SMTP AUTH, teraz czas na jej skonfigurowanie.
Edytuj plik `main.cf` i dodaj do niego poniższe linijki:
# vi /etc/postfix/main.cf
--- main.cf ---
# SASL AUTH
# Uaktywniamy autoryzację:
smtpd_sasl_auth_enable = yes
# Zgodność ze starszymi klientami pocztowymi, np. Outlook Express 4:
broken_sasl_auth_clients = yes
# Metod autoryzacji, które nie będą obsługiwane:
smtpd_sasl_security_options = noanonymous
# Ustawienie autoryzacji jest wymagana przy wysyłaniu listów z określonych tutaj domen. Jeśli zostawisz ten parametr
# pusty będzie to oznaczało, że autoryzacja jest wymagana przy wszystkich domenach na Twoim serwerze:
smtpd_sasl_local_domain =
# Restrykcje - Sprawdzanie poczty na podstawie adresu nadawcy listu (RCPT TO):
smtpd_recipient_restrictions =
permit_sasl_authenticated,
reject_unauth_destination,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
check_relay_domains,
# Restrykcje - Sprawdzenie IP komputera, z którego wysyłana jest wiadomość:
smtpd_client_restrictions =
permit_sasl_authenticated,
reject_unknown_client,
reject_rbl_client relays.ordb.org,
reject_rbl_client dnsbl.njabl.org,
# Restrykcje - Sprawdzanie poczty na podstawie adresu odbiorcy listu (MAIL FROM):
smtpd_sender_restrictions =
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_non_fqdn_sender,
hash:/usr/local/etc/postfix/access
--- end of main.cf ---
Restrykcjami możemy manipulować dowolnie. Dostępne są 3
rodzaje restrykcji wymienione powyżej. Oto opis niektórych z
nich:
- Sprawdzanie poczty na podstawie adresu nadawcy listu
(RCPT TO). Zmienna odpowiedzialna za tą restrykcje to
"smtpd_recipient_restrictions":
- reject_non_fqdn_recipient - odrzuć list, jeśli podany
adres odbiorcy nie jest "pełny" (fully-qualified domain
form)
- reject_unknown_recipient_domain - odrzuć, jeśli adres
docelowy listu, jego adres nie istnieje w DNS (czyli i tak
nie ma dokąd go wysłać)
- check_recipient_access maptype:mapname - przeszukuje
plik podany jako argument i na jego podstawie decyduje czy
wysłać list.
- permit_auth_destination - przyjmij list, jeśli to nasz
serwer jest jego celem lub adres przeznaczenia zawiera się
w zmiennej $relay_domains. Jeśli warunek nie jest
spełniony, bierz pod uwagę następne ograniczenia.
- reject_unauth_destination - podobne do poprzedniego,
ale odrzuć list, jeśli to nasz serwer nie jest jego
przeznaczeniem. Odrzuca list, nie sprawdza innych
ograniczeń.
- check_relay_domains - jeśli adres IP komputera, który
wysyła list pasuje do $relay_domains lub celem listu jest
$relay_domains lub to nasz serwer jest komputerem
docelowym - przyjmij list, w przeciwnym wypadku go odrzuć
i zakończ.
- permit - pozwól na wysłanie listu. Przydatne na końcu
listy ograniczeń, jako zachowanie domyślne, gdy poprzednie
reguły nie pasują.
- reject - odrzuć list. Przydatne na końcu listy
ograniczeń, jako zachowanie domyślne, gdy poprzednie
reguły nie pasują.
- Sprawdzenie IP komputera, z którego wysyłana jest
wiadomość. Zmienna odpowiedzialna za tą restrykcje to
"smtpd_client_restrictions":
- permit_mynetworks - pozwala na połączenie się z naszym
serwerem komputerom, z naszej sieci lokalnej (dokładnie:
komputerom, które zostały ujęte w zmiennej $mynetworks)
- reject_unknown_client - odrzuca komputer, którego
adresu IP nie ma w DNS
- check_client_access maptype:mapname - sprawdza
IP/nazwę komputera w pliku wpisanym jako parametr.
- permit - pozwól na połączenie. Przydatne na końcu
listy ograniczeń, jako zachowanie domyślne, gdy poprzednie
reguły nie pasują.
- reject - odrzuć połączenie. Przydatne na końcu listy
ograniczeń, jako zachowanie domyślne, gdy poprzednie
reguły nie pasują.
- Sprawdzanie poczty na podstawie adresu odbiorcy listu
(MAIL FROM). Zmienna odpowiedzialna za tą restrykcje to
"smtpd_sender_restrictions":
- reject_unknown_sender_domain - odrzuca list, jeśli
adres nadawcy, dokładnie część po @ adresu nadawcy, nie ma
wpisu w DNS.
- reject_non_fqdn_hostname - odrzuca list, jeśli adres
nadawcy, dokładnie część po @ adresu nadawcy nie jest
"pełna" (fully-qualified domain form).
- check_sender_access maptype:mapname - przeszukuje plik
podany jako argument. Na jego podstawie decyduje czy
użytkownik może wysyłać listy.
- permit - pozwól na wysłanie listu. Przydatne na końcu
listy ograniczeń, jako zachowanie domyślne, gdy poprzednie
reguły nie pasują.
- reject - odrzuć list. Przydatne na końcu listy
ograniczeń, jako zachowanie domyślne, gdy poprzednie
reguły nie pasują.
Jak już wspomniałem tymi zmiennymi możemy manipulować
dowolnie. Szczegółowy ich opis znajdziesz w dokumentacji oraz
w pliku `sample-smtpd.cf` w katalogu z Postfix'em.Utwórzmy
teraz plik `access` w katalogu z plikami konfiguracyjnymi
Postfix'a w celu ustawienia ograniczeń nawiązania połączeń z
naszym serwerem. W praktyce dopisujemy do niego każdego
użytkownika, który chciałby mieć możliwość wysyłania i
odbierania poczty z naszego serwera, w opisanym przykładzie
użytkownik tomek będzie mógł korzystać z naszego serwera SMTP,
dostaje on takie przywileje gdy dopiszemy słowo `OK` przy jego
username i nazwie domeny. Jeśli jednak chcesz aby użytkownik
miał jedynie dostęp do powłoki i nie miał możliwości wysyłania
i odbierania poczty dopisujemy przy jego loginie i nazwie
domeny słowo `REJECT`. Krótko mówiąc `user@domena1.pl` nie
będzie otrzymywał żadnej poczty, jak również na domenę
`jakas_domena.pl` nie dojdzie żadna wiadomość. Zawartość tego
pliku może być następująca:
# touch /etc/postfix/access
# vi /etc/postfix/access
--- access ---
tomek@domena1.pl OK
user@domena1.pl REJECT
jakas_domena.pl REJECT
--- end of access ---
Po dokonaniu wpisów do tego pliku aktualizujemy bazę danych
poleceniem:
# postmap /etc/postfix/access
Restartujemy Postfix'a i uruchamiamy saslauthd:
# /usr/local/etc/rc.d/postfix.sh reload
# /usr/local/etc/rc.d/saslauthd.sh start
Sprawdzamy teraz czy wszystko gra. Logujemy się przez
telnet na port 25 naszego serwera i wpisujemy `EHLO domena.pl`
i powinniśmy ujrzeć następujący komunikat, jeśli takowy nam
się ukarze, znaczy to że Twoja konfiguracja jest poprawna i
możesz przejść do następnej części tego artykułu.
$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 domena.pl ESMTP Postfix
EHLO domena.pl
250-domena.pl
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-XVERP
250 8BITMIME
Wpisujemy `QUIT` aby zakończyć połączenie.
TLS polega na tym, że wszystkie wiadomości przesyłane i
odbierane z danego programu pocztowego będą szyfrowane co
uniemożliwi dostęp do nich niepowołanym osobom. Chyba każdy z
nas nie chciałby aby ktoś podszył się pod naszą osobę i wysłał
pocztę do kogoś w naszym imieniu. Szyfrowanie to będzie
odbywać się za pomocą SSL. Secure Socket Layer jest to
protokół bezpiecznej komunikacji między klientem a serwerem,
stworzony przez firmę Netscape. SSL zapewnia trzy
rzeczy:prywatność - połączenie jest szyfrowaneautoryzację -
klient i serwer określa swoją tożsamośćintegralność
przesyłanych danych - przez sumy kontrolneTo tak na wstępie
chciałem przypomnieć na jakiej zasadzie działa szyfrowanie
połączenia SMTP. Przejdźmy do konfiguracji. Czynnością jaką
powinniśmy wykonać najpierw jest wygenerowanie odpowiednich
certyfikatów. Utworzymy je w katalogu `/etc/ssl/mail` i nadamy
mu odpowiednie uprawnienia:
# mkdir /etc/ssl/mail
# chmod 700 /etc/ssl/mail
# cd /etc/ssl/mail
Zaczynamy od wygenerowania klucza prywatnego RSA, o
długości 1024 bitów i nazwie ca.key. Powinniśmy ujrzeć
komunikat taki jak poniżej. Jeśli masz już wygenerowany
certyfikat CA, możesz ten krok pominąć i przejść dalej:
# openssl genrsa -out cakey.pem 1024
Generating RSA private key, 1024 bit long modulus
...............................++++++
.................................++++++
e is 65537 (0x10001)
Jeśli mamy już klucz prywatny możemy z niego wygenerować
klucz publiczny odpowiadając na poniższe zapytania, podając w
nich podstawowe informacje o serwerze oraz jego właścicielu,
będzie on stanowił CSR (Certificate Signing Request), czyli
nie podpisany certyfikat X.509:
# openssl req -new -key cakey.pem -out cacsr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Twoje województwo
Locality Name (eg, city) []:Twoje miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nazwa instytucji (np.
TEST Home Server)
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:Twoje imię i nazwisko lub nazwa firmy
Email Address []:postmaster@domena.pl
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
Po wykonaniu powyższej czynności, przystępujemy do
zgłoszenia naszego CSR, do podpisania, korzystamy z
podpisywanego CSR oraz podpisującego klucza prywatnego i wynik
zapisujemy do pliku cacert.pem, oczywiście podany został tu
przykładowy komunikat zwrotny:
# openssl x509 -req -in cacsr.pem -signkey cakey.pem -out cacert.pem
Signature ok
subject=/C=PL/ST=podkarpackie/L=Tarnobrzeg/O=PLANET - Home LAN Server/CN=PLANET -
Home LAN Server/emailAddress=postmaster@domena.pl
Getting Private key
W ten sposób otrzymaliśmy właściwy certyfikat CA
instytucji, którym będziemy podpisywać inne certyfikaty.
Pozostało nam już tylko utworzyć klucz prywatny RSA i
wygenerować odpowiedni certyfikat dla naszego SMTP oraz
zgłosić go do podpisania.. Wydajemy więc polecenie, generujące
klucz, o długości 1024 bitów i nazwie smtpkey.pem:
# openssl genrsa -out smtpkey.pem 1024
Generating RSA private key, 1024 bit long modulus
.............++++++
......++++++
e is 65537 (0x10001)
Teraz generujemy odpowiedni certyfikat, dla smtp. Uwaga!
Zamiast nazwy firmy lub imienia i nazwiska w polu Common Name
podajemy nazwę naszego serwera (nazwę domeny). Pole to będzie
później wykorzystywane przez klientów do porównania z nazwą
serwera, z którym się połączyli.:
# openssl req -new -key smtpkey.pem -out smtpcsr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Twoje województwo
Locality Name (eg, city) []:Twoje miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nazwa instytucji (np. TEST Home Server)
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:domena.pl
Email Address []:postmaster@domena.pl
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
Ostatnia czynność to złożenie podpisu, używamy do tego
utworzony już wcześniej klucz prywatny CA, klucz publiczny CA:
# openssl x509 -CA cacert.pem -CAkey cakey.pem -req -CAcreateserial -in smtpcsr.pem -out smtpcert.pem
Signature ok
subject=/C=PL/ST=podkarpackie/L=Tarnobrzeg/O=PLANET -
Home LAN Server/CN=domena.pl/emailAddress=postmaster@domena.pl
Getting CA Private Key
Możliwe jest też wygenerowanie certyfikatu "na skróty",
otóż tworzymy nowy certyfikat X.509, który będzie ważny przez
3650 dni, utworzony zostanie plik smtpd.pem, który będzie
zarówno kluczem prywatnym, jak i certyfikatem serwera. Musisz
jednak pamiętać, że po wygenerowaniu takiego certyfikatu, w
pliku konfiguracyjnym Postfix'a (main.cf) do zmiennych
smtpd_tls_key_file , smtpd_tls_cert_file, smtpd_tls_CAfile
dopisujesz ścieżkę właśnie do tego pliku smtpd.pem.:
# openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650
Generating a 1024 bit RSA private key
.................++++++
............................++++++
writing new private key to 'smtpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Twoje województwo
Locality Name (eg, city) []:Twoje miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nazwa instytucji (np. TEST Home Server)
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:domena.pl
Email Address []:postmaster@domena.pl
Osobiście preferuję to drugie rozwiązanie, ze względu na
certyfikat instytucji CA, którym być może w późniejszym czasie
podpisywał inne certyfikaty. Wybór pozostawiam Tobie.
Skoro mamy już wygenerowane certyfikaty, wypadało by zająć
się plikiem `main.cf` w celu dodania do niego niezbędnych
opcji, aby nasz Postfix mógł obsługiwać szyfrowane połączenie
SMTP. Edytujmy więc ten plik i wstawmy do niego to co zostało
napisane poniżej:
# vi /etc/postfix/main.cf
--- main.cf ---
# TLS
# Parametr uaktywniający używanie TLS dla SMTP i SMTPD:
smtp_use_tls = yes
smtpd_use_tls = yes
# Autoryzacja odbywa się jedynie poprzez szyfrowanie połączenia (poprzez tunele TLS):
smtpd_tls_auth_only = yes
smtp_tls_note_starttls_offer = yes
# Ścieżka do pliku zawierającego klucz prywatny RSA:
smtpd_tls_key_file = /etc/ssl/mail/smtpkey.pem
# Ścieżka do pliku zawierający wygenerowany certyfikat dla SMTP:
smtpd_tls_cert_file = /etc/ssl/mail/smtpcert.pem
# Ścieżka do pliku zawierającego wygenerowany certyfikat CA:
smtpd_tls_CAfile = /etc/ssl/mail/cacert.pem
# Wybieramy poziom logowania (0-4)
smtpd_tls_loglevel = 3
# Sprawdzenie, czy informacje dotyczące protokołu oraz szyfru zawarte są w nagłówku wiadomości:
smtpd_tls_received_header = yes
# Szacowany czas trwania sesji:
smtpd_tls_session_cache_timeout = 3600s
# ???
tls_random_source = dev:/dev/urandom
--- end of main.cf ---
Restartujemy Postfix'a i sprawdzamy, czy wszystko działa.
# /usr/local/etc/rc.d/postfix.sh reload
Aby móc korzystać z możliwości szyfrowania wysyłanych
wiadomości za pomocą SSL należy dokonać odpowiednich ustawień
w programie do odbioru poczty np. Outlook Express. Oto
przykład ustawień w przypadku Outlook Express. Wchodzimy do
zakładki Narzędzia / Konta / Poczta / Właściwości (właściwe
konto) / Zaawansowane i ustawiamy w niej następujące opcje:
Poczta wychodząca SMTP - port 25 [x] ten serwer wymaga
bezpiecznego połączenia SSL Jeśli możesz wysyłać pocztę to
napewno wszystko działa i udało Ci się poprawnie skonfigurować
Postfix'a z autoryzacją i szyfrowanym połączeniem SMTP. Możesz
również sprawdzić, czy wszystko działa dobrze logując się
przez telnet na port 25:
$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost
Escape character is '^]'.
220 domena.pl ESMTP Postfix
EHLO domena.pl
250-domena.pl
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-XVERP
250 8BITMIME
Zauważ, że poniższe dwie linijki, które były aktywne w
czasie gdy konfigurowaliśmy SMTP AUTH, mowa tu o:
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
zastąpiła jedna:
250-STARTTLS
Jeśli ukazał Ci się taki komunikat, wszystko działa OK.
Wpisz `QUIT`, aby zakończyć połączenie.
Clam AntiVirus jest darmowym programem antywirusowym
przeznaczonym dla systemów UNIX. Głównym jego celem jest
integralność z serwerami poczty. W dodatku posiada on
specjalne narzędzie do automatycznej aktualizacji bazy
wirusów. Myślę, że jego instalacja jest prosta i niesprawi Ci
wiele kłopotów. Zaczynając dodaj nową grupę i nowego
użytkownika o nazwie `vscan`:
# pw group add vscan -g 130
# pw user add vscan -c "AntiVirus" -d "/nonexistent" -s "/sbin/nologin" -u 130 -g 130
Teraz wypadałoby zainstalować ClamAV, przedchodzimy więc do
katalogu z gdzie mieści się port z ClamAV i wydajemy polecenie
aby system sam ściągnął odpowiednie pliki i zainstalował nam
nasz skaner antywirusowy:
# cd /usr/ports/security/clamav
# make build && make install && make clean
No i najważniejsza rzecz, czyli konfiguracja, której to
najważniesze i najpotrzebniejsze opcje będe chciał tu opisać.
W przypadku ClamAV jest ona bardzo prosta. Edytuj plik
`clamav.conf`. Możesz wstawić do niego to co jest poniżej, lub
poprostu pozmieniać to co chcesz:
# cp /usr/local/etc/clamav.conf.default /usr/local/etc/clamav.conf
# vi /usr/local/etc/clamav.conf
--- clamav.conf ---
# Ścieżka do pliku z logami:
LogFile /var/log/clamav/clamd.log
# Maksymalna wielkość logów (Wpisz 0, aby wielkość była nieograniczona):
LogFileMaxSize 2M
# Ścieżka do katalogu, gdzie znajduje się baza wirusów:
DatabaseDirectory /usr/local/share/clamav
# Ścieżka do pliku z lokalnym gniazdem:
LocalSocket /var/amavis/clamd
# Kasowanie powyższego pliku podczas zatrzymania programu:
FixStaleSocket
# Maksymalna wielkość katalogu w którym znajdują się zeskanowane pliki:
MaxDirectoryRecursion 15
# Uruchomienie ClamAV jako wybrany użytkownik (Zalecane jest aby był jednak uruchomiony jako root):
User vscan
# Opcja ta daje możliwość użycia ClamAV użytkownikom wszystkich grup z pliku `/etc/group`:
AllowSupplementaryGroups
# Opcja uaktywniająca skanowanie wiadomości pocztowych:
ScanMail
-- end of clamav.conf ---
Zajmijmy się teraz narzędziem do automatycznej aktualizacji
logów - FreshClam. Edytujemy plik `freshclam.conf` i dodajemy
do niego poniższe linie:
# cp /usr/local/etc/freshclam.conf.default /usr/local/etc/freshclam.conf
# vi /usr/local/etc/freshclam.conf
--- freshclam.conf ---
# Ścieżka do katalogu, gdzie znajduje się baza wirusów:
DatabaseDirectory /usr/local/share/clamav
# Ścieżka do pliku z logami:
UpdateLogFile /var/log/freshclam.log
# Enable verbose logging.
LogVerbose
# Ustawienie właściciela bazy danych:
DatabaseOwner vscan
# Mirror z którego FreshClam będzie pobierał najświeższe bazy wirusów:
DatabaseMirror database.clamav.net
# Po ilu próbach nieudanego nawiązania połączenia program ma odpuścić:
MaxAttempts 3
# Jak często program ma sprawdzać czy są nowe uaktualnienia (12 godzin):
Checks 12
--- end of freshclam.conf ---
Teraz tworzymy wymagany katalog, w którym ClamAV będzie
przechowywał plik z lokalnym gniazdem. Musimy także utworzyć
pliki z logami i nadać im odpowiednie prawa:
# mkdir /var/amavis/
# chown -R vscan:vscan /var/amavis
# chmod 750 /var/amavis
# mkdir /var/log/clamav
# touch /var/log/clamav/freshclam.log
# chown vscan:vscan /var/log/clamav/freshclam.log
# chmod 600 /var/log/clamav/freshclam.log
# touch /var/log/clamav/clamd.log
# chown vscan:vscan /var/log/clamav/clamd.log
# chmod 600 /var/log/clamav/clamd.log
Na koniec dodajemy jeszcze do pliku `rc.conf` poniższą
zmienną w celu uaktywnienia ClamAV i narzędzia do
automatycznej aktualizacji bazy wirusów:
--- rc.conf ---
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
--- end of rc.conf ---
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;
# 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:
# Definiujemy tutaj nazwy wirusów, które fałszują nagłówki pocztowe. Można z tego korzystać
# przy wysyłaniu powiadomien. Dla wymienionych wirusów powiadomienia nie zostaną wysłane:
$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',
);
# Pliki, które są tutaj wyszczególnione nie zostaną przepuszczone dalej:
$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 {}
", '/var/amavis/clamd'],
qr/OK$/, qr/FOUND$/,
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.
Rozdział ten poświęcony jest głównie tematom 'Aliasy i
mapowania' oraz 'Wirtualne domeny'. Przedstawię w nim podstawy
posługiwania się wyżej wymienionymi możliwościami, które
posiada Postfix. O czym należy pamiętać przy modyfikacjach
plików konfiguracyjnych naszego MTA? Otóż, po każdej
wprowadzonej zmianie musimy zrestartować nasz serwer poczty,
używając do tego komendy opisanej już wyżej:
# /usr/local/etc/rc.d/postfix.sh reload
Z kolei w celu zaktualizowania lub utowrzenia bazy danych
posłużymy się narzędziem `postmap`, dla przykładu, po
dokonaniu zmian w pliku, który zawiera wpisy dla wirtualnych
domen dla naszego serwera, wydajemy polecenie:
# postmap /etc/postfix/virtual
Czym jest alias? Jest to poprostu dodatkowa nazwa dla
twojej skrzynki pocztowej. Czyli mówiąc krócej, możesz
posiadać 2 lub więcej różne adresy e-mail, a mimo to, pocztę
odbierzesz z jednego konta. Weźmy taki przykład: Ostatnio
coraz bardziej popularne stały się adresy typu:
`tomek.stala@domena.pl`, więc chcemy aby poczta wysłana
właśnie na taki adres trafiała na konto `tomek` istniejące juz
na naszym serwerze. Plik odpowiedzialny za listę aliasów jest
zdefiniowany w zmiennych `alias_maps` i `alias_database`.
Powracając do naszego przykładu, w pliku o nazwie `aliases`
(którego nazwę i ścieżkę zdefiniowaliśmy w opisanych zmiennych
w pliku `main.cf`), dodajemy nowy alias. Wpisów dokonujemy w
następuący sposób - (najpierw wpisujemy nazwę aliasa,
następnie piszemy dwukropek, oddzielamy spacją lub tabulatorem
i wpisujemy nazwę użytkownika, którego konto znajduje się już
w naszym systmie). Oto przykład - edytujemy wymieniony przeze
mnie plik i wstawiamy do niego poniższe linijki:
# vi /etc/postfix/aliases
--- aliases ---
tomek.stala: tomek
administrator: root, tomek
tomus: tomek@jakisadresemail.pl
--- end of aliases ---
Analogicznie rozważając powyższy przykład możemy się
domyślić, że poczta wysłana na adres `administrator@domena.pl`
trafi na konta utworzone już w systemie, tj. konto `root` oraz
konto `tomek`. W celu zaktualizowania bazy aliasów wydajemy
poniższe polecenie i restartujemy nasz serwer MTA. Po wpisaniu
tych poleceń sprawdzamy, czy wszystko działa. Wysyłamy
wiadomości na konta, które są aliasami. Jeśli otrzymamy
pocztę, znaczy to, że wszystko działa:
# newaliases
# /usr/local/etc/postfix.sh reload
Jedną z możliwości Postfix'a jest zmiana nazwy użytkownika
i nazwy domeny dla poczty wychodzącej. Przydaje się to np.
wtedy, gdy chcemy mieć podczas wysyłania poczty adres e-mail
zamiast `tomek@domena.pl` , przykładowo adres
`tomek.stala@domena.pl`. Krótko mówiąc działa to podobnie jak
w przypadku aliasów, lecz w odwrotną stronę. W tym celu edycji
poddajemy plik `canonical`, który powinien znajdować się w
katalogu z wszystkimi innymi plikami konfiguracyjnymi
Postifx'a, jeśli go tam nie ma, możesz utworzyć ten plik.
Wpisów dokonujemy w następujący sposób - (najpierw wpisujemy
nazwę użytkownika, następnie oddzielamy spacją lub tabulatorem
i wpisujemy zmienioną nazwę, która będzie wyświetlana przed
tzw. małpą `@` w naszym adresie e-mail. Prawda, że proste?
# vi /etc/postfix/canonical
--- canonical ---
tomek tomek.stala
--- end of canonical ---
Na koniec edytujemy jeszcze plik `main.cf`, w którym
definiujemy ścieżkę do pliku `canonical` dodając do niego
poniższą linię:
# vi /etc/postfix/main.cf
--- main.cf ---
sender_canonical_maps = hash:/etc/postfix/canonical
--- end of main.cf ---
Tworzymy bazę dla pliku `canonical` i restartujemy
Postfix'a.
# postmap /etc/postfix/canonical
# /usr/local/etc/postfix.sh reload
Wirtualne domeny, inaczej nazywane też wirtualnymi kontami
są to poprostu nowe nazwy domen dla naszych skrzynek
pocztowych. Postfix umożliwia korzystanie z wirtualnych domen
na dwa sposoby. Pierwszym z tych sposobów jest styl przyjęty z
sendmaila, który różni się od stylu przyjętego w Postfix'ie
tym, że przykładowo: Domeną podstawową dla naszego serwera
jest `domena.pl`, gdy zostanie utworzona nowa wirtualna domena
np. `domena2.pl`, to użytkownicy, którzy posiadają konto na
naszym serwerze (np. `tomek@domena.pl`) automatycznie dostają
nowy adres e-mail, w postaci (np. `tomek@domena2.pl`),a poczta
wysłana na drugi adres, zostanie przekierowana na adres
pierwszy. Rozdział ten podzieliłem na dwa podrozdziały, w
których opiszę dodanie konta wirtualnego za pomocą tych dwóch
stylów.W obydwu przypadkach niezbędne jest dodanie zmiennej do
pliku `main.cf`, która będzie definiowała ścieżkę do pliku, w
którym będziemy dopisywać nowe wirtualne konta/domeny.
Edytujmy więc ten plik i dodajmy do niego poniższą linijkę:
# vi /etc/postfix/main.cf
--- main.cf ---
virtual_maps = hash:/etc/postfix/virtual
--- end of main.cf ---
- Wirtualne domeny w stylu Postfix'a:
Zacznijmy od opisania drugiego ze stylów, czyli tego jak
w temacie. Dodanie wirtualnej domeny jest bardzo prostę,
mianowicie wystarczy tylko zainteresować się plikiem
`virutal`, w którym będziemy dokonywać zmian. Dla przykładu
naszą domeną wirtualną, którą chcemy utworzyć będzie
`domena2.pl`. Edytujemy teraz plik odpowiedzialny za nasze
wirtualne domeny i konta i wpisujemy do niego poniższą
linijkę. Uwaga! W pliku `main.cf` nic innego nie dopisujemy.
Jeśli jednak w tym pliku w zmiennej `$mydestination`
wpisaliśmy nazwę domeny, którą chcemy utworzyć jako
wirtualną w stylu Postfix'a, edytujemy go i kasujemy wpis
dotyczący właśnie tej domenie. Jeżeli tego nie zrobisz,
będzie to równoznaczne z tym, że chcesz utworzyć domenę
wirtualną w stylu sendmaila (o tym poniżej):
--- virtual ---
domena2.pl druga_domena
tomek@domena2.pl tomek
tomus@domena2.pl tomek
root@domena2.pl root
--- end of virtual ---
Teraz wyjaśnienie. Jak nie trudno się domyślić pierwsza w
pierwszej linijce definiujemy nazwę domeny, która będzie
domeną wirtualną, a wyraz `druga_domena` jest to dowolny
opis, który możemy przyporządkować naszej domenie. Może
tutaj znajdować się dowolny ciąg znaków. Linie kolejne to
już definiowanie użytkowników/kont wirtualnych. Sposób w
jaki dodajemy nowego wirtualnego użytkownika, jest bardzo
prosty. Otóż, najpierw podajemy jego nazwę i po znaku `@`
nazwę naszej zdefiniowanej wcześniej domeny. Następnie po
oddzieleniu spacją lub tabulatorem wpisujemy nazwę
użytkownika, który istnieje już w systemie. Dla bliższego
wyjaśnienia podam, że konto `tomus@domena2.pl` jest kontem
wirtualnym utworzonym w stylu Postfix'a, dzięki czemu poczta
wysłana właśnie na ten adres nie będzie przychodzić na adres
naszej podstawowej domeny (np. tomek@domena.pl).
- Wirtualne domeny w stylu sendmail'a:
Jak już wspomniałem wcześniej, w tym przypadku
interesujemy się dwoma plikami. Pierwszy z nich to
oczywiście plik o nazwie `virtual`, a drugi to plik
konfiguracyjny naszego MTA - `main.cf`. W tym drugim
odnajdujemy zmienną `$mydestination`, w której dopisujemy po
przecinku nazwy domen wirtualnych, na które będzie
akceptowana poczta przychodząca. Zmienna ta może
przedstawiać się następująco:
--- main.cf ---
mydestination = $myhostname, domena2.pl, inna_domena.pl
--- end of main.cf ---
Gdy dokonamy stosownych zmian w pliku `main.cf`, możemy
przejść do edycji drugiego, czyli pliku `virtual`,
odpowiedzialnego za nazwy wirtualnych kont/użytkowników.
Jego zawartość w przypadku wirtualnych domen w stylu
sendmaila, powinna przedstawiać się następująco:
--- virtual ---
tomek@domena2.pl tomek
tomus@domena2.pl tomek
root@domena2.pl root
--- end of virtual ---
Nie będe wyjaśniał skąd to się wzięło, ponieważ zrobiłem
już to w poprzednim podrozdziale. Dodam jedynie, że zniknęła
linia, która w przypadku drugiego ze styli definiowała nazwę
domeny. Rezygnujemy z niej, ponieważ my nazwę domeny
zdefiniowaliśmy w innym pliku - `main.cf`.
Osobiście preferuję dodawanie wirtualnych kont/domen w
pierwszym opisanym przeze mnie stylu, czyli w stylu Postfix'a.
Jednak końcowy wybór pozostawiam Tobie.
Dokument nie zawiera opisu wszystkich możliwości Postfix'a,
jedynie te najważniejsze, które powinny ułatwić początkującemu
administratorowi systemu zapoznanie się z tym serwerem MTA.
Mogę powiedzieć, że pewnie zawiera on kilka błędów, które
wynikają z tego, że artykuł ten był pisany "na kolanie", czyli
w wolnych chwilach spędzonych przy komputerze. Za co z góry
przepraszam. Wszelkie sugestie dotyczące poprawek, pytań do
tego tekstu proszę kierować na mój adres email. Postaram się
szybko nanieść do niego poprawki. Jeśli czujesz niedosyt, po
przeczytaniu tego artykułu polecam jak zwykle zajrzeć do
dokumentacji, w która jest dość obszerna i na pewno znajdziesz
odpowiedź na nurtujące Cię pytanie. Niniejszy artykuł dedykuję
mojej Wspaniałej i Kochanej Anusi! Oryginalna oraz najnowsza
wersja tego artykułu znajduje się na stronie http://zso.tbg.net.pl/~tomek/postfix_howto.html.
Jeśli chcesz umieścić ten artykuł na swojej stronie,
skontaktuj się ze mną poprzez e-mail - tomek(at)zso.tbg.net.pl,
podając w nim adres strony, na której będzie się on znajdował.
Jedynym ważnym warunkiem, jaki musisz spełnić, jest
zamieszczenie tego dokumentu w całości (ma on być zgodny z
oryginałem), oraz w miarę możliwości jego aktualizacja, po
ukazaniu się najnowszej jego wersji w sieci.
$Id: postfix_howto.html,v 1.2 2004/06/26 19:12:43 tomek Exp $