В статье будет рассмотрена базовая настройка 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).
Базовая настройка
Для начала нужно создать хотя бы одного пользователя, который и будет получать/отправлять почту.
Создаем юзера командой:
1 |
useradd -m -d /home/bissquit -s /bin/false bissquit |
и сразу перенаправляем всю входящую почту root’a на него (это нужно для безопасности), добавив запись в /etc/aliases:
1 |
echo "root: bissquit" >> /etc/aliases |
На этом все. Более подробно базовую настройку системы я уже рассматривал ранее в статье Настройка Debian для Postfix.
Настройка DNS
К этому моменту уже должны быть созданы все основные записи у вашего DNS-провайдера. Как минимум вам необходимы:
- A-запись. Например запись mail.bissquit.ru, указывающая на ip-адрес почтового сервера;
- запись МХ. Для домена bissquit.ru, указывающая на запись mail.bissquit.ru.
А также второстепенные (но от этого не менее важные):
- PTR. Это обратная запись, которая ставит в соответствие ip-адресу какое-либо DNS-имя. Создать эту запись должен ваш интернет-провайдер, ведь он является владельцем публичных ip-адресов, которые вы используете;
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-записи – и помогает перечислить серверы, имеющие право отправлять почту от имени вашего домена.
Ну а теперь приступаем к развертыванию Postfix.
Конфигурация Postfix
Первым делом необходимо вычистить из системы MTA, используемый по умолчанию:
1 2 3 4 |
apt-get remove exim4 \ exim4-base \ exim4-config \ exim4-daemon-light |
И удалить его конфигурацию:
1 |
rm -R /etc/exim4 |
Ну а далее ставим Postfix:
1 |
apt-get install postfix |
Когда вылезет окно с типом настройки, выбираем конфигурацию Интернет-сайт:
При выборе почтового имени предлагаю все оставить как есть (по умолчанию будет имя ОС), потом настройки мы все равно будем менять:
В общем ничего сложного, все это я подробно рассматривал ранее в статье Установка Postfix на Debian.
Безопасность
Если установка Postfix прошла по стандартному сценарию, то как минимум дефолтные сертификаты должны присутствовать. В том или ином виде конфиг будет содержать параметры:
1 2 3 4 5 |
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_security_level = may |
Где первые два параметра – пути к файлу сертификата и закрытому ключу, следующие два – пути к кэшу. Менять эти значения по умолчанию не нужно.
Следующую секцию параметров, относящуюся к SASL, вам нужно добавить вручную:
1 2 3 |
smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth |
Ключ smtpd_sasl_auth_enable по умолчанию имеет значение no, то есть аутентификация не требуется. Именно поэтому нужно задать yes в явном виде. По умолчанию Postfix использует Cyrus SASL и чтобы он обратил свой взор в сторону Dovecot, нужно изменить параметр smtpd_sasl_type и указать путь до сокета в параметре smtpd_sasl_path.
Советую к прочтению официальные мануалы 3 4.
Ну и последний момент: проследите, чтобы в конфиге был определен параметр smtpd_relay_restrictions (иначе почта отправляться не будет). По умолчанию для только что установленного Postfix он будет иметь значения permit_mynetworks permit_sasl_authenticated defer_unauth_destination.
С настройками TLS и SASL разобрались, двигаемся дальше.
Хранилище
Postfix должен куда-то сохранять полученные/отправленные сообщения, а потому необходимо ему это объяснить, установив параметры:
1 2 |
home_mailbox = Maildir/ mailbox_command = |
Первая запись означает, что информация будет сохраняться в папке Maildir домашнего каталога пользователя. Пример: если в системе есть пользователь bissquit, то все его почтовые данные будут храниться в /home/bissquit/Maildir/.
В параметре mailbox_command важно выставлять слэш в конце строки, поскольку этот символ заставляет Postfix хранить данные в формате Maildir, то есть каждое письмо в отдельном файле.
На этом настройка хранения данных завершена.
Итоговый конфиг 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 |
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_security_level = may smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = mail.bissquit.ru alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = mail.bissquit.ru, bissquit.ru, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all # smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth home_mailbox = Maildir/ mailbox_command = |
Уникальными для вашего окружения будут параметры myhostname и mydestination. Их вы можете задать соответственно командами:
1 2 |
postconf -e "mydestination = mail.domain.com, domain.com, localhost.localdomain, localhost" postconf -e "myhostname = mail.domain.com" |
И после этого выполнить:
1 |
postfix reload |
После этого настройки вступят в силу и вы можете протестировать отправку почты командой:
1 |
echo "This is the message body" | mail -s "This is the subject" public_email@example.com -aFrom:bissquit@bissquit.ru |
Где public_email@example.com – ваш адрес на любом внешнем почтовом сервере, например на публичных mail.ru или yandex.
Конфигурация Dovecot
Для начала забэкапим текущий конфиг командой:
1 |
mv /etc/dovecot/dovecot.conf{,.orig} |
Все необходимые параметры я буду задавать в /etc/dovecot/dovecot.conf, полностью минуя конфиги из /etc/dovecot/conf.d/.
Аутентификация
Также как и Postfix Dovecot будет использовать обычные учетные записи пользователей, созданные в системе (хоть и реально поддерживаются разные варианты 5). Для этого необходимо настроить секцию passdb 6.
При этом надо учесть один момент – учетные записи хранятся без всякого имени домена и если вы хотите использовать учетку в виде user@domain.com, то нужно задать параметр auth_username_format.
Ещё один немаловажный момент, что базы данных PAM могут использоваться только при передаче пароля простым текстом, а потому лучше явно задать параметр disable_plaintext_auth.
Итак, вот что имеем:
1 2 3 4 5 |
disable_plaintext_auth = no auth_username_format = %n passdb { driver = pam } |
где %n означает как раз формат имен user@domain.com.
Далее нужно настроить секцию userdb 7, чтобы Dovecot получал необходимую информацию для доставки сообщений (например вытаскивал домашние каталоги пользователей):
1 2 3 |
userdb { driver = passwd } |
Теперь нужно указать Dovecot сокет для прослушивания. Делается это в секции service auth:
1 2 3 4 5 6 7 |
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } } |
Ну и наконец пропишем путь до сертификата и его закрытого ключа (я использую автоматически созданный самозаверенный сертификат Postfix):
1 2 3 |
ssl = yes ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key |
С аутентификацией разобрались.
Хранилище
Настройка хранилища в упрощенной конфигурации с локальными учетками упирается всего лишь в один параметр:
1 |
mail_location = maildir:~/Maildir:LAYOUT=fs |
Запись означает, что почта будет храниться в формате maildir 9 (maildir:) в домашнем каталоге текущего пользователя (~/) внутри папки Maildir (Maildir), используя иерархию каталогов (:LAYOUT=fs), а не в плоском виде как то подразумевает формат Maildir++ 10.
На этом настройка хранилища завершена.
Необязательные настройки
Есть некоторые необязательные опции, на которые можно не обращать внимания, но тем не менее их настройка обеспечит некоторое удобство в будущем. Одна из них – дефолтные каталоги почтовых ящиков.
В более ранних версиях Dovecot (2.0 и старше) использовался плагин Autocreate 12, теперь же он устарел и рекомендуют использовать директиву namespace inbox 13. Вот один из вариантов конфигурации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace inbox { inbox = yes mailbox Drafts { special_use = \Drafts auto = subscribe } mailbox Junk { special_use = \Junk auto = subscribe } mailbox Trash { special_use = \Trash auto = subscribe } mailbox Sent { special_use = \Sent auto = subscribe } } |
Теперь можно объединить все настройки в один работающий конфиг.
Итоговый конфиг Dovecot
Итоговый вариант конфигурации не подразумевает использования доп. конфигов из директории conf.d.
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 |
mail_location = maildir:~/Maildir:LAYOUT=fs protocols = imap pop3 disable_plaintext_auth = no userdb { driver = passwd } auth_username_format = %n passdb { driver = pam } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } } ssl = yes ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key namespace inbox { inbox = yes mailbox Drafts { special_use = \Drafts auto = subscribe } mailbox Junk { special_use = \Junk auto = subscribe } mailbox Trash { special_use = \Trash auto = subscribe } mailbox Sent { special_use = \Sent auto = subscribe } } |
Ну и не забываем перезапустить демона:
1 |
service dovecot restart |
На этом настройка завершена.