Comment forcer l'adresse de l'expéditeur à être «[email protected]» dans Postfix?

15

J'ai configuré un serveur Postfix avec SMTP AUTH (STARTTLS sur le port 587). Tous mes utilisateurs sont dans le domaine "example.org". Je veux faire en sorte que l'adresse de l'expéditeur soit "[email protected]".

J'ai appris que cela peut être réalisé avec les options main.cf

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

avec un fichier login_maps comme:

[email protected] a
[email protected] b
[email protected] c
...

(voir aussi Bloquer l'adresse d'usurpation d'usurpation avec SMPT AUTH ), mais cela signifierait que je devrai modifier le fichier login_maps chaque fois que j'ai un nouvel utilisateur. Je n'ai pas besoin d'un mappage aussi flexible: il devrait toujours être "[email protected]". Existe-t-il une option plus simple?

Chris Lercher
la source

Réponses:

14

Tout d'abord, vérifiez si votre installation de Postfix prend en charge pcre en entrant la commande postconf -met en recherchant une ligne avec pcre. Une fois que vous avez vérifié que vous disposez du support pcre, vous pouvez procéder comme suit:

/etc/postfix/login_maps.pcre:

/^(.*)@example\.org$/   ${1}

Dans main.cf:

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

Cela devrait bien fonctionner.

mailq
la source
C'est parfait. Exactement ce que je cherchais!
Chris Lercher
3
Pour les utilisateurs d'Ubuntu, vous pouvez obtenir pcre avec postfix sudo apt-get install postfix-pcre. C'était peut-être évident pour la plupart.
NeilMonday
Pas moyen d'omettre le domaine dans l'expression régulière ou la $myhostnamevariable de référence ?. Ici, vous pouvez voir que Postfix est capable de rechercher la table de recherche par la partie utilisateur de l'e-mail ...
Jaime Hablutzel
Je pense que vous voudrez faire un backslash-échapper au '.' dans le nom de domaine, il est donc interprété comme une correspondance littérale: /^(.*)@example\.org$/
Arnon
Sinon, cela correspond à "test @ exampleXorg" ainsi qu'à "[email protected]", ce qui n'est peut-être pas exactement le comportement souhaité.
Arnon
6

Le regex mentionné dans l'autre réponse correspond à la partie utilisateur de l'adresse e-mail ( utilisateur connecté @ example.org). Voici quelques informations supplémentaires.

Pour utiliser l'adresse e-mail complète comme nom d'utilisateur, utilisez l'expression régulière suivante (par exemple dans /etc/postfix/login_map):

/^(.*)$/   ${1}

Cela signifie que votre nom d'utilisateur est toujours votre adresse e-mail complète ( [email protected] ) - aucun autre nom d'utilisateur existant n'est autorisé à envoyer à partir de cette adresse - et vous n'avez pas à mettre à jour un fichier de configuration Postfix supplémentaire chaque fois que vous ajouter un utilisateur.

Cela peut être utilisé sur un serveur sur lequel plusieurs domaines sont configurés. L'utilisateur [email protected] est uniquement autorisé à envoyer à partir de cette adresse mais pas à partir de [email protected] (utilisateur et e-mail différents, personne différente). Le nom d'utilisateur john.doe serait ambigu dans ce cas.

En outre, selon votre configuration, le paramètre smtpd_sender_login_maps, qui doit pointer vers ce fichier, peut se trouver dans le fichier master.cf (au lieu de main.cf). La documentation officielle de Dovecot a l'exemple suivant (si vous utilisez SASL / soumission):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

Dans cet exemple, le paramètre doit être ajusté pour pointer vers le bon fichier et utiliser regex ou (mieux) pcre comme type. Surtout si un fichier appelé "virtuel" est déjà utilisé dans un autre but (par exemple pour virtual_alias_maps, comme indiqué dans un exemple officiel de Postfix ), un autre fichier doit être utilisé pour le mappage de connexion.

De:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

À:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map
c0xc
la source
0

Pouvez-vous utiliser une combinaison d'expressions rationnelles sur l'en-tête, comme illustré ici: http://www.akadia.com/services/postfix_uce.html ? Ensuite, vous pouvez combiner avec regexp comme [*@example.org] pour garantir uniquement l'expéditeur de example.org.

sonstabo
la source
Supposons que je puisse utiliser "regexp:" ici (?) Comment puis-je spécifier l'expression rationnelle telle que l'utilisateur "a" peut envoyer comme "[email protected]" mais pas comme "[email protected]"?
Chris Lercher
@sonstabo ce serait bien si vous incluez l'exemple de configuration
Jaime Hablutzel