Traductions d'adresses


Introduction au système de traduction des adresses de Postfix

La réécriture des adresses fait partie intégrante du système de courrier Postfix. Postfix réécrit les adresses dans beaucoup de situations. Certaines sont surtout cosmétiques et d'autres indispensables pour livrer correctement le courrier à destination. Ces réécritures sont :

Bien que Postfix n'est pas de langage de réécriture d'adresses, il peut surprendre par la puissance de son système de table de correspondance. Typiquement, Postfix utilise ces tables pour faire correspondre les adresses une à une ou groupe par groupe et peut en particulier utiliser des expressions rationnelles pour établir la correspondance d'adresses vers une ou plusieurs. Ces tables prédéfinies peut prendre la forme d'un fichier local ou d'une base de données NIS, LDAP ou SQL. La page DATABASE_README présente les tables de correspondances Postfix.

Sujets couverts par ce document :

Réécrire ou non, ou labelliser comme invalide

Les versions 2.1 et antérieures de Postfix réécrivent toujours les adresses dans les en-têtes de message et ajoutent le domaine propriété de Postfix aux adresses incomplètes. Alors que la réécriture des en-têtes de message est OK pour les messages d'origine locale, elle n'est pas souhaitable pour les messages extérieurs :

La version 2.2 de Postfix vous donne la possibilité de choisir de réécrire ou non les en-têtes de message des clients SMTP distants, ou de labelliser les adresses incomplètes de tels en-têtes comme invalides. Fonctionnement :

Introduction à la traduction d'adresse Postfix

Le schéma ci-dessous montre les éléments de Postfix intervenant plus particulièrement dans les traductions d'adresses. Voyez la page OVERVIEW pour avoir un aperçu de l'architecture complête de Postfix. Les noms suivis d'un numéro sont les programmes démons de Postfix et les autres désignent les files d'attente ou les sources internes des messages.

trivial-
rewrite(8)

(forme standard)
trivial-
rewrite(8)

(resolution)
^
|
|
v
^
|
|
v
smtpd(8) >- cleanup(8) -> incoming -> active -> qmgr(8) -< smtp(8)
qmqpd(8) lmtp(8)
pickup(8) local(8)
^
|
^
|
|
v
rebonds
transferts
notifications
deferred

Le tableau ci-dessous résume toutes les manipulations d'adresses opérées par Postfix. Si vous lisez ce document pour la première fois, rendez-vous au paragraphe Address rewriting when mail est received Après l'avoir lu, ce tableau vous aidera à trouver rapidement ce que vous cherchez.

Manipulations d'adresses Portée Démon Paramètre d'activation global Paramètre de désactivation sélectif
Réécrire les adresses à la forme standard tout le courrier trivial-
rewrite(8)
append_at_myorigin, append_dot_mydomain, swap_bangpath, allow_percent_hack local_header_rewrite_clients, remote_header_rewrite_domain
Correspondance canonique tout le courrier cleanup(8) canonical_maps receive_override_options, local_header_rewrite_clients, remote_header_rewrite_domain
Masquage d'adresse tout le courrier cleanup(8) masquerade_domains receive_override_options, local_header_rewrite_clients, remote_header_rewrite_domain
Ajout automatic d'un destinataire caché (BCC) nouveau message cleanup(8) always_bcc, sender_bcc_maps, recipient_bcc_maps receive_override_options
Alias virtuel tout le courrier cleanup(8) virtual_alias_maps receive_override_options
Résolution d'une adresse de destination tout le courrier trivial-
rewrite(8)
aucun aucun
Routage du courrier tout le courrier trivial-
rewrite(8)
transport_maps aucun
Table des utilisateurs déplacés tout le courrier trivial-
rewrite(8)
relocated_maps aucun
Table de correspondance générique courrier SMTP sortant smtp(8) smtp_generic_maps aucun
Base locale des alias Courrier local seulement local(8) alias_maps aucun
Fichiers utilisateurs .forward Courrier local seulement local(8) forward_path aucun
Récupération locale de toutes les adresses (courrier perdu) Courrier local seulement local(8) luser_relay aucun

Réécriture des adresses à la réception

Le serveur cleanup(8) reçoit le courrier provenant de l'extérieur et de Postfix lui-même tels les courriers à transférer, le courrier non-livrable renvoyé à l'expéditeur et les notifications à postmaster.

