Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdmin

Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdminВ этой статье я планирую выложить итоговый Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdmin, а также прокомментировать все ключевые параметры. Разумеется повторяться я не собираюсь и копировать обзор параметров из прошлых статей не буду. Эти статьи вы всегда сможете найти по тегу Postfix configuring.


Найти больше информации о Postfix вы можете в основной статье по его настройке — Настройка Postfix.


Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdmin

Первым делом, чтобы избежать неуместных вопросов в будущем, хочу обозначить версии пакетов, для которых актуальны озвученные в статье настройки:

postfix
Версия: 2.9.6-2
dovecot-core
Версия: 1:2.1.7-7+deb7u1
mysql-server
Версия: 5.5.49-0+deb7u1
postfixadmin
Версия: 2.3.5-2+deb7u1

Вскользь параметры основного конфига Postfixmain.cf — я рассмотрел в одной из начальных статей (а именно в Установка Postfix на Debian), но тогда я сделал акцент в сторону обособленного окружения MTA, то есть без связки с другими приложениями (например такими как Dovecot). Теперь же пришло время этот конфиг адаптировать для работы с Dovecot и MySQL.

Надо отметить, что частично я это сделал в предыдущих статьях:

Установка MySQL для Postfix и Настройка связки Postfix PostfixAdmin — настроил связку с MySQL для хранения всей служебной информации (учетные записи почтовых ящиков, алиасы пользователей и доменов, а также сами домены) в отдельной БД;

Виртуальные почтовые ящики Postfix — сконфигурировал Postfix для хранения всех почтовых данных виртуальных пользователей в отдельном каталоге под единственной системной учетной записью;

Связка Postfix и Dovecot — настроил Dovecot в качестве агента локальной доставки, а также использовал его реализацию SASL для аутентификации пользователей вместо Cyrus.

Тем не менее на этом работа не заканчивается и нужно довести дело до конца, сведя воедино все настройки и установив другие важные параметры. Этим и займемся ниже.

Хочу отметить, что у большинства параметров Postfix используются подходящие нам значения по умолчанию. Переопределять их большого смысла нет. Разве что вы можете этим параметрам задать жестко их же значения по умолчанию, защитив себя в будущем от возможных непредвиденных изменений дефолтных значений при обновлении пакета.

Пример:

queue_directory = /var/spool/postfix

Параметр queue_directory и так имеет значение по умолчанию /var/spool/postfix и в этом легко убедиться, выполнив команду:

postconf -d | grep queue_directory
queue_directory = /var/spool/postfix

Но возможно вы хотите подстраховаться и все же задать это значение жестко в конфиге. Это ваше право, очень многие реально так делают. Параметры с дефолтными значениями, которые уже и так подходят для моей конфигурации, я переопределять не буду. Учтите только, что параметров конфига main.cf у Postfix более 900 штук. Задавать выборочно какие-либо из них (на их же дефолтные значения), оставляя при этом другие как есть, не совсем логично.

Общие параметры

Итак, стоит начать с опций, которые в предыдущих статьях по связке Postfix с другими программами не фигурировали.

#common configuration
myhostname = mail.bissquit.com
mydomain = bissquit.com
myorigin = $mydomain
mydestination = localhost.$mydomain, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
#tls
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mailserver01.pem
smtpd_tls_key_file = /etc/ssl/private/mailserver01.pem
smtpd_tls_auth_only = yes
smtpd_tls_security_level = may
#restrictions
smtpd_client_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unknown_reverse_client_hostname
smtpd_helo_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated
smtpd_etrn_restrictions = 
 permit_mynetworks,
 reject 
smtpd_recipient_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination,
 reject_non_fqdn_recipient,
 reject_unknown_recipient_domain
smtpd_sender_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_sender,
 reject_unknown_sender_domain
smtpd_data_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_pipelining,
 reject_multi_recipient_bounce

А теперь обо всем подробнее и по порядку.

