Domaines virtuels avec Postfix et SSL

21

J'ai une configuration de serveur de messagerie Postfix pour héberger plusieurs domaines virtuels (disons xxx.comet yyy.com).

Les utilisateurs configurent leur serveur de courrier sortant comme mail.xxx.comet mail.yyy.com. Tous les serveurs de messagerie se réfèrent au même serveur physique Postfix (même IP, seule instance de Postfix fonctionnant sur ce serveur Linux).

De quel certificat SSL ai-je besoin pour l' smtpd_tls_cert_fileoption de configuration Postfix ?

Ou dois-je utiliser un seul certificat pour mail.xxx.comet dire aux utilisateurs de l' yyy.comutiliser mail.xxx.comcomme serveur sortant? Cela briserait l'illusion de serveurs virtuels séparés.

[Remarque: les domaines sont complètement séparés. Ce ne sont pas plusieurs sous-domaines partageant une racine commune].

nimrodm
la source

Réponses:

10

Ou dois-je utiliser un seul certificat pour mail.xxx.com et dire aux utilisateurs de yyy.com d'utiliser mail.xxx.com comme serveur sortant?

Oui, vous devrez finalement faire cela ou utiliser un certificat avec plusieurs attributs CommonNameou SubjAltName.

Postfix n'a aucun moyen de savoir quel nom d'hôte le client a demandé. Il n'y a rien de tel que l'en- Hosttête HTTP / 1.1 qui indique le domaine demandé et Postfix ne prend pas encore en charge SNI .

Si vous dépendez vraiment de deux domaines différents pour votre serveur de messagerie, vous devrez exécuter deux instances de smtpdsur deux interfaces réseau / adresses IP distinctes. Habituellement, vous choisissez simplement un domaine "neutre" et dites à vos utilisateurs de l'utiliser.

joschi
la source
19

En fait ... Si vous souhaitez que chaque domaine utilise un certificat SSL valide, vous avez 2 solutions: utiliser un certificat multi-domaine ou configurer chaque domaine sur une IP unique. La première solution est terrible: ces certificats sont généralement assez chers (bien que vous puissiez en trouver de peu coûteux), ils répertorieront tous les domaines que vous souhaitez certifier sur le même certificat, et, surtout, ils ne sont émis qu'une seule fois, donc en ajoutant un seul nouveau domaine signifie obtenir un certificat entièrement nouveau.

La meilleure solution consiste à placer chaque domaine sur sa propre IP, puis à faire correspondre chaque certificat à son IP respective.

Voici comment vous le faites dans postfix.

Vous placerez d'abord vos certificats pour chaque domaine dans le répertoire / etc / postfix / (vous pouvez également créer un répertoire / etc / postfix / ssl / ) Remarque: j'utilise Plesk, qui utilise des fichiers de certificats .pem, mais vous pouvez également utiliser Fichiers .key et .cer (les fichiers .pem ne sont qu'un enchaînement de fichiers .key et .cer, dans cet ordre)

ensuite, vous devez modifier le fichier master.cf dans / etc / postfix /

à l'origine, le mien ressemblait à ceci (probablement parce que j'ai ajouté les 3 dernières IP après avoir configuré le serveur:

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

Maintenant, pour lier chaque certificat à son IP correspondante, vous procédez comme suit:

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

C'est ça!! (n'oubliez pas de commenter les lignes originales comme vu ci-dessus)

PS: pour faire de même pour POP / IMAP si vous utilisez courier-imap, vous placez simplement des copies de ces fichiers .pem dans / usr / share / courier-imap / (ou dans le cas de Plesk, vous les placez dans / usr / share / ) et vous les nommez comme suit: imapd.pem.xx.xx.xx.xx pop3d.pem.xx.xx.xx.xx

où xx.xx.xx.xx est l'adresse IP respective (les 2 certificats sont des copies du même fichier)

J'espère que cela t'aides!

Peter
la source
Merci d'avoir pris le temps d'écrire une réponse aussi détaillée! Je suis sûr que cela aidera quelqu'un à l'avenir.
nimrodm
2
c'est ça l'espoir! Il m'a fallu un certain temps pour reconstituer tout cela, et il était rare de trouver des solutions qui fonctionnent réellement , plutôt que quelqu'un supposant ceci ou cela pourrait fonctionner ..
Peter
1
Vous pouvez maintenant utiliser letsencrypt pour utiliser la première méthode. Vous pouvez avoir des certificats multidomaines gratuitement
balping