Le defaut de Postfix est probablement le nombre incalculable de directives de configuration qu'il accepte. Et même si le logiciel fait des efforts particuliers pour être tolérant dans la syntaxe de son fichier de configuration, il n'en reste pas moins que le foisonnement des mots clefs utilisables et parfois leur ambiguïté rendent les configurations souvent complexes et délicates.
![]() | Note |
---|---|
Postfix, compilé avec le support TLS, comporte 525 directives de configuration !
(voir |
dpkg peut être invoqué pour reconconfigurer Postfix avec quelques paramètres de base.
Il faudra appeller dpkg-reconfigure avec l'option --priority=low
.
L'appel de cette commande fera apparaître des écrans de configuration,
identiques à ceux affichés lors de l'installation. Mais maintenant, grâce à
l'option --priority=low
, quelques paramètres supplémentaires
pourront être renseignés :
Type de configuration : même chose que dans la configuration initiale. On conservera le choix Système satellite
Destinataire du courrier destiné au superutilisateur : on donnera une adresse email complète qui recevra tous les emails destinés à root
Nom de courrier : même chose que pour l'installation. On veillera à bien rentrer le nom d'hôte complet (FQDN) de la machine.
Serveur relais SMTP : paramètre déja vu à l'installation; c'est le serveur auquel nous allons envoyer tous les messages reçus, afin qu'ils soient acheminés à leur destination finale.
Autres destinations pour lesquelles le courrier sera accepté : liste des domaines (en dehors de notre propre FQDN pour lesquels nous accepterons des messages. On peut laisser ce champ vide.
Faut-il forcer des mises à jour synchronisées de la file d'attente des courriels : on peut répondre no si le répertoire data de Postfix est en ext3. Ce n'est pas un paramètre propre à Posfix, mais plutôt lié au système de fichiers. Lorsque l'on choisit yes, certains répertoires verront leur attribut synchrone modifié (avec chattr +S), indiquant à l'OS que toutes les opérations d'entrée sortie impliquant ce répertoire (ou un objet contenu dans ce répertoire) ne doivent pas être bufferisées mais écrits sur le disque de manière synchrone.
Réseaux internes : liste des réseau pour lesquels on accepte de relayer le courrier. On saisira le réseau de loopback (127.0.0.0/8), notre subnet (192.168.17.0/24) et on y ajoutera celui prévu pour le déploiement du serveur OpenVPN (192.168.18.0/24).
Taille maximale des boîtes aux lettres : on peut laisser la valeur par défaut puisque nous n'utilisons pas de « livraison locale » de message.
Caractère d'extension des adresses locales : même chose ici. On peut laisser ce champ vide puisque nous n'avons pas de « livraison locale ».
Protocoles internet à utiliser : choisir le protocole IP à utiiser. Nous n'utilisons qu'IPv4.
Lorsque tous les écrans de configuration sont passés, dpkg-reconfigure
termine
la configuration et redémarre le service.
root@ubuntu:~# dpkg-reconfigure --priority=low postfix
* Stopping Postfix Mail Transport Agent postfix [ OK ]
setting synchronous mail queue updates: false
setting myorigin
setting destinations: ubuntu.ath.cx, localhost.ath.cx, localhost
setting relayhost: smtp.free.fr
setting mynetworks: 127.0.0.0/8, 192.168.17.0/24, 192.168.18.0/24
setting mailbox_size_limit:
setting recipient_delimiter:
setting inet_interfaces: loopback-only
setting inet_protocols: ipv4
/etc/aliases does not exist, creating it.
adding root: alice@gmail.com alias
adding postmaster: alice@gmail.com alias
Postfix is now set up with the changes above. If you need to make changes, edit
/etc/postfix/main.cf (and others) as needed. To view Postfix configuration
values, see postconf(1).
After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.
Running newaliases
postalias: warning: /etc/aliases.db: duplicate entry: "postmaster"
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix [ OK ]
root@ubuntu:/etc/postfix#
Les fichiers de configuration de Postfix sont situés sous
/etc/postfix
. Deux fichiers sont nécessaires à la configuration :
/etc/postfix/main.cf
et /etc/postfix/master.cf
.
Le premier contient la configuration de Postfix, tandis que le second définit le comportement des divers dæmons qui constituent la suite Postfix. En effet, Postfix n'est pas un simple serveur, mais une suite de dæmons et d'utilitaires qui se partagent la gestion des messages. C'est la volonté d'avoir une suite logicielle faite de composants bien cloisonnés[22] qui a conduit Wietse Venema à développer Postfix.
/etc/postfix/master.cf
n'est modifié que dans le cas ou l'on utilise
la livraison de message locaux ou quand on veut mettre en place un nouveau composant s'insérant dans la chaîne de messagerie
(antivirus ou antispam par exemple), ce qui n'est pas notre cas ici.
On s'interessera donc surtout à /etc/postfix/main.cf
.
D'autres fichiers de configuration interviennent dans le fonctionnement de Postfix sans être directement
des fichiers de configuration de Postfix. Le fichier /etc/mailname
, par exemple, contient le nom
de messagerie visible de notre système. Si l'on désire, par exemple, que tous les utilisateurs Unix de la machine
puissent envoyer des emails en « @exemple.com », on mettra cette valeur dans le fichier.
root@ubuntu:~# cat /etc/mailname exemple.com root@ubuntu:~#
Le fichier /etc/aliases
, lui aussi un peu à part, sera vu un peu plus
loin (Section 8.2.4, « Alias »).
Les directives de main.cf
peuvent être changées en éditant directement
le fichier, mais on pourra préférer la méthode utilisant la commande postconf qui
permet à la fois de lire et d'écrire les directives de mail.cf
:
postconf en lecture :
postconf
[clef
]
postconf en écriture :
postconf
-e
clef = valeur
Appellé sans option, postconf affiche la totalité des valeurs de
configuration (celles données dans /etc/postfix/main.cf
et celles par défaut),
tandis qu'en utilisant l'option -n
, on ne verra que les valeurs modifiées explicitement
dans le fichier de configuration.
root@ubuntu:~#postconf
2bounce_notice_recipient = postmaster access_map_reject_code = 554 address_verify_default_transport = $default_transport ... 519 lignes supprimées ... virtual_transport = virtual virtual_uid_maps = root@ubuntu:~#postconf -n
alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no config_directory = /etc/postfix inet_interfaces = loopback-only inet_protocols = ipv4 mailbox_size_limit = mydestination = localhost myhostname = exemple.com mynetworks = 127.0.0.0/8, 192.168.17.0/24, 192.168.18.0/24 myorigin = /etc/mailname recipient_delimiter = relayhost = smtp.free.fr smtp_generic_maps = hash:/etc/postfix/generic smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache smtpd_use_tls = yes root@ubuntu:~#
Chaque directive se présente sous la forme directive = valeur
.
La valeur peut utiliser d'autres directives définies ailleurs en précédant leur nom par
« $ » :
mydestination = $myhostname
Quelques un de ces paramètres méritent d'être passés en revue dans le cadre de notre configuration. Pour connaître le détail de toutes les directives, on se réfèrera aux différents pages de man de Postfix (en particulier postconf(5)) ou au site officiel.
Lorsque l'on déploie un serveur de messagerie, on doit lui donner au minimum deux informations :
pour quels domaines acceptons nous des messages ?
depuis quels subnets acceptons nous des messages qui ne vont pas vers nos domaines ?
Cet aspect est fondamental : on n'accepte un message que s'il nous est destiné ou s'il provient d'une adresse
IP pour laquelle nous relayons des messages. Si ces deux paramères ne sont pas renseignées correctement,
notre serveur de messagerie peut se transformer en relais ouvert[23].
Postfix permet de configurer ces valeurs respectivement dans mydestination
et
mynetworks
.
Postfix permet bien sûr de contrôler les interfaces sur lesquelles le
dæmon smtpd
sera à l'écoute, grâce à la directive
inet_interfaces
. On pourra utiliser la valeur
all pour écouter sur toutes les interfaces (valeur par défaut), ou spécifier
une liste d'adresses IP correspondant aux interfaces auxquelles on désire binder
le dæmon.
root@ubuntu:~# postconf -e "inet_interfaces = all"
Lorsque nous avons demandé à ne faire que de l'IPv4 dans les écrans de
configuration, la variable affectée était inet_protocols
.
Les valeurs permises sont all, ipv6 et
ipv4.
La directive myhostname
contient le nom FQDN
de la machine. Cette valeur est renseignée par les écrans de configuration initiaux.
Par défaut, Postfix utilise le nom obtenu avec l'appel système
gethostname()
.
myorigin
contient le nom qui doit être ajouté
derrière un nom d'utilisateur lorsqu'un mail est envoyé localement. Si Alice
(utilisateur : alice) envoie un courriel avec la commande mail
sur le système, le contenu de myorigin
sera ajouté après « @ »
pour consituer son adresse.
Lors de l'installation, nous avons donné un nom de courrier.
Ce nom a été utilisé pour remplir le fichier /etc/mailname
. Et c'est ce même
fichier qui est utilisé par Postfix dans la configuration pour affecter une valeur à
myorigin
:
root@ubuntu:~# postconf myorigin
myorigin = /etc/mailname
root@ubuntu:~# cat /etc/mailname
exemple.com
root@ubuntu:~#
Le paramètre relayhost
est particulièrement important dans notre configuration.
En effet, c'est lui qui contrôle à quel serveur nous allons transmettre
tout le courrier reçu pour qu'il soit livré à destination. Si ce paramètre n'est pas présent, Postfix
essaiera lui-même de livrer les messages à destination. C'est donc un choix que l'on doit faire au
déploiement, mais ce choix est très souvent dicté par au moins deux contraintes :
filtrage du port 25 : la plupart des fournisseurs d'accès bloquent l'accès au port 25 en sortie (en dehors de l'accès à leur propre serveur SMTP). Il ne sera donc pas possible de se connecter à un autre serveur SMTP que celui de son prestataire. Free Télécom fait exception à la règle car même si le port 25 est filtré par défaut, on peut le désactiver sur l'interface web d'administration de la FreeBox
blacklisting des pools d'IP client : beaucoup de serveurs de messagerie bloquent le traffic SMTP provenant d'adresses IP considérées comme des adresses de pools client dynamiques. On ne pourra donc pas envoyer de courriel aux domaines utilisant ce système de liste noire si notre adresse IP est dans cette liste.
![]() | Attention |
---|---|
Si l'on désire tout de même se passer de relais, on devra surveiller l'activité du serveur de messagerie et en particulier les messages rejetés. On pourra ensuite déployer un mecanisme de transport alternatif pour les sites concernés. Mais on rentre alors dans un schéma d'exploitation très actif du serveur de messagerie. |
Les alias permettent de réécrire l'adresse d'un courriel adressé à la machine locale.
Même si nous n'acceptons pas de mail de l'extérieur à destination de la machine, beaucoup d'applications
unix envoient des courriels à des utilisateurs locaux. crond
, par exemple,
essaie d'envoyer le resultat des commandes exécutées par email.
En utilisant les alias, nous pourrons envoyer les courriels de root vers une adresse externe (alice@gmail.com par exemple), nous évitant ainsi de lire les mails en local sur la machine.
Le fichier contenant les alias est en général /etc/aliases
et son format est très simple :
utilisateur: nouveau_destinataire
Par exemple, si l'on veut envoyer les mails de root à alice@gmail.com, on ajoutera une ligne :
root: alice@gmail.com
On pourra utiliser des redirections multiples, elles seront correctement résolues :
postmaster: root root: alice@gmail.com
Cette configuration enverra les mails de root et de postmaster à alice@gmail.com.
![]() | Attention |
---|---|
La RFC 2142 (voir [RFC2142]) rend obligatoire la mise en place d'un certain nombre d'adresses (postmaster, abuse, ...), dépendant des services mis en place. Pas de problème dans le cas d'un système isolé qui ne prend pas d'email entrant, mais il faudra considérer ce point lors du déploiement d'un serveur public. |
Le chemin fichier d'alias est défini par la directive de configuration alias_maps
.
Après avoir modifié ce fichier, il faudra le mettre à jour le fichier de base de données utilisé par postfix
(/etc/aliases.db
) avec la commande newaliases.
Cette commande essaiera de mettre à jour la base avec le fichier pointé par la variable alias_database
.
On pourra donc utiliser la configuration suivante :
alias_database = $alias_maps alias_maps = hash:/etc/aliases
Notre système servira essentiellement de relais de messagerie sortant pour
des utilisateurs du réseau local ou de la machine locale.
Pour les clients locaux qui veulent réécrire complètement leur adresse (et pas
seulement ajouter un nom de domaine à la fin comme avec myorigin
,
Section 8.2.3.3, « Noms : myhostname
et myorigin
»), on devra utiliser une table générique de réécriture.
Cette table de réécriture change uniquement les adresses de destination.
Les adresses locales sont réécrites par la table /etc/aliases
Cette table peut se trouver n'importe ou, mais il est souhaitable de la mettre dans
/etc/postfix
. Elle contiendra des entrées sous la forme :
adresse_initiale adresse_finale
Les adresses initiales utilisées s'entendent :
après l'utilisation des alias (pour les destinataires locaux uniquement)
après l'ajout de myorigin
Par exemple, avec la configuration ci-dessous :
root@ubuntu:~#cat /etc/aliases
# See man 5 aliases for format root: eve postmaster: bob@exemple.com root@ubuntu:~#cat /etc/postfix/generic
root@exemple.com mallaury@gmail.com oper@exemple.com bob@gmail.com root@ubuntu:~#
un email envoyé par l'utilisateur oper à destination de root terminera sa course dans la boite de eve@gmail.com et semblera provenir de bob@gmail.com.
Transformations appliqués à l'adresse de l'expéditeur :
oper --[ myorigin ]--> oper@exemple.com oper@exemple.com --[ generic ]--> bob@gmail.com
Transformations appliqués à l'adresse du destinataire local :
root --[ aliases ]--> eve
eve --[ myorigin ]--> eve@exemple.com
Si l'adresse cible n'a pas de domaine, postfix ajoute $myorigin
Si le message avait été envoyé à postmaster, c'est bob@exemple.com qui l'aurait reçu.
Afin de pourvoir utiliser le fichier /etc/postfix/generic
, nous devons
ici aussi le transformer en base de données, mais cette fois avec la commande postmap :
root@ubuntu:~# postmap /etc/postfix/generic
Enfin, on indiquera à Postif que l'on souhaite mettre en place la réécriture d'adresse
avec les éléments de ce fichier avec la directive smtp_generic_maps
:
postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic'