Віртуальні домени з 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як вихідний сервер? Це порушило б ілюзію окремих віртуальних серверів.

[Примітка: домени повністю окремі. Це не кілька субдоменів, що мають спільний корінь].

Відповіді:


10

Або мені потрібно використовувати один сертифікат для mail.xxx.com і сказати користувачам yyy.com використовувати mail.xxx.com як свій вихідний сервер?

Так, в кінцевому рахунку вам доведеться це зробити або використовувати сертифікат з кількома CommonNameабо SubjAltNameатрибутами.

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

Якщо ви дійсно залежите від наявності двох різних доменів для вашого поштового сервера, вам доведеться запустити два екземпляри smtpdна двох окремих мережевих інтерфейсах / IP-адресах. Зазвичай ви просто виберете "нейтральний" домен і скажете своїм користувачам користуватися цим.


19

Насправді ... Якщо ви хочете, щоб кожен домен використовував дійсний сертифікат SSL, у вас є два рішення: використовувати сертифікат з кількома доменами або налаштувати кожен домен на унікальній 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 сертифікати - це копії одного файлу)

Сподіваюся, це допомагає!


Дякуємо, що знайшли час, щоб написати таку детальну відповідь! Я впевнений, що це допоможе комусь у майбутньому.
nimrodm

2
ось надія! Мені знадобилося певний час, щоб скласти це разом, і рідко було знайти рішення, яке насправді спрацювало, а не хтось, хто здогадується на тому чи іншому, може спрацювати ..
Петро,

1
Тепер ви можете використовувати letsencrypt для першого методу. Ви можете мати багатодоменні сертифікати безкоштовно
балінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.