Le serveur cleanup(8) modifie l'expéditeur, le destinataire et le contenu du message dans la forme standard avant de l'envoyer dans la file d'attente incoming. Il modifie l'expéditeur et le destinataire dans les en-têtes et l'enveloppe du message, ajoute les en-têtes manquants tels From: ou Date: qui sont impératifs dans les courriers standards et supprime les en-têtes de message tels Bcc: qui doivent disparaitre. Le serveur cleanup(8) délègue les opérations de traduction les plus complexes au serveur trivial-rewrite(8) tel que décrit plus bas.

Les manipulations d'adresses à ce niveau sont  :

Réécriture à la forme standard

Avant que le démon cleanup(8) ne remplace une adresse en utilisant une table de correspondance, il réécrit les adresses à la forme standard "utilisateur@nom.de.domaine.qualifié", en les envoyant au démon trivial-rewrite(8). Le but ici est de réduire le nombre d'entrées dans les tables de correspondances

Le démon trivial-rewrite(8) de Postfix implémente nativement les manipulations d'adresses suivantes :

Transforme "@machineA,@machineB:utilisateur@site" en "utilisateur@site"

La forme ci-dessus s'appelle une adresse de route et indique que le courrier à destination de "utilisateur@site" doit être délivré via les machines A et B. Son utilisation est totalement obsolète. Postfix ne sait pas traiter les adresses de route autrement qu'en ne retenant que l'adresse finale.

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Transforme "site!utilisateur" en "utilisateur@site"

Cette fonctionnalité est contrôlée par le paramètre booléen swap_bangpath (défaut: yes). Son but est de transformer les adresses UUCP en adresses classiques. C'est utile uniquement si vous recevez du courrier via UUCP.

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Transforme "utilisateur%domain" en "user@domain"

Cette fonctionnalité est contrôlée par le paramètre booléen allow_percent_hack (défaut: yes). Typiquement, c'est utilisé pour traiter les monstuosités du style "utilisateur%domaine@autre.domaine".

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Transforme "utilisateur" en "utilisateur@$myorigin"

Cette fonctionnalité est contrôlée par le paramètre booléen append_at_myorigin (défaut: yes). Il est préférable de ne jamais la désactiver car beaucoup de composants de Postfix nécessitent d'avoir des adresses sous la forme "utilisateur@domaine".

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Si votre machine n'est pas le serveur de courrier principal du domaine $myorigin et que vous souhaitez avoir quelques utilisateurs livrés localement sans passer par le serveur principal, créez une entrée la table des alias virtuels qui redirige "utilisateur@$myorigin" vers "utilisateur@$myhostname". Voyez aussi le paragraphe "livrer certains utilisateurs localement" de la page STANDARD_CONFIGURATION_README.

Transforme "utilisateur@machine" en "user@machine.$mydomain"

Cette fonctionnalité est contrôlée par le paramètre booléen append_dot_mydomain (défaut: yes). Le but ici est d'obtenir un traitement homogène des différentes formes du nom de la même machine.

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Certains jugeront incorrect de réécrire "machine" en "machine.domain". C'est pourquoi cette fonctionnalité est désactivable. D'autres trouveront convenable d'ajouter automatiquement le nom de domaine propriété de Postfix.

Transforme "utilisateur@site." en "utilisateur@site" (sans point à la fin).

Le suffixe '.' est supprimé. Toutefois, une adresse se terminant par plusieurs points sera considérée invalide et rejetée.

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Correspondances canoniques

Le démon cleanup(8) utilise la table canonical(5) pour réécrire toutes les adresses dans l'enveloppe et les en-têtes du message. Par défaut, toutes les adresses des en-têtes et de l'enveloppe sont réécrites ; ceci est contrôlé par le paramètre de configuration canonical_classes.

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Ceci est effectué pour les adresses locales et distantes. Ces correspondances sont pratiques pour remplacer les noms de login en adresses sous la forme "prénom.nom" ou pour nettoyer les adresses invalides produites par les systèmes de messagerie.

Cette fonctionnalité est désactivée par défaut. Pour l'activer, renseignez le paramètre canonical_maps dans le fichier fichier main.cf et indiquez une ou plusieurs tables de correspondances séparées par des espaces ou des virgules.

Exemple :

/etc/postfix/main.cf :
    canonical_maps = hash:/etc/postfix/canonical

/etc/postfix/canonical:
    wietse        Wietse.Venema

