Настройка MTA Postfix в связке с Dovecot


Настройка Dovecot

Для работы такого рода связки потребуется установить lmtp-модуль для Dovecot:

# aptitude install dovecot-lmtpd

И внести некоторые изменения в рассмотренную ранее конфигурацию Dovecot.

В файле 10-director.conf требуется добавить postmaster_address и mail_plugins:

protocol lmtp { 
 postmaster_address = reports@gita-dev.ru  # required 
 mail_plugins = quota sieve 
}

В файле 10-master.conf:

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

Настройка Postfix

Устанавливаем версию Postfix которая может работать в связке с базой данных Postgresql:

# aptitude install postfix-pgsql postfix

Конфигурация postfic main.cf получилась следующая:

relay_domains = 
virtual_alias_maps = proxy:pgsql:/etc/postfix/virtual_alias_maps.cf 
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/virtual_mailbox_domains.cf 
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/virtual_mailbox_maps.cf 
virtual_transport = lmtp:unix:private/dovecot-lmtp 
virtual_mailbox_limit = 512000000 
virtual_minimum_uid = 114 
virtual_uid_maps = static:114 
virtual_gid_maps = static:119 
local_transport = virtual 
local_recipient_maps = $virtual_mailbox_maps 
transport_maps = hash:/etc/postfix/transport 
smtpd_sasl_auth_enable = yes 
smtpd_sasl_type = dovecot 
smtpd_sasl_path = private/auth 
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options 
smtpd_tls_auth_only = yes 
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.gita-dev.ru/fullchain.pem 
smtpd_tls_key_file = /etc/letsencrypt/live/mail.gita-dev.ru/privkey.pem 
smtpd_sasl_local_domain = $mydomain 
broken_sasl_auth_clients = yes 
smtpd_tls_loglevel = 1 
html_directory = /usr/share/doc/postfix/html 
queue_directory = /var/spool/postfix 
mydestination = localhost

И соответственно запросы виртуальных алиасов.

Файл /etc/postfix/virtual_alias_maps.cf:

user = web_portal 
password = password
hosts = localhost 
dbname = web_portal_db 
query = SELECT login || '@' ||domain AS goto FROM core_mailaccount INNER JOIN core_maildomains ON (core_mailaccount.domain_id = core_maildomains.id) WHERE login || '@' || domain='%s';

Файл /etc/postfix/virtual_mailbox_domains.cf:

user = web_portal 
password = password
hosts = localhost 
dbname = web_portal_db 
query = SELECT domain FROM public.core_maildomains WHERE domain='%s'

Файл /etc/postfix/virtual_mailbox_maps.cf:

user = web_portal 
password = password 
hosts = localhost 
dbname = web_portal_db 
query = SELECT login || '@' ||domain AS maildir FROM core_mailaccount INNER JOIN core_maildomains ON (core_mailaccount.domain_id = core_maildomains.id) WHERE login || '@' || domain='%s';

Как вы видите ничего сложного нет.