Виртуальные домены с Postfix и SSL

21

У меня есть почтовый сервер Postfix для размещения нескольких виртуальных доменов (скажем, xxx.comи yyy.com).

Пользователи настраивают свой сервер исходящей почты как mail.xxx.comи mail.yyy.com. Все почтовые серверы ссылаются на один и тот же физический сервер Postfix (один и тот же IP-адрес, один экземпляр Postfix, работающий на этом сервере Linux).

Какой SSL-сертификат мне нужен для smtpd_tls_cert_fileнастройки Postfix ?

Или я должен использовать один сертификат mail.xxx.comи указывать пользователям yyy.comиспользовать mail.xxx.comих в качестве исходящего сервера? Это разрушило бы иллюзию отдельных виртуальных серверов.

[Примечание: домены полностью разделены. Это не несколько поддоменов, имеющих общий корень.

nimrodm
источник

Ответы:

10

Или мне нужно использовать один сертификат для mail.xxx.com и указать пользователям yyy.com использовать mail.xxx.com в качестве своего исходящего сервера?

Да, в конечном итоге вам придется либо сделать это, либо использовать сертификат с несколькими CommonNameили SubjAltNameатрибутами.

Postfix не может знать, какое имя хоста запрашивал клиент. Нет такой вещи, как, например, Hostзаголовок HTTP / 1.1, который указывает запрашиваемый домен, а Postfix еще не поддерживает SNI .

Если вы действительно зависите от наличия двух разных доменов для своего почтового сервера, вам придется запустить два экземпляра smtpdна двух отдельных сетевых интерфейсах / IP-адресах. Обычно вы просто выбираете «нейтральный» домен и говорите своим пользователям об этом.

Joschi
источник
19

На самом деле ... Если вы хотите, чтобы каждый домен использовал действующий сертификат SSL, у вас есть 2 решения: использовать многодоменный сертификат или настроить каждый домен на уникальный IP-адрес. Первое решение ужасно: эти сертификаты, как правило, довольно дорогие (хотя вы можете найти недорогие), в них будут перечислены все домены, которые вы хотите сертифицировать по одному и тому же сертификату, и, что наиболее важно, они выдаются только один раз, поэтому добавление только один новый домен означает получение совершенно нового сертификата.

Лучшее решение - разместить каждый домен на своем IP-адресе, а затем сопоставить каждый сертификат с соответствующим IP-адресом.

Вот как вы делаете это в postfix.

Сначала вы поместите свои сертификаты для каждого домена в каталог / etc / postfix / (вы также можете создать каталог / etc / postfix / ssl / ). Примечание: я использую Plesk, который использует файлы сертификатов .pem, но вы также можете использовать Файлы .key и .cer (файлы .pem - это только конкат .key и .cer, в указанном порядке)

затем вам нужно изменить файл master.cf в / etc / postfix /

Первоначально мой выглядел так (вероятно, потому что я добавил последние 3 IP-адреса после того, как я настроил сервер:

1.1.1.1- unix - n n - - smtp -o smtp_bind_address=1.1.1.1 -o smtp_bind_address6= -o smtp_address_preference=ipv4

2.2.2.2- unix - n n - - smtp -o smtp_bind_address=2.2.2.2 -o smtp_bind_address6= -o smtp_address_preference=ipv4

smtp inet n - n - - smtpd
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticate d,reject -o smtpd_sender_restrictions=

3.3.3.3- unix - n n - - smtp -o smtp_bind_address=3.3.3.3 -o smtp_bind_address6= -o smtp_address_preference=ipv4

4.4.4.4- unix - n n - - smtp -o smtp_bind_address=4.4.4.4 -o smtp_bind_address6= -o smtp_address_preference=ipv4

5.5.5.5- unix - n n - - smtp -o smtp_bind_address=5.5.5.5 -o smtp_bind_address6= -o smtp_address_preference=ipv4

Теперь, чтобы привязать каждый сертификат к соответствующему IP, вы должны сделать следующее:

1.1.1.1- unix - n n - - smtp -o smtp_bind_address=1.1.1.1 -o smtp_bind_address6= -o smtp_address_preference=ipv4

2.2.2.2- unix - n n - - smtp -o smtp_bind_address=2.2.2.2 -o smtp_bind_address6= -o smtp_address_preference=ipv4

3.3.3.3- unix - n n - - smtp -o smtp_bind_address=3.3.3.3 -o smtp_bind_address6= -o smtp_address_preference=ipv4

4.4.4.4- unix - n n - - smtp -o smtp_bind_address=4.4.4.4 -o smtp_bind_address6= -o smtp_address_preference=ipv4

5.5.5.5- unix - n n - - smtp -o smtp_bind_address=5.5.5.5 -o smtp_bind_address6= -o smtp_address_preference=ipv4

#smtp inet n - n - - smtpd
#smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
#submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions=

1.1.1.1:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert1.pem -o smtpd_tls_key_file=/etc/postfix/cert1.pem
1.1.1.1:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert1.pem -o smtpd_tls_key_file=/etc/postfix/cert1.pem
1.1.1.1:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert1.pem -o smtpd_tls_key_file=/etc/postfix/cert1.pem

2.2.2.2:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert2.pem -o smtpd_tls_key_file=/etc/postfix/cert2.pem
2.2.2.2:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert2.pem -o smtpd_tls_key_file=/etc/postfix/cert2.pem
2.2.2.2:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert2.pem -o smtpd_tls_key_file=/etc/postfix/cert2.pem

3.3.3.3:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert3.pem -o smtpd_tls_key_file=/etc/postfix/cert3.pem
3.3.3.3:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert3.pem -o smtpd_tls_key_file=/etc/postfix/cert3.pem
3.3.3.3:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert3.pem -o smtpd_tls_key_file=/etc/postfix/cert3.pem

4.4.4.4:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert4.pem -o smtpd_tls_key_file=/etc/postfix/cert4.pem
4.4.4.4:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert4.pem -o smtpd_tls_key_file=/etc/postfix/cert4.pem
4.4.4.4:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert4.pem -o smtpd_tls_key_file=/etc/postfix/cert4.pem

5.5.5.5:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert5.pem -o smtpd_tls_key_file=/etc/postfix/cert5.pem
5.5.5.5:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert5.pem -o smtpd_tls_key_file=/etc/postfix/cert5.pem
5.5.5.5:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert5.pem -o smtpd_tls_key_file=/etc/postfix/cert5.pem

Это оно!! (не забудьте закомментировать исходные строки, как показано выше)

PS: чтобы сделать то же самое для POP / IMAP, если вы используете courier-imap, вы просто помещаете копии этих файлов .pem в / usr / share / courier -imap / (или в случае Plesk вы помещаете их в / usr / share / ) и вы называете их следующим образом: imapd.pem.xx.xx.xx.xx pop3d.pem.xx.xx.xx.xx

где xx.xx.xx.xx - соответствующий IP-адрес (2 сертификата являются копиями одного и того же файла)

Надеюсь это поможет!

Питер
источник
Спасибо, что нашли время, чтобы написать такой подробный ответ! Я уверен, что это поможет кому-то в будущем.
нимродм
2
это надежда! Мне потребовалось некоторое время, чтобы собрать это воедино, и было редко найти решения, которые действительно работали, а не кто-то предполагал, что это может сработать ..
Питер
1
Теперь вы можете использовать letsencrypt для первого метода. Вы можете иметь многодоменные сертификаты бесплатно
балпинг