Pour les correspondances statiques comme montré ci-dessus, les tables de correspondances de type hash:, ldap:, mysql: or pgsql: suffisent. Pour les correspondances dynamiques, vous pouvez utiliser les tables d'expressions rationnelles. Ceci suppose que vous soyez familiarisé avec les concepts exposés dans les pages regexp_table(5), pcre_table(5) et canonical(5).

En supplément des correspondances canoniques qui sont appliquées à l'expéditeur et au destinataire, vous pouvez spécifier séparemment les correspondances à appliquer aux adresses d'expédition et de destination.

Exemple :

/etc/postfix/main.cf :
    sender_canonical_maps = hash:/etc/postfix/sender_canonical
    recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

Ces correspondances sont appliquées avant les correspondances communes. Les paramètres sender_canonical_classes et recipient_canonical_classes controlent quelles adresses sont sujettes aux correspondances sender_canonical_maps et recipient_canonical_maps, respectivement.

Les correspondances spécifiques aux adresses d'expédition sont pratiques pour réécrire les adresses incorrectes en gardant la possibilité de les utiliser sans créer de boucle de message.

Les correspondances canoniques peuvent être désactivées sélectivement pour le courrier reçu par smtpd(8), qmqpd(8), ou pickup(8), en écrasant les paramètres du fichier main.cf dans le fichier master.cf. Cette fonctionnalité est disponible à partir de la version 2.1 de Postfix.

Exemple :

/etc/postfix/master.cf :
    :10026      inet  n       -       n       -       -       smtpd
        -o receive_override_options=no_address_mapping

Note : n'insérez pas d'espace après le "=" ici.

Masquage d'adresses

Le masquage d'adresses est une méthode pour cacher les machines à l'intérieur d'un domaine derrière sa passerelle de messagerie et donner l'impression que le courrier provient de la machine elle-même au lieu des machines internes.

NOTE : les versions 2.2 et supérieures de Postfix ne réécrivent les en-têtes de message des clients SMTP distants que si le client correspond au paramètre local_header_rewrite_clients, ou si le paramètre remote_header_rewrite_domain contient une valeur non vide. Pour revenir au comportenment des versions antérieures à la 2.2, indiquez "local_header_rewrite_clients = static:all".

Cette fonctionnalité est désactivée par défaut et est implémentée dans le serveur cleanup(8). Pour l'activer, renseignez le paramètre masquerade_domains du fichier main.cf et indiquer un ou plusieurs noms de domaines séparés par des espaces ou des virgules. Lorsque Postfix tente de masquer un domaine, il parcourt la liste de gauche à droite et utilise la première expression qui correspond.

Exemple :

/etc/postfix/main.cf :
    masquerade_domains = foo.exemple.com exemple.com

transforme "n'importe.quoi.foo.exemple.com" en "foo.exemple.com", et "quelque.chose.d'autre.exemple.com" en "exemple.com".

Un nom de domaine préfixé par "!" signifie qu'il ne faut pas masquer ce domaine ou ses sous-domaines :

/etc/postfix/main.cf :
    masquerade_domains = !foo.exemple.com exemple.com

ne transforme pas "n'importe.quoi.foo.exemple.com", mais transforme "quelque.chose.d'autre.exemple.com" en "exemple.com".

Le paramètre de configuration masquerade_exceptions indique quels noms d'utilisateurs ne doivent pas être soumis aux règles de masquage. Mentionnez un ou plusieurs noms d'utilisateur séparés pas des espaces ou des virgules.

Exemple :

/etc/postfix/main.cf :
    masquerade_exceptions = root

Par défaut, Postfix ne fait pas d'exceptions.

Point subtil : par défaut, le masquage d'adresse n'est appliqué qu'aux en-têtes de message et à l'adresse d'expédition de l'enveloppe, mais pas aux adresses de destination de l'enveloppe. Ceci vous permet d'utiliser le masquage d'adresse sur une machine passerelle en gardant la possibilité d'envoyer de l'extérieur vers un utilisateur sur une machine particulière.

Pour masquer également les adresses de destination de l'enveloppe, indiquez (version 1.1 et supérieures) :

/etc/postfix/main.cf :
    masquerade_classes = envelope_sender, envelope_recipient,
        header_sender, header_recipient

Si vous réécrivez ainsi les adresses de destination de l'enveloppe, Postfix ne saura plus expédier le courrier vers les machines internes.

