Virtuelle Domänen mit Postfix und SSL

20

Ich habe ein Postfix-Mailserver-Setup für das Hosten mehrerer virtueller Domänen (z. B. xxx.comund yyy.com).

Benutzer konfigurieren ihren Postausgangsserver als mail.xxx.comund mail.yyy.com. Alle Mailserver verweisen auf denselben physischen Postfix-Server (dieselbe IP, einzelne Instanz von Postfix, die auf diesem Linux-Server ausgeführt wird).

Welches SSL-Zertifikat benötige ich für die Postfix- smtpd_tls_cert_fileKonfigurationsoption?

Oder muss ich ein einzelnes Zertifikat verwenden mail.xxx.comund den Benutzern mitteilen yyy.com, dass sie es mail.xxx.comals Ausgangsserver verwenden sollen? Dies würde die Illusion separater virtueller Server zerstören.

[Hinweis: Die Domains sind völlig getrennt. Hierbei handelt es sich nicht um mehrere Subdomains, die sich eine gemeinsame Wurzel teilen.

Nimrodm
quelle

Antworten:

10

Oder muss ich ein einzelnes Zertifikat für mail.xxx.com verwenden und Benutzer von yyy.com anweisen, mail.xxx.com als Ausgangsserver zu verwenden?

Ja, letztendlich müssen Sie entweder das tun oder ein Zertifikat mit mehreren CommonNameoder SubjAltNameAttributen verwenden.

Postfix kann auf keinen Fall wissen, welchen Hostnamen der Client angefordert hat. Es gibt keinen HTTP / 1.1- HostHeader, der die angeforderte Domain angibt, und Postfix unterstützt SNI noch nicht.

Wenn Sie wirklich davon abhängen, zwei verschiedene Domänen für Ihren Mailserver zu haben, müssen Sie zwei Instanzen von smtpdauf zwei separaten Netzwerkschnittstellen / IP-Adressen ausführen . Normalerweise wählen Sie einfach eine "neutrale" Domain und weisen Ihre Benutzer an, diese zu verwenden.

joschi
quelle
19

Eigentlich ... Wenn Sie möchten, dass jede Domain ein gültiges SSL-Zertifikat verwendet, haben Sie zwei Möglichkeiten: Verwenden Sie ein Multi-Domain-Zertifikat oder richten Sie jede Domain auf einer eindeutigen IP ein. Die erste Lösung ist furchtbar: Diese Zertifikate sind normalerweise recht teuer (obwohl Sie preiswerte Zertifikate finden können), sie listen alle Domänen auf, die Sie auf demselben Zertifikat zertifizieren möchten, und vor allem werden sie nur einmal ausgestellt Mit nur einer neuen Domain erhalten Sie ein völlig neues Zertifikat.

Die bessere Lösung besteht darin, jede Domain auf ihre eigene IP zu setzen und dann jedes Zertifikat mit ihrer jeweiligen IP abzugleichen.

Hier ist, wie Sie es in Postfix tun.

Sie legen zuerst Ihre Zertifikate für jede Domain im Verzeichnis / etc / postfix / ab (Sie können auch ein Verzeichnis / etc / postfix / ssl / erstellen ) .key- und .cer-Dateien (.pem-Dateien bestehen in dieser Reihenfolge nur aus .key- und .cer-Dateien)

Dann müssen Sie die Datei master.cf in / etc / postfix / ändern.

ursprünglich sah meins so aus (wahrscheinlich, weil ich die letzten 3 IPs hinzugefügt habe, nachdem ich den Server eingerichtet habe:

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

Gehen Sie wie folgt vor, um jedes Zertifikat an die entsprechende IP-Adresse zu binden:

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

Das ist es!! (Vergiss nicht, die Originalzeilen wie oben zu kommentieren)

PS: Um dasselbe für POP / IMAP zu tun, wenn Sie Courier-Imap verwenden, legen Sie einfach Kopien dieser .pem-Dateien in / usr / share / courier-imap / ab (oder im Fall von Plesk legen Sie sie in / usr ab) / share / ) und Sie benennen sie wie folgt: imapd.pem.xx.xx.xx.xx pop3d.pem.xx.xx.xx.xx

Dabei steht xx.xx.xx.xx für die jeweilige IP-Adresse (die beiden Zertifikate sind Kopien derselben Datei).

Hoffe das hilft!

Peter
quelle
Vielen Dank, dass Sie sich die Zeit genommen haben, eine so detaillierte Antwort zu schreiben! Ich bin mir sicher, dass es in Zukunft jemandem helfen wird.
Nimrodm
2
Das ist die Hoffnung! Ich brauchte eine Weile, um das zusammenzufügen, und es war selten, Lösungen zu finden, die tatsächlich funktionierten, anstatt dass jemand vermutete, dass dies oder das funktionieren könnte.
Peter,
1
Jetzt können Sie letsencrypt verwenden, um mit der ersten Methode fortzufahren. Sie können Multidomain-Zertifikate kostenlos
herunterladen