Связка Postfix и Dovecot

Связка Postfix и DovecotВ контексте данной статьи связка Postfix и Dovecot подразумевает использование Postfix как агента пересылки почты (MTA), Dovecot как агента локальной доставки (LDA), а также реализацию Dovecot SASL вместо Cyrus SASL для авторизации пользователей.


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


Связка Postfix и Dovecot – LDA

Я подразумеваю, что Dovecot у вас уже установлен, но если нет, то выполните команду:

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

Стоит отметить, что задать необходимые настройки Dovecot вы можете в одном конфигурационном файле dovecot.conf, а не растаскивать их по конфигам в директории /etc/dovecot/conf.d/. На мой взгляд вариант со всеми настройками в одном файле выглядит гораздо более удобным и простым.

Postfix – main.cf

Dovecot может выполнять роль LDA как для локальных пользователей системы, так и для виртуальных (см. документацию 1). Вариант с виртуальными пользователями для меня более предпочтителен и его реализацией для Postfix я занимался в предыдущих статьях (Виртуальные почтовые ящики Postfix), а теперь пришло время организовать для этой схемы агента локальной доставки, которым и будет Dovecot.

Открываем основной конфиг и добавляем туда параметры:

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

Итак, ключевыми параметрами, влияющими на связку Dovecot-lda+Postfix, являются:

  • virtual_transport – транспорт, используемый Postfix для конечной доставки сообщений. Параметр используется вместе с virtual_mailbox_domains;
  • dovecot_destination_recipient_limit – максимальное количество получателей для каждого сообщения, отправленное Dovecot’у. При работе с виртуальными пользователями требуется установка значения в 1, иначе получите в логах ошибку warning: pipe flag ‘D’ requires dovecot_destination_recipient_limit = 1. Ограничение не означает, что вам придется каждому виртуальному пользователю отправлять одно и то же сообщение персонально, просто на этапе обработки оно будет разбиваться и отправляться каждому пользователю отдельно.

Напоминаю, что настройку виртуальных доменов я выполнил в предыдущей статье (Настройка связки Postfix PostfixAdmin). Сохраняем изменения и закрываем main.cf.

Postfix – master.cf

Дальше нужно сообщить Postfix кому передавать почтовые данные и с какими параметрами. В нашем случае это будет разумеется Dovecot. Сделать это можно через файл master.cf, добавив соответствующие записи. Для начала забэкапим файл:

Открываем для редактирования:

Добавляем строчки (перед второй строкой нужно два пробела):

Комментарии к строчкам. Первая:

  • dovecot – имя сервиса;
  • unix – тип сервиса (unix – доступный только для локального доступа unix-сокет. Доступны и другие, см. документацию);
  • – – пропускаем ограничение доступа;
  • n – Непривелегированный выставляем в n, поскольку pipe должен выполняться в привилегированном режиме;
  • n – Ставим n для выполнения в изолированной среде (так нужно для демона pipe);
  • – – пропускаем режим автоматического пробуждения;
  • – – пропускаем ограничение количества процессов;
  • pipe – имя демона.

Более подробную информацию см. в выводе команды man 5 master или в документации 2.

Следующая строчка:

  • flags=DRhu – устанавливает флаги;
  • user=vmail:vmail – задаем пользователя и группу, с правами которого будет выполняться процесс;
  • argv=/usr/lib/dovecot/dovecot-lda – процесс, которому должны передаваться данные;
  • – -f и -d – это параметры Dovecot, которые отвечают за адрес отправителя и адрес получателя соответственно (см. в документации 3), ну а ${sender} и ${recipient} – переменные Postfix (в них передаются адреса отправителя и получателя, как в этом можно убедиться из документации 4 pipe).

Последняя задача с Postfix – загрузка новой конфигурации:

Следующие изменения нужно выполнить уже в конфигах Dovecot.

Dovecot – 10-master.conf

Укажем для прослушивания сокет auth-userdb через директиву auth, чтобы Dovecot знал где искать почтовые ящики пользователей. Для этого открываем файл, предварительно его забэкапив:

Изменяем:

Сокет (unix_listener auth-userdb) установлен по умолчанию, нам остается лишь указать режим (mode) и пользователя (user) с группой (group). Напоминаю, что пользователя я создавал в одной из предыдущих статей (Виртуальные почтовые ящики Postfix). Закрываем файл, сохранив изменения.

Dovecot – 10-mail.conf

Поскольку у меня все почтовые данные сохраняются под одним пользователем, в моем случае логично задать статические uid и gid. Делается это в файле 10-mail.conf. Открываем его для редактирования (сначала как всегда бэкап):

Устанавливаем параметры:

Комментарии наверно излишни, но все же:

  • mail_location – расположение и формат хранения почтовых данных;
  • mail_uid и mail_gid – идентификаторы пользователя и группы;
  • mail_privileged_group – сообщает Dovecot группу, под которой необходимо выполнять блокировку почтовых ящиков. Указать это значение необходимо для предотвращения вечной блокировки, когда одни и те же данные используются разными приложениями, подробнее в документации 5.
  • first_valid_uid и last_valid_uid – диапазон идентификаторов пользователей, под которыми могут сохраняться данные. У меня используются скорее для надежности и в принципе могут быть пропущены.

Перезапускаем Dovecot:

На этом настройка Dovecot как LDA в связке с Postfix завершена.

Связка Postfix и Dovecot – SASL

В ранних версиях Postfix (до 2.3) допускалось использование для аутентификации 6 только библиотеки Cyrus SASL. На данный момент доступен также Dovecot SASL 7. Чтобы проверить совместимость, выполните команду:

Процесс настройки Dovecot SASL значительно проще и доступнее, им и займемся, начав с настроек Postfix.

Postfix – main.cf