Le masquage d'adresse peut être désactivé sélectivement pour le courrier reçu par smtpd(8), qmqpd(8), ou pickup(8), en écrasant les paramètres du fichier main.cf dans le fichier master.cf. Cette fonctionnalité est disponible sur les versions 2.1 et supérieures de Postfix.

Exemple :

/etc/postfix/master.cf :
    :10026      inet  n       -       n       -       -       smtpd
        -o receive_override_options=no_address_mapping

Note : n'insérez pas d'espaces après le signe "=" ici.

Ajout automatique d'un destinataire caché (BCC)

Après avoir appliqué les correspondances canoniques et le masquage d'adresse, le démon cleanup(8) peut générer un champ BCC (blind carbon-copy) pour insérer un destinataire caché. Postfix fournit trois nécanismes :

always_bcc = adresse
Délivre une copie de tous les messages à l'adresse indiquée. Dans les versions antérieures à Postfix 2.1, cette fonctionnalité est implémentée dans smtpd(8), qmqpd(8) ou pickup(8).
sender_bcc_maps = type:table
Recherche un destinataire BCC dans la table de correspondance "type:table" en utilisant l'adresse d'expédition de l'enveloppe. Cette fonctionnalité est disponible dans les versions 2.1 et supérieures de Postfix.
recipient_bcc_maps = type:table
Recherche un destinataire BCC dans la table de correspondance "type:table" en utilisant l'adresse de destination de l'enveloppe. Cette fonctionnalité est disponible dans les versions 2.1 et supérieures de Postfix.

Note : les destinataires BCC sont seulement générées pour les nouveaux messages. Pour éviter les boucles de message, ils ne sont pas non plus générés pour les messages générés que Postfix transfert en interne ni pour les messages qu'il génère.

L'ajout automatique d'un destinataire caché (y compris always_bcc) peut être désactivé sélectivement pour le courrier reçu par smtpd(8), qmqpd(8) ou pickup(8), en écrasant les paramètres du fichier main.cf dans le fichier master.cf. Cette fonctionnalité est disponible sur les versions 2.1 et supérieures de Postfix.

Exemple :

/etc/postfix/master.cf :
    :10026      inet  n       -       n       -       -       smtpd
        -o receive_override_options=no_address_mapping

Note : n'insérez pas d'espaces après le signe "=" ici.

Alias virtuels

Avant d'écrire les destinataires dans la file d'attente, le démon cleanup(8) utilise la table d'alias optionnelle virtual(5) pour rediriger le courrier. Les correspondances n'affectent que l'adresse de destination de l'enveloppe et n'a aucun effet sur l'adresse d'expédition ni sur les adresses des en-têtes. Ces correspondances par alias virtuels sont pratiques pour rediriger le courrier des alias de domaines virtuels vers les boîtes-aux-lettres d'utilisateurs réels et pour rediriger le courrier des domaines disparus. Les alias virtuels peuvent également être utilisés pour transformer les "prénom.nom" en noms de login UNIX bien que les alias locaux semblent plus appropriés. Voyez la page VIRTUAL_README pour un aperçu des méthodes d'hébergement de domaines virtuels avec Postfix.

Les alias virtuels sont désactivés par défaut. Pour activer cette fonctionnalité, renseignez le paramètre virtual_alias_maps dans le fichier main.cf en indiquant une ou plusieurs tables de correspondances, séparées par des espaces ou des virgules

Exemple :

/etc/postfix/main.cf :
    virtual_alias_maps = hash:/etc/postfix/virtual

/etc/postfix/virtual:
    Wietse.Venema        wietse

Les adresses trouvées sont soumise à une autre itération pour rechercher un alias virtuel, mais elles ne sont pas soumises aux correspondances canoniques pour éviter les boucles de message.

Pour les correspondances statiques comme présentées ci-dessus, les tables de correspondances de type hash:, ldap:, mysql: ou pgsql: sont suffisantes. Pour les correspondances dynamiques, vous pouvez utiliser les tables d'expressions rationnelles. Ceci suppose que vous soyez familiarisé avec les idées exprimées dans les pages regexp_table(5), pcre_table(5) et virtual(5).

Les correspondances par alias virtuels peuvent être désactivés séparemment pour les courriers reçus par smtpd(8), qmqpd(8), ou pickup(8), en écrasant les paramètres du fichier main.cf dans le fichier master.cf. Cette fonctionnalité est disponible à partir de la version 2.1 de Postfix.

