Базовая настройка Postfix и Dovecot

В статье будет рассмотрена базовая настройка Postfix и Dovecot с использованием системных учетных записей и хранением почтовых данных в их домашних каталогах.

Под «системными» имеются в виду не какие-либо сервисные учетные записи, а учетки обычных пользователей системы. Это основной и при этом самый простой в настройке и обслуживании вариант развертывания функционала MTA (Postfix) и MAA (Dovecot). При необходимости вы всегда сможете усложнить конфигурацию — развернуть виртуальных юзеров, организовать централизованное хранилище почтовых данных (а не использовать домашние каталоги) и пр.

Конфигурация программ, рассмотренная ниже, ориентирована больше на среду для тестирования, либо для «домашнего» использования. Если вам нужно что-то более серьезное, рекомендую обратиться к статье Настройка Postfix.


Найти больше информации о почтовых технологиях на UNIX-подобных системах вы можете в рубрике Unix Mail или в статье Настройка Postfix.


Вы также можете развернуть данную конфигурацию в контейнере Docker, у меня даже есть отдельный репозиторий для этого на GitHub, см. статью Postfix и Dovecot в контейнере Docker


Базовая настройка Postfix и Dovecot

Разворачивать связку Postfix + Dovecot с системными пользователями я планирую на ОС Debian (дистрибутив debian-8.7.0-amd64-netinst.iso 1).

Базовая настройка

Для начала нужно создать хотя бы одного пользователя, который и будет получать/отправлять почту.

Создаем юзера командой:

и сразу перенаправляем всю входящую почту root’a на него (это нужно для безопасности), добавив запись в /etc/aliases:

Примечание: если решите отредактировать этот файл во время работы Postfix, не забудьте после этого выполнить команду newaliases, чтобы изменения вступили в силу.

На этом все. Более подробно базовую настройку системы я уже рассматривал ранее в статье Настройка Debian для Postfix.

Настройка DNS

К этому моменту уже должны быть созданы все основные записи у вашего DNS-провайдера. Как минимум вам необходимы:

  • A-запись. Например запись mail.bissquit.ru, указывающая на ip-адрес почтового сервера;
  • запись МХ. Для домена bissquit.ru, указывающая на запись mail.bissquit.ru.

А также второстепенные (но от этого не менее важные):

  • PTR. Это обратная запись, которая ставит в соответствие ip-адресу какое-либо DNS-имя. Создать эту запись должен ваш интернет-провайдер, ведь он является владельцем публичных ip-адресов, которые вы используете;

Примечание: очень много серверов настроены таким образом, что проверяют наличие этой записи. Сначала они смотрят имя, на которое указывает MX-запись, а потом сравнивают его с именем, которое возвращает PTR-запись и если эти имена отличаются (или PTR вообще отсутствует), то вся почта отклоняется как спам. В логах своего сервера вы увидите что-то подобное:
450 4.7.1 Client host rejected: cannot find your reverse hostname

Такие жесткие настройки особенно любят устанавливать владельцы Postfix, указав в конфиге ограничения reject_unknown_reverse_client_hostname (для проверки просто существования PTR) или reject_unknown_client_hostname (а эта опция уже требует зеркального разрешения имен/адресов — name>address, address>name). На самом деле это очень жесткие ограничения и даже не все публичные сервисы, например Google, их требований придерживаются
.

  • SPF. На самом деле указывается внутри другой — TXT-записи — и помогает перечислить серверы, имеющие право отправлять почту от имени вашего домена.

Примечание: Если эта запись существует, то любые принимающие почтовые серверы будут на 100% уверены в том, что вы являетесь подлинным почтовым сервером и смогут отклонять спамеров, пытающихся представиться вами. Например для домена bissquit.ru spf-запись может иметь вид «v=spf1 mx a ip4:1.2.3.4 ~all», где 1.2.3.4 — адрес сервера. Есть много сервисов 2, помогающих сгенерировать эту запись.

Ну а теперь приступаем к развертыванию Postfix.

Конфигурация Postfix

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

И удалить его конфигурацию:

Ну а далее ставим Postfix:

Когда вылезет окно с типом настройки, выбираем конфигурацию Интернет-сайт:

При выборе почтового имени предлагаю все оставить как есть (по умолчанию будет имя ОС), потом настройки мы все равно будем менять:

В общем ничего сложного, все это я подробно рассматривал ранее в статье Установка Postfix на Debian.

Безопасность

Если установка Postfix прошла по стандартному сценарию, то как минимум дефолтные сертификаты должны присутствовать. В том или ином виде конфиг будет содержать параметры:

Где первые два параметра — пути к файлу сертификата и закрытому ключу, следующие два — пути к кэшу. Менять эти значения по умолчанию не нужно.

Примечание: В этом куске конфига вы можете встретить параметр smtpd_use_tls=yes. Его можно безболезненно убрать, поскольку он устарел и предназначен для совместимости устаревших версий Postfix. Вместо него используется smtpd_tls_security_level, значение которого имеет приоритет.

