SCROLL
Среднее время на прочтение: 2 мин.

Использование Server Name Indication (SNI) в Postfix и Dovecot

Server Name Indication (SNI) — это расширение TLS, позволяющее клиенту указать домен, к которому он подключается. Сервер, в свою очередь, выбирает соответствующий сертификат. Этот механизм широко используется на веб-сайтах, но в почтовых серверах применяется реже. Он также помогает избежать ошибок типа «несоответствие имени сервера».

SNI необходимо использовать в случаях, когда:

  • На одном сервере размещено несколько почтовых доменов, и каждому требуется свой SSL-сертификат.
  • Используется один IP-адрес для нескольких доменов, но сертификаты для них разные.

Поддержка SNI в Postfix и Dovecot:

  • Postfix поддерживает SNI начиная с версии 3.4.0 1
  • Dovecot также поддерживает SNI 2.

Рассмотрим ниже как выполнить настройку SNI в Postfix + Dovecot.

Настройка SNI в Postfix

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

/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 и добавьте в него соответствие доменов и сертификатов:

/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 укажите сертификаты:

/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 выполнена успешно.

  1. Документация Postfix TLS Support — https://www.postfix.org/TLS_README.html ↩︎
  2. Документация Dovecot SSL — https://doc.dovecot.org/2.3/configuration_manual/dovecot_ssl_configuration/ ↩︎
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.