Использование Server Name Indication (SNI) в Postfix и Dovecot
Server Name Indication (SNI) — это расширение TLS, позволяющее клиенту указать домен, к которому он подключается. Сервер, в свою очередь, выбирает соответствующий сертификат. Этот механизм широко используется на веб-сайтах, но в почтовых серверах применяется реже. Он также помогает избежать ошибок типа «несоответствие имени сервера».
SNI необходимо использовать в случаях, когда:
- На одном сервере размещено несколько почтовых доменов, и каждому требуется свой SSL-сертификат.
- Используется один IP-адрес для нескольких доменов, но сертификаты для них разные.
Поддержка SNI в Postfix и Dovecot:
Рассмотрим ниже как выполнить настройку SNI в Postfix + Dovecot.
Настройка SNI в Postfix
В файле /etc/postfix/main.cf
добавьте следующие параметры:
# Индексированная SNI-таблица должна быть создана командой "postmap -F"
tls_server_sni_maps = hash:/etc/postfix/sni_maps
# Основной сертификат для исходящих соединений
smtpd_tls_chain_files =
/etc/letsencrypt/live/mail.example.com/privkey.pem
/etc/letsencrypt/live/mail.example.com/fullchain.pem
Создайте файл /etc/postfix/sni_maps
и добавьте в него соответствие доменов и сертификатов:
mail.example.com /etc/letsencrypt/live/mail.example.com/privkey.pem /etc/letsencrypt/live/mail.example.com/fullchain.pem
mail.example2.net /etc/letsencrypt/live/mail.example2.net/privkey.pem /etc/letsencrypt/live/mail.example2.net/fullchain.pem
Примените настройки и перезапустите Postfix:
postmap -F hash:/etc/postfix/sni_maps
systemctl restart postfix
Настройка SNI в Dovecot
В файле /etc/dovecot/dovecot.conf
укажите сертификаты:
# Основной (по умолчанию, можно не указывать)
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
# mail.example.com
local_name mail.example.com {
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
}
# mail.example2.net
local_name mail.example2.net {
ssl_cert = </etc/letsencrypt/live/mail.example2.net/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example2.net/privkey.pem
}
Перезагрузите Dovecot:
systemctl restart dovecot
Тестирование SNI
Проверьте, что сервер предоставляет корректный сертификат для домена:
domain="mail.example.com"
(sleep 1; echo . logout) | openssl s_client -connect $domain:imap -starttls imap -servername $domain 2>/dev/null | openssl x509 -noout -subject -dates
Если вывод содержит информацию о нужном сертификате, настройка SNI выполнена успешно.
- Документация Postfix TLS Support — https://www.postfix.org/TLS_README.html ↩︎
- Документация Dovecot SSL — https://doc.dovecot.org/2.3/configuration_manual/dovecot_ssl_configuration/ ↩︎
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.