Почта с защитой соединения для многодоменных серверов

В сети можно найти много статей про создание и настройку своего почтового сервера. Так как рецептов и конфигурационных файлов может быть от каждого автора много, я всего лишь затрону тему работы почтового сервера с несколькими доменами, использующими tls сертификаты. За источник настройки сервера возьму эту инструкцию — https://serveradmin.ru/nastrojka-postfix-dovecot-postfixadmin-roundcube-dkim-na-debian/

В статье выше хорошо расписано как настроить свой собственный почтовый сервер на базе postfix и dovecot. Так что после корректно настроенного обмена почтой\приёмом и отправкой можно озадачиться и настройкой её для нескольких доменов при использовании не самоподписных сертификатов, а сертификатов от LetsEncrypt. Для этого редактируем конфигурацию postfix — файл main.cf

Обратите внимание, что postfix начал поддержку SNI (Server Name Indication) только начиная с версии 3.4. Для старых версий постфикса данная статья не применима.

Добавляем строки

tls_server_sni_maps = hash:/etc/postfix/vmail_ssl.map
smtpd_tls_chain_files =
  /etc/postfix/certs/key-example.org.pem
  /etc/postfix/certs/cert-example.org.pem

где,
tls_server_sni_maps — дополнительные таблицы поиска, которые сопоставляют имена, полученные от удаленных SMTP-клиентов через расширение TLS Server Name Indication (SNI), с соответствующими ключами и цепочками сертификатов. Параметр должен указываться для случаев когда клиент не отправляет SNI или когда он отправляет SNI с доменом, для которого сервер не знает сертификатов. В таком случае он (вероятно) будет использовать ключи из параметра smtpd_tls_chain_files;
smtpd_tls_chain_files — список из одного или нескольких файлов PEM, каждый из которых содержит один или несколько закрытых ключей, за которыми непосредственно следует соответствующая цепочка сертификатов. То есть сначала описывается закрытый ключ, а потом — открытый.

Комментируем строки (если они есть)

#smtpd_tls_key_file = /etc/postfix/certs/key.pem
#smtpd_tls_cert_file = /etc/postfix/certs/cert.pem

Создаём файл vmail_ssl.map и прописываем в него все наши домены с путями до их закрытых и открытых ключей.

nano /etc/postfix/vmail_ssl.map
# Compile with postmap -F hash:/etc/postfix/vmail_ssl.map when updating
# One host per line
mx.example.org /etc/postfix/certs/key-example.org.pem /etc/postfix/certs/cert-example.org.pem
mail.example.com /etc/postfix/certs/key-example.com.pem /etc/postfix/certs/cert-example.com.pem
# add more domains with keys and certs as needed

Из инструкции в файле выполняем генерацию базы сертификатов

postmap -F hash:/etc/postfix/vmail_ssl.map

Для postfix все шаги сделаны. Но у нас есть ещё и IMAP сервер, роль которого выполняет Dovecot. Поэтому правим конфигурацию и для него.

Правим файл dovecot.conf

nano /etc/dovecot/dovecot.conf

Приводим файл к следующему виду, дополнив файл необходимыми строками ниже

...
# Default
ssl_cert = </etc/postfix/certs/cert-example.org.pem
ssl_key = </etc/postfix/certs/key-example.org.pem
# mx.example.org
local_name mx.example.org {
    ssl_cert = </etc/postfix/certs/cert-example.org.pem
    ssl_key = <//etc/postfix/certs/key-example.org.pem
}
# mail.example.com
local_name mail.example.com {
    ssl_cert = </etc/postfix/certs/cert-example.com.pem
    ssl_key = <//etc/postfix/certs/key-example.com.pem
}

...

где секция Default указывает на сертификаты по-умолчанию. Ниже пишется секция для каждого почтового домена. Если у вас почтовая запись указывает на один домен (например mail), а в почтовом клиенте указывается imap, то и пишите для двух доменов записи.

После можно перезапустить сервисы

systemctl restart postfix dovecot

Источники:

Подписаться
Уведомить о
guest

2 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Олег
Олег
7 месяцев назад
#smtpd_tls_key_file = /etc/postfix/certs/key.pem
#smtpd_tls_cert_file = /etc/postfix/certs/cert.pem

Если их закомментировать — сервер перестает отдавать сертификаты на 465 и 587