myhostname = mail.bissquit.com
mydomain = bissquit.com
myorigin = $mydomain
mydestination = localhost.$mydomain, localhost

myhostname 1 — определяет имя вашей почтовой системы. Это значение нужно задать явным образом, поскольку от него зависит множество других параметров. Если оно не задано, будет использоваться fqdn-имя вашего сервера (то есть команда hostname -f должна возвращать правильное имя). Не знаете какое имя поставить? — ставьте имя, на которое указывает mx-запись вашего домена.

mydomain 2 — имя основного домена вашей почтовой системы. Его также лучше задавать в явном виде, в виду большого количества зависимостей. Также переменная может быть получена отбрасыванием до первой точки с левой стороны имени хоста (myhostname был mail.bissquit.com, значит mydomain стал bissquit.com).

myorigin 3 — определяем имя домена по умолчанию, который будет иметь вся исходящая почта, у которой не задан домен отправителя. В принципе запись большого значения не играет, по умолчанию она равна переменной $myhostname. Тем не менее некоторое удобство она все же доставляет — например при отправке писем из консоли (удобно для тестированяи почты. Я использую обычную команду mail) у вас будет корректная запись исходящего домена.

mydestination 4 — вот тут надо быть внимательным, поскольку в значении этой переменной не должны быть заданы какие-либо используемые виртуальные домены. У меня как раз используется конфигурация с виртуальными доменами, а потому для запись не должна принимать значения $myhostname или $mydomain. Если виртуальных доменов нет, смело ставьте как минимум mydestination = $myhostname $mydomain.

Идем дальше:

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

alias_maps 5 и alias_database 6 — нужны для определения имен для локальной доставки писем. Я использую виртуальные почтовые ящики и локальная доставка мне в принципе не нужна, тем не менее на всякий случай параметры я оставил.

mynetworks = 127.0.0.0/8

mynetworks 7 — отвечает за список доверенных сетей. Если ваш сервер работает в локальной сети, а в интернет ходит через NAT, для вас вполне разумно добавить в этот список адреса вашей локалки. Это будет полезно, если локальные клиенты используют ваш почтовый сервер для пересылки сообщений.

mailbox_size_limit = 0

mailbox_size_limit 8 ограничивает максимальный размер файла почтового ящика. Если изменяете ограничение, то позаботьтесь о том, чтобы оно не было меньше значения message_size_limit. 0 — ограничения нет.

Следующая секция — TLS (настройки параметров TLS сервера SMTP):

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mailserver01.pem
smtpd_tls_key_file = /etc/ssl/private/mailserver01.pem
smtpd_tls_auth_only = yes
smtpd_tls_security_level = may

smtpd_use_tls 9 — активируем использование TLS. Удивительно, но по умолчанию этот параметр имеет значение no.

smtpd_tls_cert_file 10 и smtpd_tls_key_file 11 — пути к файлам сертификата и его ключа соответственно.

smtpd_tls_auth_only 12 — не допускаем использование SASL без TLS. Этот параметр я также упоминал в статье Связка Postfix и Dovecot, но тут о нем напомнить не помешает.

smtpd_tls_security_level 13 — обозначает политику использования TLS (none — не требует; may — позволяет, но не требует; encrypt — требует. Публичным серверам не рекомендуется выставлять значение encrypt в соответствии с RFC 2487).

В процессе настройки TLS, вам придется сгенерировать сертификат. Вот команда, позволяющая это сделать:

root@mail:/home/mailserveradmin# openssl req -newkey rsa:4096 -nodes -sha512 -x509 -days 3650 -nodes -out /etc/ssl/certs/mailserver01.pem -keyout /etc/ssl/private/mailserver01.pem

Сразу позаботьтесь о безопасности, правильно настроив разрешения на файл с частным ключом сертификата:

root@mail:/home/mailserveradmin# chmod 600 /etc/ssl/private/mailserver01.pem

