Własny serwer pocztowy – Postfix, Dovecot i SSL

Czas czytania: 11 minut

Każda profesjonalna strona internetowa, każdy profesjonalny blog powinien posiadać adres e-mailowy, który służy np.: do kontaktu z czytelnikami, czy do wysyłania newslettera. Adres taki powinien znajdować się w domenie takiej samej jak strona internetowa, której on dotyczy. Zauważ, że niemal każda firma nie korzysta z adresów pokroju @gmail.com czy @hotmail.com. Zamiast tego posiadają adresy w formacie xxx@firma.pl Moja strona do tej pory korzystała z aliasu w domenie @outlook.com (kojarzycie pewnie, że to jest poczta od firmy Microsoft). Postanowiłem to zmienić. Skoro mam domenę kompikownia.pl, to adres emailowy również powinien znajdować się w tej domenie!

Aby dokonać takiego czynu, wymagane do spełnienia są tylko dwa warunki, z czego jeden jest kluczowy:

  • posiadanie domeny (kluczowy)
  • serwer VPS

Jeśli możesz sobie pozwolić na comiesięczne opłacanie abonamentu, możesz skorzystać np.: z usługi Gmail dla Firm, która pozwala bezproblemowo podłączyć własną domenę do gmailowej skrzynki. Wtedy nie musisz posiadać w ogóle własnego serwera – wszystko załatwi Gmail. Ja nie mam (jeszcze) firmy, ani tym bardziej funduszy na opłacanie abonamentu. Postawię więc serwer poczty na swoim serwerze VPS. Pokażę wam krok po kroku, jak takie cudo skonfigurować na systemie operacyjnym Debian Stretch.

Jakie oprogramowanie będzie nam potrzebne?

Naszym głównym celem w tym artykule będzie skonfigurowanie trzech aplikacji:

  • Postfix – serwer poczty elektronicznej,. Zaimplementujemy za jego pomocą protokół SMTP, który będzie służył do wysyłania poczty.
  • Dovecot – serwer IMAP. Dzięki niemu my (a także ewentualnie użytkownicy, którym stworzymy skrzynki) będą mogli przeglądać przesłaną do nich korespondencję.
  • MySQL – baza danych, w której będziemy przechowywali informacje o założonych kontach emailowych.

Instalacja niezbędnych pakietów

Zanim zaczniemy jakąkolwiek konfigurację, najpierw musimy zainstalować wszystkie niezbędne pakiety. Nie przeraź się – jest ich kilka.

sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql mysql-server

Podczas instalacji pojawi się okienko, w którym musimy wybrać rodzaj wstępnej konfiguracji.

Chcemy wyprowadzić nasz serwer poczty na świat. Powinniśmy więc wybrać opcję Internet site.

Następnym krokiem będzie wprowadzenie nazwy domeny, pod którą będzie widoczny nasz serwer.

W naszym wypadku będzie to oczywiście kompikownia.pl.

Na tym kończy się proces instalacji pakietów. Rozpoczyna za to proces konfiguracji.

MySQL – podstawowa konfiguracja dla Postfix i Dovecot

W bazie danych MySQL przechowywani będą tzw. virtual users. Czyli po prostu użytkownicy naszej poczty wraz z przypisanymi do nich emailami i hasłami.

Pierwszym krokiem będzie utworzenie konta użytkownika, za pomocą którego serwer email będzie łączył się z bazą danych. Najpierw logujemy się do bazy danych.

sudo mysql -u root -p

Następnie tworzymy nową bazę, w której będziemy przechowywali informacje.

CREATE DATABASE mailserver

Tworzymy konto użytkownika, za pomocą którego serwer pocztowy będzie łączył się z bazą danych. (Zamiast mailuserpass wstawiasz swoje hasło)

GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'mailuserpass';

Następnie powinniśmy „odświeżyć przywileje”. Dzięki temu MySQL załaduje sobie nowych użytkowników do pamięci nie wymagając restartu całego serwera.

FLUSH PRIVILEGES;

MySQL – tworzenie niezbędnych tabelek dla Postfix i Dovecot

Przełączamy się do stworzonej na samym początku bazy.

USE mailserver;

Kolejnym krokiem który wykonamy jest utworzenie odpowiednich tabelek. Pierwsza z nich będzie przechowywała domeny, w ramach których użytkownicy będą posiadali adresy email.