Следующую секцию параметров, относящуюся к SASL, вам нужно добавить вручную:

Ключ smtpd_sasl_auth_enable по умолчанию имеет значение no, то есть аутентификация не требуется. Именно поэтому нужно задать yes в явном виде. По умолчанию Postfix использует Cyrus SASL и чтобы он обратил свой взор в сторону Dovecot, нужно изменить параметр smtpd_sasl_type и указать путь до сокета в параметре smtpd_sasl_path.

Примечание: полный путь до сокета будет /var/spool/postfix/private/auth, просто параметр smtpd_sasl_path является составным и по умолчанию включает в себя  путь до очереди — queue_directory = /var/spool/postfix .

Советую к прочтению официальные мануалы 3 4.

Ну и последний момент: проследите, чтобы в конфиге был определен параметр smtpd_relay_restrictions (иначе почта отправляться не будет). По умолчанию для только что установленного Postfix он будет иметь значения permit_mynetworks permit_sasl_authenticated defer_unauth_destination.

С настройками TLS и SASL разобрались, двигаемся дальше.

Хранилище

Postfix должен куда-то сохранять полученные/отправленные сообщения, а потому необходимо ему это объяснить, установив параметры:

Первая запись означает, что информация будет сохраняться в папке Maildir домашнего каталога пользователя.  Пример: если в системе есть пользователь bissquit, то все его почтовые данные будут храниться в /home/bissquit/Maildir/.

Примечание: если вы не установите параметр home_mailbox, то будет использоваться каталог, определенный по умолчанию в параметре mail_spool_directory, а это /var/mail/. Кроме того, данные будут храниться в одном файле, названным по имени пользователя.

В параметре mailbox_command важно выставлять слэш в конце строки, поскольку этот символ заставляет Postfix хранить данные в формате Maildir, то есть каждое письмо в отдельном файле.

На этом настройка хранения данных завершена.

Итоговый конфиг Postfix

А вот и итоговый конфиг:

Уникальными для вашего окружения будут параметры myhostname и mydestination. Их вы можете задать соответственно командами:

И после этого выполнить:

После этого настройки вступят в силу и вы можете протестировать отправку почты командой:

Где public_email@example.com — ваш адрес на любом внешнем почтовом сервере, например на публичных mail.ru или yandex.

Конфигурация Dovecot

Для начала забэкапим текущий конфиг командой:

Все необходимые параметры я буду задавать в /etc/dovecot/dovecot.conf, полностью минуя конфиги из /etc/dovecot/conf.d/.

Аутентификация

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

При этом надо учесть один момент — учетные записи хранятся без всякого имени домена и если вы хотите использовать учетку в виде user@domain.com, то нужно задать параметр auth_username_format.

Ещё один немаловажный момент, что базы данных PAM могут использоваться только при передаче пароля простым текстом, а потому лучше явно задать параметр disable_plaintext_auth.

Примечание: ничего страшного в использовании незашифрованного пароля для проверки подлинности нет, ведь все это будет происходить поверх туннеля SSL/TLS.

Итак, вот что имеем:

где %n означает как раз формат имен user@domain.com.

Далее нужно настроить секцию userdb 7, чтобы Dovecot получал необходимую информацию для доставки сообщений (например вытаскивал домашние каталоги пользователей):

Теперь нужно указать Dovecot сокет для прослушивания. Делается это в секции service auth:

Ну и наконец пропишем путь до сертификата и его закрытого ключа (я использую автоматически созданный самозаверенный сертификат Postfix):

Примечание: если хотите сгенерировать отдельный сертификат, то рекомендую обратиться к статье Конфиг Dovecot для связки с Postfix, PostfixAdmin, MySQL, там есть пример. Ещё один вариант создания самозаверенного сертификата — использовать специальный скрипт Dovecot — mkcert.sh 8.

С аутентификацией разобрались.

Хранилище

Настройка хранилища в упрощенной конфигурации с локальными учетками упирается всего лишь в один параметр:

Запись означает, что почта будет храниться в формате maildir 9 (maildir:) в домашнем каталоге текущего пользователя (~/) внутри папки Maildir (Maildir), используя иерархию каталогов (:LAYOUT=fs), а не в плоском виде как то подразумевает формат Maildir++ 10.

Примечание: больше информации о формате параметра mail_location вы найдете в официальной документации 11.

На этом настройка хранилища завершена.

Необязательные настройки

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

В более ранних версиях Dovecot (2.0 и старше) использовался плагин Autocreate 12, теперь же он устарел и рекомендуют использовать директиву namespace inbox 13. Вот один из вариантов конфигурации:

Теперь можно объединить все настройки в один работающий конфиг.

Итоговый конфиг Dovecot

Итоговый вариант конфигурации не подразумевает использования доп. конфигов из директории conf.d.

Ну и не забываем перезапустить демона:

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

comments powered by HyperComments