Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

тогда вам нужно изменить master.cf файл в / и т.д. / постфикс /

Изначально мой выглядел так (вероятно, потому, что я добавил последние 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 сертификата являются копиями одного и того же файла)

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

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

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

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

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