Que vous envoyez vos mails en direct sur le net ou via un relais SMTP externe tel que M365, il faut penser à vérifier que les domaines utilisés soient les bons. Il arrive souvent d’avoir un nom de domaine ou suffixe DNS interne utilisé par les serveurs. Il est impératif de le retranscrire vers un nom de domaine publiquement valide.

J’explique ici le cas où le suffixe DNS interne est yourdomain.lan et le domaine externe est your-domain.tld

D’abord il faut distinguer 2 types de mails :

  • Ceux envoyés directement à partir de la machine ou une de ses applications locales
  • Ceux envoyés depuis la machine qui fait office de relais.

Ce sont bien 2 choses différentes pour postfix et donc 2 types de filtre différents.

Filtre de sortie pour les mails générés sur la machine

Votre serveur relais pouvant lui même envoyer un mail pour de la maintenance, mise à jour etc. Il est lui-même un serveur applicatif.

Dans le fichier main.cf, il faut renseigner cette directive :

sender_canonical_maps = regexp:/etc/postfix/sender_canonical_regexp

Exemple de contenu de /etc/postfix/sender_canonical_regexp pour rediriger que certains domaines :

/^(.*)@(.*)\.your-local-domain\.lan$/ ${2}-${1}@your-domain.tld
/^(.*)\ <(.*)@(.*)\.your-local-domain\.lan>$/ ${1} <${3}-${2}@your-domain.tld>

On oublie pas de faire un postmap :

postmap /etc/postfix/sender_canonical_regexp

Vous pouvez toujours ajouter un « catch all » à la fin comme décrit dans l’article précédent de réécriture de mail simple avec postfix.

Filtre de sortie pour les mails transitant sur notre relais interne

Typiquement vous avez un relais mail interne utilisé par vos autres serveurs. Il faut dans un premier temps ajouter votre adresse IP publique de sortie dans le champ SPF de votre nom de domaine. Le DKIM et DMARC permettent de sécurisé encore mieux l’authenticité de vos messages, mais une chose à la fois 🙂

Vous pouvez utilisez la directive header_checks ou smtp_header_checks. Dans mon cas j’ai besoin de faire 2 opérations pour le même filtre mail, ce qui n’est pas possible de base. Mais en jouant avec ces 2 directives, je peux arriver à mes fins : marquer les mails à problème et faire une réécriture de mail :
ATTENTION à l’ordre : c’est d’abord header_checks qui est interprété et ensuite smtp_header_checks. Il faut d’abords mettre le WARN et ensuite le REPLACE

Exemple pour faire un WARN et un REPLACE, on ajoute les directives dans le fichier main.cf :

header_checks = regexp:/etc/postfix/warn_checks_regexp
smtp_header_checks = regexp:/etc/postfix/header_checks_regexp

cat warn_checks_regexp :

/^From:\ (.*)@(.*)\.yourdomain\.lan$/ WARN bad sender
/^From:\ (.*)\ <(.*)@(.*)\.yourdomain\.lan>$/ WARN bad sender

cat header_checks_regexp :

/^From:\ (.*)@(.*)\.your-local-domain\.lan$/ REPLACE From: ${2}-${1}@your-domain.tld
/^From:\ (.*)\ <(.*)@(.*)\.your-local-domain\.lan>$/ REPLACE From: ${1} <${3}-${2}@your-domain.tld>

On oublie pas de faire un postmap :

postmap /etc/postfix/warn_checks_regexp
postmap /etc/postfix/header_checks_regexp

Le reste de votre configuration postfix dépendra :

  • Si vous envoyez directement les mails vers Internet, auquel cas je vous conseille de configurer les signatures DKIM et d’utiliser le record DNS DMARC
  • Si vous utilisez un serveur relais tel que M365 si vous y géré déjà vos services mails
Summary
Réécriture de mail - serveur relais postfix
Article Name
Réécriture de mail - serveur relais postfix
Description
différentes possibilités de réécriture d'adresse mail postfix, en tant que serveur relais vars Internet ou vers un relay M365
Author