Comment forcer l'adresse de l'expéditeur à être «logs-in-user@example.org» 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 "connected-in-user@example.org".

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:

a@example.org a
b@example.org b
c@example.org 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 "connected-in-user@example.org". Existe-t-il une option plus simple?

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.


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'à "test@example.org", 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 ( logs-in-user@example.org ) - 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 john.doe@example.com est uniquement autorisé à envoyer à partir de cette adresse mais pas à partir de john.doe@example.org (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

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.


Supposons que je puisse utiliser "regexp:" ici (?) Comment puis-je spécifier l'expression rationnelle telle que l'utilisateur "a" peut envoyer comme "a@example.org" mais pas comme "b@example.org"?
Chris Lercher

@sonstabo ce serait bien si vous incluez l'exemple de configuration
Jaime Hablutzel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.