Przejdź do treści

Własny serwer pocztowy – Postfix, Dovecot i SSL

    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/mailnamesmtpd_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 = 4hreadme_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 program 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.