Exemple :

/etc/postfix/master.cf :
    :10026      inet  n       -       n       -       -       smtpd
        -o receive_override_options=no_address_mapping

Note : n'insérez pas d'espaces après le signe "=" ici.

A partir d'ici, le message est prêt à être stocké dans la file d'attente incoming de Postfix.

Réécriture des adresses à l'émission

Le gestionnaire des files d'attente de Postfix trie le courrier suivant sa destination et le donne à l'agent de livraison local(8), smtp(8), ou lmtp(8). Comme le serveur cleanup(8), il délègue les manipulations d'adresse les plus complexes au serveur trivial-rewrite(8).

Les manipulations d'adresse à ce niveau sont :

Chaque agent de livraison de Postfix tente de livrer le courrier à destination en encapsulant l'expéditeur, le destinataire et le contenu message suivant les règles du protocole SMTP, LMTP, etc. Lorsqu'un message ne peut être livré, il est retourné à l'expéditeur ou déplacé dans la file d'attente retardée et testé plus tard.

Manipulations d'adresses lorsque le courrier est livré via l'agent de livraison smtp(8) :

Manipulations d'adresse lorsque le courrier est délivré via l'agent de livraison local(8) :

La suite de ce document présente chaque étape de la manipulation en détail avec des exemples spécifiques qui pointent vers d'autres pages avec exemples.

Résolution d'adresse de destination

Le gestionnaire de file d'attente qmgr(8) de Posfix prélève les nouveaux messages depuis la file d'attente d'arrivée (incoming) et les messages ancien depuis la file d'attente retardée (deferred), et demande au démon de réécriture et résolution des adresses trivial-rewrite(8) où il doit être livré.

Depuis la version 2.0, Postfix distingue quatre classes majeures d'adresses. Chaque classe a sa propre liste de noms de domaine et sa propre méthode de livraison par défaut comme indiqué dans le tableau ci-dessous. Reportez-vous à la page ADDRESS_CLASS_README pour plus de détail. Avant la version 2.0, Postfix ne distingue que le courrier local du reste.

Liste de domaines de destination Méthode de livraison par défaut Disponibilité
$mydestination, $inet_interfaces, $proxy_interfaces $local_transport Postfix 1.0
$virtual_mailbox_domains $virtual_transport Postfix 2.0
$relay_domains $relay_transport Postfix 2.0
none $défaut_transport Postfix 1.0

Routage du courrier

Une fois que le démon trivial-rewrite(8) a determiné une méthode de livraison par défaut, il recherche la table optionnelle transport(5) pour obtenir des information qui surchargent la destination du message et/ou la méthode de livraison. Typiquement, on utilise la table transport(5) pour envoyer du courrier à un système non connecté à Internet, ou pour utiliser une configuration de client SMTP particulière pour des destinations ayant des conditions spéciales. Reportez-vous aux pages STANDARD_CONFIGURATION_README et UUCP_README et aux exemples de la page transport(5).

Les tables de correspondance de routage sont désactivées par défaut. Pour les activer, renseignez le paramètre transport_maps du fichier main.cf en indiquant une ou plusieurs tables de correspondance séparées par des espaces ou des virgules.

Exemple :

/etc/postfix/main.cf :
    transport_maps = hash:/etc/postfix/transport

Table des utilisateurs déplacés

Ensuite, le démon de réécriture et de résolution des adresses trivial-rewrite(8) examine chaque destinataire au regard de la base de données relocated(5). Cette table fournit les informations pour joindre les utilisateurs qui n'ont plus de compte ou pour obtenir la conduite à tenir pour les domaines qui n'existent plus. Lorsqu'un message est envoyé à une adresse listée dans cette table, le message est retourné à son expéditeur avec un message d'explication.

La base de données relocated(5) est recherchée après la table de correspondance transport(5) au cas où la table transport(5) remplacerait un destinataire.

L'examen des utilisateurs déplacés est désactivé par défaut. Pour l'activer, renseignez le paramètre relocated_maps du fichier main.cf et indiquez une ou plusieurs tables de correspondance séparées par des espaces ou des virgules.

Exemple :

/etc/postfix/main.cf :
    relocated_maps = hash:/etc/postfix/relocated

/etc/postfix/relocated:
    utilisateur@exemple.com      autre-utilisateur@aileurs.com

