Domínios virtuais com Postfix e SSL

21

Eu tenho uma configuração do servidor de correio Postfix para hospedar vários domínios virtuais (digamos xxx.come yyy.com).

Os usuários configuram o servidor de correio de saída como mail.xxx.come mail.yyy.com. Todos os servidores de correio se referem ao mesmo servidor Postfix físico (mesmo IP, instância única do Postfix em execução neste servidor Linux).

Qual certificado SSL eu preciso para a smtpd_tls_cert_fileopção de configuração do Postfix ?

Ou preciso usar um único certificado mail.xxx.come informar aos usuários yyy.compara usarem mail.xxx.comcomo servidor de saída? Isso quebraria a ilusão de servidores virtuais separados.

[Nota: os domínios são completamente separados. Esses não são vários subdomínios que compartilham uma raiz comum].

nimrodm
fonte

Respostas:

10

Ou preciso usar um único certificado para mail.xxx.com e pedir aos usuários do yyy.com que usem mail.xxx.com como servidor de saída?

Sim, em última análise, você terá que fazer isso ou usar um certificado com vários atributos CommonNameou SubjAltName.

Não há como o Postfix saber qual nome de host o cliente solicitou. Não existe um Hostcabeçalho HTTP / 1.1 que indique o domínio solicitado e o Postfix ainda não suporta SNI .

Se você realmente depende de ter dois domínios diferentes para o servidor de email, precisará executar duas instâncias smtpdem duas interfaces de rede / endereços IP separados. Normalmente, você apenas escolhe um domínio "neutro" e diz aos usuários para usá-lo.

joschi
fonte
19

Na verdade ... Se você deseja que cada domínio use um certificado SSL válido, você tem 2 soluções: use um certificado de vários domínios ou configure cada domínio em um IP exclusivo. A primeira solução é terrível: esses certificados geralmente são muito caros (embora você possa encontrar de baixo custo), eles listam todos os domínios que você deseja certificar no mesmo certificado e, o mais importante, são emitidos apenas uma vez, adicionando apenas um novo domínio significa obter um certificado totalmente novo.

A melhor solução é colocar cada domínio em seu próprio IP e depois corresponder cada certificado ao seu respectivo IP.

Aqui está como você faz isso no postfix.

Você primeiro colocará seus certificados para cada domínio no diretório / etc / postfix / (você também pode criar um diretório / etc / postfix / ssl / ) Nota: eu uso o Plesk, que usa arquivos de certificado .pem, mas você também pode usar arquivos .key e .cer (os arquivos .pem são apenas uma concat dos arquivos .key e .cer, nessa ordem)

então, você precisa modificar o arquivo master.cf em / etc / postfix /

originalmente, o meu era assim (provavelmente porque eu adicionei os últimos 3 IPs depois de configurar o 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

Agora, para vincular cada certificado ao seu IP correspondente, faça o seguinte:

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

É isso aí!! (não se esqueça de comentar as linhas originais, como visto acima)

PS: para fazer o mesmo com POP / IMAP se você usar o courier-imap, basta colocar cópias desses arquivos .pem em / usr / share / courier-imap / (ou, no caso do Plesk, coloque-os em / usr / share / ) e nomeie-os da seguinte forma: imapd.pem.xx.xx.xx.xx pop3d.pem.xx.xx.xx.xx

onde xx.xx.xx.xx é o respectivo endereço IP (os 2 certificados são cópias do mesmo arquivo)

Espero que isto ajude!

Pedro
fonte
Obrigado por escrever uma resposta tão detalhada! Tenho certeza de que ajudará alguém no futuro.
Nimrodm
2
essa é a esperança! Levei um tempo para remendar isso juntos, e era raro encontrar soluções que realmente trabalharam, ao invés de alguém surmising este ou aquele trabalho poderia ..
Peter
11
Agora você pode usar o letsencrypt para seguir com o primeiro método. Você pode ter certificados de vários domínios gratuitamente
impedindo