Postfix: sélection de l'hôte relais sur la base de: l'en-tête du courrier plutôt que l'expéditeur de l'enveloppe

9

J'ai réussi à configurer Postfix pour relayer les e-mails via Mandrill en utilisant SASL et sender_dependent_relayhost_mapsavec une table MySQL afin que différents expéditeurs se connectent à Mandrill en utilisant leur propre nom d'utilisateur et clé API Mandrill.

Jusqu'ici tout va bien, mais j'ai trois utilisateurs qui utilisent tous un fournisseur de services de messagerie et l'expéditeur dans l'enveloppe du message est défini sur "[email protected]" pour les trois utilisateurs, et le seul endroit contenant le courrier électronique de l'utilisateur réel l'adresse se trouve dans l'en- tête De: e-mail .

Je suis satisfait de la sécurité (ou de l'absence de sécurité) de l'utilisation de l'en- tête de courrier électronique From: car je ne transfère que des courriers électroniques envoyés à des adresses électroniques spécifiques qui sont étroitement contrôlées, mais je serais vraiment reconnaissant pour des suggestions sur la façon dont je peux spécifiez au mieux l'hôte relais en fonction de la valeur de l'en -tête From : . Existe-t-il un moyen de définir la valeur de l'enveloppe de la même manière que le champ De? Ou une autre façon de procéder?

Adrian Savage
la source
Les trois utilisateurs ont-ils utilisé les mêmes informations d'identification SASL?
masegaloeh
Non, ils ont chacun un identifiant SASL différent. Lorsqu'ils envoient directement depuis leur client de messagerie, il identifie correctement leur relais de messagerie et leurs informations d'identification SASL en fonction de leur adresse d'envoi. L'utilisation de l'ESP infusionmail.com rend impossible à ce stade d'effectuer la même recherche en fonction de l'expéditeur, car l'expéditeur est le même et ce n'est que l'en-tête de l'e-mail From: qui est différent.
Adrian Savage du

Réponses:

5

Sur la base de ce fil sur la mailing-list postfix: transport différent pour tout le courrier introduit via sendmail (1) , on dirait que votre cas était possible. Malheureusement, vous ne pouvez pas compter uniquement sur deux tables sender_dependent_relayhost_mapset smtp_sasl_password_maps. Vous devez modifier master.cf. L'idée consiste header_checksà acheminer le courrier électronique vers différents transports. Ensuite, dans chaque transport, nous définissons le client smtp qui utilise des informations d'identification indépendantes et relayhost.

Définissez d'abord header_checks dans main.cf et sa table 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]

Bon, maintenant nous installons smtp1, smtp2, smtp3transport 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

Le fichier smtpX.relaya un contenu similaire, par exemple

[hostX.example.com]   userX:passwordX

Avertissement:

masegaloeh
la source
0

Cela a fonctionné pour moi avec un changement: l'action "FILTER" doit être ajoutée dans le fichier 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]

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

Aurel
la source