Dominios virtuales con Postfix y SSL

21

Tengo una configuración de servidor de correo Postfix para alojar múltiples dominios virtuales (digamos xxx.comy yyy.com).

Los usuarios configuran su servidor de correo saliente como mail.xxx.comy mail.yyy.com. Todos los servidores de correo se refieren al mismo servidor físico de Postfix (misma IP, única instancia de Postfix que se ejecuta en este servidor Linux).

¿Qué certificado SSL necesito para la smtpd_tls_cert_fileopción de configuración de Postfix ?

¿O tengo que usar un solo certificado mail.xxx.comy decirles a los usuarios yyy.comque lo usen mail.xxx.comcomo su servidor saliente? Esto rompería la ilusión de servidores virtuales separados.

[Nota: los dominios están completamente separados. Estos no son múltiples subdominios que comparten una raíz común].

nimrodm
fuente

Respuestas:

10

¿O tengo que usar un solo certificado para mail.xxx.com y decirles a los usuarios de yyy.com que usen mail.xxx.com como su servidor saliente?

Sí, en última instancia, tendrá que hacer eso o usar un certificado con múltiples CommonNameo SubjAltNameatributos.

No hay forma de que Postfix pueda saber qué nombre de host solicitó el cliente. No existe el Hostencabezado HTTP / 1.1 que indica el dominio solicitado y Postfix aún no admite SNI .

Si realmente depende de tener dos dominios diferentes para su servidor de correo, deberá ejecutar dos instancias smtpden dos interfaces de red / direcciones IP separadas. Por lo general, simplemente elegirías un dominio "neutral" y les dirías a tus usuarios que lo usen.

joschi
fuente
19

En realidad ... Si desea que cada dominio use un certificado SSL válido, tiene 2 soluciones: usar un certificado multidominio o configurar cada dominio en una IP única. La primera solución es terrible: esos certificados suelen ser bastante caros (aunque puede encontrarlos de bajo costo), enumerarán todos los dominios que desea certificar en el mismo certificado y, lo más importante, solo se emiten una vez, por lo que agregar solo un nuevo dominio significa obtener un certificado completamente nuevo.

La mejor solución es colocar cada dominio en su propia IP y luego hacer coincidir cada certificado con su IP respectiva.

Así es como lo haces en postfix.

Primero colocará sus certificados para cada dominio en el directorio / etc / postfix / (también puede crear un directorio / etc / postfix / ssl / ) Nota: uso Plesk, que usa archivos de certificado .pem, pero también puede usar Archivos .key y .cer (los archivos .pem son solo una combinación de archivos .key y .cer, en ese orden)

entonces, necesita modificar el archivo master.cf en / etc / postfix /

Originalmente, el mío se veía así (probablemente porque agregué las últimas 3 IP después de configurar el servidor:

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

Ahora, para vincular cada certificado a su IP correspondiente, haga lo siguiente:

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

¡¡Eso es!! (no olvide comentar las líneas originales como se ve arriba)

PD: para hacer lo mismo para POP / IMAP si usa courier-imap, simplemente coloque copias de esos archivos .pem en / usr / share / courier-imap / (o en el caso de Plesk, los coloca en / usr / share / ) y los nombra de la siguiente manera: imapd.pem.xx.xx.xx.xx pop3d.pem.xx.xx.xx.xx

donde xx.xx.xx.xx es la dirección IP respectiva (los 2 certificados son copias del mismo archivo)

¡Espero que esto ayude!

Peter
fuente
¡Gracias por tomarse el tiempo para escribir una respuesta tan detallada! Estoy seguro de que ayudará a alguien en el futuro.
nimrodm
2
esa es la esperanza! Me tomó un tiempo para reconstruir esto juntos, y era raro encontrar soluciones que en realidad trabajaban, en lugar de alguien adivinando tal o cual trabajo puede ..
Pedro
1
Ahora puede usar letsencrypt para ir con el primer método. Puede tener certificados multidominio de forma gratuita
balping