Jest sporo poradników w polskojęzycznym Internecie, w jaki sposób skonfigurować serwer Postfix z przyległościami. Zebrałem tu te informacje, poskracałem i dołożyłem trochę od siebie. Podstawą, czyli serwerem SMTP będzie, oczywiście postfix, protokoły POP/IMAP będzie obsługiwał Dovecot, do kompletu dojdzie obsługa szfrowania i uwierzytelniania (TLS i SASL), a także antyspam i antywirus. Wszystko było testowane na Ubuntu 12.04 LTS
Instalacja oprogramowania
Naszybciej wszystko zainstaluje się z konsoli, za pomocą jednego polecenia:
sudo apt-get install -y postfix dovecot-postfix libsasl2-2 sasl2-bin postgrey
Zależności apt-get rozwiąże automatycznie.
Konfiguracja uwierzytelnienia via SASL
Usługa SASL musi uruchamiać się z prawami postfix’a, należy wykonać:
mkdir -p /var/spool/postfix/var/run/saslauthd rm -rf /var/run/saslauthd
a w pliku /etc/defaults/saslauthd
zmienić wartość parametru START
z „No” na „Yes” oraz dodać:
PWDIR="/var/spool/postfix/var/run/saslauthd" PARAMS="-m ${PWDIR}" PIDFILE="${PWDIR}/saslauthd.pid" MECHANISMS="pam"
a następnie utworzyć plik /etc/postfix/sasl/smtpd.conf
z następującą zawartością:
pwcheck_method: saslauthd mech_list: plain login
oraz wykonać polecenie:
dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
aby demon saslauthd
uruchamiał się również z odpowiednimi prawami dostępu do informacji nt. użytkowników (loginy i hasła).
Generowanie certyfikatu do szyfrowania SSL/TLS
Przed konfiguracją szyfrowania należy wygenerować zestaw klucz/certyfikat dla postfix-a za pomocą biblioteki openssl, zestawem poleceniem:
touch /etc/ssl/private/postfix.key chmod 600 /etc/ssl/private/postfix.key openssl genrsa 2048 > /etc/ssl/private/postfix.key openssl req -new -key /etc/ssl/private/postfix.key -x509 -days 730 -out /etc/ssl/certs/postfix.crt openssl req -new -x509 -extensions v3_ca -keyout /etc/ssl/private/postfix_ca_key.pem -out /etc/ssl/certs/postfix_ca_cert.pem
co wygeneruje klucz RSA o długości 2048 bitów, oraz certyfikat X.509 ważny 730 dni.
Dla dovecot-a należy wykonać polecenie:
openssl req -new -x509 -keyout /etc/ssl/private/dovecot_key.pem -out /etc/ssl/certs/dovecot_cert.pem
Konfiguracja serwera SMTP
Ustawienia postfixa są z reguły zgrupowane w katalogu
/etc/postfix
, głównym plikiem konfiguracyjnym jest /etc/postfix/main.cf
, oprócz niego w tym katalogu znajduje się jeszcze plik master.cf
, zawierający ustawienia poszczególnych usług postfixa. Po każdej zmianie pliku konfiguracyjnego należy postfix-a zrestartować poleceniem /etc/init.d/postfix restart
lub postfix reload
, aby program zaczął działać z nowymi ustawieniami.
Na początek ustawienia domeny i sieci:
mydomain = prvmail.pl myhostname = greenhole.$mydomain myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) append_dot_mydomain = no inet_interfaces = 192.168.200.9, 127.0.0.1
Dalej szyfrowanie i uwierzytelnianie:
smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_auth_only = no smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/ssl/postfix.key smtpd_tls_cert_file = /etc/ssl/postfix.crt smtpd_tls_CAfile = /etc/ssl/certs/postfix_ca_cert.pem smtpd_tls_loglevel = 3 smtpd_tls_received_header = yes tls_random_source = dev:/dev/urandom smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = no smtpd_sasl_security_options = noanonymous
Definiujemy format, w jakim będzie przechowywana poczta (jestem zwolennikiem formatu maildir):
home_mailbox = Maildir/
Ścieżki do bazy z aliasami (po każdej zmianie trzeba wykonać postalias /etc/aliases
):
alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases
I ustawiamy restrykcje, żeby postfix nie łapał wszystkiego, jak leci:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client dynamic.rbl.tld, reject_rhsbl_recipient revdns.rbl.tld, reject_rhsbl_helo revdns.rbl.tld, reject_unknown_recipient_domain, reject_unauth_pipelining, check_policy_service inet:127.0.0.1:60000, permit
W powyższej sekcji możemy blokować niechciane wiadomości z serwerów zgłoszonych jako spamerskie czy nieprawidłowo się przedstawiające (listy RBL, reject_rbl_client
), czy podłączyć wtyczkę od greylistingu (za pomocą check_policy_service
).
Konfiguracja Dovecot-a
Ustawienia serwera POP3/IMAP znajdują się adekwatnie w
/etc/dovecot/dovecot.conf
, a po każdej zmianie ustawień usługę trzeba przeładować za pomocą /etc/init.d/dovecot restart.
W przypadku Dovecot-a nie ma zbyt wiele do ustawiania, ale:
protocols = imap imaps pop3 pop3s
jeśli ktoś chce okroić dostępne protokoły(pokazałem ustawienia domyślne, z pełnym zestawem);
ssl_cert_file = /etc/ssl/certs/dovecot_cert.pem ssl_key_file = /etc/ssl/private/dovecot_key.pem ssl_key_password = *******
ustawienia szyfrowania SSL.
I jeszcze jesli ktoś chce skonfigurować uwierzytelnianie via PAM:
mechanisms = plain passdb pam { ... } userdb passwd { ... } user = root
podaję jedynie miejsca konfiguracji, bo zazwyczaj ruszać tego nie ma potrzeby.
Konfiguracja antywirusa i antyspamu
Nawet w przypadku małego serwera poczty i małego ruchu, warto podpiąć antywirusa i dodatkową ochronę przed spamem. Ja użyłem Amavis-New/ClamAV oraz Spamassassina. Żeby je zainstalować:
apt-get install amavisd-new spamassassin clamav-daemon libnet-dns-perl libmail-spf-query-perl pyzor razor arj bzip2 cabextract cpio file gzip lha nomarch pax rar unrar unzip zip zoo
w ten sposób oprócz samych usług będziemy mieli skanowanie plików skompresowanych.
Pliki konfiguracyjne demona clamav znajduja się w katalogu /etc/clamav
. Żeby antywirus działał prawidłowo, trzeba dodać użytkownika clamav
do grupy amavis
(i na odwrót):
adduser clamav amavis adduser amavis clamav
W celu aktywacji demona spamassassin
, w pliku /etc/default/spamassassin
zmieniamy wartość parametru ENABLED z „0” na „1”, i teraz do uruchomienia spamassiassina wystarczy wydac polecenie /etc/init.d/spamassassin start
.
Żeby Amavis-New działał prawidłowo, plik /etc/amavis/conf.d/15-content_filter_mod
doprowadzamy do poniższego stanu:
use strict; # You can modify this file to re-enable SPAM checking through spamassassin # and to re-enable antivirus checking. # # Default antivirus checking mode # Uncomment the two lines below to enable it # @bypass_virus_checks_maps = (%bypass_virus_checks, \@bypass_virus_checks_acl,$bypass_virus_checks_re); # # Default SPAM checking mode # Uncomment the two lines below to enable it # @bypass_spam_checks_maps = (%bypass_spam_checks, \@bypass_spam_checks_acl,$bypass_spam_checks_re);1; # insure a defined return
ponieważ parametry domyślnie sa zakomentowane. Następnie w pliku /etc/amavis/conf.d/20-debian_default
zmieniamy wartość parametru $final_spam_destiny
z D_BOUNCE na D_DISCARD i restartujemy demona Amavis.
Aby w pełni wszystko zintegrować, dodajemy jeszcze wpis w /etc/postfix/main.cf
:
content_filter = smtp-amavis:[127.0.0.1]:10024,
oraz na końcu pliku /etc/postfix/master.cf:
smtp-amavis unix - - - - 2 smtp -o smtp\_data\_done\_timeout=1200 -o smtp\_send\_xforward\_command=yes -o disable\_dns\_lookups=yes -o max\_use=20 127.0.0.1:10025 inet n - - - - smtpd -o content\_filter= -o local\_recipient\_maps= -o relay\_recipient\_maps= -o smtpd\_restriction\_classes= -o smtpd\_delay\_reject=no -o smtpd\_client\_restrictions=permit\_mynetworks,reject -o smtpd\_helo\_restrictions= -o smtpd\_sender\_restrictions= -o smtpd\_recipient\_restrictions=permit\_mynetworks,reject -o smtpd\_data\_restrictions=reject\_unauth\_pipelining -o smtpd\_end\_of\_data\_restrictions= -o mynetworks=127.0.0.0/8 -o smtpd\_error\_sleep\_time=0 -o smtpd\_soft\_error\_limit=1001 -o smtpd\_hard\_error\_limit=1000 -o smtpd\_client\_connection\_count\_limit=0 -o smtpd\_client\_connection\_rate\_limit=0 -o receive\_override\_options=no\_header\_body\_checks,no\_unknown\_recipient\_checks
i jeszcze w /etc/postfix/master.cf
, ale tuż poniże zapisu dot. usługi transportu:
-o content_filter= -o receive_override_options=no_header_body_checks
A na koniec restartujemy postfix-a.
Czy działa Amavis, możemy sprawdzic za pomocą telnetu, łącząc się z localhost-em na porcie 10024/TCP. Prawidłowy efekt powinien wygladać mniej więcej tak:
telnet localhost 10024 Trying 127.0.0.1... Connected to localhost. Escape character is ’^]’. 220 [127.0.0.1] ESMTP amavisd-new service ready ^]
I teraz wszystko powinno działać 🙂 Jest to oczywiście bardzo podstawowa konfiguracja – możliwości Postfix-a są znacznie większe.
Źródła:
dokumentacja Postfix-a
dokumentacja Ubuntu nt. Postfix-a
dokumentacja Ubuntu nt. Dovecot-a
dokumentacja Ubuntu nt. konfiguracji Amavis New z Postfix-em