A partir de la version 2 de Postfix, le courrier pour les utilisateurs déplacés sont rejetés par le serveur SMTP pour le motif "user has moved to autreutilisateur@ailleurs.com". Les versions plus anciennes reçoivent d'abord le message puis le retournent à l'expéditeur comme non-livrable avec le même motif.

Remplacement générique pour le courrier SMTP sortant

Certaines machines n'ont pas de nom de domaine valide sur Internet, et utilisent à la place un nom tel localdomain.local. Ceci peut poser problème lorsque vous envoyez un message sur Internet car beaucoup de serveurs rejettent les adresses de messagerie sans nom de domaine valide.

Avec le paramètre smtp_generic_maps, vous pouvez indiquez des tables de correspondances generiques qui remplacent les adresses de messagerie locales par des adresses Internet valides lorsque le courrier quitte la machine via SMTP. Les correspondances generiques remplacent les adresses de l'enveloppe et des en-têtes et n'agissent pas récursivement. Elles n'agissent pas lorsque vous envoyez du courrier entre adresses de la machine locale.

Cette fonctionnalité est disponible sur les versions 2.2 et supérieures de Postfix.

Exemple:

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    user1@localdomain.local             compte1@mon.fai
    user2@localdomain.local             compte2@mon.autre.fai
    @localdomain.local                  compte3+local@mon.fai

