Serwer poczty postfix na Ubuntu. Konfiguracja podstawowa.

  • by

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

PostfixUstawienia 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

DovecotUstawienia 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
d
okumentacja Ubuntu nt. Postfix-a

dokumentacja Ubuntu nt. Dovecot-a

dokumentacja Ubuntu nt. konfiguracji Amavis New z Postfix-em