Также хочу сказать пару слов об ограничениях (restrictions). Дело в том, что различных вариаций параметров в этой секции может быть огромное множество. Для начала вы можете оставить все как есть и ужесточать политики в том случае, если будет пролезать большое количество спама. Мне больше нравится такой вариант. Кому-то нравится подход с противоположной стороны — поставить жесткие политики и уже после анализа логов смотреть что можно упростить. Тут выбор за вами.

Описывать секцию restrictions дело очень хлопотное в виду разнообразия настроек, да и к тому же в документации все разжевано очень неплохо. Именно поэтому я позволю себе пропустить этот раздел.

Виртуальные почтовые ящики

Настройкой виртуальных пользователей я занимался в статье Виртуальные почтовые ящики Postfix и исходя из неё, в конфиг необходимо внести следующие строчки:

virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 5000
virtual_mailbox_base = /var/vmail

Обо всех параметрах я подробно рассказал в статье, там же вы найдете и команды для создания пользователя, группы, каталога и др. Переходим к следующей секции.

Виртуальные пользователи, домены, etc.

Дальше необходимо в конфиг добавить параметры, указывающие на mysql-карты с информацией о пользователях, алиасах и доменах. Про эти параметры я подробно рассказывал в статье Настройка связки Postfix PostfixAdmin, там же вы найдете и описание настройки PostfixAdmin.

virtual_mailbox_domains =
 proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
 proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

Не забудьте, что уже на этом этапе идет некоторая связка с Dovecot (шифрование паролей в базе PostfixAdmin).

Dovecot-LDA + Dovecot-SASL

Postfix позволяет использовать Dovecot в качестве агента локальной доставки и об этом я также говорил в одной из своих статей (Связка Postfix и Dovecot). Сделать это можно с минимумом настроек, добавив в конфиг main.cf следующие строчки:

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Не забудьте, что внести изменения нужно и в master.cf, это важный шаг:

dovecot unix - n n - - pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

Также Dovecot имеет собственную реализацию SASL (которую полностью поддерживает Postfix и о которой шла речь в Связка Postfix и Dovecot) и нет причин, по которой её не нужно использовать, поэтому смело добавляем в main.cf:

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous

Напоминаю, что опцию smtpd_tls_auth_only = yes я добавил в конфиг выше в описании общих параметров, а если быть более конкретным, то в секции TLS.

Итоговый конфиг main.cf

Собственно, вот он, вот он конфиг моей мечты! Итак, как подведение итогов, выкладываю полное содержание main.cf ниже.

#common configuration
myhostname = mail.bissquit.com
mydomain = bissquit.com
myorigin = $mydomain
mydestination = localhost.$mydomain, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0

#tls
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mailserver01.pem
smtpd_tls_key_file = /etc/ssl/private/mailserver01.pem
smtpd_tls_auth_only = yes
smtpd_tls_security_level = may

#virtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 5000
virtual_mailbox_base = /var/vmail
virtual_mailbox_domains =
 proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
 proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

#sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous

#restrictions
smtpd_client_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unknown_reverse_client_hostname
smtpd_helo_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated
smtpd_etrn_restrictions = 
 permit_mynetworks,
 reject 
smtpd_recipient_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination,
 reject_non_fqdn_recipient,
 reject_unknown_recipient_domain
smtpd_sender_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_non_fqdn_sender,
 reject_unknown_sender_domain
smtpd_data_restrictions = 
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_pipelining,
 reject_multi_recipient_bounce

Не забудьте про изменения в master.cf, о них я говорил выше. На этом все.

Вывод

Представленный выше конфиг актуален для версий пакетов, озвученных выше (см. начало статьи). В любых других случаях вероятнее всего придется адаптировать конфигурацию под себя.

Хочу отметить, что во время настройки Postfix я руководствовался соображениями минимального объема параметров конфигурации для достижения поставленной цели. Другими словами, у меня в конфиге указаны лишь те параметры, без которых обойтись ну никак не получится.  Все остальное на ваше усмотрение — меняйте, экспериментируйте.

comments powered by HyperComments