Postfix: selecionando o host de retransmissão com base no cabeçalho De: mail em vez do remetente do envelope

9

Configurei com êxito o Postfix para retransmitir e-mails via Mandrill usando SASL e sender_dependent_relayhost_mapscom uma tabela MySQL para que diferentes remetentes se conectem ao Mandrill usando seu próprio nome de usuário e chave de API do Mandrill.

Até aí tudo bem, mas eu tenho três usuários que usam um provedor de serviços de email e o remetente no envelope da mensagem está definido como "[email protected]" para todos os três usuários e o único local que contém o email do usuário real O endereço está no cabeçalho De: email .

Estou feliz com a segurança (ou a falta dela) de usar o cabeçalho De: pois estou encaminhando apenas emails enviados para endereços de email específicos que são rigidamente controlados, mas ficaria muito grato por sugestões sobre como posso melhor especificar a relayhost com base no valor do cabeçalho From: . Existe alguma maneira de definir o valor do envelope como o campo De? Ou alguma outra maneira de fazer isso?

Adrian Savage
fonte
Os três usuários usaram a mesma credencial SASL?
Masegaloeh
Não, cada um deles tem uma credencial SASL diferente. Quando eles estão enviando diretamente pelo cliente, eles identificam corretamente a retransmissão de email e as credenciais SASL com base no endereço de envio. O uso do infusionmail.com ESP está impossibilitando, neste estágio, a mesma pesquisa com base no remetente, pois o remetente é o mesmo e é apenas o cabeçalho De: diferente.
Adrian Savage

Respostas:

5

Com base neste tópico na lista de discussão do postfix: transporte diferente para todo o correio introduzido via sendmail (1) , parece que seu caso foi possível. Infelizmente você não pode confiar apenas em duas tabelas sender_dependent_relayhost_mapse smtp_sasl_password_maps. Você precisa modificar master.cf. A idéia está sendo usada header_checkspara rotear email para transporte diferente. Em cada transporte, definimos o cliente smtp que usa credenciais independentes e relayhost.

Primeiro defina header_checks no main.cf e sua tabela pcre

#main.cf
header_checks = pcre:/etc/postfix/header_dependent_relay

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       smtp3:[host3.example.com]

Bom, agora nós configuração smtp1, smtp2, smtp3transporte em master.cf

#master.cf
smtp1    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp1.relay
smtp2    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp2.relay
smtp3    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp3.relay

O arquivo smtpX.relaytem conteúdo semelhante, por exemplo

[hostX.example.com]   userX:passwordX

Aviso Legal:

masegaloeh
fonte
0

Isso funcionou para mim com uma alteração: a ação "FILTER" precisa ser adicionada no arquivo header_dependent_relay :

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       FILTER smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       FILTER smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       FILTER smtp3:[host3.example.com]

Consulte http://www.postfix.org/header_checks.5.html

Aurel
fonte