CREATE TABLE `virtual_domains` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kolejna tabela będzie przechowywała wszystkie adresy email i hasła zarejestrowane w naszym serwerze poczty.

CREATE TABLE `virtual_users` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `domain_id` INT(11) NOT NULL,
  `password` VARCHAR(106) NOT NULL,
  `email` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ostatnia tabela, którą stworzymy będzie przechowywała aliasy (wiadomości wysłane na alias zostaną przekierowane do skrzynki przypisanej do tego aliasu).

CREATE TABLE `virtual_aliases` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `domain_id` INT(11) NOT NULL,
  `source` VARCHAR(100) NOT NULL,
  `destination` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySQL – stworzenie przykładowych kont testowych

Będziemy chcieli w przyszłości jakoś przetestować nasz serwer poczty, prawda? Skoro tak, to stwórzmy jakieś konta testowe.

W tabelce virtual_domains, będziemy mieli tylko jedną domenę: kompikownia.pl

INSERT INTO `virtual_domains` (`id`, `name`) VALUES ('1','kompikownia.pl');

Teraz zajmijmy się kolejną tabelką: virtual_users. Utwórzmy sobie dwa przykładowe konta użytkowników.

INSERT INTO `virtual_users`
  (`id`, `domain_id`, `password` , `email`)