Lorsque le courrier est envoyé à l'extérieur via SMTP, ceci remplace user1@localdomain.local par compte1@mon.fai, user2@localdomain.local par compte2@mon.autre.fai, et les autres adresses locales par compte3@mon.fai avec une extension d'adresse +local (cet exemple suppose que le FAI supporte les extensions d'adresse du type "+").

Base de données locale d'alias

Lorsque le courrier est livré localement, l'agent de livraison local(8) examine chaque destinataire au travers de la base de donnée "aliases(5)". Les traductions n'affectent que les adresses dans les en-têtes. Ces alias locaux sont typiquement employés pour implémenter les listes de distributions ou pour rediriger le courrier des alias standards tels postmaster vers de réels utilisateurs. Cette table peut également servir à remplacer les "prénom.nom" par des noms de login.

L'utilisation des alias locaux est activé par défaut. La configuration par défaut dépend de l'environnement de votre système d'exploitation mais est généralement l'un des suivants :

/etc/postfix/main.cf :
    alias_maps = hash:/etc/aliases
    alias_maps = dbm:/etc/aliases, nis:mail.aliases

Le chemin de la base de données des alias est contrôlé par le paramètre de configuration alias_database. Cette valeur dépend du système mais est généralement l'un des suivants :

/etc/postfix/main.cf :
    alias_database = hash:/etc/aliases (4.4BSD, LINUX)
    alias_database = dbm:/etc/aliases (4.3BSD, SYSV<4)
    alias_database = dbm:/etc/mail/aliases (SYSV4)

Un fichier aliases(5) peut indiquer qu'un message doit être livré dans un fichier local ou passé à une commande via son entrée standard. Pour des raisons de sécurité, la livraison vers des fichiers et des commandes est exécutée avec les droits du propriétaire de la base de données des alias Le userid par défaut défaut_privs est utilisé pour livrer aux commandes ou fichiers aux alias appartenant à root.

Local per-utilisateur fichiers .forward

Avec la livraison via l'agent local(8), les utilisateurs peuvent contrôler cette livraison en spécifiant des destinations dans le fichier .forward de leur répertoire par défaut (home directories). La syntaxe de ces fichiers est la même que celle des alias(5) locaux oté de la partie gauche des alias (clef de correspondance et colonne).

Récupération locale de toutes les adresses

Lorsque l'agent local(8) de livraison découvre qu'un destinataire n'existe pas, le message est normalement retourné à l'expéditeur avec la mention "user unknown". Il est parfois souhaitable de transférer le courrier des adresses inexistantes vers une autre machine. Dans ce but, vous pouvez indiquer une destination avec le paramètre de configuration luser_relay.

Autre possibilité, le courrier des adresses inexistantes peut être délégué à un autre transporteur de courrier indiqué dans le paramètre de configuration fallback_transport. Pour plus de détails, reportez-vous à la page de manuel de l'agent local de livraison  local(8).

Note : si vous utilisez le paramètre luser_relay pour recevoir le courrier ne correspondant pas à un compte UNIX, vous devez alors indiquer :

/etc/postfix/main.cf :
    local_recipient_maps =

(c'est à dire vide) dans le fichier main.cf , sinon le serveur SMTP de Postfix rejetera le courrier ne correspondant pas à un compte UNIX avec la mention "User unknown in local destinataire table". Reportez-vous à la page LOCAL_RECIPIENT_README pour plus d'informations.

luser_relay peut indiquer une adresse. Il est soumis aux expansions de "$name". Exemples :

$user@autre.machine

L'utilisateur nu, sans extension d'adresse, est préfixée à "@autre.machine". Par exemple, les messages pour "utilisateur+foo" sont envoyés à "utilisateur@autre.machine".

$local@autre.machine

L'adresse originale de destination, y compris les extensions, est préfixée à "@autre.machine". Par exemple, les messages pour "utilisateur+foo" sont envoyés à "utilisateur+foo@autre.machine".

sysadmin+$user

L'utilisateur nu, sans extension d'adresse, est ajoutée à "sysadmin". Par exemple, les messages pour "utilisateur+foo" sont envoyés à "sysadmin+utilisateur".

sysadmin+$local

L'adresse originale de destination, y compris les extensions, est ajoutée à "sysadmin". Par exemple, les messages pour "utilisateur+foo" sont envoyés à "sysadmin+utilisateur+foo".

Deboguer vos manipulations d'adresses

Avec les versions supérieures ou égales à la version 2.1, vous pouvez demander à Postfix de produire des messages de notification de livraison pour le déboguage. Ces rapports ne montrent pas seulement les adresses expéditeur/detinataire après réécriture, ils montrent également les informations sur la livraison aux boîtes-aux-lettres ou aux commandes non-Postfix, les réponses des autres serveurs SMTP, etc.

Postfix peut produire deux types de rapports de livraison de message pour le déboguage.

Ces rapports contiennent les informations qui sont générées par les agents de livraison de postfix. Comme les processus fonctionnent comme démon et n'interagissent pas directement avec les utilisateurs, le résultat est envoyé par message à l'expéditeur du message de test. Le format de ces rapports est pratiquement identique à ceux des notifications de non-livraison ordinaires.

Par exemple est reproduit ci-dessous le rapport produit par la commande "sendmail -bv postfix-user@postfix.org". La première partie de ce rapport contient le texte lisible. Dans ce cas, le courrier serait livré via mail.cloud9.net avec une réponse "250 Ok". Les autres rapports doivent montrer la livraison à la boîte-aux-lettres ou vers une commande non-Postfix.

Content-Description: Notification
Content-Type: text/plain

This is the Postfix program at host spike.porcupine.org.

Enclosed is the mail delivery report that you requested.

                        The Postfix program

<postfix-users@postfix.org>: delivery via mail.cloud9.net[168.100.1.4]: 250 Ok

La seconde partie du rapport est au format lisible par les machines et inclut les informations suivantes :

Certains détails sont préliminaires et changeront comme Postfix implémente les standards DSN (notification de status de livraison).

Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; spike.porcupine.org
X-Postfix-Queue-ID: 84863BC0E5
X-Postfix-Sender: rfc822; wietse@porcupine.org
Arrival-Date: Tue, 13 Apr 2004 19:27:43 -0400 (EDT)

Final-Recipient: rfc822; postfix-uses@postfix.org
Action: deliverable
Status: 2.0.0
Diagnostic-Code: X-Postfix; delivery via mail.cloud9.net[168.100.1.4]: 250 Ok

La troisième partie de rapport contient le message que Postfix aurait du livrer incluant les en-têtes From: et To:, afin que vous puissiez voir tous les effets de réécritures d'adresses. Le message soumis à la commande "sendmail -bv" n'a pas de corps, donc aucun n'est montré dans l'exemple ci-dessous.

Content-Description: Message
Content-Type: message/rfc822

Received: by spike.porcupine.org (Postfix, from userid 1001)
        id 84863BC0E5; Tue, 13 Apr 2004 19:27:43 -0400 (EDT)
Subject: probe
To: postfix-users@postfix.org
Message-Id: <20040413232743.84863BC0E5@spike.porcupine.org>
Date: Tue, 13 Apr 2004 19:27:43 -0400 (EDT)
From: wietse@porcupine.org (Wietse Venema)

Valid HTML 4.01! traduction par Xavier Guimard - Retour au menu