В этой статье я планирую выложить итоговый Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdmin, а также прокомментировать все ключевые параметры. Разумеется повторяться я не собираюсь и копировать обзор параметров из прошлых статей не буду. Эти статьи вы всегда сможете найти по тегу Postfix configuring.
Найти больше информации о Postfix вы можете в основной статье по его настройке – Настройка Postfix.
Содержание
Конфиг Postfix для связки с Dovecot, MySQL, PostfixAdmin
Первым делом, чтобы избежать неуместных вопросов в будущем, хочу обозначить версии пакетов, для которых актуальны озвученные в статье настройки:
1 2 3 4 5 6 7 8 |
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 |
Вскользь параметры основного конфига Postfix – main.cf – я рассмотрел в одной из начальных статей (а именно в Установка Postfix на Debian), но тогда я сделал акцент в сторону обособленного окружения MTA, то есть без связки с другими приложениями (например такими как Dovecot). Теперь же пришло время этот конфиг адаптировать для работы с Dovecot и MySQL.
Надо отметить, что частично я это сделал в предыдущих статьях:
Установка MySQL для Postfix и Настройка связки Postfix PostfixAdmin – настроил связку с MySQL для хранения всей служебной информации (учетные записи почтовых ящиков, алиасы пользователей и доменов, а также сами домены) в отдельной БД;
Виртуальные почтовые ящики Postfix – сконфигурировал Postfix для хранения всех почтовых данных виртуальных пользователей в отдельном каталоге под единственной системной учетной записью;
Связка Postfix и Dovecot – настроил Dovecot в качестве агента локальной доставки, а также использовал его реализацию SASL для аутентификации пользователей вместо Cyrus.
Тем не менее на этом работа не заканчивается и нужно довести дело до конца, сведя воедино все настройки и установив другие важные параметры. Этим и займемся ниже.
Хочу отметить, что у большинства параметров Postfix используются подходящие нам значения по умолчанию. Переопределять их большого смысла нет. Разве что вы можете этим параметрам задать жестко их же значения по умолчанию, защитив себя в будущем от возможных непредвиденных изменений дефолтных значений при обновлении пакета.
Пример:
1 |
queue_directory = /var/spool/postfix |
Параметр queue_directory и так имеет значение по умолчанию /var/spool/postfix и в этом легко убедиться, выполнив команду:
1 |
postconf -d | grep queue_directory |
1 |
queue_directory = /var/spool/postfix |
Но возможно вы хотите подстраховаться и все же задать это значение жестко в конфиге. Это ваше право, очень многие реально так делают. Параметры с дефолтными значениями, которые уже и так подходят для моей конфигурации, я переопределять не буду. Учтите только, что параметров конфига main.cf у Postfix более 900 штук. Задавать выборочно какие-либо из них (на их же дефолтные значения), оставляя при этом другие как есть, не совсем логично.
Общие параметры
Итак, стоит начать с опций, которые в предыдущих статьях по связке Postfix с другими программами не фигурировали.
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 |
#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 |
А теперь обо всем подробнее и по порядку.
1 2 3 4 |
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.
Идем дальше:
1 2 |
alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases |
alias_maps 5 и alias_database 6 – нужны для определения имен для локальной доставки писем. Я использую виртуальные почтовые ящики и локальная доставка мне в принципе не нужна, тем не менее на всякий случай параметры я оставил.
1 |
mynetworks = 127.0.0.0/8 |
mynetworks 7 – отвечает за список доверенных сетей. Если ваш сервер работает в локальной сети, а в интернет ходит через NAT, для вас вполне разумно добавить в этот список адреса вашей локалки. Это будет полезно, если локальные клиенты используют ваш почтовый сервер для пересылки сообщений.
1 |
mailbox_size_limit = 0 |
mailbox_size_limit 8 ограничивает максимальный размер файла почтового ящика. Если изменяете ограничение, то позаботьтесь о том, чтобы оно не было меньше значения message_size_limit. 0 – ограничения нет.
Следующая секция – TLS (настройки параметров TLS сервера SMTP):
1 2 3 4 5 |
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, вам придется сгенерировать сертификат. Вот команда, позволяющая это сделать:
1 |
openssl req -newkey rsa:4096 -nodes -sha512 -x509 -days 3650 -nodes -out /etc/ssl/certs/mailserver01.pem -keyout /etc/ssl/private/mailserver01.pem |
Сразу позаботьтесь о безопасности, правильно настроив разрешения на файл с частным ключом сертификата:
1 |
chmod 600 /etc/ssl/private/mailserver01.pem |
Также хочу сказать пару слов об ограничениях (restrictions). Дело в том, что различных вариаций параметров в этой секции может быть огромное множество. Для начала вы можете оставить все как есть и ужесточать политики в том случае, если будет пролезать большое количество спама. Мне больше нравится такой вариант. Кому-то нравится подход с противоположной стороны – поставить жесткие политики и уже после анализа логов смотреть что можно упростить. Тут выбор за вами.
Описывать секцию restrictions дело очень хлопотное в виду разнообразия настроек, да и к тому же в документации все разжевано очень неплохо. Именно поэтому я позволю себе пропустить этот раздел.
Виртуальные почтовые ящики
Настройкой виртуальных пользователей я занимался в статье Виртуальные почтовые ящики Postfix и исходя из неё, в конфиг необходимо внести следующие строчки:
1 2 3 4 |
virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_mailbox_base = /var/vmail |
Обо всех параметрах я подробно рассказал в статье, там же вы найдете и команды для создания пользователя, группы, каталога и др. Переходим к следующей секции.
Виртуальные пользователи, домены, etc.
Дальше необходимо в конфиг добавить параметры, указывающие на mysql-карты с информацией о пользователях, алиасах и доменах. Про эти параметры я подробно рассказывал в статье Настройка связки Postfix PostfixAdmin, там же вы найдете и описание настройки PostfixAdmin.
1 2 3 4 5 6 7 8 9 |
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 следующие строчки:
1 2 |
virtual_transport = dovecot dovecot_destination_recipient_limit = 1 |
Не забудьте, что внести изменения нужно и в master.cf, это важный шаг:
1 2 |
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:
1 2 3 4 5 6 |
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 ниже.
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 |
#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 я руководствовался соображениями минимального объема параметров конфигурации для достижения поставленной цели. Другими словами, у меня в конфиге указаны лишь те параметры, без которых обойтись ну никак не получится. Все остальное на ваше усмотрение – меняйте, экспериментируйте.