VALUES
  ('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@kompikownia.pl'),
  ('2', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@kompikownia.pl');

Co ciekawego widzisz w powyższym przykładzie? Hasła w naszej bazie będą kodowane z użyciem algorytmu SHA512. Zabezpiecza to naszych użytkowników w wypadku, gdyby baza wyciekła. Zastąp oczywiście ciągi password jakimiś własnymi hasłami 🙂

Utworzymy sobie też alias w tabelce virtual_aliases, dzięki czemu przetestujemy działanie tego mechanizmu.

INSERT INTO `virtual_aliases` (`id`, `domain_id`, `source`, `destination`)
VALUES ('1', '1', 'alias@kompikownia.pl', 'email1Wkompikownia.pl');

Konfiguracja Postfix

Skoro stworzyliśmy już tabelki, z których będzie korzystał nasz serwer pocztowy Postfix, pora zabrać się za konfigurację samego serwera poczty.

Głównym plikiem konfiguracyjnym jest plik main.cf. Dobrze wykonać jego kopię zapasową zanim zaczniemy cokolwiek robić.

sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Postfix – main.cf

Teraz pokażę ci przykładową konfigurację:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/kompikownia.pl/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/kompikownia.pl/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtpd_tls_security_level = ecnrypt
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous

# Authentication
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

# Restrictions
smtpd_helo_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unlisted_recipient,
        reject_unauth_destination
smtpd_sender_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_sender,
        reject_unknown_sender_domain
smtpd_relay_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        defer_unauth_destination

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = Blog-Server
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydomain = kompikownia.pl
myorigin = $mydomain
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

# Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

# Virtual domains, users, and aliases
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
        mysql:/etc/postfix/mysql-virtual-email2email.cf

# Even more Restrictions and MTA params
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
#smtpd_etrn_restrictions = reject
#smtpd_reject_unlisted_sender = yes
#smtpd_reject_unlisted_recipient = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtp_always_send_ehlo = yes
#smtpd_hard_error_limit = 1
smtpd_timeout = 30s
smtp_helo_timeout = 15s
smtp_rcpt_timeout = 15s
smtpd_recipient_limit = 40
minimal_backoff_time = 180s
maximal_backoff_time = 3h

# Reply Rejection Codes
invalid_hostname_reject_code = 550
non_fqdn_reject_code = 550
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
unverified_recipient_reject_code = 550
unverified_sender_reject_code = 550

Nie będę jej omawiał bardzo szczegółowo, gdyż opis wszystkich opcji możesz znaleźć w dokumentacji serwera Postfix. Zauważmy, że opcje oznaczone początkiem smtpd, dotyczą konfiguracji serwera SMTP odbierającego pocztę od innych serwerów (sytuacja: ktoś wysyła email na adres w naszej domenie). Natomiast opcje z prefiksem smtp dotyczą wysyłania emaili (sytuacja: ktoś z adresu @kompikownia.pl wysyła email w świat, np.: na @outlook.com) Zwróćmy uwagę na kilka najważniejszych opcji.

  • smtpd_tls_cert_file (20 linijka) – ścieżka do certyfikatu, który będzie używany do szyfrowania komunikacji klienta z serwerem poczty
  • smtpd_tls_key_file (21 linijka) – ścieżka do klucza prywatnego, który będzie używany do szyfrowania komunikacji.
  • smtpd_tls_security_level (24 linijka) – parametr encrypt wymusza połączenie szyfrowane. Dzięki temu nie będzie ryzyka, że komunikacja pomiędzy serwerem poczty a klientem zostanie podsłuchana.
  • myhostname (63 linijka) – nazwa serwera poczty
  • mydomain (66 linijka) – nazwa domeny, w której pracuje serwer poczty
  • virtual_mailbox_domains (80 linijka) – rodzaj bazy oraz ścieżka do pliku zawierającego konfigurację wirtualnych domen
  • virtual_mailbox_maps (81 linijka) – rodzaj bazy oraz ścieżka do pliku zawierającego konfigurację mapowania wirtualnych skrzynek
  • virtual_alias_maps (82 linijka) – rodzaj bazy oraz ścieżka do pliku zawierającego mapowanie wirtualnych aliasów.

Postfix – pliki mapowania

Zmodyfikowaliśmy już w odpowiedni sposób plik main.cf. Teraz pora na stworzenie dodatkowych plików konfiguracyjnych mówiących serwerowi Postfix o tym, jak ma się łączyć z bazą danych. Ścieżkę do nich wskazywaliśmy w pliku main.cf.

/etc/postfix/mysql-virtual-mailbox-domains.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

/etc/postfix/mysql-virtual-mailbox-maps.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

/etc/postfix/mysql-virtual-alias-maps.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'

/etc/postfix/mysql-virtual-email2email.cf

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM virtual_users WHERE email='%s'

Testowanie serwera Postfix

Skoro stworzyliśmy już MySQL`ową konfigurację, nadszedł czas aby ją przetestować. W jaki sposób możemy to uczynić? Istnieje takie narzędzie jak postmap, które pozwala w bardzo prosty sposób sprawdzić czy Postfix potrafi skonstruować prawidłowe zapytania do bazy danych.

Testowanie pliku /etc/postfix/mysql-virtual-mailbox-domains.cf

postmap -q kompikownia.pl mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Powyższym poleceniem sprawdzamy, czy Postfix potrafi sprawdzić czy dana domena jest zapisana w bazie danych. Pamiętasz, że dodawaliśmy do BD domenę kompikownia.pl? Dlatego dla powyższego polecenia wynik powinien być równy 1. Dla każdej innej domeny powyższe polecenie nie powinno nic zwrócić.

Testowanie pliku /etc/postfix/mysql-virtual-mailbox-maps.cf

Teraz sprawdzimy, czy Postfix potrafi wyciągnąć z bazy danych informację na temat konkretnego adresu email.

postmap -q email1@kompikownia.pl mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Dla powyższego zapytania wynik powinien być równy 1. Jeśli zapytamy o jakiś adres email, który nie istnieje w bazie danych, program nie powinien zwrócić nic.

Testowanie pliku /etc/postfix/mysql-virtual-alias-maps.cf

Teraz sprawdźmy, czy Postfix potrafi odczytać aliasy z bazy.

postmap -q alias@kompikownia.pl mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Powyższe zapytanie powinno zwrócić adres email, dla którego podany w poleceniu adres jest aliasem. W przeciwnym wypadku wyjście powinno być puste.

Konfiguracja master.cf

Postfix podczas swojej pracy tworzy wiele różnych procesów. W tle musi działać także program, który monitoruje ich pracę oraz decyduje o tym, kiedy te procesy utworzyć. Tzw. Postfix Master Program kontroluje, kiedy oraz jakie procesy oraz w jaki sposób uruchomić. Jego konfiguracja znajduje się w pliku master.cf.

Najpierw wykonajmy kopię zapasową tego pliku, na wypadek gdyby coś poszło nie tak.

cp /etc/postfix/master.cf /etc/postfix/master.cf.orig

Plik master.cf jest długi, a my będziemy modyfikowali jedynie jego część. Dlatego też poniżej wkleję tylko początek, który zmodyfikowaliśmy.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
submission inet n       -       y       -       -       smtpd
   -o syslog_name=postfix/submission
   -o smtpd_tls_security_level=encrypt
   -o smtpd_sasl_auth_enable=yes
   -o smtpd_sasl_type=dovecot
   -o smtpd_sasl_path=private/auth
   -o smtpd_reject_unlisted_recipient=no
   -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
   -o syslog_name=postfix/smtps
   -o smtpd_tls_wrappermode=yes
   -o smtpd_sasl_auth_enable=yes
   -o smtpd_sasl_auth_type=dovecot
   -o smtpd_sasl_path=private/auth
   -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
...

Jakie zmiany poczyniliśmy w stosunku do oryginalnego pliku?

  • odhashowaliśmy dużo linijek – od 16 do 23 oraz od 29 do 35. Dzięki temu podane opcje są brane pod uwagę przez program
  • powiedzieliśmy, że będziemy używać Dovecot – mówią o tym linijki 33 i 20. Domyślnie używana jest implementacja Cyrus SAS, dlatego jawnie musimy to zmienić.

Pozostała część pliku właściwie się nie zmieniła.

Po tym wszystkim zabezpieczamy dostęp do plików konfiguracyjnych Postfix. Powinien mieć do nich dostęp tylko właściciel oraz grupa właściciela.

chmod -R o-rwx /etc/postfix

Na samym końcu po raz kolejny restartujemy serwer Postfix.

systemctl restart postfix

Konfiguracja Dovecot

Dovecot udostępni nam protokół IMAP, za pomocą którego będziemy mogli zalogować się do skrzynki oraz sprawdzić jakie wiadomości zostały do nas dostarczone.

Najpierw standardowo wykonujemy kopię zapasową wszystkich plików, w których będziemy grzebali.

sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
sudo cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
sudo cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

Edycja pliku /etc/dovecot/dovecot.conf

W pliku tym poczynimy tylko jedną modyfikację. Powiemy serwerowi Dovecot, jakie protokoły są włączone.

# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.

Włączyliśmy protokoły IMAP i LMTP. Jak zauważyłeś, nasz serwer nie będzie wspierał POP3. Dlaczego? Ponieważ jest przestarzałe i mało kto go utrzymuje.

Edycja pliku /etc/dovecot/10-mail.conf

Ten plik konfiguracyjny opisuje, w jaki sposób Dovecot przeprowadza interakcję z systemem plików. Np.: w jaki sposób oraz gdzie przechowuje skrzynki pocztowe klientów.

Ten plik jest naprawdę bardzo duży i pozwala na szeroką personalizację. My zmodyfikujemy tylko dwie zmienne.

...
mail_location = maildir:/var/mail/vhosts/%d/%n/
...
mail_privileged_group = mail
...

Stwórzmy teraz katalog /var/mail/vhosts, o którym powiedzieliśmy serwerowi Dovecot w pliku konfiguracyjnym. Zamień oczywiście domenę kompikownia.pl na własną, jeśli przeprowadzasz konfigurację u siebie.

sudo mkdir -p /var/mail/vhosts/kompikownia.pl

Teraz stwórzmy użytkownika który będzie tym zarządzał:

sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/mail

Na samym końcu zmieńmy właściciela katalogu /var/mail/.

sudo chown -R vmail:vmail /var/mail

Konfiguracja pliku /etc/dovecot/conf.d/10-auth.conf

Teraz pora zmodyfikować plik, który odpowiada za autoryzację. Musimy w nim wyłączyć autoryzację plaintextem oraz poinformować, że należy wczytać konfigurację bazy danych. Wystarczy odhashować wspomniane niżej linie.

...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
!include auth-system.conf.ext
...
!include auth-sql.conf.ext
...

Konfiguracja pliku /etc/dovecot/conf.d/auth-sql.conf.ext

W tym pliku musimy zamienić „sterownik” który jest używany, z sql na static. Co za tym idzie, komentujemy sekcję userdb gdzie driver = sql, oraz kasujemy hashe przy sekcji userdb, gdzie driver=static.

...
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
...
#userdb {
#  driver = sql
#  args = /etc/dovecot/dovecot-sql.conf.ext
#}
...
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
...

Konfiguracja pliku /etc/dovecot/dovecot-sql.conf.ext

Teraz modyfikujemy plik /etc/dovecot/dovecot-sql.conf.ext Wpisz w nim dane dostępowe do wcześniej utworzonej bazy danych, takie jak rodzaj sterownika (mysql), nazwa bazy, użytkownik oraz hasło. Będziesz musiał podać również zapytanie, za pomocą którego Dovecot będzie mógł uzyskać hasła użytkowników. Wszystkie linijki, które należy zmienić znajdują się na listingu poniżej.

...
driver = mysql
...
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass
...
default_pass_scheme = SHA512-CRYPT
...
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
...

Konfiguracja pliku /etc/dovecot/conf.d/10-master.conf

Musimy przeprowadzić kilka modyfikacji w pliku 10-master.conf. Przede wszystkim – musimy wyłączyć nieszyfrowaną wersję protokołu IMAP. Robimy to w ten sposób, że odhashowujemy linijki dotyczące imap i imaps. Przy czym w przypadku protokołu imap ustawiamy port na 0.

...
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
  ...
}
...

Następnie musimy skonfigurować usługę lmtp. Prawidłowa konfiguracja pokazana jest na listingu poniżej:

...
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    #mode = 0666i
    mode = 0600
    user = postfix
    group = postfix
  }
...
}

Teraz musimy skonfigurować autoryzację. Znajdź sekcję auth i skonfiguruj ją tak jak na listingu poniżej.

...
service auth {
  ...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
...
  user = dovecot
}
...

Następnie powinniśmy poddać lekkiemu liftingowi sekcję auth-worker.

...
service auth-worker {
  ...
  user = vmail
}

Konfiguracja pliku /etc/dovecot/conf.d/10-ssl.conf

Plik 10-ssl.conf wskazuje serwerowi Dovecot, w którym miejscu znajdują się klusze SSL.

ssl = required
...
ssl_cert = </etc/letsencrypt/live/kompikownia.pl/fullchain.pem
ssl_key = </etc/letsencrypt/live/kompikownia.pl/privkey.pem

Restart

Wszystkie niezbędne zmiany zostały już wykonane. Pozostaje nam jedynie restart. Po wydaniu poniższego polecenia okaże się, czy wszystko działa prawidłowo 🙂

sudo systemctl restart dovecot

To już koniec konfiguracji 🙂 Nasz serwer poczty działa prawidłowo 🙂

Thunderbird – logowanie na konto pocztowe

Przetestujmy, czy możemy zalogować się na nasze konto 🙂 Skonfigurujmy prohram pocztowy Thunderbird.

Uruchamiamy program

Klikamy opcję Email w kategorii Set up an account. Pojawi nam się okienko:

Wpisujemy w nim login i hasło do konta email, które utworzyliśmy podczas konfiguracji. Klikamy Continue. Thunderbird spróbuje wykryć konfigurację automatycznie, ale nie uda mu się to.

Musimy wskazać opcje konfiguracji ręcznie, tak jak na powyższym screenie. Po tym klikamy przycisk Done.

Voila! Nasza skrzynka jest gotowa i może wysyłać i odbierać emaile!

Podsumowując

To był naprawdę dłuugi wpis. Cieszę się, jeśli dobrnąłeś do końca. Niestety, konfiguracja serwera poczty jest dosyć skomplikowana. To, co zrobiliśmy w tym artykule to jedynie wierzchołek góry lodowej. Tak skonfigurowany serwer wymaga trochę dodatkowej pracy. W tej chwili gdy wyślemy email do kogoś na Gmailu, to nasza wiadomośc najprawdopodobniej wleci do spamu. Co zrobić, żeby tak się nie działo? O tym będzie w przyszłości.

Jeśli podobał ci się ten artykuł, kliknij ten czerwony dzwonek po lewej. Włączysz wtedy powiadomienia co sprawi, że będziesz informowany o każdym nowym artykule. Polub także mój fanpage na Facebooku, na którym umieszczam wiele ciekawych rzeczy 🙂

Źródła

https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql/

3 komentarze do “Własny serwer pocztowy – Postfix, Dovecot i SSL

  1. Wojtek Odpowiedz

    W konfiguracji main.cf w linii 24 powinno byc:
    smtpd_tls_security_level = encrypt

    literowka 😉

  2. Leszek Odpowiedz

    W pliku /etc/dovecot/dovecot.conf powinien być ustawiony postmaster_address
    np postmaster_address=postmaster@localhost
    bez tego nie mogłem odbierać maili (wysyłanie działało).
    Oczywiście (?) moja domena nie mogła być wymieniona w mydestination jako wirtalna…

  3. yes2me Odpowiedz

    Mały błąd: „Edycja pliku /etc/dovecot/10-mail.conf” – zabrakło conf.d 🙂 Poza tym, dzięki!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.