Photo by Mathyas Kurmann
Почтовый сервер Postfix + Dovecot для виртуальных пользователей

Почтовый сервер для виртуальных пользователей на Postfix и Dovecot

24.10.23
25.12.25

Теперь поговорим об абонентах, которые не имеют аккаунт на сервере — виртуальных пользователях. Про почтовый сервер для системных пользователей писал ране. Т.е. это почтовый сервер рассчитанный на широкий круг абонентов. Например, для компании 5 – 30 сотрудников получающих почту на своих почтовых клиентах (Outlook, Thunderbird).

Немного теории

В начале пару слов о том что и для чего и кто что делает и зачем.

За прием и отправку почты полностью отвечает MTA (Mail Transfer Agent). Пожалуй самый популярный это Postfix, о нём мы и будем говорить. Это по сути почтальон, который принимает почту как от клиента (Outlook, Thunderbird), так и от другого почтового сервера (MTA) и передаёт её на другие почтовые сервера (MTA). Единственное, чего он не делает – он не передаёт принятую почту клиентам (Outlook, Thunderbird). За это отвечает Mail Delivery Agent (MDA). В нашем случае это Dovecot.

Dovecot обеспечивает доступ к почтовым ящикам пользователей через стандартные протоколы IMAP и POP3, позволяя почтовым клиентам (Outlook, Thunderbird) скачивать и просматривать электронную почту с сервера. Кроме того, Dovecot управляет почтовыми ящиками в форматах mbox или Maildir, обеспечивает безопасный доступ с помощью SSL/TLS и различных методов аутентификации.

Настройка Dovecot

Чтобы установить базовый сервер Dovecot с общими функциями POP3 и IMAP, выполните следующую команду:

apt install dovecot-imapd dovecot-pop3d

Для относительно небольшого числа абонентов настройки аутентификации можно хранить в файле. За аутентификацию отвечают настройки в файле /etc/dovecot/conf.d/10-auth.conf Там надо раскомментировать строку: !include auth-passwdfile.conf.ext и соответственно, в файл /etc/dovecot/conf.d/auth-passwdfile.conf.ext внести изменения:

passdb {
  driver = passwd-file
  args = /etc/dovecot/users
}

userdb {
  driver = static
  args = uid=vmail gid=vmail /var/mail/vusers/%d/%n

  # Override fields from passwd-file
  override_fields = home=/var/mail/vusers/%d/%n
}

секция passdb

определяет параметры аутентификации пользователей, после чего станет доступна аутентификация из файла /etc/dovecot/users (файл можно переопределять).

секция userdb

определяет расположение почты виртуальных пользователей. В нашем случае это /var/mail/vusers/%d/%n

где %d — это домен, а %n это имя пользователя (всё что до @domain.tld).

Еще не забудьте создать пользователя vmail и группу vmail. И дайте этому пользователю права к папке /var/mail/vusers

sudo chown vmail:vmail /var/mail/vusers

Теперь вернёмся к аутентификации пользователей. За это у нас отвечает файл /etc/dovecot/users. Его формат довольно прост:

#user@domain.tld:{pass_type}pass:::
user2@webexit.ru:{PLAIN}mypassword:::

Если не хотите оставлять пароль в открытом виде ({PLAIN}), то для хеширования пароля надо воспользоваться утилитой doveadm.

Введите пароль, повторите его и утилита выдаст вам строку:

$ doveadm pw 
Enter new password: 
Retype new password:
{CRYPT}$2y$05$EnRAYxmU3mH.DYUNLZdGbNwO/vOwqx....

которую надо скопировать в файл /etc/dovecot/users сразу после логина и домена:

user@webexit.ru:{CRYPT}$2y$05$EnRAYxmU3mH.DYUNLZdGbNwO/vOwqx8fJjzTEJiPSQ6:::

Далее, в файле /etc/dovecot/conf.d/10-ssl.conf надо настроить SSL:

ssl = required
ssl_key = </etc/letsencrypt/live/mail.your-site.ru/privkey.pem
ssl_cert = </etc/letsencrypt/live/mail.your-site.ru/fullchain.pem

Тут должны быть пути до сертификата Let’s Encrypt, подробнее о нём и настройках писал вот тут.

Нужно открыть порты:

  • IMAP — 143
  • IMAPS — 993
  • POP3 — 110
  • POP3S — 995

Все, после этого станет работать Dovecot (после перезапуска) и пользователи смогут авторизоваться.

Теперь остается настроить Postfix, чтобы почта попадала в эти почтовые ящики.

Установка и настройка Postfix

Как уже сказал ранее, роль MTA у нас будет выполнять Postfix. Есть ещё похожие MTA, например exim4, но если вы также используете сервер на базе Ubuntu, то тут Postfix используется по умолчанию. И, соответственно, в Ubuntu 20.04 — 24.04 установка проста:

sudo apt install postfix

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

sudo dpkg-reconfigure postfix

Далее, ответьте на вопросы:

Почтовый сервер

Нужно выбрать «Интернет-сайт», затем указать свой домен:

Далее, утилитой postconf надо сделать следующие настройки:

postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_security_options = noanonymous,noplaintext'
postconf -e 'smtpd_sasl_tls_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'smtpd_relay_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Здесь мы сделали важные настройки, если их не сделать, спамеры быстро найдут ваш почтовый сервер и будут использовать его для рассылки. Подробнее про шифрование и TLS писал тут.

Далее, надо выпустить сертификаты. Можно сделать это от Lets’encript, либо в самом крайнем случае – самоподписные. После чего настраиваем TLS

postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'

Все установки сохраняются в файле:

/etc/postfix/main.cf

Далее, создадим файл виртуальных доменов /etc/postfix/vhosts следующего содержания:

domain.tld
mail.domain.tld

И подключим его в файле /etc/postfix/main.cf добавив строчку:

virtual_mailbox_domains = /etc/postfix/vhosts

Далее, сами пользователи. Для них создадим файл /etc/postfix/vmaps следующего содержания:

#user@domain.tld            vusers/domain.tld/user/Maildir/
webadmin@webexit.ru         vusers/webexit.ru/webadmin/Maildir/

И выполнить команду:

postmap /etc/postfix/vmaps

Далее, подключим его в файле /etc/postfix/main.cf добавив строчки:

virtual_mailbox_base = /var/mail
virtual_mailbox_maps = hash:/etc/postfix/vmaps
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024

Где 1024 это uid и gid вашего пользователя vmail (у вас будут другие цифры).

Алиасы для виртуальных пользователей

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

Добавим в файл /etc/postfix/main.cf следующий параметр:

virtual_alias_maps = hash:/etc/postfix/valiases

Затем создадим и отредактируем файл /etc/postfix/valiases

#pattern address, address
user2@domain.tld   user@domain.tld

можно использовать просто user без доменной части, тогда будет подставлен домен из $myorigin либо использовать конструкцию @domain.tld address тогда все остальные писма будут пересылаться на этот адрес.

Не забудьте открыть порты, для Postfix это 25, 587 и 465 (устарел, но пока используется).

Далее, можно настроить DKIM, вот тут мы писали как и ещё SPF + DMARC, вот тут есть статья об этом.