Postfix нужно явно указать, чтобы он использовал Dovecot SASL (ведь по умолчанию он использует Cyrus SASL)а также настроить некоторые другие параметры.

Открываем main.cf для редактирования:

Добавляем:

Пояснения:

  • smtpd_sasl_auth_enable – использование SASL;
  • smtpd_sasl_type – реализация SASL, по умолчанию Cyrus;
  • smtpd_sasl_path – указывает путь до сокета (путь очереди Postfix + smtpd_sasl_path, реальный путь будет /var/spool/postfix/private/auth);
  • broken_sasl_auth_clients – допускает к авторизации нестандартные типы клиентов, опция не влияет на работоспособность других клиентов и при отсутствии явной необходимости может быть отключена;
  • smtpd_sasl_security_options – по умолчанию имеет значение noanonymous, но вот что на этот счет говорят разработчики:

Always set at least the noanonymous option. Otherwise, the Postfix SMTP server can give strangers the same authorization as a properly-authenticated client.

Поэтому указываем значение noanonymous в явном виде, а также noplaintext. Опция запрещает использовать механизмы аутентификации, пересылающие пароль в незашифрованном виде.

  • smtpd_sasl_tls_security_options – опция используется в дополнение к вышестоящей. Вопреки ей, она разрешает отправку пароля в незашифрованном виде, но только поверх сеанса TLS. Этот вариант меня полностью устраивает;
  • smtpd_tls_auth_only – позволяет использовать SASL только поверх TLS.

Сохраняем изменения, закрываем main.cf.

Dovecot – 10-master.conf

Первым делом нужно указать путь до сокета, а также пользователя и группу, под которыми будет выполняться процесс. Сделать это нужно в конфигурационном файле 10-master.conf, который мы редактировали ранее в этой статье. Поскольку его бэкап уже сделан, сразу открываем для редактирования:

Добавляем в директиву auth вот такие параметры:

Другими словами – мы сообщаем Dovecot сокет, используемый для аутентификации, а также пользователя, группу и права доступа. В итоге с учетом изменений в предыдущей главе статьи, секция будет иметь следующий вид:

Сохраняем изменения, закрываем файл. Напоминаю, что аналогичные действия для любого конфига в conf.d/ вы можете проделать в файле dovecot.conf, чтобы держать всю конфигурацию в одном единственном файле.

Dovecot – 10-auth.conf

Следующий этап – установить механизмы проверки подлинности. Откроем для редактирования конфиг:

В конфиге необходимо задать механизм аутентификации:

Из названия параметров в принципе должно быть понятно их назначение:

  • disable_plaintext_auth – отключение аутентификации простым текстом без ssl/tls;
  • auth_mechanisms – механизмы аутентификации 8. устанавливаем plain (именно! Этот тип – простой текст. Поскольку аутентификация будет происходить поверх ssl/tls, об этом не стоит беспокоиться), login необходим для аутентификации клиентов Microsoft, в cram-md5 хранится хэш пароля в базе данных Postfixadmin (параметр $CONF[‘encrypt’] = ‘dovecot:CRAM-MD5’;, его я настраивал в статье Настройка связки Postfix PostfixAdmin), удобно использовать и этот тип в том числе.

Сохраняем изменения, закрываем файл.

Теперь пришло время рассказать Dovecot откуда ему брать учетные данные виртуальных пользователей для проверки. У меня вся информация о пользователях, доменах и алиасах хранится в отдельной базе данных MySQL, которую создал Postfixadmin (Настройка связки Postfix PostfixAdmin), поэтому логично будет использовать отдельный sql-запрос 9 для получения данных.

Создадим файл:

Со следующим содержимым:

Теперь подробнее о каждом параметре:

  • driver – тип СУБД;
  • connect – параметры подключения к БД;
  • default_pass_scheme – схема хранения паролей 10. Имеет смысл задавать этот параметр, если все записи паролей хранятся в одном и том же виде, собственно так у меня и есть, поэтому выставляем значение CRAM-MD5. Именно в этом виде у меня хранятся все пароли в БД Postfixadmin, я упоминал это чуть выше по тексту;
  • password_query – запрос для получения пароля. Обязательно должен возвращать поле с именем password (если у вас в бд он имеет другое имя, используйте конструкцию AS);
  • user_query – запрос для получения имени пользователя.

Для только что созданного файла не забываем указать необходимые права:

Переходим к последнему этапу.

Dovecot – auth-sql.conf.ext

Теперь остается только немного подкорректировать файл auth-sql.conf.ext, ведь по умолчанию он указывает на конфиг SQL /etc/dovecot/dovecot-sql.conf.ext, вместо созданного в предыдущем разделе файла /etc/dovecot/dovecot-sql.conf, но сначала бэкап:

Итоговое содержимое файла должно выглядеть так:

Сохраняем изменения и закрываем файл.

На этом настройки связки Dovecot-SASL+Postfix завершены, не забудьте перезапустить Dovecot:

Тестируйте конфигурацию, анализируйте логи.

Вывод

Помимо агента доступа к почте (MAA), Dovecot может использоваться как агент локальной доставки (MDA или LDA, что одно и то же), а также как отдельный фреймворк SASL вместо традиционного Cyrus SASL. Это значительно упрощает общую конфигурацию и уменьшает количество необходимых компонентов.

Если у Postfix вся конфигурация упирается в файлы main.cf и master.cf, то ситуация с Dovecot несколько сложнее – он имеет множество конфигов в каталоге conf.d/. Вы можете раскидывать настройки по этим файлам, а можете сосредоточить в одном dovecot.conf, выбор за вами. В любом случае связка Postfix+Dovecot подразумевает изменение параметров конфигурационных файлов и того и другого.

Яндекс.Метрика