Installation Serveur Courrier

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 84

Installation d'un serveur de messagerie Postfix

Distribu par CLG

Installation d'un serveur de messagerie Postfix

Table des Matires


1 Licence 5 2 Crdits 5 3 Notes de version 5 3.1 ChangeLog 5 3.2 ToDo Liste 5 4 Analyse des besoins 6 5 Vue d'ensemble de Postfix 6 5.1 Buts et dispositifs 7 5.2 Autres dispositifs dignes d'intrt 7 5.3 Architecture globale 8 5.3.1 Introduction........................................................................................................................8 5.3.2 Postfix BigPicture..............................................................................................................8 5.3.3 Architecture de Postfix.......................................................................................................9 5.3.4 Communication entre les processus Postfix.......................................................................9 5.4 Gestion des files d'attente 10 5.4.1 Files d'attente du courrier de Postfix................................................................................10 5.4.2 Pas d'effet de troupeau.....................................................................................................10 5.4.3 Equitabilit.......................................................................................................................11 5.4.4 Backoff exponentiel.........................................................................................................11 5.4.5 Cache de statut de destination..........................................................................................11 5.5 Scurit 11 5.5.1 Introduction......................................................................................................................11 5.5.2 Moindre privilge.............................................................................................................12 5.5.3 Cloisonnement.................................................................................................................12 5.5.4 Environnement contrl...................................................................................................12 5.5.5 Set-uid..............................................................................................................................12 5.5.6 Confiance.........................................................................................................................13 5.5.7 Grandes entres................................................................................................................13 5.5.8 Autres dfenses................................................................................................................13 6 Anatomie de Postfix 13 6.1 Rception du courrier 13 6.2 Livraison du courrier 15 6.3 En coulisse 17 6.4 Utilitaires en ligne de commande 17 7 Installation 18 7.1 Installation partir des sources 18 7.2 Installation partir de paquetages pr-compils 18 7.2.1 Debian :............................................................................................................................18 8 Configuration 19 8.1 Configuration de base 19 8.1.1 Introduction......................................................................................................................19 8.1.2 Quel domaine afficher dans le courrier sortant (myorigin)..............................................19 8.1.3 Mon nom de domaine (mydomain)..................................................................................20 8.1.4 Mon nom de machine (myhostname)...............................................................................20 8.1.5 De quels domaines recevoir le courrier (mydestination).................................................20 8.1.6 Mes rseaux (mynetworks)..............................................................................................21 http://extranet.clg.fr/articles.php3?id_article=65 2

Installation d'un serveur de messagerie Postfix 8.1.7 De quels clients relayer le courrier (mynetworks, relay_domains)..................................21 8.1.8 O le client Postfix doit-il dlivrer les mails (relay_domains)........................................22 8.1.9 Quels incidents rapporter au postmaster (notify_classes)................................................22 8.1.10 Adresse rseau proxy/NAT (proxy_interfaces).............................................................23 8.1.11 Mes adresses de rseau (inet_interfaces).......................................................................23 8.2 Contrles des taux de Postfix 24 8.2.1 Introduction......................................................................................................................24 8.2.2 Limites des processus.......................................................................................................25 8.2.3 Simultanit de destination..............................................................................................25 8.2.4 Limites sur les destinataires.............................................................................................26 8.2.5 Toujours remettre plus tard la livraison........................................................................26 8.2.6 Backoff des serveurs inaccessibles..................................................................................27 8.2.7 Ralentir les mauvais clients..............................................................................................28 8.3 Contrle des ressources 29 8.3.1 Introduction......................................................................................................................29 8.3.2 Limites de taille des objets...............................................................................................29 8.3.3 Limites du nombre d'objets..............................................................................................30 8.3.4 Dlais...............................................................................................................................31 8.3.5 Accs exclusifs aux fichiers.............................................................................................31 8.3.6 Rtablissement en cas d'erreur.........................................................................................31 8.4 Manipulation d'adresse 32 8.4.1 Introduction......................................................................................................................32 8.4.2 Rcriture d'adresses au format standard.........................................................................33 8.4.3 Translation canonique d'adresse.......................................................................................34 8.4.4 Masquage d'adresse..........................................................................................................34 8.4.5 Translation d'adresse virtuelle..........................................................................................35 8.4.6 Routage du courrier..........................................................................................................36 8.4.7 Table d'utilisateurs dplacs.............................................................................................36 8.4.8 Base de donnes d'alias....................................................................................................36 8.4.9 Fichiers .forward des utilisateurs.....................................................................................37 8.4.10 Utilisateurs inexistants...................................................................................................37 9 Configuration finale de type basique(hashmap) 38 9.1 Fichier /etc/postfix/main.cf avec tables en hashmap 38 9.1.1 Principe de fonctionnement.............................................................................................38 9.1.2 Contenu du fichier main.cf...............................................................................................39 9.1.3 Explication des paramtres..............................................................................................42 9.2 Fichier /etc/postfix/aliases 45 9.3 Fichier /etc/postfix/virtualdomains 46 9.4 Fichier /etc/postfix/vmailbox (hashmap) 46 9.5 Fichier /etc/postfix/virtual (hashmap) 47 9.6 Script de transfert Qmail -> Postfix. 48 9.6.1 Procdure.........................................................................................................................48 9.6.2 Contenu du script qmail_postfix.sh.................................................................................50 9.7 Paramtrages des droits sur les dossiers de base 52 10 Commandes anti-spam 53 10.0.1 Exiger la commande HELO (EHLO).............................................................................53 10.0.2 Restrictions sur les noms d'htes passs par la commande HELO (EHLO)..................53 10.0.3 Exigez des adresses respectant le format de la RFC 821...............................................55 10.0.4 Restrictions sur les adresses d'expdition......................................................................55 http://extranet.clg.fr/articles.php3?id_article=65 3

Installation d'un serveur de messagerie Postfix 10.0.5 Restriction sur les adresses de destination.....................................................................56 10.0.6 Filtrage d'en-tte.............................................................................................................59 10.0.7 Restrictions gnriques..................................................................................................60 10.1 Fichier /etc/postfix/main.cf avec commandes anti-spam 61 10.2 Contenu du fichier /etc/postfix/access 62 10.3 Contenu du fichier /etc/postfix/ header_checks 62 10.4 Contenu du fichier /etc/postfix/ body_checks 62 10.5 Utilisation de filtres complmentaires 63 10.5.1 Introduction....................................................................................................................63 10.5.2 Installation de Amavis, SpamAssassin et Clamav.........................................................63 10.5.3 Configuration de Amavis (/etc/amavis/amavisd.conf)...................................................64 10.5.4 Configuration de Postfix pour Amavis..........................................................................64 10.5.5 Configuration de l'antivirus Clamav..............................................................................65 11 Comment lire ses messages 65 11.1 Installation d'un serveur POP 65 11.1.1 Installation binaire..........................................................................................................65 11.1.2 Configuration de Courier-pop........................................................................................65 11.1.3 Le fichier /etc/courier/authdaemonrc.............................................................................66 11.1.4 Le fichier /etc/courier/authmodulelist............................................................................67 11.1.5 Le fichier /etc/courier/authmysqlrc................................................................................67 11.1.6 Le fichier /etc/courier/pop3d..........................................................................................67 11.1.7 Format du fichier /etc/courier/userdb.............................................................................68 11.2 Migration des comptes POP 69 11.2.1 Procdure.......................................................................................................................70 11.2.2 Contenu du script qpopper_courier.sh...........................................................................71 11.2.3 Paramtrages des droits sur les dossiers des comptes POP...........................................72 11.2.4 Transfert des botes Qmail Maibox dans les botes Postfix Maildir..............................73 12 Gestion et utilisation au quotidien 73 12.1 Se connecter au serveur de messagerie 73 12.2 Ajouter ou modifiez un domaine gr par le serveur Postfix 73 12.3 Ajouter ou modifier une adresse ayant un compte POP correspondant. 73 12.4 Ajouter ou modifier un alias d'une adresse pointant sur une autre adresse. 74 12.5 Ajouter ou modifier un alias de compte local 74 12.6 Ajouter ou modifier un rseau ou un domaine autoris 74 12.7 Ajouter ou modifier une rgle de filtrage sur les enttes. 74 12.8 Ajouter ou modifier une rgle de filtrage sur le corps du message. 75 12.9 Ajouter ou modifier un compte POP 75 12.10 Modifier le mot de passe d'un compte POP 75 12.11 Gestion des files d'attente Postfix. 76 13 Webographie 76 14 Annexe 78 14.1 Licence 78 14.1.1 GNU Free Documentation License................................................................................78 14.1.2 How to use this License for your documents.................................................................84

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

1 Licence
L'intgralit de la prsente documentation est soumise la GNU Free Documentation licence (http://www.gnu.org/copyleft/fdl.html#TOC1), ce qui signifie:

que toute personne le droit de copier et d'utiliser librement ce document. que toute personne est autorise diffuser ce document.

que quiconque peut modifier librement ce document, pourvu qu'il en diffuse la version modifie sous la prsente licence. En respectant la licence dcrite en annexe, vous pouvez utiliser les lments contenus dans ce document condition d'en spcifier la provenance des informations (faire un lien hypertexte dans le cas d'un site en ligne, prciser l'URL dans le cas d'un document papier ou lectronique).

2 Crdits
Version: 1.0.0 Auteurs: Marc-Henri PAMISEUX Intgr par:Marc-Henri PAMISEUX Dernire modification: 13/08/2004 Remerciements: Xavier GUIMARD Contacts: Le projet Postfix (http://www.postfix.org) La traduction ralis par Xavier GUIMARD (http://x.guimard.free.fr/) Les complments couverts par Cyril JOVET (http://cjovet.free.fr/) Traduction:Xavier GUIMARD Marc-Henri PAMISEUX

3 Notes de version
3.1 ChangeLog
Le 13/08/2004: Modifications mineures. Ajout d'une ToDo Liste. Le 12/08/2004: Premire publication du document. (Version 1.0.0)

3.2 ToDo Liste


Complter l'installation partir des sources Ajouter une section de tests initiaux des serveurs SMTP et POP. Prvoir une analyse des logs. Complter la mise en place de l'antivirus Ajouter une section de mise en place de SpamAssassin Ajouter une section de configuration de Postfix avec une base de donne. Ajouter une section de configuration de Postfix avec un annuaire Ajouter une section de mise en service d'un webmail, et d'un outil d'administration. 5

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

4 Analyse des besoins


Un serveur de messagerie est devenu un lment indispensable au sein d'une entreprise, comme peut l'tre un central tlphonique ou un fax. Pour beaucoup, le serveur de messagerie n'est pas situ au sein de l'entreprise mais il est gr bien souvent par le fournisseur d'accs de l'entreprise. Si l'entreprise hberge un nom de domaine sur son systme d'information, elle aura besoin d'un MTA (Agent de Transfert du Courrier) complet. Et si elle hberge plusieurs domaines, alors elle a certainement besoin de quelque chose d'assez robuste pour prendre en charge tous les courriers lectroniques de ses utilisateurs. Le systme dcrit dans cet article propose une solution lgante ce problme, puisque nous allons dtailler l'installation, la configuration et la maintenance du serveur de messagerie Postfix, tel qu'il peut exister chez un fournisseur d'accs. Ce document t initi dans le but de remplacer un serveur MTA fonctionnant sous Qmail.Cette dcision de remplacement t prise du fait de la non conformit du serveur Qmail la licence GNU. En effet, Dan Bernstein, l'auteur de Qmail, t ammen interdire les distributions de Qmail lorsqu'elles diffrent de celle qu'il propose, ceci par souci scuritaire. Qmail n'est donc pas un logiciel libre au sens de la Free Software Fundation ou de l'OpenSource, mais rien ne vous empche de rcuprer le code et de le modifier pour vos propres besoins, puis de diffuser vos modifications sous forme de rustines. Vous en trouverez une grande quantit, offrant des fonctionnalits supplmentaires, sur le site qmail.org. Du fait de cette restriction, il devient difficile de maintenir Qmail simplement, car peu des fonctionnalits d'extension de Qmail ont ts intgres directement dans ce programme. Notre choix de serveur MTA s'est donc naturellement port vers Postfix. Dans le cadre de cette migration, il est convenu des ncessits suivantes :

Le serveur de messagerie ne doit tre utilis que pour des rseaux biens dfinis (fonction d'anti RELAYING) Le serveur doit tre capable de grer de multiple domaines Le serveur doit tre capable de grer des concurences de nom d'utilisateurs sur deux domaines diffrents. Le serveur doit tre capable de combiner plusieurs systmes d'identification en un seul Le serveur doit tre capable de grer des redirections de messages Le serveur doit tre capable de filtrer les messages non sollicits (fonction anti SPAM) Le serveur peut incorporer un antivirus Le serveur peut tre capable de grer des connexions scurises

5 Vue d'ensemble de Postfix


Le projet Postfix a t initi par Wietse Zweitze Venema (http://www.porcupine.org/wietse/) connu pour tre aussi l'auteur du logiciel de protection contre les intrusions (TCP Wrappers). Employ par IBM au sein du dpartement R&D Thomas J. Watson, son ambition tait de crer un serveur de messagerie rapide, scuris et compatible Sendmail, mais en plus simple configurer et administrer. Compte tenu de la large diffusion de ce serveur de messagerie, le pari semble tre russi.

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

5.1 Buts et dispositifs


Le but du projet Postfix est de fournir une alternative viable au programme UNIX Sendmail. Les buts particuliers et la manire dont Postfix tente de les raliser sont :

Diffusion large. Postfix doit tre adopt par un grand nombre de personnes afin d'avoir un impact significatif sur les performances et la scurit du courrier sur Internet. Par consquent, le logiciel est distribu libre de droits, sans aucun lien. Performance. Postfix est jusqu' trois fois plus rapide que son concurrent le plus proche. Un PC de bureau utilisant Postfix peut recevoir et envoyer un million de messages diffrents par jour. Postfix utilise les techniques des serveurs web pour rduire la charge de cration de processus et utilise d'autres techniques pour rduire les charges sur le systme de fichiers, sans compromettre la fiabilit. Compatibilit. Postfix est conu pour tre compatible avec sendmail afin de rendre aise la migration. Postfix supporte les fichiers /var[/spool]/mail, /etc/aliases, NIS, et ~/.forward. Cependant, Postfix essais galement d'tre facile administrer et en consquence n'utilise pas le fichier sendmail.cf. Sret et robustesse. Postfix est conu pour se comporter rationnellement en cas de stress. Lorsque le systme local manque d'espace disque ou de mmoire, le logiciel Postfix se retire, au lieu d'aggraver la situation. Par conception, aucun programme de Postfix ne continue crotre mesure que le nombre de message crot. Postfix est conu pour rester sous contrle. Flexibilit. Postfix est construit en une douzaine de petits programmes accomplissant chacun seulement une tche spcifique : recevoir un message via SMTP, dlivrer un message via SMTP, rcrire une adresse, etc... Les sites ayant des rgles particulires peuvent remplacer un ou plusieurs petits programmes par des versions alternatives. Et il est ais de dsactiver une fonctionnalit : les firewalls et stations clientes n'ont pas besoin de dlivrer du courrier localement. Scurit. Postfix utilise plusieurs niveaux de dfense pour protger le systme local contre les intrus. Presque tous les dmons de Postfix fonctionnent en cage (chroot) avec peu de privilges. Il n'y a aucun chemin direct entre le rseau et le programme sensible de livraison locale - un intrus doit traverser plusieurs programmes d'abord. Postfix ne fait pas mme confiance aux gestionnaires de ses propres files d'attentes ou au contenu de ses propres messages IPC. Postfix filtre les informations fournies par l'expditeur avant d'exporter via ses variables d'environnement. Dernier point mais pas le moindre, aucun programme de Postfix ne dispose du privilge set-uid.

5.2 Autres dispositifs dignes d'intrt

Transports multiples. Prcdemment, l'auteur a configur des systmes Sendmail qui pouvait relayer entre l'Internet, DECnet, X400 et UUCP. Postfix est conu pour tre assez flexible pour qu'il puisse oprer dans de tels environnements sans recourir aux domaines virtuels ou aux alias. Toutefois, la version initiale de Postfix ne parle que le SMTP et a un support limit pour UUCP.

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

Domaines virtuels. Dans la plupart des cas, ajouter le support pour un domaine virtuel n'exige qu'un changement dans une table de consultation de Postfix. Les autres serveurs de mail ont gnralement besoin de plusieurs niveaux d'alias ou de redirection pour arriver au mme rsultat. Contrle anti-spam. Postfix peut restreindre les machines qui peuvent tre relayes via le systme Postfix et supporte des restrictions sur les courriers autoriss entrer. Postfix implmente les restrictions habituelles : listes noires, consultations RBL (real-time blackhole list), vrification expditeur/HELO. L'inspection du contenu n'a pas encore t implmente. Consultations de tables. Postfix n'implmente pas encore de langage de rcriture d'adresse. Au lieu de cela, il utilise des tables de consultation. Ces tables peuvent tre des fichiers locaux dbm ou db, ou des tables NIS ou NetInfo. Ajouter un support pour d'autres mcanismes de consultation est relativement facile.

5.3 Architecture globale


5.3.1 Introduction
Certains systmes de courrier tels Sendmail sont conus en un seul gros programme monolithique qui fait tout. Un seul gros programme facilite certainement le partage des donnes entre les diffrentes parties du systme. Malheureusement, un seul gros programme favorise aussi les erreurs fatales. D'autres serveurs de courrier tels qmail utilisent une hirarchie rigide de programmes qui lancent les autres programmes dans un ordre fix et les suppriment aprs usage. Cette approche apporte une meilleure isolation, au prix de crations de processus coteuses et de communications interprocessus. Le cot supplmentaire peut tre contenu dans des limites acceptables en divisant le travail de faon sensible.

5.3.2 Postfix BigPicture

Ce schma montre les composants de Postfix, et les flux circulants entre eux. Les composants du systme Postfix sont prsents dans cette documentation au chapitre anatomie de Postfix.

Les ellipses jaune sont des programmes de courrier. Les rectangles jaune sont des files d'attentes ou des fichiers. Les rectangles bleu sont des tables de consultations. Les programmes inclus dans l'encadr sont sous le contrle du dmon master de Postfix.

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

Les donnes incluses dans l'encadr sont la proprit du systme de mail Postfix. Les utilitaires en ligne de commande de Postfix. Le dmon principal master de Postfix. Les consultations DNS des dmons serveur SMTP et client SMTP. Les dmons bounce et defer (message rejets ou retards) et les flux des messages rejets. Les rcritures d'adresses et les requtes de rsolution du serveur SMTP et de l'agent local de livraison. Les flux de courrier transfrs par l'agent local de livraison. Les flux de notification au Postmaster propos des erreurs de protocole, violations de politique, etc... Les signaux alertant le dmon pickup et le gestionnaire de files d'attente que du courrier est arriv dans les files d'attente maildrop et incoming, respectivement.

Pour garder le schma lisible, les lments ci-dessous ont t omis:


5.3.3 Architecture de Postfix


Postfix est bas sur des processus semi-rsidents, coopratifs, qui accomplissent des tches spcifiques les uns pour les autres, sans relation parent-enfant particulire. De plus, distribuer le travail donne un meilleur cloisonnement qu'utiliser un gros programme. En outre, l'approche de Postfix a l'avantage qu'un service tel la rcriture d'adresse soit disponible pour chaque composant programme de Postfix sans encourir le cot de la cration d'un programme seulement pour rcrire une adresse. D'ailleurs : je ne prtend pas que Postfix est le seul serveur (de mail) utilisant cette approche. Mme dans cette discipline relativement jeune il est difficile de crer quelque chose de nouveau que personne n'ait jamais fait avant. Postfix est articul autour d'un serveur rsident principal qui lance les dmons de Postfix la demande : processus pour envoyer ou recevoir du courrier par le rseau, processus dmons pour dlivrer le courrier localement, etc... Ces programmes sont crs concurrence d'un nombre configurable, sont rutiliss un nombre de fois configurable et disparaissent l'issue d'un temps configurable d'inactivit. Cette approche rduit considrablement la charge de cration de processus tout en offrant un bon cloisonnement. Postfix est prvu pour tre un remplaant de Sendmail. Pour cette raison, il tente d'tre compatible avec l'infrastructure existante. Cependant, de nombreuses parties du systme Postfix tel l'agent local de livraison peuvent aisment tre remplacs en ditant un fichier de configuration ressemblant au fichier de configuration d'inetd. Par exemple, on peut fournir une alternative l'agent local de livraison qui fonctionne avec des privilges limits pour des utilisateurs POP/IMAP qui ne se loguent jamais et ne devraient pas avoir de compte UNIX. Consquence de cette architecture, Postfix peut facilement tre rduit au minimum strict. Les sousensembles teints ne risquent pas d'tre exploits. Les pare-feu n'ont pas besoin de dlivrer du courrier localement. Sur les stations clientes on neutralise le serveur SMTP et l'agent local de livraison; ou le client monte le rpertoire maildrop depuis un serveur de fichiers et ne lance aucun processus Postfix rsident.

5.3.4 Communication entre les processus Postfix


Le coeur du systme Postfix est implment en une douzaine de programmes semi-rsidents. Pour http://extranet.clg.fr/articles.php3?id_article=65 9

Installation d'un serveur de messagerie Postfix des raisons de confidentialit, ces processus communiquent en utilisant des sockets UNIX ou des FIFO qui rsident dans un rpertoire protg. En dpit de cette intimit, les processus de Postfix ne font pas vraiment confiance aux donnes qu'ils reoivent de cette manire; comme le contenu des fichiers de files d'attente, ils le traitent comme du bavardage. La quantit d'information passe entre les processus est limite. Dans la plupart des cas, la seule information change entre processus est un nom de fichier de file d'attente et une liste de destinataires ou quelques informations de statut. Une fois qu'un courrier est enregistr dans un fichier, il y reste jusqu' ce qu'il soit lu par un programme de livraison de courrier. Postfix prend les prcautions habituelles pour viter la perte d'information : flush et fsync() de toutes les donnes avant d'accuser rception et examen de tous les rsultats d'appels systme pour dtecter les conditions d'erreurs. Ce style de programmation peut paratre nouveau certains, mais je peux vous assurer que c'est une pratique normalise depuis des annes dans beaucoup d'endroits.

5.4 Gestion des files d'attente


5.4.1 Files d'attente du courrier de Postfix
Postfix a quatre diffrentes files d'attentes : maildrop, incoming, active et deferred (voir le chapitre Postfix BigPicture). Le courrier post localement est dpos dans maildrop, et est copi dans la file d'attente incoming aprs quelques nettoyages. La file d'attente incoming contient le courrier juste arriv ou celui que le gestionnaire de file d'attente n'a pas encore regard. La file d'attente active est une file limite en taille pour le courrier que le gestionnaire de file d'attente a ouvert pour la livraison. Le courrier qui ne peut tre livr va dans la file d'attente deferred, ainsi il n'encombre pas les autres voies de livraison. Le gestionnaire de file d'attente conserve en mmoire les informations de la file d'attente active seulement. La taille de la file d'attente active est limite pour la raison suivante: le gestionnaire de file d'attente ne doit jamais manquer de mmoire en raison d'une charge importante de messages. Chaque fois qu'il y a de la place dans la file d'attente active, le gestionnaire de file d'attente laisse entrer un message de la file d'attente incoming et un de la file d'attente deferred. Ceci garantie qu'un nouveau message passera mme lorsque le serveur est encombr. En complment des files d'attente mentionnes ci-dessus, Postfix maintient galement deux espaces de stockage. La file d'attente hold est utilise pour le courrier gel en file d'attente; aucune livraison n'est tente jusqu' ce que quelqu'un libre ces messages avec la commande postsuper -H. Le rpertoire corrupt est utilis pour les fichiers endommags. Plutt que de jeter ces derniers, Postfix les laisse ici pour un examen manuel.

5.4.2 Pas d'effet de troupeau


Construire un systme de courrier haut rendement est une chose. Cependant, personne ne souhaiterait que Postfix se connecte leur site et les inonde avec un grand nombre de livraison simultanes. Ceci est particulirement sensible lorsqu'un site est en panne et que le courrier est rapatri sur un site de secours quelque part dans le rseau.

http://extranet.clg.fr/articles.php3?id_article=65

10

Installation d'un serveur de messagerie Postfix Postfix essaie d'tre bon voisin sur le rseau. Lorsqu'il dlivre du courrier un site, Postfix n'tablira initialement pas plus de deux connexions simultanes. Au fur et mesure que les livraisons russissent, la simultanit augmente lentement jusqu' une certaine limite configurable (ou jusqu' ce que l'hte ou le rseau n'assimile plus la charge); la simultanit dcrot en cas de congestion. Pour ceux qui sont familiers avec l'implmentation TCP/IP, Postfix implmente son propre algorithme analogue au TCP slow start.

5.4.3 Equitabilit
Indpendamment du contrle d'effet de troupeau, la stratgie de livraison de Postfix est base sur un mcanisme de round-robin. Le gestionnaire de file d'attente trie les destinataires de messages dans la file d'attente active par destination, et utilise un mcanisme de round-robin sur toute la file des destinations. En moyenne, Postfix fera des livraisons simultanes vers le mme domaine seulement lorsqu'il n'y aura pas assez de travail pour occuper tous les canaux de sortie SMTP. Ainsi, quand AOL se met hors-ligne et revient, il ne bloquera pas la livraison vers les autres sites. Lorsque du courrier arrive plus vite que Postfix ne peut le livrer, il favorise le nouveau courrier par rapport au courrier en retard. L'ide est que le nouveau courrier doit tre livr aussi rapidement que possible; le courrier retard peut tre livr pendant que le systme tourne vide.

5.4.4 Backoff exponentiel


Postfix implmente un backoff exponentiel pour chaque message. Lorsqu'un message ne peut tre livr la premire tentative, le gestionnaire de file d'attente donne au fichier en attente une marque de temps (timestamp) antidat dans le futur d'un dlai configurable. Ces fichiers sont ignors par le gestionnaire de files d'attente jusqu' expiration de ce dlai. Chaque fois qu'une tentative de livraison choue, la marque de temps est dplace dans le futur d'autant de temps que l'ge du message. Ainsi, le temps entre deux tentatives double chaque fois. Cette stratgie met en oeuvre efficacement le backoff exponentiel.

5.4.5 Cache de statut de destination


Le gestionnaire de files d'attente de Postfix entretient une liste limite court terme de destinations inaccessibles. Cette liste l'aide viter des tentatives inutiles de livraison, en particulier avec les destinations encombres de courrier.

5.5 Scurit
5.5.1 Introduction
Par dfinition, les logiciels de courrier manipulent des informations issues de sources inconnues. Par consquent, ces logiciels doivent tre crits avec grand soin, mme lorsqu'il fonctionne avec des privilges d'utilisateur et mme lorsqu'il ne communique pas directement avec un rseau. Postfix est un systme complexe. La version initiale est compose de 30,000 lignes de code (aprs suppression des commentaires). Avec un systme aussi complexe, la scurit ne peut dpendre d'un seul mcanisme. Dans le cas contraire, une seule erreur peut suffire compromettre tout le systme. Par consquent, Postfix utilise plusieurs lignes de dfense pour matriser les dommages issus des logiciels et autres erreurs.

http://extranet.clg.fr/articles.php3?id_article=65

11

Installation d'un serveur de messagerie Postfix

5.5.2 Moindre privilge


La plupart des dmons de Postfix peuvent tre lancs avec de faibles privilges dans un environnement encag (chroot). C'est particulirement vrai pour les programmes visibles du rseau : le serveur et le client SMTP. Bien que le mcanisme chroot(2), mme combin avec des privilges restreints, n'est pas une garantie contre la compromission, il ajoute un obstacle considrable. Et nous savons que chaque petite brique aide la construction d'un systme sr.

5.5.3 Cloisonnement
Postfix utilise des processus spars pour isoler l'activit de chacun. En particulier, il n'y a aucun chemin direct entre le rseau et le programme sensible du point de vue de la scurit : l'agent local de livraison. Un intrus doit passer au travers de plusieurs programmes. Certaines parties du systme Postfix utilisent de multiples threads. Toutefois, tous les programmes interagissant avec l'extrieur n'utilisent pas de threads. La sparation des processus fournit un meilleur cloisonnement que de multiples threads avec un espace mmoire partag.

5.5.4 Environnement contrl


Aucun programme de livraison de Postfix ne fonctionne sous le contrle d'un processus d'utilisateur. Au lieu de cela, la plupart des programmes sont sous le contrle d'un programme rsident principal qui lui-mme fonctionne dans un environnement contrl, sans aucune relation parent-enfant avec les processus utilisateurs. Cette approche limine les exploits qui utilisent des signaux, des fichiers ouverts, des variables d'environnement et autres attributs de processus que le systme UNIX passe depuis un parent potentiellement malveillant un processus fils.

5.5.5 Set-uid
Aucun programme de Postfix n'utilise le dispositif set-uid. L'introduction de ce concept fut une norme erreur commise dans l'histoire d'Unix. Set-uid (et son cousin plus faible, set-gid) causent plus d'ennui qu'ils n'en faut. Chaque fois qu'un nouveau dispositif est ajout au systme UNIX, setuid entrane un problme de scurit : librairies partages, systme de fichiers /proc, support multi langue, pour mentionner seulement quelques exemples. Set-uid empche d'introduire certains dispositifs qui rendent les successeurs d'UNIX tels plan9 attractifs, par exemple, espace de noms du systme de fichier par processus. Initialement, le rpertoire maildrop tait en criture pour tout le monde, de sorte que les processus locaux pouvaient poster du courrier sans l'assistance d'une commande set-uid ou set-gid ou d'un processus dmon de courrier. Ce rpertoire n'tait pas utilis pour le courrier provenant du rseau, et ses fichiers n'taient pas lisibles par les utilisateurs non privilgis. Un rpertoire ouvert en criture ouvre des possibilits d'ennui : un utilisateur local peut crer des liens en durs vers des fichiers courrier d'un autre utilisateur ainsi ils ne partent pas et/ou sont livrs plusieurs fois; un utilisateur local peut remplir le rpertoire maildrop et essayer de faire planter le systme; enfin, un utilisateur local peut crer des liens depuis les fichiers d'un autre utilisateur et essayer de les faire dlivrer par courrier. Cependant, les fichiers de file d'attente ont un format spcifique; moins d'un fichier non Postfix sur 1012 serait reconnu comme un fichier Postfix valide. En raison du potentiel de vulnrabilit, Postfix a abandonn l'ouverture en criture tout le monde du rpertoire maildrop et utilise un petit programme d'aide postdrop disposant d'un set-gid pour soumettre le courrier.

http://extranet.clg.fr/articles.php3?id_article=65

12

Installation d'un serveur de messagerie Postfix

5.5.6 Confiance
Comme mentionn prcdemment dans la vue d'ensemble, les programmes Postfix n'accorde pas de confiance au contenu des fichiers en file d'attente ou au messages IPC internes. Les fichiers en file d'attente n'ont pas d'informations enregistres sur disque concernant les destinations sensibles tels les fichiers ou commandes. Au lien de cela, les programmes tel l'agent local de livraison essaient de prendre les dcisions sensibles du point de vue de la scurit sur la base d'information de premire main. Naturellement, les programmes de Postfix n'accordent aucune confiance aux donnes reues depuis le rseau. En particulier, Postfix filtre les donnes issues de l'expditeur avant de les exporter via des variables d'environnement. S'il y a une leon que les gens ont appris des dsastres de scurit sur les sites web, c'est celle-ci : ne jamais laisser aucune donne issue du rseau prs d'un shell. Le filtrage est le mieux qu'on puisse faire.

5.5.7 Grandes entres


La mmoire pour les chanes et les buffers est alloue dynamiquement, afin de prvenir les problmes de buffer overrun. Les longues lignes d'un message entrant sont coupes en squences de taille raisonnable et sont reconstruites la livraison. Les diagnostics sont tronqus (en un seul endroit!) avant d'tre passes l'interface syslog (3), afin de prvenir les buffers overruns sur les anciennes plateformes. Cependant, aucune donne n'est tronque avant d'tre passe un appel systme ou une routine. Sur certaines plateformes, le logiciel peut malgr tout avoir des problmes de buffer overrun, suite des vulnrabilits dans le logiciel sous-jacent. Aucune tentative n'est faite pour se protger contre les trop longs arguments en ligne de commande. Les noyaux UNIX imposent leurs propres limites, ce qui devrait suffire pour traiter les programmes emballs ou les utilisateurs malveillants.

5.5.8 Autres dfenses


Le nombre d'instances en mmoire de chaque type d'objets est limit, pour viter au systme de mail de ployer sous la charge. En cas de problme, le logiciel fait une pause avant d'envoyer une rponse d'erreur au client, avant de se terminer avec une erreur fatale ou avant de tenter de redmarrer un programme ayant chou. Le but est de prvenir les tats d'emballement qui rendent simplement les problmes pires.

6 Anatomie de Postfix
6.1 Rception du courrier
Lorsqu'un message entre dans un systme Postfix, le premier point d'arrt est la file d'attente entrante. Le schma ci-dessus montre les principaux composants impliqus dans le traitement d'un nouveau courrier.

http://extranet.clg.fr/articles.php3?id_article=65

13

Installation d'un serveur de messagerie Postfix

Plusieurs cas sont possibles:

Le courrier est dlivr localement. Le programme sendmail de Postfix appelle le programme privilgi postdrop lequel dpose le message dans le rpertoire maildrop dont l'emplacement est spcifi par le paramtre queue_directory. C'est dans ce dossier que le message est examin par le dmon pickup. Ce dmon pratique quelques examens de salubrit afin de protger le reste du systme Postfix. Le courrier arrive par le rseau. Le serveur SMTP de Postfix reoit le message et pratique quelques examens de salubrit afin de protger le reste du systme Postfix. Le serveur SMTP peut tre configur pour effectuer des restrictions UCE (Unsolicited Commercial Email) bases sur des listes noires locales ou obtenues par rseau, des rsolutions DNS, et d'autres informations sur les requtes client. Le courrier est gnr par le systme Postfix. Le serveur Postfix peut gnrer des messages lui-mme afin de renvoyer le courrier non livrable l'expditeur. Les dmons bounce et defer expdie la mauvaise nouvelle. Le courrier est transfr par l'agent local de livraison du courrier, soit en suivant une entre de la base de donnes d'alias (/etc/postfix/aliases), soit en suivant une indication d'un fichier .forward d'un utilisateur. Ceci est indiqu par la flche sans lgende. Le courrier est gnr par le systme Postfix lui-mme afin d'informer le postmaster d'un problme (cette voie est galement indique par la flche sans lgende. Le systme Postfix peut tre configur pour notifier au postmaster les problmes de protocole SMTP, violations de politique anti-spam, etc... Le dmon cleanup effectue l'tape de traitement finale du nouveau courrier. Il ajoute les From: manquants et autres en-ttes de message, rcrit les adresses sous la forme standard [email protected], et ventuellement extrait les adresses de destination des en-ttes de message. Le dmon cleanup insre le rsultat comme un simple fichier dans la file d'attente incoming, et informe le gestionnaire de file d'attente de l'arrive d'un nouveau courrier. Le dmon cleanup peut tre configur pour transformer les adresses sur la base des tables de correspondance canoniques et virtuelles.

http://extranet.clg.fr/articles.php3?id_article=65

14

Installation d'un serveur de messagerie Postfix

Sur demande du dmon cleanup, le dmon trivial-rewrite rcrit les adresses sous la forme standard [email protected]. Postfix ne dispose pas de langage de rcriture. En implmenter un demanderait beaucoup d'effort et la plupart des sites n'en ont pas besoin. Toutefois, Postfix utilise des tables de consultation cet effet.

6.2 Livraison du courrier


Une fois qu'un message est entr dans la file d'attente incoming, l'tape suivante est de le dlivrer. Le schma ci-dessus montre les principaux composants impliqus dans la livraison du courrier.

Plusieurs cas sont possibles:

Le gestionnaire de file d'attente est le coeur du systme de courrier Postfix. Il contacte les agents de livraison local, smtp, lmtp, ou pipe, et envoie une requte de livraison avec le chemin du fichier en file d'attente, l'adresse d'expdition du message, l'hte destinataire si la destination est distante et une ou plusieurs adresses de destination. Le gestionnaire de file d'attente entretient une file d'attente spare pour les messages qui ne peuvent tre livrs (deffered), ainsi un grand nombre de messages retards ne ralentissent pas l'accs la file d'attente normale. Le gestionnaire de file d'attente entretient une petite file d'attente active contenant seulement les quelques messages ouverts pour livraison. La file d'attente active agit comme une fentre limite sur les files d'attentes plus grandes entrante ou retarde. La petite file d'attente active vite au gestionnaire de file d'attente de dpasser la mmoire alloue. ventuellement, le gestionnaire de file d'attente traite le courrier des destinataires lists dans la table relocated. Cette table contient les informations concernant les utilisateurs ou les domaines n'existant plus.

http://extranet.clg.fr/articles.php3?id_article=65

15

Installation d'un serveur de messagerie Postfix

Sur demande du gestionnaire de file d'attente, le dmon trivial-rewrite rsout les destinations. Par dfaut, il distingue seulement les destinations local et distantes. Les informations de routage additionnelles peuvent tre indiques avec la table optionnelle transport. Sur demande du gestionnaire de file d'attente, les dmons bounce et defer gnrent des rapports de non livraison lorsqu'un courrier ne peut tre livr, soit cause d'une erreur irrmdiable, soit parce que la destination n'est pas joignable pendant une certaine priode. L'agent local de livraison interprte les botes aux lettres de type UNIX, les bases de donnes d'alias de type sendmail et les fichier .forward des utilisateurs de type sendmail. Plusieurs agents locaux de livraison peuvent fonctionner en parallle, mais la livraison parallle au mme utilisateur est gnralement restreinte. Comme l'agent de postage du courrier sendmail, l'agent local de livraison implmente l'interface utilisateur familire de Sendmail. L'agent local de livraison peut utiliser diffrentes formes de livraison du courrier: vous pouvez le configurer pour livrer le courrier dans les fichier bote aux lettres des rpertoires utilisateurs et vous pouvez mme le configurer pour dlguer la livraison une commande externe telle le programme populaire procmail.

L'agent virtuel de livraison est une version dpouille de l'agent de livraison local qui livre seulement dans les botes aux lettres. C'est l'agent de livraison le plus scuris de Postfix, car il n'utilise pas les alias ni les fichiers .forward. Cet agent de livraison peut livrer le courrier de plusieurs domaines, ce qui le rend particulirement appropri l'accueil de nombreux petits domaines sur une seule machine.

Le client SMTP recherche la liste des serveurs de courrier de la destination, les classe dans l'ordre de prfrence et essaie alternativement chaque adresse jusqu' trouver un serveur qui rpond. Sur un systme Postfix charg vous observerez plusieurs clients SMTP fonctionnant en parallle. Le client LMTP utilise un protocole semblable au SMTP. Le client peut se connecter localement ou des serveurs distants tels Cyrus. Toute la gestion des files d'attente est faite par Postfix. L'avantage de cette utilisation est qu'une machine Postfix peut alimenter de multiples serveurs de bote aux lettres par LMTP. Inversement, un serveur de bote aux lettres peut tre aliment par de multiples serveurs par LMTP. Le processus pipe est l'interface de sortie des autres transporteurs de courrier (le programme sendmail est l'interface d'entre). Le systme de courrier Postfix comporte des exemples pour la livraison par le protocole UUCP. l'heure de la rdaction de ces lignes, ce vnrable protocole est encore largement rpandu. Par dfaut, Postfix interprte les adresses de type bang path.

http://extranet.clg.fr/articles.php3?id_article=65

16

Installation d'un serveur de messagerie Postfix

6.3 En coulisse
Les sections prcdentes ont donn une vue d'ensemble simplifie de la faon dont le systme Postfix envoie et reoit le courrier. De nombreuses autres oprations se passent en coulisse. Malheureusement, il est difficile de les visualiser sur un affichage en deux dimensions, c'est pourquoi ce document n'a pas d'illustrations.

Le dmon master est le processus surveillant qui garde en oeil sur le bon fonctionnement du systme de courrier. Il est typiquement lanc au dmarrage du systme par la commande postfix, et reste en fonctionnement jusqu' l'arrt du systme. Le dmon master est responsable du dmarrage de tous les autres dmons de Postfix la demande et du redmarrage des dmons termins prmaturment pour diffrents problmes. Le dmon master est galement responsable du respect des limites de nombre de processus dfinis dans le fichier de configuration master.cf. Le dmon bounce ou defer est appel par les autres processus afin de maintenir les fichiers de log de chaque message avec les informations de non livraison. Le dmon trivial-rewrite est appel par les autres processus afin de rcrire les adresses sous la forme [email protected], ou pour rsoudre une destination. Le dmon showq numre le statut de la file d'attente de Postfix. C'est le programme cach derrire la commande mailq. Le dmon flush amliore l'excution de la commande SMTP ETRN, et son quivalent en ligne de commande sendmail -qRdestination, pour les destinations choisie. Le dmon proxymap fournit un service de rsolution en lecture seule pour les processus client de Postfix. Le but est surmonter des restrictions de chroot, et de consolider le nombre de tables ouvertes de consultation en mettant en commun une table ouverte entre des processus multiples. Le dmon spawn coute sur un port TCP, une socket UNIX ou une FIFO et lance les commandes non Postfix la demande, avec la socket ou la FIFO connecte sur les flux standard entre, sortie et erreur. Il n'est actuellement utilis que dans un exemple du systme externe de filtrage du contenu de Postfix.

6.4 Utilitaires en ligne de commande


Assez parl de dmons. La leon d'anatomie de Postfix se termine par une introduction aux utilitaires en ligne de commande pour l'utilisation quotidienne du systme de courrier Postfix. Outre les commandes sendmail, mailq, et newaliases dj prsentes, le systme Postfix apporte sa propre collection d'utilitaires. Pour plus d'uniformit, ils s'appellent tous postquelque-chose.

La commande postfix commande les oprations du systme de courrier. C'est l'interface pour dmarrer et arrter le systme de courrier et pour quelques autres oprations administratives. Cette commande est rserve au super-utilisateur. La commande postalias maintient les bases de donnes d'alias. C'est le programme cach derrire la commande newaliases. La commande postcat montre le contenu des fichiers de file d'attente de Postfix. C'est un utilitaire limit et primaire. Ce programme est typiquement superviser par quelque chose de plus puissant qui peut aussi diter les files d'attente.

http://extranet.clg.fr/articles.php3?id_article=65

17

Installation d'un serveur de messagerie Postfix

La commande postconf montre les paramtres du fichier main.cf de Postfix : valeurs actuelles, valeurs par dfaut ou paramtres n'ayant pas de valeur par dfaut. C'est un utilitaire limit et primaire. Ce programme est typiquement superviser par quelque chose de plus puissant qui ne se limite pas l'dition du fichier main.cf. La commande postdrop est l'utilitaire d'expdition utilis par la commande sendmail afin de dposer le courrier dans le rpertoire de file d'attente maildrop. La commande postkick ouvre quelques canaux de communication utilisables, par exemple dans des scripts shell. La commande postlock permet de verrouiller une bote aux lettres Postfix, par exemple dans des scripts shell. La commande postlog fournit une connexion compatible Postfix pour les scripts shell. La commande postmap maintient les tables de consultation telles les tables canonical, virtual et autres. C'est une cousine de la commande UNIX makemap. La commande postqueue est l'utilitaire lanc par la commande sendmail afin de vider ou lister les courriers en file d'attente. La commande postsuper maintient la file d'attente de Postfix. Elle supprime les vieux fichiers temporaires et dplace les fichiers de file d'attente dans les bons rpertoires aprs une modification dans la profondeur de hachage des rpertoires de file d'attente. Cette commande est lance au dmarrage de systme de courrier.

7 Installation
7.1 Installation partir des sources 7.2 Installation partir de paquetages pr-compils
7.2.1 Debian :
Installation a partir du programme apt :
# apt-get install postfix

Faire OK sur l'cran Postfix Configuration. Choisissez Site Internet dans le stypes de configuration. Remplissez les diffrents crans de configuration selon ce qui vous est propos... Arrter postfix :
/etc/init.d/postfix stop

Dplacez le dossier de spool :


# gid=`cat /etc/group | grep '^nogroup' | cut -f 3 -d :` # adduser system --home /home/vmail --shell /bin/false disabled-password gid ${gid} vmail # mkdir /home/vmail # chown vmail:nogroup /home/vmail # mkdir /home/vmail/spool # mv /var/spool/postfix /home/vmail/spool

http://extranet.clg.fr/articles.php3?id_article=65

18

Installation d'un serveur de messagerie Postfix Modifiez la home de l'utilisateur postfix :


# vi /etc/passwd postfix:x:102:102::/home/vmail/spool/postfix:/bin/false :wq!

8 Configuration
8.1 Configuration de base
8.1.1 Introduction
Postfix a plusieurs centaines de paramtres de configuration qui sont contrls par l'intermdiaire du fichier main.cf. Heureusement, ils ont des valeurs par dfaut. Dans la plupart des cas, vous devez configurer seulement des deux ou trois paramtres avant de pouvoir employer le systme de courrier de Postfix:

Quel domaine afficher dans le courrier sortant (myorigin) De quels domaines recevoir le courrier (mydestination) De quels clients relayer le courrier (mynetworks)

Les valeurs par dfaut pour beaucoup d'autres paramtres de configuration sont drives juste de ces derniers. Le prochain paramtre intressant commande la quantit de courrier envoye au postmaster local:

Quels vnements doivent tre rapports au postmaster (notify_classes)

Soyez sr de placer le suivant correctement si vous tes derrire un proxy ou un traducteur d'adresses rseau, et vous utilisez serveur de MX backup pour un autre domaine:

Adresses rseau de Proxy/NAT (proxy_interfaces)

Si vous changez des paramtres d'un systme Postfix actif, n'oubliez pas de lancer la commande postfix reload de Postfix. Si vous utilisez Postfix sur une interface rseau virtuelle, ou si d'autres serveurs de mail fonctionnent sur votre machine sur des interfaces virtuelles, vous devrez regarder les paramtres cidessous :

Mon nom de machine (myhostname) Mon nom de domaine (mydomain) Mes rseaux (mynetwork) Mes adresses de rseau (inet_interface)

8.1.2 Quel domaine afficher dans le courrier sortant (myorigin)


Le paramtre myorigin indique le domaine qui apparat dans le courrier envoy sur cette machine. La valeur par dfaut est le nom de machine, $myhostname, qui vaut par dfaut le nom de la machine. moins que vous griez un site vraiment petit, vous voudrez probablement changer cela en $mydomain, dont la valeur par dfaut est le domaine parent de la machine. Exemples: http://extranet.clg.fr/articles.php3?id_article=65 19

Installation d'un serveur de messagerie Postfix myorigin = $myhostname (dfaut) myorigin = $mydomain (probablement souhaitable)

8.1.3 Mon nom de domaine (mydomain)


Le paramtre de mydomain indique le domaine de rattachement de $myhostname. Par dfaut il est driv de $myhostname t de la premire partie (sauf si le rsultat donne un domaine racine). Exemples: mydomain = local.domain mydomain = virtual.domain (interface virtuelle)

8.1.4 Mon nom de machine (myhostname)


Le paramtre myhostname dcrit le nom de domaine propre de la machine exploitant le systme Postfix. $myhostname apparat comme valeur par dfaut dans beaucoup d'autres paramtres de configuration de Postfix. Par dfaut, myhostname contient le nom de la machine. Si votre nom de machine n'a pas la forme d'un nom de domaine, ou si vous utilisez Postfix sur une interface virtuelle, vous devrez indiquer le nom de domaine que le systme de courrier devrait employer. Exemples: myhostname = host.local.domain (le nom d'hte n'est pas FQDN) myhostname = host.virtual.domain (interface virtuelle) myhostname = virtual.domain (interface virtuelle)

8.1.5 De quels domaines recevoir le courrier (mydestination)


Le paramtre mydestination indique les domaines pour lesquels cette machine dlivrera le courrier localement, au lieu de le transmettre une autre machine. La valeur par dfaut est de recevoir le courrier destination de la machine elle-mme. Vous pouvez indiquer zro ou plusieurs nom de domaine, /un/fichier et/ou une tables de correspondance type:name, spares par des espaces et/ou des virgules. /un/fichier est remplac par son contenu; type:name demande qu'une consultation de table soit faite. Si votre machine est un serveur de mail pour son domaine entier, vous devez ajouter $mydomain. Exemples: Valeur par dfaut: mydestination = $myhostname localhost.$mydomain Serveur de mail d'un domaine entier: mydestination = $myhostname localhost.$mydomain $mydomain Machine avec de multiples enregistrements DNS de type A: http://extranet.clg.fr/articles.php3?id_article=65 20

Installation d'un serveur de messagerie Postfix mydestination = $myhostname localhost.$mydomain www.$mydomain ftp.$mydomain Attention: afin d'viter des boucles de distribution du courrier, vous devez numrer tous les noms d'htes de la machine, incluant $myhostname, et localhost.$mydomain.

8.1.6 Mes rseaux (mynetworks)


Le paramtre de mynetworks contient tous les rseaux auxquels cette machine fait confiance. Cette information peut tre employe par les dispositifs anti-spam pour identifier les clients SMTP autoriss relayer du courrier par Postfix. Vous pouvez indiquer la liste de rseaux de confiance dans le fichier de configuration main.cf, ou vous pouvez laisser Postfix dduire la liste pour vous. La valeur par dfaut est de laisser Postfix effectuer le travail pour vous. Dfaut: mynetworks_style = subnet Ci-dessous la signification des modles : class Accorde la confiance aux clients SMTP dans les rseaux de la classe A/b/c auxquels on relie Postfix. Ne faites pas ceci avec une connexion modem - Postfix accordera la confiance tout le rseau de votre fournisseur d'accs. Renseignez plutt mynetworks explicitement, comme dcrit ci-dessous. subnet (dfaut) Accorde la confiance aux clients SMTP des sous-rseaux IP relis Postfix. host Accorde la confiance seulement la machine locale. Alternativement vous pouvez renseigner la liste de mynetworks la main, dans ce cas Postfix ignore le paramtre mynetworks_style. Pour indiquer la liste de rseaux de confiance la main, indiquez les blocs de rseau dans la notation de CIDR (rseau/masque), par exemple: mynetworks = 168.100.189.0/28, 127.0.0.0/8 Vous pouvez galement indiquer le chemin absolu d'un fichier au lieu d'numrer les rseaux dans le dossier de main.cf.

8.1.7 De quels clients relayer le courrier (mynetworks, relay_domains)


Par dfaut, Postfix relaie le courrier des clients des rseaux autoriss et des domaines autoriss. Les rseaux autoriss sont dfinis par le paramtre mynetworks. La valeur par dfaut autorise tous les clients des sous-rseaux IP auxquels la machine est relie. Attention : un autre paramtre trs important est le paramtre relay_domain. Si vous omettez de l'indiquer dans votre fichier de configuration, celui-i vaudra relay_domains = $mydestination. Cela signifie que vous ne pourrez envoyer des messages qu'aux machines et/ou domaines lists dans http://extranet.clg.fr/articles.php3?id_article=65 21

Installation d'un serveur de messagerie Postfix mydestination. Pour que Postfix transfre le courrier vers d'autres machines et/ou domaines que ceux grs par vos services, il faut tout simplement spcifier le paramtre relay_domains vide.

8.1.8 O le client Postfix doit-il dlivrer les mails (relay_domains)


Il arrive souvent que Postfix refuse d 'mettre un message pour l'erreur mail loops back to myself . Cette erreur survient lorsque le MTA local est le meilleur serveur de messagerie pour une destination qui n'est pas prcise dans $mydestination, $inet_interfaces, $proxy_interfaces, $virtual_alias_domains, ou encore $virtual_mailbox_domains. Dans un tel cas, comment Postif sait-il qu'il est le meilleur serveur de messagerie d'une destination ? Tout simplement en consultant son DNS prfr, et en listant la valeur des MX record. Il existe une proprit permettant d'indiquer quel transport utiliser dans la cas d'une erreur mail loops back to myself . Cette proprit est best_mx_transport. Par dfaut cette proprit vaut null, mais il est possible de paramtrer best_mx_transport = virtual pour passer le message du client SMTP l'agent virtual de livraison. Vous pouvez indiquer n'importe quel agent de livraison dfini dans le fichier master.cf, ou bien indiquer transport:nexthop . Je vous renvoi vers le manuel transport(5) pour de plus amples renseignements concernant la syntaxe et la signification de transport:nexthop . Par ailleurs, je vous renvoi au paragraphe prcdent, o j'indique qu'il est ncessaire de nommer le paramtre relay_domains dans le fichier main.cf. Si vous souhaitez pouvoir envoyer des messages vers l'extrieur , n'indiquez pas de valeur au paramtre relay_domains. Si vous souhaitez que votre serveur de messagerie ne puisse envoyer des messages qu' certains domaines et pas les autres, indiquez relay_domains=$mydestination.

8.1.9 Quels incidents rapporter au postmaster (notify_classes)


Il est souhaitable d'installer un alias postmaster pointant vers le nom d'une personne. Cet alias doit exister, de sorte que les gens puissent signaler des problmes de distribution de courrier. Le systme Postfix lui-mme signale galement des problmes l'alias postmaster. Vous pouvez ne pas tre intress par tous les types d'vnements, aussi ce mcanisme de report d'incidents est configurable. La valeur par dfaut signale seulement les problmes srieux (ressource, logiciel) au postmaster: Dfaut: notify_classes = resource, software Ci dessous la signification des classes : bounce Envoie les copies du courrier non livrable au postmaster. Si le courrier est non livrable, un avis de non-livraison simple est envoy, avec une copie du message qui n'a pas t livr. Pour des raisons d'intimit, la copie envoye au postmaster d'un avis de nonlivraison simple est tronque aprs les en-ttes de message originaux. Si un avis de nonlivraison simple est lui-mme non livrable, le postmaster reoit un double avis de nonlivraison avec une copie de l'avis de non-livraison simple entier. Voyez galement le paragraphe luser_relay. 2bounce http://extranet.clg.fr/articles.php3?id_article=65 22

Installation d'un serveur de messagerie Postfix Envoie les doubles rebonds au postmaster. delay Informe le postmaster du courrier retard. Dans ce cas, le postmaster reoit les en-ttes de message seulement. policy Informe le postmaster des demandes clients qui ont t rejetes en raison de la politique de restriction (anti-spam). Le postmaster reoit une transcription de la session SMTP entire. protocol Informe le postmaster des erreurs de protocole (ct client ou serveur) ou des tentatives d'un client d'excuter des commandes non implmentes. Le postmaster reoit une transcription de la session SMTP entire. resource Informe le postmaster des courriers non dlivrs en raison d'un problme de ressource (par exemple, la file d'attente crivant les erreurs). software Informe le postmaster des courriers non dlivrs en raison de problmes logiciels.

8.1.10 Adresse rseau proxy/NAT (proxy_interfaces)


Le paramtre proxy_interfaces indique toutes les adresses par lesquelles Postfix reoit du courrier par le biais d'un proxy ou d'un traducteur d'adresse rseau. Vous devez indiquer les adresses de vos proxy/NAT lorsque votre systme est une machine MX backup pour d'autres domaines, autrement les courriers risquent de boucler si le serveur MX principal ne fonctionne pas. Exemples: Dfaut: proxy_interfaces = Machine backup : proxy_interfaces = 1.2.3.4 (l'adresse du proxy/NAT)

8.1.11 Mes adresses de rseau (inet_interfaces)


Le paramtre inet_interfaces indique toutes les adresses d'interface rseau sur lesquelles le systme Postfix doit couter; le courrier adress l'utilisateur @ [ adresse de rseau ] sera dlivr localement, comme s'il tait adress un domaine numr dans $mydestination. Par dfaut Postfix coute sur toutes les interfaces actives. Si vous utilisez des serveurs de mail sur des interfaces virtuelles, vous devrez indiquer sur quelles interfaces couter. Vous devez explicitement indiquer les interfaces de la machine pour le serveur non-virtuel qui http://extranet.clg.fr/articles.php3?id_article=65 23

Installation d'un serveur de messagerie Postfix reoit le courrier pour la machine elle-mme : le serveur de mail non-virtuel ne devrait jamais couter sur les interfaces virtuelles ou vous risquez une boucle de mail. Exemples: Dfaut: inet_interfaces = all Machine utilisant des serveurs virtuels : inet_interfaces = virtual.host.tld (domaine virtuel) inet_interfaces = $myhostname localhost.$mydomain (serveur non-virtuel) Note: vous devez arrter et redmarrer Postfix lorsque ces paramtres changent.

8.2 Contrles des taux de Postfix


8.2.1 Introduction
Construire un systme de distribution de courrier rendement lev du courrier est une chose; en construire un qui ne qui ne sature pas les autres en est une autre. Quelques systmes de courrier souffrent du syndrome du troupeau dans l'orage: ils inondent littralement les autres systmes de courrier. Postfix essaye d'tre un expditeur rapide et un bon voisin en mme temps. Du ct entre, le serveur smtp (smtpd) de Postfix dispose de dfenses contre les clients malveillants ou confus. Elles ne protgeront pas contre une attaque en dni de service globale sur votre infrastructure, mais dans ce cas, rien ne le fera si ce n'est le dbranchement de la prise. Sauf indication contraire, tous les paramtres dcrits ici sont dans le fichier de configuration main.cf. Si vous changez des paramtres d'un systme Postfix fonctionnant, n'oubliez pas de lancer la commande postfix reload. Limites des processus : default_process_limit Simultanit de destination initial_destination_concurrency default_destination_concurrency_limit Limites sur les destinataires default_destination_recipient_limit uucp_destination_recipient_limit smtpd_recipient_limit Toujours remettre plus tard la livraison du courrier defer_transports Backoff des serveurs inaccessibles http://extranet.clg.fr/articles.php3?id_article=65 24

Installation d'un serveur de messagerie Postfix queue_run_delay maximal_queue_lifetime minimal_backoff_time maximal_backoff_time qmgr_message_recipient_limit Ralentir les mauvais clients smtpd_error_sleep_time smtpd_soft_error_limit smtpd_hard_error_limit

8.2.2 Limites des processus


Le paramtre default_process_limit (dfaut: 50) contrle directement les taux d'entre et de sortie de la livraison. Ce paramtre commande le nombre de processus simultans mis en oeuvre par un service Postfix (client smtp, serveur smtp, livraison locale, etc.). Sur des petits systmes ou sur des systmes relis par l'intermdiaire de modem RTC, un default_process_limit fix 10 est probablement mieux dimensionn. Indiquez une plus grande valeur si votre machine est un noeud important de courrier. Vous pouvez passer outre ce paramtre pour des dmons spcifiques de Postfix en ditant le fichier master.cf. Par exemple, si vous ne souhaitez pas recevoir 50 messages de smtp en mme temps, vous pourriez indiquer:
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (50) # ========================================================================== . . . smtp inet n 5 smtpd . . .

8.2.3 Simultanit de destination


Supposons que vous avez un norme systme de courrier avec une tonne de disque et de mmoire, et que vous avez configur Postfix pour lancer jusqu' 1000 clients smtp en mme temps. Flicitations. Mais voulez-vous vraiment tablir 1000 connexions simultanes vers le mme systme distant? Probablement pas. Le gestionnaire de files d'attente de Postfix vient la rescousse. Ce programme met en application l'analogue de la stratgie de dmarrage lent de TCP: en livrant un site, envoyer un nombre restreint de messages d'abord, puis augmenter le taux tant que tout va bien; revenir en arrire en cas de congestion. Le paramtre initial_destination_concurrency (dfaut: 2) indique combien de messages sont initialement envoys la mme destination avant d'adapter la simultanit de la livraison. Naturellement, ce paramtre est pris en compte aussi longtemps qu'il n'excde pas la limite de processus et la limite de simultanit de destination pour le canal spcifique de transport de courrier. Le paramtre default_destination_concurrency_limit (dfaut: 10) indique combien de messages peuvent tre envoys la mme destination simultanment. Vous pouvez outrepasser ce paramtre http://extranet.clg.fr/articles.php3?id_article=65 25

Installation d'un serveur de messagerie Postfix pour des canaux spcifiques de livraison (local, smtp, uucp etc.). Le fichier main.cf recommande ce qui suit: local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 20 Le paramtre local_destination_concurrency_limit indique combien de messages peuvent tre dlivrs simultanment au mme destinataire local. La limite recommande est basse parce que la livraison la mme bote aux lettres doit se produire squentiellement, ainsi le paralllisme massif n'est pas utile. Une autre bonne raison de limiter la simultanit de la livraison au mme destinataire: si le destinataire a une commande shell lourde dans son fichier .forward, ou si le destinataire est un directeur de liste de diffusion, vous ne souhaiterez pas lancer trop d'instances en mme temps. Une limite de simultanit de destination de 20 pour la livraison smtp semble assez pour charger sensiblement un systme sans le mettre genoux. Faites attention en changeant cette valeur en un nombre beaucoup plus grand.

8.2.4 Limites sur les destinataires


Le paramtre default_destination_recipient_limit (dfaut: 50) indique combien de destinataires un agent de livraison de Postfix (smtp, uucp, etc...) enverra avec chaque copie d'un courrier. Si un email a plus que $default_destination_recipient_limit destinataires pour la mme destination, la liste de destinataires sera tronque en plusieurs petites listes, et des copies multiples du message seront envoyes. Vous pouvez outrepasser ce paramtre pour les agents spcifiques de livraison de Postfix (smtp, UUCP, etc.). Par exemple: uucp_destination_recipient_limit = 100 limiterait le nombre de destinataires par livraison UUCP 100. Vous devez faire attention en augmentant la limite rceptive; quelques serveurs smtp coupent la connexion quand ils manquent de mmoire ou quand une limite rceptive dure est atteinte, ainsi le courrier ne passera pas par eux. Le paramtre smtpd_recipient_limit (dfaut: 1000) indique combien de destinataires le serveur smtp acceptera par livraison. C'est plus que n'importe quel client raisonnable de smtp enverrait. La limite existe juste pour protger le systme de courrier contre un client malveillant ou confus.

8.2.5 Toujours remettre plus tard la livraison


Le paramtre defer_transports vous permet d'indiquer quels courriers devrait toujours tre report jusqu' ce que Postfix soit explicitement invit dlivrer. Un petit site raccord par intermittence, et qui veut reporter toutes les livraisons jusqu' ce que la commande sendmail -q soit excut (par exemple, par un script de connexion PPP) emploiera: defer_transports = smtp Un FAI peut employer le dispositif defer_transports pour des clients hors-ligne la plupart du http://extranet.clg.fr/articles.php3?id_article=65 26

Installation d'un serveur de messagerie Postfix temps. Le client peut dclencher la livraison en lanant une commande ETRN sur le port SMTP. Les exemples suivants montrent comment configurer un tel client: /etc/postfix/main.cf: defer_transports = hold Vous pouvez indiquer tout nombre de transports ici. L'exemple en montre seulement un. /etc/postfix/transport: customer.com hold:[gateway.customer.com ] customer.com hold:[gateway.customer.com ] Les [] sont ncessaire pour viter les consultations DNS MX, qui pourraient pointer sur votre machine locale. La deuxime entre est ncessaire seulement si vous souhaitez transmettre par relais le courrier pour des sous domaines du client. /etc/postfix/master.cf:
hold unix n smtp

Ceci est seulement l'entre de master.cf pour le smtp rgulier, avec le premier champ chang en hold.

8.2.6 Backoff des serveurs inaccessibles


Quand un agent de livraison de Postfix (smtp, local, UUCP, etc...) ne peut pas dlivrer un message, il peut bloquer le message lui-mme ou la destination.

Si l'agent de la livraison bloque le message, le gestionnaire de files d'attente donne au fichier en attente un timbre de temps dans le futur, ainsi il ne sera pas regard pendant un moment. Par dfaut, le dlai attendre vaut le temps pass depuis que le message est arriv. Ceci a comme consquence le comportement appel exponential backoff. Si l'agent de la livraison bloque la destination (par exemple un utilisateur local, ou un hte distant), le gestionnaire de files d'attente avance non seulement le timbre de temps du fichier de file d'attente, mais met galement la partie de rception sur une liste de destination "mortes" de sorte qu'il soit ignor pour un certain laps de temps.

Comme vous vous en doutez, ce processus entier est rgi par un ensemble de petits paramtres : queue_run_delay (dfaut: 1000 secondes) Frquence laquelle le gestionnaire de files d'attente balaye la file d'attente du courrier report. maximal_queue_lifetime (dfaut: 5 jours) Combien de temps un message reste dans la file d'attente avant qu'il soit considr comme non livrable. minimal_backoff_time (dfaut: 1000 secondes) http://extranet.clg.fr/articles.php3?id_article=65 27

Installation d'un serveur de messagerie Postfix Quantit de temps minimale pendant laquelle un message ne sera pas regard, et quantit de temps minimale de maintien en destination "morte". maximal_backoff_time (dfaut: 4000 secondes) Quantit de temps maximale pendant laquelle un message ne sera pas regard aprs un chec de la livraison. qmgr_message_recipient_limit (dfaut: 20000) Taille de beaucoup de structures de donnes en mmoire du gestionnaire de files d'attente. Entre autres, ce paramtre limite la taille de la liste de "morts" en mmoire. Les destinations qui agrandiraient la liste au del ne sont pas ajoutes.

8.2.7 Ralentir les mauvais clients


Tout d'abord, aucune dfense ne se protgera contre une attaque en dni de service globale. Je ne veux juste pas soulever d'esprances inutiles. Mais il y a quelques rgles simples qui peuvent traiter des programmes clients confus ou malveillants. Quelques dfenses font partie d'une stratgie plus gnrale: par exemple, quelle longueur une ligne de texte peut atteindre avant d'tre coupe en morceaux, et quelle quantit de texte peut tre inclus dans un en-tte de message multi ligne. Voir la documentation sur le contrle de ressources pour plus de dtail. Le serveur smtp de Postfix incrmente un compteur d'erreur pour chaque session toutes les fois qu'une demande du client n'est pas reconnue, ou qu'elle viole les restrictions anti-spam, ou pour tout autre raisons. Le compteur d'erreur est remis zro quand un message est transfr avec succs. mesure que le compte d'erreur de session augmente, le serveur de smtp change de comportement. L'ide est de limiter les dommages en ralentissant le client. Le comportement est command par les paramtres suivants: smtpd_error_sleep_time (dfaut: 5 secondes) Quand le compte d'erreur de la session est petit, le serveur de smtp fait une pause seulement lorsqu'il signale un problme au client. Le but est d'empcher les clients nafs d'excuter une boucle rapide connexion-erreur-dconnexion. smtpd_soft_error_limit (dfaut: 10) Quand le compte d'erreur de la session dpasse cette valeur, le serveur SMTP patiente nombre_d'erreurs secondes avant de rpondre au client. smtpd_hard_error_limit (dfaut: 20) Quand le compte d'erreur de la session dpasse cette valeur, le serveur SMTP coupe la connexion. Malheureusement, le serveur SMTP de Postfix ne sait pas encore limiter le nombre de connexions du mme client, autrement qu'en limitant le nombre de processus du serveur SMTP (voir la limite de processus). Les choses pourraient tre pires: certains serveurs de courrier n'offrent pas de limitation du nombre de processus. Ce n'est naturellement pas une excuse. Je continue rechercher une bonne solution.

http://extranet.clg.fr/articles.php3?id_article=65

28

Installation d'un serveur de messagerie Postfix

8.3 Contrle des ressources


8.3.1 Introduction
Le systme Postfix est conu pour fonctionner dans un espace fini de mmoire. cet effet, il a des limites configurables sur la taille des objets en mmoire tels que des fragments de ligne des textes, sur le nombre d'instances de tels objets, et sur le temps qu'une opration peut prendre. En outre, des stratgies sont en place pour traiter l'puisement de ressource. L'ide est de continuer fonctionner dans des conditions de stress, sans rendre pire la situation. Limites de taille des objets line_length_limit header_size_limit header_address_token_limit extract_recipient_limit message_size_limit queue_minfree bounce_size_limit Limites du nombre d'objets qmgr_message_recipient_limit qmgr_message_active_limit duplicate_filter_limit Dlais command_time_limit service_name_time_limit Accs exclusifs aux fichiers deliver_lock_attempts deliver_lock_delay stale_lock_time Rtablissement en cas d'erreur fork_attempts fork_delay transport_retry_time

8.3.2 Limites de taille des objets


La premire tape pour fixer la ressource de mmoire est de limiter la taille de chaque objet en mmoire. Une fois que la taille des objets en mmoire est limite, la consommation totale de mmoire est limite en limitant le nombre d'instance d'objet. Simple, non? line_length_limit (dfaut: 2048 octets) Taille maximale d'une ligne de texte avant qu'elle soit divise. Tous les programmes de primtre de Postfix (serveur SMTP, client SMTP, collecte locale pickup et livraison locale) appliquent cette limite de longueur de ligne quand ils reoivent des donnes de l'extrieur. Les http://extranet.clg.fr/articles.php3?id_article=65 29

Installation d'un serveur de messagerie Postfix lignes longues sont reconstruites la livraison. header_size_limit (dfaut: 102400 octets) Taille maximale d'un en-tte de message multi ligne. Le texte d'en-tte dpassant $header_size_limit est renvoy dans le corps du message. Cette limite est exploite par le dmon de rcriture des en-ttes clean-up. header_address_token_limit (dfaut: 10240 tokens) Limite l'emploi de la mmoire et de la CPU que Postfix utilisera pour rcrire les adresses dans les en-ttes de messages. Cette limite est exprime en nombre d'instances. Au del, les instances sont ignores. Cette limite est exploite par le dmon de rcriture des en-ttes clean-up. extract_recipient_limit (dfaut: 10240 destinataires) Nombre maximal de destinataires que Postfix extraira des en-ttes de message avant qu'il ne le transmette. Ceci limite les dommages qu'un programme s'emballant peut faire avec la commande "sendmail -t". Les paramtres suivants limitent l'utilisation du systme de stockage de fichiers: message_size_limit (dfaut: 10240000 octets) Taille maximale d'un fichier de file d'attente de Postfix, y compris l'enveloppe d'information (expditeur, destinataire, etc.). queue_minfree (dfaut: aucune restriction) Nombre d'octets d'espace libre ncessaires dans le systme de fichiers de file d'attente. Le serveur SMTP dcline les demandes de distribution de courrier quand l'espace libre est insuffisant (le courrier est accept une fois l'espace de nouveau disponible). Il n'y a aucune limite de dfaut; cependant, une bonne ide est d'avoir au moins plusieurs fois $message_size_limit de sorte que le systme de courrier ne se coince pas sur un simple grand message. bounce_size_limit (dfaut: 50000 octets) Volume de messages non dlivrs envoy de nouveau l'expditeur.

8.3.3 Limites du nombre d'objets


Une fois la taille des objets en mmoire limite, la prochaine tape pour limiter la mmoire utilise par Postfix est de limiter le nombre d'instances d'objet en mmoire. qmgr_message_recipient_limit (dfaut: 20000) Limite suprieure du nombre de structures de donnes d'adresse de destination en mmoire du gestionnaire de files d'attente (qmgr). Ce paramtre commande galement le nombre d'instances d'autres structures de donnes en mmoire. Voyez, par exemple, la documentation de contrle du taux de livraison. qmgr_message_active_limit (dfaut: 20000) Limite suprieure du nombre de messages dans la file d'attente active. Pour une introduction l'organisation de file d'attente de Postfix voyez la prsentation d'ensemble de Postfix.

http://extranet.clg.fr/articles.php3?id_article=65

30

Installation d'un serveur de messagerie Postfix duplicate_filter_limit (dfaut: 1000) Nombre d'adresses de destination que l'agent local de livraison et le dmon clean-up enregistrent en fournissant un message. Une adresse de destination est ignore quand on la trouve dans la liste enregistre.

8.3.4 Dlais
Les commandes externes ont un temps fini pour accomplir leur tche. Ces commandes sont lances par l'agent local de livraison quand il trouve une destination "|commande" dans une base de donnes d'alias, un fichier :include: ou un fichier .forward. L'agent pipe met en application une alternative pour envoyer le courrier dans des commandes externes. command_time_limit (dfaut: 1000 secondes) Temps au bout duquel l'agent local de livraison interrompra une commande externe. service_name_time_limit (dfaut: $command_time_limit) Dlai de livraison aux commandes externes par l'intermdiaire de l'agent pipe. Substituez le nom du service service_name (le premier champ dans le fichier master.cf).

8.3.5 Accs exclusifs aux fichiers


Intrieurement, les programmes de Postfix cooprent d'une faon trs discipline et entrent rarement en conflit pour l'accs exclusif un fichier. Cependant, les conflits d'accs peuvent se produire sur l'extrieur, par exemple, lorsque le courrier doit tre livr tandis qu'un utilisateur accde sa bote aux lettres. Postfix supporte deux types de verrouillage de fichier:

Verrous internes, implments dans les primitives systme fcntl() ou flock(). Verrous externes, mis en application par des fichiers appels fichier.lock.

Selon le systme hte, Postfix emploie une mthode ou les deux. Les paramtres de configuration suivants contrlent comment Postfix traite les verrous de fichier: deliver_lock_attempts (dfaut: 5) Nombre d'essais de verrouillage de fichier avant de renvoyer. deliver_lock_delay (dfaut: 1 seconde) Temps d'attente entre les tentatives de verrouillage d'un fichier. stale_lock_time (dfaut: 500) Age minimum d'un fichier de verrouillage externe avant qu'il ne soit enlev de force.

8.3.6 Rtablissement en cas d'erreur


Dans des conditions de stress svre, les ressources de systme disponibles peuvent tre insuffisantes pour satisfaire les besoins de Postfix. Le monde peut galement sembler s'crouler quand un fichier de configuration de Postfix est endommag, ou quand un programme de Postfix est dfectueux. L'approche gnrale adopte face au dsastres est de se terminer avec une erreur d'excution fatale (ou avec une erreur d'excution panic en cas de problmes logiciels), et de ressayer aprs un certain dlai (Le dmon principal master remettra en marche les processus aprs ce dlai). Chaque http://extranet.clg.fr/articles.php3?id_article=65 31

Installation d'un serveur de messagerie Postfix tentative choue est enregistre dans les logs; esprant que quelqu'un notera le problme et le rglera. Quelques stratgies de rtablissement ont t mises en application trs tt pendant le dveloppement de Postfix, et n'ont pas encore t rendues configurables. Ce qui suit est le commencement d'une liste croissante de paramtres de commande de rtablissement: fork_attempts (dfaut: 5 fois) Nombre de tentatives de cration d'un nouveau processus. fork_delay (dfaut: 1 seconde) Dlai entre les tentatives de cration d'un nouveau processus. transport_retry_time (dfaut: 60 secondes) Dlai qu'attend le gestionnaire de files d'attente avant de contacter un service de livraison de Postfix apparemment mort.

8.4 Manipulation d'adresse


8.4.1 Introduction
Bien que Postfix ne dispose pas nativement d'un langage de rcriture, il peut manipuler beaucoup d'adresses par l'intermdiaire de tables de correspondance. Tandis qu'un message traverse un systme Postfix, ses adresses sont examines dans l'ordre dcrit dans ce document. Sauf indication contraire, tous les paramtres dcrits ici sont dans le fichier main.cf. Si vous changez des paramtres d'un systme Postfix actif, n'oubliez pas de lancer la commande postfix reload de Postfix. Rcriture d'adresses au format standard swap_bangpath allow_percent_hack append_at_myorigin append_dot_mydomain Translation canonique d'adresse canonical_maps sender_canonical_maps recipient_canonical_maps Masquage d'adresses masquerade_domains masquerade_classes Translation d'adresse virtuelle virtual_maps Routage du courrier

http://extranet.clg.fr/articles.php3?id_article=65

32

Installation d'un serveur de messagerie Postfix transport_maps Table d'utilisateurs dplacs relocated_maps Livraison locale: Base de donnes d'alias alias_maps alias_database Fichiers .forward des utilisateurs .forward Utilisateurs inexistants local_recipient_maps luser_relay

8.4.2 Rcriture d'adresses au format standard


Avant que le dmon cleanup ne passe une adresse par les tables de correspondance, il rcrit d'abord l'adresse sous la forme standard [email protected], en envoyant l'adresse au dmon trivial-rewrite. Le but de la rcriture au format standard est de rduire le nombre d'entres dans des tables de correspondance. Le programme trivial-rewrite de Postfix implmente en dur les manipulations d'adresse suivantes: Rewrite @hosta,@hostb:user@site to user@site Le dispositif de source-routage est dsuet. Postfix ne sait pas manipuler de telles adresses, autrement qu'en ignorant ce routage. Rewrite site!user to user@site Ce dispositif est contrl par le paramtre boolen swap_bangpath (dfaut: oui). Le but est de rcrire les adresses UUCP au format domaine. C'est utile seulement quand vous recevez du courrier par UUCP, mais a ne servira probablement pas autrement. Rewrite user%domain to user@domain Ce dispositif est contrl par le paramtre boolen allow_percent_hack (dfaut: oui). Typiquement, ceci est employ afin de traiter des monstruosits tels que user% domain@otherdomain. Rewrite user to user@$myorigin Ce dispositif est contrl par le paramtre boolen append_at_myorigin (dfaut: oui). Le but est d'obtenir un traitement conforme des utilisateur sur chaque machine de $myorigin. Vous ne devrez probablement jamais arrter ce dispositif, parce que de nombreux composants de Postfix supposent que toutes les adresses ont la forme user@domain. Si votre machine n'est pas la machine principale de $myorigin et si vous souhaitez que certains utilisateurs dlivrent le courrier localement sans passer par la machine principale, http://extranet.clg.fr/articles.php3?id_article=65 33

Installation d'un serveur de messagerie Postfix crez une entre dans la table virtuelle qui roriente user@$myorigin vers user@$myhostname. Rewrite user@host to user@host.$mydomain Ce dispositif est contrl par le paramtre boolen append_dot_mydomain (dfaut: oui). Le but est d'obtenir un traitement conforme des diffrentes formes du mme hte. Certains contesteront cette rcriture de host vers host.$mydomain. C'est pourquoi il peut tre arrt. D'autres apprcient la convenance de faire apposer le domaine automatiquement. Rewrite user@site. to user@site (sans point de remorquage).

8.4.3 Translation canonique d'adresse


Avant que le dmon cleanup ne stocke le courrier d'arrive dans la file d'attente entrante, il utilise la table canonique pour rcrire toutes les adresses dans des enveloppes de message et dans des enttes de message, locales ou distante. Cette tape est pratique pour remplacer les logins par des adresses au format prnom.nom, ou pour nettoyer les domaines invalides dans des adresses de courrier produites par des systmes de courrier. La translation canonique est neutralise par dfaut. Pour l'activer, diter le paramtre canonical_maps dans le fichier main.cf et indiquer une ou plusieurs tables de correspondances, spares par des espaces ou des virgules. Par exemple: canonical_maps = hash:/etc/postfix/canonical En plus des tables canoniques qui sont appliques aux adresses d'expditeur et de destinataire, vous pouvez indiquer les tables canoniques appliques seulement aux adresses d'expditeur ou aux adresses de destinataires. Par exemple: sender_canonical_maps = hash:/etc/postfix/sender_canonical recipient_canonical_maps = hash:/etc/postfix/recipient_canonical Les tables canoniques pour les adresses d'expditeur et de destinataire sont appliques avant les tables canoniques communes. La rcriture spcifique des adresses d'expditeur est utile quand vous voulez rcrire des adresses laides en plus jolies, et que vous voulez toujours pouvoir envoyer du courrier aux adresses originales sans crer une boucle.

8.4.4 Masquage d'adresse


Le masquage d'adresse (masquerading) est une mthode pour cacher les machines d'un domaine derrire leur passerelle de courrier, et pour les faire apparatre le courrier comme provenant de la passerelle elle-mme et non de votre machine. Le masquage d'adresse est neutralis par dfaut. Pour l'activer, diter le paramtre masquerade_domains dans le fichier main.cf et indiquer un ou plusieurs noms de domaine a spar par des espaces ou des virgules. Cette liste est examine de gauche droite et le processus s'arrte la premire occurence correspondant. Par exemple: masquerade_domains = foo.example.com example.com http://extranet.clg.fr/articles.php3?id_article=65 34

Installation d'un serveur de messagerie Postfix remplace any.thing.foo.example.com par foo.example.com, mais remplace any.thing.else.example.com par example.com. Un domaine prfix par ! signifie qu'il ne faut pas le remplacer ni ses sous-domaines. Ainsi, masquerade_domains = !foo.example.com example.com ne change pas any.thing.foo.example.com et foo.example.com, mais modifie any.thing.else.example.com par example.com. Le paramtre de configuration masquerade_exceptions indique quels noms d'utilisateur ne doivent pas tre soumis au masquage. Indiquez un ou plusieurs noms d'utilisateur spars par des espaces ou des virgules. Par exemple, masquerade_exceptions = root Par dfaut, Postfix ne fait aucune exception. Point subtile: par dfaut, le masquage d'adresse est applique seulement aux en-ttes de message, aux enveloppes d'adresses d'expditeur, mais pas aux destinataires. Ceci vous permet d'employer le masquage d'adresse sur une passerelle de courrier, tout en pouvant toujours expdier le courrier de l'extrieur aux utilisateurs sur diffrentes machines. Afin de soumettre aussi les adresses de destinataire d'enveloppe au masquage, indiquez (seulement disponible avec des versions de Postfix postrieures 20010802): masquerade_classes = envelope_sender, envelope_recipient, header_sender, header_recipient Si vous faites ceci, Postfix ne pourra plus envoyer le courrier diffrentes machines.

8.4.5 Translation d'adresse virtuelle


Aprs application des tables canoniques et de masquage, le dmon cleanup emploie la table virtuelle pour rediriger le courrier de tous les destinataires, locaux ou distants. Ceci affecte seulement les enveloppes des adresses de destination; il n'a aucun effet sur des en-ttes de message ou les d'enveloppes des adresses d'expdition. Ces correspondances virtuelles sont utiles pour rorienter le courrier des domaines virtuels vers les botes aux lettres de vrais utilisateurs, et pour rorienter le courrier des domaines qui n'existent plus. Les correspondances virtuelles peuvent galement tre employes pour transformer prnom.nom de nouveau vers les logins Unix, bien qu'il semble que les alias locaux soient plus appropris. La translation virtuelle est neutralise par dfaut. Pour l'activer, diter le paramtre virtual_maps dans le fichier main.cf et indiquer une ou plusieurs tables de correspondance, spares par des espaces ou des virgules. Par exemple: virtual_maps = hash:/etc/postfix/virtual Des adresses trouves dans les tables virtuelles sont soumises une autre itration de translation virtuelle, mais ne sont pas soumises aux translations canoniques, afin d'viter des boucles.

http://extranet.clg.fr/articles.php3?id_article=65

35

Installation d'un serveur de messagerie Postfix

8.4.6 Routage du courrier


Une fois que le gestionnaire de files d'attente a tabli la destination d'un message, il dtermine la mthode par dfaut pour cette destination. Destination $mydestination ou $inet_interfaces $virtual_mailbox_domains $relay_domains Agent de livraison par dfaut local virtual relay (clone de smtp) Paramtre de controle $local_transport $virtual_transport $relay_transport

aucun smtp $default_transport La table de routage optionnelle transport remplace la mthode de livraison par dfaut (cette table est employe par le dmon de rcriture et de rsolution d'adresse). La table de routage peut tre employe pour envoyer le courrier de sites spcifiques par UUCP, ou pour envoyer le courrier un systme de courrier dfaillant qui n'accepterait qu'une connexion smtp la fois (oui, de tels systmes existent et il faut payer pour s'en servir). Les consultations de table la table de routage sont neutralises par dfaut. Pour les activer, diter le paramtre transport_maps dans le fichier main.cf et indiquer une ou plusieurs tables de correspondances, spares par des espaces ou des virgules. Par exemple: transport_maps = hash:/etc/postfix/transport

8.4.7 Table d'utilisateurs dplacs


Ensuite, le gestionnaire de files d'attente passe chaque destinataire par la base de donnes relocated. Cette table fournit des informations sur la faon d'atteindre les utilisateurs qui n'ont pas de compte, ou sur la gestion des domaines n'existant plus. Quand un courrier est envoy une adresse qui est numre dans cette table, le message est renvoy avec un message d'information. Cette fonctionnalit est neutralise par dfaut. Pour l'activer, ditez le paramtre relocated_maps dans le fichier main.cf et indiquer une ou plusieurs tables de correspondances, spares par des espaces ou des virgules. Par exemple: relocated_maps = hash:/etc/postfix/relocated

8.4.8 Base de donnes d'alias


Quand le courrier doit tre dlivr localement, l'agent de livraison local passe chaque destinataire local par la base de donnes d'alias. Ces translations n'affectent pas des adresses dans des en-ttes de message. Les alias locaux sont typiquement employs pour les listes de distribution, ou pour rediriger le courrier des alias standards tels postmaster vers de vraies personnes. La table peut galement tre employe pour transformer des adresses prenom.nom en nom de login. La consultation des alias est active par dfaut. La configuration par dfaut dpend de l'environnement systme, mais elle est en gnral une de celles qui suivent:

http://extranet.clg.fr/articles.php3?id_article=65

36

Installation d'un serveur de messagerie Postfix alias_maps = hash:/etc/aliases alias_maps = dbm:/etc/aliases, nis:mail.aliases Le chemin du fichier de la base de donnes d'alias est contrl par le paramtre de configuration alias_database. La valeur dpend du systme hte. Habituellement elle est l'une de celles-ci: alias_database = hash:/etc/aliases (4.4bsd, LINUX) alias_database = dbm:/etc/aliases (4.3bsd, SYSV<4) alias_database = dbm:/etc/mail/aliases (SYSV4) Pour des raisons de scurit, les livraisons vers une commande ou un fichier sont excutes avec les droits du propritaire de la base de donnes d'alias. Un UID par dfaut, default_privs, est employ pour les livraisons vers une commande/un fichier pour les alias appartenant root.

8.4.9 Fichiers .forward des utilisateurs


Les utilisateurs peuvent contrler la distribution de leur courrier en indiquant les destinations dans un fichier appel .forward situ dans leurs rpertoires locaux. La syntaxe de ces fichiers est la mme que des alias, except la clef de correspondance et les deux points.

8.4.10 Utilisateurs inexistants


Quand l'agent local de livraison constate qu'un destinataire n'existe pas, le message est normalement renvoy l'expditeur ("utilisateur inconnu"). Parfois il est souhaitable d'expdier ce courrier vers une autre machine. cette fin vous pouvez indiquer une destination alternative avec le paramtre de configuration luser_relay. Alternativement, le courrier pour les destinataires inexistants peut se voir appliqu un transport entirement, en utilisant le paramtre de configuration fallback_transport. Pour plus de dtails, voyez l'agent local de livraison. Note: si vous utilisez le paramtre luser_relay pour recevoir du courrier pour des comptes nonUNIX, alors vous devez spcifier:
local_recipient_maps =

(i.e. vide) dans le fichier main.cf, sinon le serveur SMTP de Postfix rejettera le courrier des comptes non-UNIX avec la mention "User unknown in local recipient table". luser_relay indique une adresse. Il est soumis aux expansions $name. Les exemples les plus utiliss sont: [email protected] Le nom d'utilisateur seul, sans extension d'adresse, est prfix @other.host. Par exemple, le courrier destin username+foo est envoy [email protected]. [email protected] L'adresse originale entire, y compris l'extension d'adresse, est prfix @other.host. Par exemple, le courrier pour username+foo est envoy [email protected]. sysadmin+$user

http://extranet.clg.fr/articles.php3?id_article=65

37

Installation d'un serveur de messagerie Postfix Le nom d'utilisateur seul, sans extension d'adresse, est ajout sysadmin. Par exemple, le courrier pour username+foo est envoy sysadmin+username. sysadmin+$mailbox L'adresse originale entire, y compris l'extension d'adresse, est ajoute sysadmin. Par exemple, le courrier pour username+foo est envoy sysadmin+username+foo.

9 Configuration finale de type basique(hashmap)


Aprs avoir dtaill les quelques options les plus utilises dans Postfix, voici venu le temps de la mise en oeuvre. Je vous communique ici un fichier /etc/postfix/main.cf de base.

9.1 Fichier /etc/postfix/main.cf avec tables en hashmap


9.1.1 Principe de fonctionnement
Le contenu de ce fichier main.cf est configur de faon grer des domaines spars et sans compte Unix pour heberger les Mailbox. Cette configuration des domaines et des alias est enregistre dans des hashmap, ou des fichiers contenant de simples listes. Le principe de gestion des domaines virtuels repose sur l'agent de livraison virtual(8). Cet agent est appel par le gestionnaire des files d'attentes qmgr(8). Lorsqu'un nouveau message arrive sur le serveur Postfix, il est copi dans la file d'attente incoming par le service cleanup(8). Aprs que le service cleanup(8) ait determin la validit du message, il prpare le message son traitement, et prvient le gestionnaire de file d'attente qmgr(8) de l'arrive d'un nouveau message. Ce dernier analyse la file d'attente incoming , et place le message traiter en fonction de sa disponibilit soit dans la file d'attente active , soit dans la file d'attente defered . Par dfaut, la file d'attente active est capable de stocker 20000 messages. Le gestionnaire de la file d'attente qmgr(8) dclenche alors le service trivial-rewrite(8). Ce service est capable de trois choses :

r-crire une adresse dans une forme standard rsoudre une adresse par trois mthodes distinctes: transport, nexthop, recipient. vrifier la validit d'une adresse smtp(8) lmtp(8) local(8) virtual(8) pipe(8) error(8)

Selon le rsultat de trivial-rewrite(8), diffrents agents de livraison sont invoqus :


Le prsent cas qui nous interesse est le fonctionnement de virtual(8). Cet agent de livraison ne sait que dlivrer les messages. Les autres fonctionalites telles que le renvoi de messages (mail forwarding), les fonctions de rpondeur (out of office notification), etc doivent tre configures par le mcanisme des tables des virtual_alias, ou par tout autre mcanisme similaire de recherche. http://extranet.clg.fr/articles.php3?id_article=65 38

Installation d'un serveur de messagerie Postfix

C'est l'agent virtual(8) qui vient lire l'emplacement de la boite au lettre du destinataire. Cet emplacement est dtermin par les paramtres virtual_mailbox_base et virtual_mailbox_maps. La table virtual_mailbox_maps est indexe par l'adresse complte du destinataire. Le chemin de la bote aux lettres est le fruit d'une concatnation entre le prfixe impos par virtual_mailbox_base et le rsultat de la recherche dans la table virtual_mailbox_maps. Selon si le rsultat de la recherche dans la table virtual_mailbox_maps se termine ou non par un slash ( / ) il s'agit d'un emplacement de type maildir ou mailbox. Le propritaire de la boite aux lettres est control par les tables indiques pour virtual_uid_maps, et virtual_gid_maps, qui elles aussi sont indexes par l'adresse complte du destinataire. Le paramtre virtual_minimum_uid indique l'identifiant minimum d'un propritaire de boite aux lettres. L'ordre de recherche dans les tables est ralis de la manire suivante :

recherche d'une adresse tendue ([email protected]) Ce type d'adresse tendue mane en ralit d'une astuce permettant de trier automatiquement le courrier entrant par le biais de logiciels comme procmail. Je ne sais pas si elle est vraiment d'usage, ni utile dans notre cas de serveur de mails. recherche de l'adresse standard ([email protected]) recherche du nom du domaine (@domaine.tld)

Accessoirement, le contenu d'une table peut tre reprsent par des expression rgulires. Si tel est le cas, la cl de recherche ne peut-tre qu'une adresse standard, car c'est cette dernire qui est donne en pature l'expression rgulire.

9.1.2 Contenu du fichier main.cf


# see /usr/share/postfix/main.cf.dist for a commented, fuller # version of this file. # Do not change these directory settings - they are critical to Postfix # operation. command_directory = /usr/sbin daemon_directory = /usr/lib/postfix program_directory = /usr/lib/postfix # Quel domaine afficher dans le courrier sortant. myorigin = /etc/mailname # Le nom de mon domaine mydomain = mondomaine.tld # Le nom de cette machine myhostname = smtp1.mondomaine.tld # De quels domaines recevoir le courrier mydestination = $myhostname, localhost.$mydomain $mydomain # De quels clients relayer le courrier mynetworks = 213.41.15.128/28, 127.0.0.0/8 # Adresse rseau sur lesquelles postfix sera en coute inet_interfaces = $myhostname, localhost # notify_classes = bounce,delay,policy,protocol,resource,software http://extranet.clg.fr/articles.php3?id_article=65 39

Installation d'un serveur de messagerie Postfix notify_classes = resource,software # On accepte de relayer les mails vers des adresses extrieures relay_domains = ########################################### # Donnes variantes ########################################### mail_owner = postfix default_privs = vmail queue_directory = /home/vmail/spool/postfix home_mailbox = Maildir/ # Dossier des mailbox des users locaux. mail_spool_directory = /var/spool/mail unknown_client_reject_code = 450 unknown_address_reject_code = 550 debug_peer_level = 1 mynetworks_style = host mydomain_fallback = domaine.tld enable_server_options = yes smtpd_banner = ESMTP $mail_name setgid_group = postdrop biff = no ########################################## # Gestion des adresses ########################################## best_mx_transport = virtual append_dot_mydomain = yes alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases virtual_mailbox_base = /home/vmail/inbox virtual_mailbox_domains = /etc/postfix/virtualdomains virtual_minimum_uid = 100 virtual_uid_maps = static:105 virtual_gid_maps = static:65534 virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_alias_maps = hash:/etc/postfix/virtual virtual_alias_domains = $virtual_alias_maps local_recipient_maps = ########################################### # Simultanit de destination ########################################### http://extranet.clg.fr/articles.php3?id_article=65 40

Installation d'un serveur de messagerie Postfix initial_destination_concurrency = 2 local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 10 ########################################### # Limites sur les destinataires ########################################### default_destination_recipient_limit = 50 ########################################### # Backoff des serveurs inaccessibles ########################################## queue_run_delay = 300s maximal_queue_lifetime = 1d bounce_queue_lifetime = 1d minimal_backoff_time = 900s maximal_backoff_time = 1800s qmgr_message_recipient_limit = 20000 ########################################### # Ralentir les mauvais clients ########################################## smtpd_error_sleep_time = 5s smtpd_soft_error_limit = 10 smtpd_hard_error_limit = 20 ########################################## # Limites de taille des objets ########################################## line_length_limit = 2048 header_size_limit = 102400 header_address_token_limit = 10240 extract_recipient_limit = 10240 message_size_limit = 20480000 mailbox_size_limit = 0 queue_minfree = 30720000 bounce_size_limit = 50000 command_time_limit = 900s ########################################## # Destinataire des messages d'erreur ########################################## 2bounce_notice_recipient = postmaster address_verify_sender = postmaster bounce_notice_recipient = postmaster delay_notice_recipient = postmaster error_notice_recipient = postmaster

http://extranet.clg.fr/articles.php3?id_article=65

41

Installation d'un serveur de messagerie Postfix

9.1.3 Explication des paramtres


mail_owner (valeur par dfaut: postfix) Le compte UNIX qui est propritaire des files d'attentes Postfix et de la plupart de ses processus. Il convient d'indiquer ici le compte d'un utilisateur qui ne partage pas son groupe avec un quelconque autre utilisateur, et qui n'est propritaire d'aucun autre fichier ou processus sur ce systme. Plus spcialement, le compte indiqu ici ne doit pas tre le compte nobody ni daemon. IL CONVIENT D'UTILISER UN COMPTE SYSTEME DEDIE PAR SON IDENTIFIANT COMME POUR SON GROUPE. default_privs (valeur par dfaut: nobody) Cette valeur est utilise pour indiquer les droits par dfaut employs par l'agent de la livraison local en vue de le livrer un fichier externe ou bien une commande. Ces droits sont utiliss lorsque la livraison est demande depuis un fichier d'alias qui appartient l'utilisateur root, ou bien lorsque cette livraison est ralise sous le nom de root. IL CONVIENT DE NE PAS INDIQUER LE NOM D'UN COMPTE PRIVILEGIE OU DU PROPRIETAIRE DES PROCESSUS POSTFIX. queue_directory (valeur par dfaut: voir la sortie de "postconf -d") Ce paramtre dtermine l'emplacement du rpertoire de la file d'attente de plus haut niveau pour Postfix. Il s'agit de la racine pour le daemon Postfix lorsque ce dernier s'execute en environnement chroot. home_mailbox (valeur par dfaut: vide) Nom facultatif d'un fichier ou dossier reprsentant le nom de la bote aux lettres finale. Cellei est relative avec la home du compte de l'utilisateur local qui l'on doit effectuer la remise du courrier. Indiquez un chemin se terminant par un / pour effectuer une livraison selon le modle Qmail. Notez que la priorit du niveau le plus haut vers le niveau le plus bas pour l'agent de livraison local est respectivement donn par : le fichier aliases, le fichier .forward, l'entre mailbox_transport, l'entre mailbox_command_maps, l'entre mailbox_command, l'entre home_mailbox, l'entre mail_spool_directory, l'entre fallback_transport et enfin l'entre luser_relay. Exemples: home_mailbox = Mailbox home_mailbox = Maildir/ mail_spool_directory (valeur par dfaut: voir la sortie de "postconf -d") Ce paramtre indique le rpertoire o conserver les boites aux lettres locales selon le modle UNIX (maildir). Les valeurs par dfaut dependent du type de systme utilis. Indiquez un nom se terminant par un / pour prfrer une livraison faon maildir. Nota : la livraison du courrier est ralise selon les privilges du propritaire du dossier. Si vous utilisez le paramtre mail_spool_directory pour effectuer les livraisons selon le type http://extranet.clg.fr/articles.php3?id_article=65 42

Installation d'un serveur de messagerie Postfix maildir, alors vous devez crer manuellement toute l'arborescence du dossier indiqu dans mail_spool_directory. Postfix ne le fera pas pour vous. Exemples: mail_spool_directory = /var/mail mail_spool_directory = /var/spool/mail virtual_mailbox_domains (valeur par dfaut: $virtual_mailbox_maps) Ce paramtre indique la liste des domaines grs par Postfix; Les messages reus sont restitus par l'intermdiaire de la mthode choisie dans $virtual_transport. Par dfaut, il s'agit de l'agent de livraison virtual(8) de Postfix qui s'occupe de cette tche. Le serveur SMTP valide les adresses de destinations par l'intermdiaire des lments spcifis dans $virtual_mailbox_maps et rejette les messages qui n'ont pas de destinataires dans cette liste. Consultez le fichier ADDRESS_CLASS_README qui explique le fonctionnement de la classes de gestion des boites aux lettres des domaines virtuels. Ce paramtre attends la mme syntaxe que le paramtre de configuration mydestination; Indiquez ici une liste de machines ou de nom de domaines, un modle /file/name ou type:table, le tout spars soit par un espace soit par une virgule. Il faut savoir qu'un modle file/name est remplac par son contenu, et qu'une table de recherche type:table est assortie lorsqu'un nom correspond une cl de recherche (le rsultat de la recherche est ignor). Il est possible de tronquer les longues lignes en commenant la ligne suivante par un espace. Cette fonctionalit n'est possible qu'a partir de la version 2.0 de Postfix. Le paramtre par dfaut garde une compatibilit descendante avec Postfix 1.1. virtual_mailbox_base (valeur par dfaut: vide) Ce paramtre indique un prfixe que l'agent de livraison rajoute au dbut de tous les chemins rsultant d'une recherche dans la table $virtual_mailbox_maps. Il s'agit ici d'une mesure de scurit afin d'viter une pollution du systme de fichier avec des boites aux lettres, cause d'une erreur de configuration des maps. Il reste toutefois possible d'indiquer / comme paramtre ce qui est bien entendu trs dconseill. Exemples: virtual_mailbox_base = /var/mail virtual_mailbox_base = /home/vmail virtual_mailbox_maps (valeur par dfaut: vide) Ce paramtre indique la table de recherche optionnelle qui contient toutes les adresses emails valide des domaines indiqus dans $virtual_mailbox_domains. Dans la table de recherche, ne rien indiquer sur la zone situe gauche de @domain.tld permet d'indiquer la destination des messages envoys n'importe quel utilisateur d'un domaine donn et qui n'aurait pas d'entre [email protected] explicite. L'agent de livraison virtual(8) utilise cette table pour rechercher les botes aux lettres ou les dossiers de stockage (maildir) d'un destinataire donn. Lorsque le rsultat de la recherche se http://extranet.clg.fr/articles.php3?id_article=65 43

Installation d'un serveur de messagerie Postfix termine par un slash (/), alors la livraison est ralise dans le style dossier de stokage (maildir), sinon, le chemin est considr comme pointant vers un fichier de bote aux lettres (mailbox). Notez que la valeur du paramtre pass $virtual_mailbox_base est systmatiquement ajout comme prfixe ce chemin de destination. Lorsque l'adresse de destination contient une extension d'adresse locale (dfinie par l'usage, pas par une RFC) du type [email protected], l'agent de livraison virtual(8) recherche d'abord l'adresse complte ([email protected]), et lorsque la recherche choue, il recherche l'adresse non tendue du type [email protected]. Dans tous les cas le message doit tre livr [email protected], mais l'entte du message contiendra [email protected]. Note 1: Pour des raisons de scurit, l'agent de livraison virtual(8) desactive la substitution par expressions rgulires de $1, etc dans les tables de recherche des expressions rgulires, puisque cela pourait ouvrir un trou de scurit. Note 2: Pour des raisons de scurit, l'agent de livraison virtual(8) desactive la recherche dans les tables travers le serveur proxymap(8) puisque cela pourait ouvrir un trou de scurit. virtual_minimum_uid (valeur par dfaut: 100) Ce paramtre indique la valeur minimale d'un UID qui est accept par l'agent de livraison virtual(8) au rsultat d'une recherche dans la table $virtual_uid_maps. Toute valeur rsultant de cette recherche qui est infrieure ce paramtre est rejette, ce qui a pour consquence de reporter la livraison du message. virtual_uid_maps (valeur par dfaut: vide) Ce paramtre permet de spcifier l'emplacement de la table de correspondance entre un UID (User Identifier) et une adresse de destination. L'agent de livraison virtual(8) utilise cette table afin de dterminer sous quel UID il doit crire le message dans la bote aux lettre de destination. Dans la table de recherche, ne rien indiquer sur la zone situe gauche de @domain.tld permet d'indiquer la destination des messages envoys n'importe quel utilisateur d'un domaine donn et qui n'aurait pas d'entre [email protected] explicite. Lorsque l'adresse de destination contient une extension d'adresse locale (dfinie par l'usage, pas par une RFC) du type [email protected], l'agent de livraison virtual(8) recherche d'abord l'adresse complte ([email protected]), et lorsque la recherche choue, il recherche l'adresse non tendue du type [email protected]. Note 1: Pour des raisons de scurit, l'agent de livraison virtual(8) desactive la substitution par expressions rgulires de $1, etc dans les tables de recherche des expressions rgulires, puisque cela pourait ouvrir un trou de scurit. Note 2: Pour des raisons de scurit, l'agent de livraison virtual(8) desactive la recherche dans les tables travers le serveur proxymap(8) puisque cela pourait ouvrir un trou de scurit. virtual_gid_maps (default: empty)

http://extranet.clg.fr/articles.php3?id_article=65

44

Installation d'un serveur de messagerie Postfix Ce paramtre permet de spcifier l'emplacement de la table de correspondance entre un GID (Group Identifier) et une adresse de destination. L'agent de livraison virtual(8) utilise cette table afin de dterminer sous quel GID il doit crire le message dans la bote aux lettre de destination. Lorsque l'adresse de destination contient une extension d'adresse locale (dfinie par l'usage, pas par une RFC) du type [email protected], l'agent de livraison virtual(8) recherche d'abord l'adresse complte ([email protected]), et lorsque la recherche choue, il recherche l'adresse non tendue du type [email protected]. Note 1: Pour des raisons de scurit, l'agent de livraison virtual(8) desactive la substitution par expressions rgulires de $1, etc dans les tables de recherche des expressions rgulires, puisque cela pourait ouvrir un trou de scurit. Note 2: Pour des raisons de scurit, l'agent de livraison virtual(8) desactive la recherche dans les tables travers le serveur proxymap(8) puisque cela pourait ouvrir un trou de scurit. virtual_alias_maps (valeur par dfaut: $virtual_maps) Ce paramtre permet de spcifier l'emplacement de la table de correspondance entre une adresse de messagerie et une redirection vers une ou plusieurs autres adresses de messagerie. Le format de cette table et ses fonctionalites sont dfinis dans la page du manuel de virtual(5). Cette fonctionalit n'est possible qu'a partir de la version 2.0 de Postfix. Le paramtre par dfaut garde une compatibilit descendante avec Postfix 1.1. Si vous utilisez cette fonctionalit avec un fichier index, executez la commande postmap / etc/postfix/virtual aprs toute modification sur ce fichier. Exemples: virtual_alias_maps = dbm:/etc/postfix/virtual virtual_alias_maps = hash:/etc/postfix/virtual virtual_maps (valeur par dfaut: empty) Ce paramtre permet de spcifier l'emplacement de la table de recherche pour : noms des domaines pour lesquels toutes les adresses sont rediriges vers des adresses soit locales soit situes sur un domaine distant (alias de domaine).

Liste des adresses qui sont rediriges vers des adresses soit locales soit situes sur un domaine distant (alias d'utilisateur).

Cette fonctionalit est possible avant la version 2.0 de Postfix. Depuis la version 2.1 de Postfix, ce paramtre a t remplac par deux contrles distinct : virtual_alias_domains et virtual_alias_maps.

9.2 Fichier /etc/postfix/aliases


Ce fichier est une table de correspondance pour les utilisateurs du systme. Ainsi, il n'existe pas de bote aux lettres pour des utilisateurs comme root, mais root est un alias vers un autre utilisateur, http://extranet.clg.fr/articles.php3?id_article=65 45

Installation d'un serveur de messagerie Postfix voir mme vers une autre adresse de messagerie. Voici un exemple de contenu de ce fichier : # /etc/aliases postmaster: [email protected] root: postmaster mailer-daemon: postmaster nobody: postmaster hostmaster: postmaster usenet: postmaster news: postmaster webmaster: postmaster www: postmaster ftp: postmaster abuse: postmaster noc: postmaster security: postmaster postfix: postmaster Il est important de noter qu' chaque fois que vous faites une modification dans ce fichier, il faut gnrer sa hashmap. Cela est possible par le biais de la commande: # postalias /etc/postfix/aliases Eventuellement, rechargez la configuration de Postfix par la commande: # /etc/init.d/postfix reload

9.3 Fichier /etc/postfix/virtualdomains


Ce fichier permet d'indiquer la liste des domaines grs par le serveur Postfix. Tout message envoy sur le serveur Postfix dont le domaine n'est pas list dans ce fichier sera rejett. Voici un exemple de contenu de ce fichier : exemple.com exemple.net domaine.tld sub.domaine.tld test.org Note : Toutes les lignes suivant la premire doivent commencer par un espace. Il est aussi possible d'indiquer tous les domaines sur une seule ligne, avec les valeurs spares soit par un espace, soit par une virgule. Note: Par exprience, je suis sceptique concernant la syntaxe d'un domaine par ligne spar par des espaces. La sysntaxe qui fonctionne reste une seule ligne avec des valeurs spares par une virgule.

9.4 Fichier /etc/postfix/vmailbox (hashmap)


Ce fichier contient une table de correspondance entre des adresses de messagerie et un emplacement de stockage. Dans l'exemple donn ci-aprs, j'ai repris les domaines cits dans le fichier /etc/postfix/virtualdomains, et j'ai vonlontairement mlang les dossiers de stockage. http://extranet.clg.fr/articles.php3?id_article=65 46

Installation d'un serveur de messagerie Postfix Voici un exemple de contenu de ce fichier : [email protected] exemple.com/user1 [email protected] exemple.com/user1 [email protected] exemple.com/user2/ [email protected] exemple.com/user1 [email protected] domaine.tld/user1 [email protected] domaine.tld/user1 [email protected] exemple.com/user2/ [email protected] exemple.com/user1 [email protected] test.org/user1/ @test.org domaine.tld/user1 La premire ligne signifie que tous les messages destination de [email protected] seront plas dans ${virtual_mailbox_base}/exemple.com/user1. Comme le chemin ne se termine pas par un slash / , il s'agit d'un fichier mailbox. La seconde ligne indique que tous les messages destination de [email protected] seront plas dans ${virtual_mailbox_base}/exemple.com/user1. Il est donc possible d'avoir plusieurs adresses sur une mme bote. La troisime ligne signifie que tous les messages destination de [email protected] seront plas dans ${virtual_mailbox_base}/exemple.com/user2/. Comme le chemin se termine par un slash / , il s'agit d'un dossier maildir. La quatrime ligne signifie que tous les messages destination de [email protected] seront plas dans ${virtual_mailbox_base}/exemple.com/user1. Comme pour la ligne deux, il est possible d'avoir plusieurs adresses, et ce sur des domaines diffrents, sur une mme bote. La cinquime ligne n'ajoute pas grand chose sinon qu'elle nous informe que user1 n'est pas un nom d'utilisateur, mais de bote aux lettres. La dernire ligne nous indique que tous les mails destination du domaine test.org seront expdis dans la bote de ${virtual_mailbox_base}/domaine.tld/user1, l'exeption des messages destination de [email protected] qui seront plas dans le dossier mailbox ${virtual_mailbox_base}/test.org/user1/.

Attention, pour que vos modifications sur ce fichier soient prises en compte, il est ncessaire d'executez la commande postmap /etc/postfix/vmailbox aprs toute modification. Il est aussi important de noter que les adresses figurant comme index de la hashmap (1er colonne) ne doivent en aucun cas figurer dans le fichier /etc/postfix/virtual. Ces deux fichiers n'ont pas le mme rle.

9.5 Fichier /etc/postfix/virtual (hashmap)


Ce fichier contient une table de correspondance entre des adresses de messagerie et une redirection vers une ou plusieurs autres adresses de messagerie. Dans l'exemple donn ci-aprs, j'ai repris les domaines cits dans le fichier /etc/postfix/virtualdomains, et j'ai vonlontairement mlang les dossiers de stockage. Voici un exemple de contenu de ce fichier : [email protected] [email protected] [email protected] [email protected] [email protected] http://extranet.clg.fr/articles.php3?id_article=65 47

Installation d'un serveur de messagerie Postfix [email protected] [email protected] [email protected] [email protected] [email protected] La premire ligne signifie que tous les messages destination de [email protected] seront r-expdis vers l'adresse [email protected]. Comme [email protected] est heberg sur le mme serveur, les messages seront plas dans ${virtual_mailbox_base}/exemple.com/user1 (cf : /etc/postfix/vmailbox). La seconde ligne signifie que tous les messages destination de [email protected] seront r-expdis vers l'adresse interne [email protected] ainsi que vers l'adresse interne [email protected]. La dernire ligne signifie que tous les messages destination de [email protected] seront r-expdis vers l'adresse externe [email protected] ainsi que vers l'adresse interne [email protected].

Attention, pour que vos modifications sur ce fichier soient prises en compte, il est ncessaire d'executez la commande postmap /etc/postfix/virtual aprs toute modification. Il est aussi important de noter que les adresses figurant comme index de la hashmap (1er colonne) ne doivent en aucun cas figurer dans le fichier /etc/postfix/vmailbox. Ces deux fichiers n'ont pas le mme rle.

9.6 Script de transfert Qmail -> Postfix.


9.6.1 Procdure
Nous allons crer un script permettant de rcuprer les informations contenues dans les diffrents fichiers de configuration de notre serveur Qmail, et de les transformer au format Postfix. La problmatique c'est qu'un mme utilisateur peut avoir plusieurs adresses de messagerie sur des domaines diffrents, mais pointant vers le mme dossier de stockage. Pour rsoudre cela, Qmail utilise le fichier /var/qmail/control/virtualdomains, dans lequel chaque domaine d'une mme entite est associ un unique alias. Par exemple, supposons que la socit exemple dpos les domaines exemple.com, exemple.net et exemple.org. Le contenu du fichier /var/qmail/control/virtualdomains sera : exemple.com:exemple exemple.net:exemple exemple.org:exemple domaine.tld:domaine domaine.org:domaine test.org:test Ce faisant Qmail est mme de grer plusieurs utilisateurs identique mais plac sur des domaines diffrents (Par exemple [email protected] et [email protected]). Cependant, pour gnrer correctement le fichier /etc/postfix/vmailbox, il nous faut prendre en compte que l'utilisateur user2 doit avoir une adresse email sur chacun des trois domaines de sa socit exemple, mais que l'emplacement de stockage de ses email sera /home/vmail/inbox/exemple.com/user2 et non pas un dossier par domaine. Il nous faut donc reprendre le fichier /var/qmail/control/virtualdomains et le copier dans http://extranet.clg.fr/articles.php3?id_article=65 48

Installation d'un serveur de messagerie Postfix /var/qmail/postfix_config/domainsref puis d'purer ce fichier des domaines multiples. Nous avons ainsi une table de correspondance entre le nom du domaine rfrentiel et l'alias qui lui a t attribu dans virtualdomains. Ajoutez pour chaque ligne le dossier de base de stockage pour ce domaine, et la table sera parfaite. Voici un exemple du fichier final : exemple.com:exemple:/home/mail/exemple domaine.tld:domaine:/home/mail/mydom test.org:test:/home/mail/testmail Pour cela :

Se connecter sur le serveur Qmail Placez vous dans le dossier /var/qmail (cd /var/qmail) Crez un dossier nomm postfix_config (mkdir postfix_config) Placez vous dans ce dossier (cd postfix_config) Copiez le fichier /var/qmail/control/virtualdomains dans notre dossier de configuration, sous le nom de domainsref (cp /var/qmail/control/virtualdomains domainsref) Editez ce fichier, puis ne garder qu'un seul nom de domaine par alias. Ce nom de domaine servira de rfrentiel pour les botes aux lettres. Ajoutez en fin de ligne l'emplacement physique de stockage des mails pour ce domaine (vi domainsref). Enregistrez vos changement et quittez votre editeur (:wq!) Editez un nouveau fichier nomm qmail_postfix.sh (vi qmail_postfix.sh) Copiez le contenu du script ci-aprs dans ce fichier Enregistrez vos changement et quittez votre editeur (:wq!) Affectez les droits d'execution du ce fichier (chmod u+x qmail_postfix.sh) Executez le script (./qmail_postfix.sh) Vous allez rcuprer trois fichiers nomms virtual, virtualdomains, et vmailbox qu'il faut copier sur votre serveur Postfix, dans /etc/postfix. Se connecter sur le serveur Postfix Placez vous dans le dossier /etc/postfix Vrifiez que la copie des trois fichiers s'est bien droule

http://extranet.clg.fr/articles.php3?id_article=65

49

Installation d'un serveur de messagerie Postfix

Executez les commandes suivantes : postmap /etc/postfix/virtual postmap /etc/postfix/vmailbox postalias /etc/postfix/aliases Rsoudre la main les ventuelles erreurs de duplicate entry !

9.6.2 Contenu du script qmail_postfix.sh


#!/bin/sh REPBASE=/var/qmail/postfix_config REPQMAIL=/var/qmail if [ -f ${REPBASE}/virtualdomains ] then cat /dev/null > ${REPBASE}/virtualdomains fi if [ -f ${REPBASE}/vmailbox.tmp ] then cat /dev/null > ${REPBASE}/vmailbox.tmp fi if [ -f ${REPBASE}/vmailbox ] then cat /dev/null > ${REPBASE}/vmailbox fi if [ -f ${REPBASE}/virtual ] then cat /dev/null > ${REPBASE}/virtual fi # Get Qmail virtualdomains and transform it for Postfix if [ -f ${REPQMAIL}/control/virtualdomains ] then cat ${REPQMAIL}/control/virtualdomains | awk -F: '{print $1}' | sort -fi | sed -e '2,$s,^, ,g' > ${REPBASE}/virtualdomains if [ ! -f ${REPBASE}/virtualdomains ] then echo "Error: ${REPBASE}/virtualdomains not found." fi fi # Get Qmail users definition if [ -f ${REPQMAIL}/users/assign ] then for Var in `cat ${REPQMAIL}/users/assign | sed -e '1,$s,^=,,g' | sed -e '1,$s,^+,,g' | grep -v '^.$'` do # Get current user's domain Qmail alias unset DOMALIAS DOMALIAS=`echo ${Var} | awk -F: '{print $1}' | awk -F- '{print $1}'` # Get current user's account unset USERACCOUNT USERACCOUNT=`echo ${Var} | awk -F: '{print $2}'` # Get current user's home unset USERHOME USERHOME=`echo ${Var} | awk -F: '{print $5}'` # Get current user's address name unset USERNAME if [ ! -z "`echo ${Var} | awk -F: '{print $1}' | awk -F- '{print $4}'`" ] then USERNAME=`echo ${Var} | awk -F: '{print $1}' | awk -F- '{print

http://extranet.clg.fr/articles.php3?id_article=65

50

Installation d'un serveur de messagerie Postfix


$2"-"$3"-"$4}'` else if [ ! -z "`echo ${Var} | awk -F: '{print $1}' | awk -F- '{print $3}'`" ] then USERNAME=`echo ${Var} | awk -F: '{print $1}' | awk -F- '{print $2"-"$3}'` else USERNAME=`echo ${Var} | awk -F: '{print $1}' | awk -F- '{print $2}'` fi fi # Convert point in user's alias file value into two point unset USERALIAS USERALIAS=`echo ${Var} | awk -F: '{print $7}' | sed -e '1,$s,\.,:,g'` # Get current user's alias file unset FICHALIAS FICHALIAS=`echo ${Var} | awk -F: '{print $5"/.qmail"$6}'` FICHALIAS=`echo ${FICHALIAS}${USERALIAS}` # Get current user's domain name. # There might be more than one domaine name for a domain alias. unset DOMAINNAME for DOMAINNAME in `cat ${REPQMAIL}/control/virtualdomains | grep : ${DOMALIAS}$ | awk -F: '{print $1}'` do # Test if current user's alias file exist and analyse it if so if [ -f ${FICHALIAS} ] then unset BoiteMail # Don't get value if it beginning with a pipe for BoiteMail in `cat ${FICHALIAS} | sed -e '1,$s,^\.\/,,' | grep -v '^|'` do # If BoiteMail value is Mailbox, then put the content of this user in vmailbox.tmp # file, else test if it beginning with & for an alias if [ "${BoiteMail}" == "Mailbox" ] then echo "${USERNAME}@${DOMAINNAME}:${USERHOME}/" >> ${REPBASE}/vmailbox.tmp else if [ "`echo ${BoiteMail:0:1}`" == "&" ] then echo -n "${BoiteMail:1} " >> ${REPBASE}/BoiteMail else # This redirect goes to a system username, so we get his home unset USERHOME USERHOME=`cat /etc/passwd | grep ^${BoiteMail}: | awk -F: '{print $6}'` echo "${USERNAME}@${DOMAINNAME}:${USERHOME}/" >> ${REPBASE}/vmailbox.tmp fi fi done if [ -f ${REPBASE}/BoiteMail ] then echo -n "${USERNAME}@${DOMAINNAME} `cat ${REPBASE}/ BoiteMail`" >> ${REPBASE}/virtual rm -f ${REPBASE}/BoiteMail echo "" >> ${REPBASE}/virtual fi else echo "Error: ${FICHALIAS} not found" fi done done else echo "Error: ${REPQMAIL}/users/assign not found."

http://extranet.clg.fr/articles.php3?id_article=65

51

Installation d'un serveur de messagerie Postfix


fi # Now, we need to convert vmailbox.tmp to Postfix home format if [ -f ${REPBASE}/vmailbox.tmp ] then if [ -f ${REPBASE}/domainsref ] then for Var in `cat ${REPBASE}/domainsref` do unset HOMEDIR HOMEDIR=`echo ${Var} | awk -F: '{print $3}'` unset DOMAINREF DOMAINREF=`echo ${Var} | awk -F: '{print $1}'` cat ${REPBASE}/vmailbox.tmp | sed -e '1,$s,:'${HOMEDIR}', '${DOMAINREF}',g' > ${REPBASE}/vmailbox if [ -f ${REPBASE}/vmailbox ] then rm ${REPBASE}/vmailbox.tmp mv ${REPBASE}/vmailbox ${REPBASE}/vmailbox.tmp fi done else echo | Error: ${REPBASE}/domainsref not found.| fi else echo "| Error: ${REPBASE}/vmailbox.tmp not found.|" fi # Set the final file if [ -f ${REPBASE}/vmailbox.tmp ] then if [ -f ${REPBASE}/vmailbox ] then rm ${REPBASE}/vmailbox fi mv ${REPBASE}/vmailbox.tmp ${REPBASE}/vmailbox fi

9.7 Paramtrages des droits sur les dossiers de base


Nous l'avons vu, les mails seront dlivrs dans le dossier /home/vmail/inbox. Il nous faut non seulement crer ce dossier (mkdir /home/vmail/inbox) mais aussi lui affecter les droits d'criture l'utilisateur qui crira dans ce dossier, savoir vmail (Cf : default_privs et virtual_uid_maps). Dans notre cas, l'UID de l'utilisateur vmail correspond l'uid indiqu statiquement dans virtual_uid_maps. Il nous faut aussi crer la structure des dossiers placs dans $virtual_mailbox_base. Pour cela, j'ai fait un petit script en ligne de commande :
# > > > > for Var in `cat /etc/postfix/virtualdomains | sed -e '1,$s, ,,g'` do mkdir /home/vmail/inbox/${Var} chown vmail /home/vmail/inbox/${Var} done

Ce petit script en ligne de commande juste l'intrt de crer la structure de base. Mais il soulve un point interessant : Lorsque nous ajoutons un domaine dans le fichier /etc/postfix/virtualdomains, non seulement, il faut relancer Postfix, mais il faut aussi crer le dossier /home/vmail/inbox/MonDomaine. Qu'en est il des possibilits d'automatisation ?

http://extranet.clg.fr/articles.php3?id_article=65

52

Installation d'un serveur de messagerie Postfix

10 Commandes anti-spam
Avec Postfix il est possible de limiter la livraison du courrier non sollicit (SPAM) par le biais de nombreux paramtres. Par dfaut, le serveur SMTP de Postfix n'accepte que le courrier provenant du rseau local, du domaine local, ou des domaines hbergs par Postfix. Ainsi votre systme ne risque pas tre employ comme relais de courrier pour expdier le courrier vers et par des inconnus. Ce document dcrit comment vous pouvez installer quelques politiques plus dtailles d'anti-spam qui empchent la livraison du courrier non dsir. Il est par exemple possible de vrifier qu'une commande EHLO soit bien communique et que l'adresse de l'hte soit valide, mais aussi de vrifier que l'adresse de l'metteur existe bien, ou encore d'ajouter un mecanisme de listes noires mises jour en temps rel (RBL real-time blackhole list). Sauf indication contraire, tous les paramtres dcrits ici sont dans le fichier main.cf. Si vous changez des paramtres d'un systme Postfix actif, n'oubliez pas de lancer la commande postfix reload de Postfix.

10.0.1 Exiger la commande HELO (EHLO)


Le paramtre smtpd_helo_required indique si les clients doivent envoyer une commande HELO (ou EHLO) au dbut d'une session SMTP. Cette exigence arrtera quelques logiciels de spam. Dfaut: smtpd_helo_required = no Par dfaut, le serveur SMTP de Postfix n'exige pas l'utilisation de HELO (EHLO). Syntaxe: Indiquez yes ou no. Exemple: smtpd_helo_required = yes

10.0.2 Restrictions sur les noms d'htes passs par la commande HELO (EHLO)
Le paramtre smtpd_helo_restrictions limite les noms d'htes que les clients peuvent envoyer avec la commande HELO (EHLO). Quelques logiciels de spam peuvent tre arrt en tant restrictif ici. Par dfaut, cette restriction est applique quand le client envoie la commande RCPT TO. Pour voir appliquer cette restriction ds que possible, renseignez la directive smtpd_delay_reject = no dans le fichier de configuration main.cf de Postfix. Ceci peut causer des rsultats inattendus avec des logiciels clients mal implments. Dfaut:

http://extranet.clg.fr/articles.php3?id_article=65

53

Installation d'un serveur de messagerie Postfix smtpd_helo_restrictions = Par dfaut, le serveur SMTP de Postfix accepte n'importe quoi dans la commande HELO (EHLO). Sur Internet, de nombreux logiciels sont mal configurs. Syntaxe: Indiquez une liste de zro restrictions ou plus, spare par des espaces ou des virgules. Les restrictions sont appliques dans l'ordre indiqu; la premire restriction qui correspond est applique. En plus des restrictions spcifiques aux paramtres de la commande HELO (EHLO), vous pouvez galement indiquer des restrictions bases sur le nom d'hte ou l'adresse du client, les adresses d'expdition ou de destination.Les restrictions sur les adresses de destination ou d'expdition prennent effet seulement si smtpd_delay_reject = yes, de sorte que toutes les restrictions soient values aprs la commande RCPT TO Exemple: smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname Restrictions: reject_invalid_hostname Rejette la demande quand le paramtre de la commande HELO ou EHLO a une mauvaise syntaxe de nom d'hte. Le paramtre invalid_hostname_reject_code indique le code de rponse aux demandes rejetes (dfaut: 501). reject_unknown_hostname Rejette la requte quand le nom d'hte annonc dans la commande HELO (EHLO) ne correspondant aucun enregistrement DNS de type A ou MX. Le paramtre unknown_hostname_reject_code indique le code de rponse renvoy (dfaut: 450). reject_non_fqdn_hostname Rejette la requte quand le nom d'hte annonc dans la commande HELO (EHLO) n'a pas la forme d'un domaine, tel que dcrit dans la RFC. Le paramtre non_fqdn_reject_code indique le code de rponse renvoy (dfaut: 504). check_helo_access maptype:mapname Recherche dans la base de donnes d'accs passe en paramtre le nom d'hte pass par la commande HELO ou les domaines parent. permit defer reject warn_if_reject reject_unauth_pipelining Voir les restrictions gnriques. http://extranet.clg.fr/articles.php3?id_article=65 54

Installation d'un serveur de messagerie Postfix

10.0.3 Exigez des adresses respectant le format de la RFC 821


Le paramtre strict_rfc821_envelopes contrle la tolrance de Postfix en ce qui concerne les adresses donnes dans les commandes MAIL FROM ou RCPT TO. Malheureusement, le logiciel Sendmail couramment employ tolre un bon nombre de comportement non standard. Respecter strictement la RFC arrte non seulement le courrier non dsir, mais bloque galement le courrier lgitime des applications de courrier mal implmentes. Dfaut: strict_rfc821_envelopes = no Par dfaut, le serveur SMTP de Postfix accepte n'importe quelle forme d'adresse qu'il peut comprendre, y compris les formes d'adresse qui contiennent des commentaires conformes la RFC 822, ou les adresses non encadres par <>. Sur Internet, de nombreux logiciels sont mal configurs. Exemple: strict_rfc821_envelopes = yes

10.0.4 Restrictions sur les adresses d'expdition


Le paramtre smtpd_sender_restrictions indique les adresses d'expditeurs acceptes par le systme dans la commande MAIL FROM. Par dfaut, cette restriction est applique quand le client envoie la commande RCPT TO. Afin de voir la restriction applique ds que possible, renseignez le paramtre smtpd_delay_reject = yes dans le fichier de configuration main.cf. Ceci peut causer des rsultats inattendus avec des logiciels clients mal implments. Dfaut: smtpd_sender_restrictions = Par dfaut, le serveur SMTP de Postfix accepte n'importe quelle adresse d'expditeur. Syntaxe: Indiquez une liste de zro restrictions ou plus, spare par des espaces ou des virgules. Les restrictions sont appliques dans l'ordre indiqu; la premire restriction correspondant est applique. En plus des restrictions qui sont spcifiques aux adresses d'expditeur, vous pouvez galement indiquer des restrictions bases sur les informations passe avec la commande HELO/EHLO, sur le nom d'hte ou l'adresse IP du client, les adresses destination.Les restrictions sur les adresses de destination ou d'expdition prennent effet seulement si smtpd_delay_reject = yes, de sorte que toutes les restrictions soient values aprs la commande RCPT TO. Exemple: smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain http://extranet.clg.fr/articles.php3?id_article=65 55

Installation d'un serveur de messagerie Postfix Restrictions: reject_unknown_sender_domain Rejette la demande quand l'adresse de courrier d'expditeur ne correspond aucun enregistrement DNS de type A ou MX. Le paramtre unknown_address_reject_code indique le code de rponse renvoy pour des demandes rejetes (dfaut: 450). La rponse est toujours 450 en cas d'erreur temporaire de DNS. reject_rhsbl_sender domain.tld Rejette la requte lorsque le domaine de l'adresse d'expdition correspond un enregistrement de type A dans le domaine domain.tld. La paramtre maps_rbl_reject_code indique le code de retour pour les requtes rejetes (dfaut: 554), la paramtre default_rbl_reply indique la rponse par dfaut du serveur, et le paramtre rbl_reply_maps indique la table contenant les rponses indexe par domaine RBL. check_sender_access: maptype:mapname Recherche dans la base de donnes d'accs passe en paramtre l'adresse de courrier de l'expditeur, le domaine parent, ou expediteur@. reject_non_fqdn_sender Rejette la demande quand l'adresse passe la commande MAIL FROM n'a pas la forme d'un domaine rel. Le paramtre non_fqdn_reject_code indique le code de rponse aux demandes rejetes (dfaut: 504). reject_sender_login_mismatch Rejette la demande quand le paramtre $smtpd_sender_owner_maps indique un propritaire pour l'adresse passe avec MAIL FROM, mais que le client n'est pas connect (SASL) en tant que propritaire de cette adresse; ou quand le client (SASL) est connect, mais le login n'est pas propritaire de cette adresse selon $smtpd_sender_login_maps. Permit defer reject warn_if_reject reject_unauth_pipelining Voir les restrictions gnriques

10.0.5 Restriction sur les adresses de destination


Le paramtre smtpd_recipient_restrictions indique quelles adresses de destination le systme accepte dans la commande RCPT TO. Dfaut: smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination Par dfaut, le serveur SMTP de Postfix relaie les courriers: des clients autoriss dont l'adresse IP est correspond un rseau numr dans $mynetworks vers n'importe quelle destination, http://extranet.clg.fr/articles.php3?id_article=65 56

Installation d'un serveur de messagerie Postfix

des clients trangers dont la destination correspond un domaine numr dans $relay_domains ou a un sous-domaine de ces derniers, l'exception des adresses qui contenant une route spcifie d'expditeurs (user@elsewhere@domain).

En plus, le serveur SMTP de Postfix accepte par dfaut les courriers dont Postfix est la destination finale:

dont la destination correspond une adresse IP numre dans $inet_interfaces, dont la destination correspond un domaine numr dans $mydestination, dont la destination correspond un domaine numr dans $virtual_alias_domains. dont la destination correspond un domaine numr dans $virtual_mailbox_domains.

syntaxe: Indiquez une liste de zro restrictions ou plus, spare par des espaces ou des virgules. Les restrictions sont appliques dans l'ordre indiqu; la premire restriction correspondant est applique. En plus des restrictions qui sont spcifiques aux adresses de destination, vous pouvez galement indiquer des restrictions bases sur les adresses d'expdition, sur l'information passe avec la commande HELO/EHLO, et sur le nom d'hte ou l'adresse rseau du client. Exemple: smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination Note: vous devez spcifier au moins une de ces restrictions: reject, defer, defer_if_permit ou reject_unauth_destination, sinon Postfix refusera de recevoir du courrier. Restrictions: permit_auth_destination Autorise la requte si l'une des conditions ci-dessous est ralise:

l'adresse de destination correspond un domaine numr dans $relay_domains ou a un sous-domaine de ces derniers, et l'adresse ne contient pas de route spcifique d'expditeur (user@elsewhere@domain), Postfix est la destination finale de ce courrier: toute destination correspondant $mydestination, $inet_interfaces $virtual_alias_domains ou $virtual_mailbox_domains.

reject_unauth_destination Ignore le nom d'hte du client. Autorise la requte si l'une des conditions ci-dessous est ralise:

l'adresse de destination correspond un domaine numr dans $relay_domains ou a un sous-domaine de ces derniers, et l'adresse ne contient pas de route spcifique d'expditeur (user@elsewhere@domain), Postfix est la destination finale de ce courrier: toute destination correspondant $mydestination, $inet_interfaces, $virtual_alias_domains ou 57

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix $virtual_mailbox_domains. Le paramtre relay_domains_reject_codeindique le code de rponse pour les requtes rejetes (dfaut: 554). permit_mx_backup Autorise la requte lorsque le systme de mail local est l'hte MX de la destination Ceci inclus le cas ou le systme est la destination finale. Toutefois, le serveur SMTP ne transfre pas les courriers dont l'adresse contient une route spcifique d'expditeur (exemple: user@elsewhere@domain), Vous pouvez utiliser les alternatives:

permit_mx_backup_networks, paramtre qui impose que le champ MX primaire correspond un rseau de Postfix. Paramtres de configuration appropris: permit_mx_backup_networks, $mydestination, $inet_interfaces.

check_recipient_access maptype:mapname Recherche dans la base de donnes d'accs passe en paramtre l'adresse de courrier de l'expditeur, le domaine parent, ou expediteur@. check_recipient_maps Rejette la requte si l'adresse de destination ne correspond pas l'une des tables suivantes: Adresse de destination $mydestination ou $inet_interfaces $virtual_alias_domains $virtual_mailbox_domains $relay_domains Table de correspondance $local_recipient_maps $virtual_alias_maps $virtual_mailbox_maps $relay_recipient_maps

Note 1: une valeur nulle $local_recipient_maps ou $relay_recipient_maps signifie qu'aucune adresse ne correspond. Note 2: Postfix applique une restriction implicite check_recipient_maps la fin de toutes les restrictions sur la destination. reject_unknown_recipient_domain Rejette la requte si l'adresse du destinataire n'a pas d'enregistrement DNS de type A ou MX. Le paramtre unknown_address_reject_code indique le code renvoy pour des demandes rejetes (dfaut: 450). Le code de rponse est toujours 450 en cas d'erreur temporaire de DNS. reject_rhsbl_recipient domain.tld

http://extranet.clg.fr/articles.php3?id_article=65

58

Installation d'un serveur de messagerie Postfix Rejette la requte lorsque le domaine de l'adresse de destination correspond un enregistrement de type A dans le domaine domain.tld. La paramtre maps_rbl_reject_code indique le code de retour pour les requtes rejetes (dfaut: 554), la paramtre default_rbl_reply indique la rponse par dfaut du serveur, et le paramtre rbl_reply_maps indique la table contenant les rponses indexe par domaine RBL. reject_non_fqdn_recipient Rejette la requte lorsque l'adresse passe par la commande RCPT TO n'a pas la forme d'un domaine qualifi. le paramtre non_fqdn_reject_code indique le code renvoy pour des demandes rejetes (dfaut: 504). permit defer reject warn_if_reject reject_unauth_pipelining Voir les restrictions gnriques.

10.0.6 Filtrage d'en-tte


Le paramtre header_checks limite ce qui est admis dans des en-ttes de message. Les expressions sont appliques sur tout l'en-tte logique, mme si l'en-tte est rparti sur plusieurs lignes de texte. Dfaut: Permet n'importe quoi dans des en-ttes de message. Syntaxe: Indiquez une liste de zro ou plus de tables de correspondance. Chaque fois qu'un en-tte correspond une table, l'action dpend du rsultat de la consultation: REJECT REJECT texte... Rejette le message, logue le header et le texte optionnel et envoie le texte optionnel l'expditeur. OK Ignore toutes les expressions suivantes pour cette ligne d'en-tte IGNORE Supprime l'en-tte du message. WARN WARN texte... Enregistre (sans rejet du message) l'en-tte et le texte optionnel avec un avertissement dans les journaux de log. http://extranet.clg.fr/articles.php3?id_article=65 59

Installation d'un serveur de messagerie Postfix HOLD HOLD texte... Place le message dans la file d'attente hold. les courriers dans cette file d'attente peuvent tre examins avec la commande postcat et peuvent tre dtruits ou sortits de la file d'attente avec la commande postsuper. Le texte optionnel est enregistr dans les logs avec le texte qui correspondait l'expression. DISCARD DISCARD texte... Annonce une livraison russie et supprime silencieusement le message. Le texte optionnel est enregistr dans les logs avec le texte qui correspondait l'expression. FILTER transport:relais Aprs que le message soit mis en file d'attente, envoie le message vers un filtre. Ceci impose diffrents serveurs cleanup avant et aprs le filtre avec consigne de ne pas examiner les enttes/corps de message dans le second server cleanup. Pour plus de dtail, consultez le fichier FILTER_README. Ce dispositif se substitue la directive content_filter du fichier main.cf Une expression d'en-tte avec une correspondance OK ne sert rien. Une rgle terminant par OK affecte seulement l'en-tte examin. L'en-tte suivant peut renvoyer une directive REJECT, causant malgr tout le rejet du courrier. Exemples (main.cf): header_checks = regexp:/etc/postfix/header_checks header_checks = pcre:/etc/postfix/header_checks Exemple (header_checks): /^to:.*friend@public\.com/ REJECT

10.0.7 Restrictions gnriques


Les restrictions suivantes peuvent tre utilises pour les noms d'htes ou les adresses IP des clients, pour les noms d'htes passs par la commande HELO (EHLO), pour les adresses d'expdition et pour les adresses de destination. Restrictions: permit Autorise la requte. Cette restriction est pratique la fin d'une liste de restriction pour rendre explicite la politique par dfaut. defer Diffre l'excution de la requte. Cette restriction est pratique la fin des restrictions pour crer une politique par dfaut reject Rejette la requte. Cette restriction est pratique la fin d'une liste de restriction pour rendre http://extranet.clg.fr/articles.php3?id_article=65 60

Installation d'un serveur de messagerie Postfix explicite la politique par dfaut. Le paramtre de configuration reject_code indique le code de rponde pour les requtes rejetes (dfaut: 554) warn_if_reject Change le comportement de la restriction suivante, ainsi elle enregistre un avertissement au lieu de rejeter la requte (regardez dans les journaux des enregistrements qui contiennent "reject_warning"). Ceci est pratique pour tester une nouvelle restriction dans un environnement rel sans prendre le risque de perdre du courrier. reject_unauth_pipelining Rejette la requte lorsque le client envoie une commande SMTP sans savoir si Postfix la supporte actuellement. Ceci arrte les courriers des logiciels qui utilisent mal les commandes SMTP pour acclrer l'envoi du courrier.

10.1 Fichier /etc/postfix/main.cf avec commandes anti-spam


Voici le bloc ajouter votre fichier main.cf afin de filtrer un peu plus les courriers indsirables:
########################################## # Lutte anti-spam ########################################## strict_mime_encoding_domain = yes smtpd_delay_reject = no strict_rfc821_envelopes = no # # Controle du HELO # smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks,reject_rbl_client relays.ordb.org,reject_non_fqdn_hostname # # Controle du CLIENT # smtpd_client_restrictions = permit_mynetworks,hash:/etc/postfix/access,reject_rbl_client relays.ordb.org,reject_unknown_client unknown_client_reject_code = 450 # # Controle du FROM # ##unknown_local_recipient_reject_code = 450 smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination # # Controle de l'emetteur # smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unknown_address, reject_rbl_client relays.ordb.org, permit # # Controle du HEADER du message # header_checks = regexp:/etc/postfix/header_checks # # Controle du BODY du message # body_checks = regexp:/etc/postfix/body_checks

http://extranet.clg.fr/articles.php3?id_article=65

61

Installation d'un serveur de messagerie Postfix

10.2 Contenu du fichier /etc/postfix/access


Ce fichier permet d'indiquer quels sont les adresses de messagerie, les domaines comme les adresses IP qui sont autoriss et contrls par l'entre smtpd_client_restrictions.
exemple.com exemple.net domaine.tld test.org [email protected] 192.168.10.1 OK OK OK OK OK OK

Comme toutes les HashMap de Postfix, ds que vous modifiez le fichier, il faut le re-gnrer par la commande postmap /etc/postfix/access , et ventuellement recharger la configuration de postfix par la commande /etc/init.d/postfix reload

10.3 Contenu du fichier /etc/postfix/ header_checks


Voici un exemple de fichier permettant de filtrer des messages en analysant les enttes de ces messages, et en se basant sur des expressions rgulires.
# voir man 5 regexp_table # # Rejet de certains From # /^From:.*\@spam\.com/ REJECT /^From: <>/ REJECT # # Rejet de certains Subject # /^Subject:.*hot.?hot.?hot/ REJECT /^Subject:.*m.?o.?n.?e.?y/ REJECT /^Subject:.*x.?a.?n.?a.?x/ REJECT # # Rejet de certains Content # /^X-Spanska(.*)554 Happy99 Virus/ REJECT /^Content-Type:(.*)xtPart_000_00.._0000....\.00/ REJECT /^Content-Type:.*charset=.*euc\-kr/ REJECT /^Content-Type:.*charset=ks_c/ REJECT /^Content\-(Type|Disposition):.*\;.*name=.*\.(cpl|exe|bat|com|pif|vb|lnk|scr| reg|chm|wsh|inf|shs|job|shb|scp|scf |wsc|sct+|dll)/ REJECT La piece jointe n est pas autorisee. # # Rejet de certains Mailer # /^X-Mailer:.*Red\ Spider/ REJECT /^X-Mailer:.*redspider/ REJECT /^X-Mailer:.*Davinci\ Address\ Mailer/ REJECT

Il est inutile de re-gnrer les hashmap, puisque ce n'en est pas une. Par contre, il peut tre utile de les tester par la commande postmap -q "Chaine a tester" regexp:/etc/postfix/header_checks

10.4 Contenu du fichier /etc/postfix/ body_checks


Voici un exemple de fichier permettant de filtrer des messages en analysant le corps de ces messages, et en se basant sur des expressions rgulires.
# voir man 5 regexp_table /.*\<(Med|Pill)s?\>/ /.*\<me.?di(cine|cation)s?\>/ REJECT REJECT

http://extranet.clg.fr/articles.php3?id_article=65

62

Installation d'un serveur de messagerie Postfix


/.*[p-P]resc.?r.?i.?p.?tion/ /.*\<x.?[a@].?n.?[a@].?x+\>/ /.*\<v.{1,3}c.?o.?d.{1,3}n+\>/ /.*\<p[e]n[i]s\>/ /.*\<v.?[a@].?l.{1,3}u.?m+\>/ /.*\<v.{2,5}[gr][^e]?[rg].?a+\>/ /.*d.?r.?u.?g.?s/ /charset=.?euc\-kr/ /charset=.?ks_c/ REJECT REJECT REJECT REJECT REJECT REJECT REJECT REJECT Incorrect Charset. REJECT Incorrect Charset.

Il est inutile de re-gnrer les hashmap, puisque ce n'en est pas une. Par contre, il peut tre utile de les tester par la commande postmap -q "Chaine a tester" regexp:/etc/postfix/body_checks

10.5 Utilisation de filtres complmentaires


Dans le cadre de la lutte anti-spam, un fleuron du genre est le logiciel SpamAssassin. SpamAssassin est un logiciel crit en Perl qui permet d'analyser les messages et d'identifier les SPAM. Il est possible de faire fonctionner SpamAssassin selon plusieurs mthodes, mais celle que nous avons retenu est d'intgrer ce logiciel au MTA (Serveur de messagerie). La mthode la plus simple pour intgrer SpamAssassin avec Postfix est d'utiliser le daemon spamd. Mais il existe une autre solution, un peu plus complexe aussi, qui utilise un logiciel tiers nomm Amavis. C'est cette mthode que je dcris ici. Pour voir comment configurer SpamAssassin et Postfix selon la premire mthode, consultez l'adresse http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix.

10.5.1 Introduction
L'ide de base est de faire reevoir un email par Postfix. Ce dernier effectue les traitements de base que nous avons vu prcedement, puis transfert le message un filtre. Ce filtre traite le message selon des critres qu'on lui a indiqu en configuration, puis le renvoi au serveur SMTP Postfix. Postfix reprends le message et le dlivre dans la bote aux lettres du destinataire. Cette technique est ralisable par le biais d'un logiciel nomm Amavis. AMaViS signifie a mail virus scanner . En fait ce n'est pas un logiciel d'antivirus, mais une technique (connecteur) permettant d'envoyer un email vers un logiciel d'antivirus. Par extension, il est possible d'envoyer l'email vers autre chose qu'un antivirus, et mme de chainer les filtres complmentaires. Le cheminement d'un message sur notre serveur est le suivant : Arrive du mail sur le port 25

Postfix traite le mail et le renvoie au filtre "amavis" via le port 10024 Amavis traite le mail (plugins : Spamassassin et Clamav) puis le renvoie vers Postfix sur le port 10025 Postfix reprends le mail et le dlivre dans la bote de l'utilisateur final.

10.5.2 Installation de Amavis, SpamAssassin et Clamav.


Sous Debian :
apt-get install amavisd-new clamav-base clamav-daemon clamav-freshclam spamassassin

http://extranet.clg.fr/articles.php3?id_article=65

63

Installation d'un serveur de messagerie Postfix

10.5.3 Configuration de Amavis (/etc/amavis/amavisd.conf)


Voici les lments qui doivent tre modifis dans le fichier /etc/amavis/amavisd.conf :
$mydomain = 'mondomaine.com'; $myhostname = 'smtp.mondomaine.com'; @inet_acl = qw( 127/8 192.168.1.0/32 ); $warnvirussender = 1; $warnvirusrecip = 1; $warn_offsite = 1; $mailfrom_notify_admin = 'virusalert\@$mydomain'; $mailfrom_notify_recip = 'virusalert\@$mydomain'; $mailfrom_notify_spamadmin = 'spam.police\@$mydomain'; $hdrfrom_notify_sender = 'AMaViS (content filter) <postmaster\@$mydomain>'; $virus_admin = 'virus-admin\@$mydomain'; $spam_admin = 'spam-admin\@$mydomain';

Vrifiez aussi que la section suivante n'est pas commente. Eventuellement, supprimez toutes les entres des autres antivirus qui ne sont pas installs sur votre serveur SMTP.
@av_scanners = ( [ .... ] ### http://clamav.elektrapro.com/ ['Clam Antivirus-clamd', \&ask_daemon, ["CONTSCAN {}\n", '/var/run/clamav/clamd.ctl'], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], [ .... ] @av_scanners_backup = ( [ .... ] ### http://clamav.elektrapro.com/ ['Clam Antivirus - clamscan', 'clamscan', '--stdout --disable-summary -r {}', [0], [1], qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

10.5.4 Configuration de Postfix pour Amavis.


Ajoutez le bloc suivant au fichier main.cf :
########################################### # Filtres Antiviraux ########################################### content_filter = smtp-amavis:[127.0.0.1]:10024

Editez le fichier master.cf et adaptez le de la faon suivante :


########################################### # Amavisd-new ########################################### smtp-amavis unix - - y - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes

127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject

http://extranet.clg.fr/articles.php3?id_article=65

64

Installation d'un serveur de messagerie Postfix


-o mynetworks=127.0.0.0/8

10.5.5 Configuration de l'antivirus Clamav.

11 Comment lire ses messages


Recevoir des messages lectroniques est une chose, pouvoir les lire en est une autre. Ce que nous avons fait jusque lors tait simplement ax sur la rception des emails. Dans notre configuration, l'emplaement des botes aux lettres est situ sur le serveur SMTP lui mme. Cela implique que les services permettant la lecture des messages soient installs physiquement sur le mme serveur que Postfix. Il existe toutefois des techniques permettant de rpartir ces services sur des machines distinctes, amloirant la rpartition des charges. A prsent, nous allons tudier comment lire les messages qui sont parvenus jusqu' notre bote aux lettres. Pour cela, il existe deux protocoles majeurs : POP (Version 3) et IMAP. Plutt que de chercher mettre en place l'un ou l'autre, nous allons utiliser les deux.

11.1 Installation d'un serveur POP


Le serveur POP qui a t retenu est le serveur nomm courier-pop. C'est en fait le serveur POP issu du projet Courier Mail Server (http://www.courier-mta.org/). Ce projet est un serveur de messagerie/synergiciel intgr bas sur des protocoles ouverts, comme ESMTP,IMAP, POP3, LDAP, SSL et HTTP. Courier dlivre les services ESMTP, IMAP, POP3, WebMail, et de liste de diffusion travers une structure unique et cohrente. Cependant, chacun de ces composants peut tre activ ou desactiv de manire spare. Nous allons donc utiliser le composant POP3 de ce framework pour pouvoir lire les messages dlivrs par Postfix. Attention toutefois, Courier-POP ne sais grer que les formats de botes aux lettres de type Maildir. Donc dans notre cas d'tude de migration de Qmail avec format mbox, il nous faut aussi envisager un script de conversion des fichier mbox vers des dossiers Maildir (voir http://perfectmaildir.home-dn.net/).

11.1.1 Installation binaire


L'installation se fait par notre traditionnel mais efficace apt-get:
apt-get install courier-authmysql courier-pop courier-authdaemon courier-base.

11.1.2 Configuration de Courier-pop


L'installation a cr un dossier de configuration dans /etc/courier, contenant les fichiers suivants:

authdaemonrc: Ce fichier configure authdaemond, le processus d'identification. authmodulelist: Ce fichier est le fichier de configuration des mthodes d'identification. authmysqlrc: Ce fichier est le fichier de configuration des mthodes d'identification en utilisant Mysql comme format de base de donnes.

pop3d: Courier POP3 daemon configuration. Courier-pop doit tre configur pour permettre aux utilisateurs de lire leurs messages en utilisant le

http://extranet.clg.fr/articles.php3?id_article=65

65

Installation d'un serveur de messagerie Postfix protocole POP3. Cela signifie que Courier-pop est mme d'tablir la relation entre un utilisateur et une boite aux lettres. Or les botes aux lettres sont gres par Postfix par le biais du fichier / etc/postfix/vmailbox qui dfinit la relation entre une adresse email et un emplacement de stockage. Il n'y a aucune notion d'utilisateur dans ce fichier au sens o Courier-pop l'entend, savoir un compte utilisateur, une home, un mot de passe, etc. Sous Courier-pop, la mthode basique consiste crer un compte sur le serveur pour chaque utilisateur. Cette solution ne nous interesse pas, car elle implique de nombreuses consquences quant la scurit du systme, d'autant qu'il faudra malgr tout renseigner un fichier rfrentiel propre Courier-pop. Par contre, il est possible d'utiliser uniquement ce fichier rfrentiel comme source d'identification et qui contient aussi la liste des comptes POP et l'emplacement de stockage des messages. Ce fichier est nomm /etc/courier/userdb.

11.1.3 Le fichier /etc/courier/authdaemonrc


Le logiciel Courier-pop sappuie sur le dmon didentification authdaemon dont le paramtrage seffectue laide du fichier de configuration /etc/courier/authdaemonrc . Voici les lments qui peuvent tre personnaliss : authmodulelist Ce paramtre indique la liste des modules d'identification qui sont lis dans le programme authdaemond. Vous pouvez selectionner les modules que vous souhaitez desactiver simplement en supprimant leur nom de cette liste. Les modules disponibles sont : authcustom authcram authuserdb authldap authpgsql authmysql authpam La valeur utilise dans ma configuration est authmodulelist="authuserdb authpam". authmodulelistorig Ce paramtre est utilis par le module webadmin de Courier, et doit tre laiss tel quel. La valeur utilise dans ma configuration est authmodulelistorig="authcustom authcram authuserdb authldap authpgsql authmysql authpam". daemons Ce paramtre indique le nombre de processus daemon qui sont dmarrs. Authdaemonrc est typiquement install l o les modules d'identification sont relativement coteux en ressources: comme authldap, ou authmysql, il devient alors prfrable d'avoir plusieurs processus dmarrs. ATTENTION: L'exprience montre que sur certaines plateforme ce paramtre pose des problmes lorsque plus d'un daemon est dmarr. Particulirement les plateformes qui drivent du systme V et qui utilisent TLI avec une mulation de socket. Vous pouvez augmenter le nombre de processus lorsque la charge de votre systme augmente. Si votre systme se met chouer en identification des utilisateurs, alors augmentez le nombre de processus dmarrs. Toutefois, la valeur 5 par dfaut semble tre suffisante dans la majorit des cas. Augmenter le nombre de processus est une solution court terme. Il convient de prvoir d'ajouter plus de ressource matrielles : RAM, des disques plus rapides, une CPU plus rapide, etc... La valeur utilise dans ma configuration est daemons=5. version Lorsque vous avez plusieurs version de authdaemond d'installs sur votre serveur, authdaemond prends le premier qu'il trouve. Pour changer cela, modifier la valeur de ce http://extranet.clg.fr/articles.php3?id_article=65 66

Installation d'un serveur de messagerie Postfix paramtre. Par exemple: version=authdaemond.plain. La valeur utilise dans ma configuration est daemons="". authdaemonvar authdaemonvar est un paramtre qui n'est pas utilis directement par authdaemond. Cependant il est ncessaire pour de nombreux scripts de configuration et de compilation, alors ne touchez pas ce paramtre ! La valeur utilise dans ma configuration est authdaemonvar=/var/run/courier/authdaemon.

11.1.4 Le fichier /etc/courier/authmodulelist


Ce fichier ne contient qu'une seule ligne prcisant la liste des modules d'identification installs et utilisable. Les modules d'identification autonomes sont installs dans le dossier /usr/lib/courier/authlib. Ainsi, si vous souhaitez raliser une identification par LDAP, puis par MySQL si LDAP est inacessible, puis par AUTHDB et enfin par daemon, indiquez dans ce fichier les valeurs authldap authmysql authuserdb authdaemon. En fonction de ces valeurs, authdaemond lira les fichiers de configuration authldaprc, authmysqlrc et authdaemonrc. Le fichier /etc/courier/authmodulelist est utilis afin d'indiquer quels sont les modules d'identification utiliser, et dans quel ordre les utiliser. Le fichier de configuration par dfaut doit tre cr en contenant la liste de tous les modules disponibles. Si ce fichier est manquant, tous les modules disponibles seront utiliss, dans l'ordre dans lequel ils ont ts configurs. Pour de plus amples informations sur les modules, je vous revoie vers le manuel authlib(7). Le contenu de ce fichier dans ma configuration est authuserdb authdaemon.

11.1.5 Le fichier /etc/courier/authmysqlrc


Nous n'utilisons pas pour le moment l'identifation par MySQL. Donc ce fichier nous est inutile pour le moment. Nous reviendrons en effet sur ce fichier lorsque nous tudierons une base MySQL commune Postfix et Courier-POP. Attention, le programme /usr/lib/courier/authlib/authdaemond dclench par le script /etc/init.d/courier-authdaemon est en ralit un script. Ce script teste si le programme bianire /usr/lib/courier/authlib/authdaemond.mysql est executable, et dclenche prfrentiellement son execution plutt que d'executer /usr/lib/courier/authlib/authdaemond.plain. En clair, si vous ne souhaitez pas faire d'identification POP par MySQL, changez les droits sur le programme /usr/lib/courier/authlib/authdaemond.mysql par la commande suivante : chmod 644 /usr/lib/courier/authlib/authdaemond.mysql

11.1.6 Le fichier /etc/courier/pop3d


Ce fichier est le fichier de configuration du serveur courierpop3d, et il dfinit essentiellement des variables d'environnement. Ce fichier de configuration est lu par le script de dmarrage /etc/init.d/courier-pop, afin de prparer l'environnement d'execution du programme courierpop3login et du programme courierpop3d. Le serveur courierpop3d est un simple serveur POP3 destin lire des botes aux lettres au format Maildir. Le serveur courierpop3login est d'ordinaire excut par le programme couriertcpd. courierpop3login lit l'identifiant utilisateur et le mot de passe du compte POP3 et dclenche http://extranet.clg.fr/articles.php3?id_article=65 67

Installation d'un serveur de messagerie Postfix les modules des processus d'identification. Pour plus d'information sur ces programmes, je vous renvoi vers les manuels courierpop3d(8), couriertcpd(8) et pop3d(8). Le contenu de ce fichier dans ma configuration est:
PIDFILE=/var/run/courier/pop3d.pid MAXDAEMONS=40 MAXPERIP=4 AUTHMODULES="authdaemon" AUTHMODULES_ORIG="authdaemon" DEBUG_LOGIN=0 POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1" POP3AUTH_ORIG="LOGIN CRAM-MD5 CRAM-SHA1" POP3AUTH_TLS="" POP3AUTH_TLS_ORIG="LOGIN PLAIN" PORT=110 ADDRESS=0 TCPDOPTS="-nodnslookup -noidentlookup" POP3DSTART=YES MAILDIRPATH=Maildir

11.1.7 Format du fichier /etc/courier/userdb


Pour une information prcise de ce format de fichier, je vous renvoi vers le manuel de makeuserdb. En effet, c'est ce programme qui permet de gnerer le fichier /etc/courier/userdb.dat partir du contenu de /etc/courier/userdb. Maildrop, Courier et d'autres applications utilisent /etc/courier/userdb.dat comme un substitut ou un complment du fichier /etc/passwd de votre systme d'exploitation. L'utilisation la plus courante de /etc/courier/userdb.dat est d'y indiquer la liste des comptes virtuels comptes qui n'existent pas dans la base des comptes du systme d'exploitation. Par habitude (mais pas ncessairement) tous les comptes virtuels partagent le mme identifiant utilisateur du systme (userid). Il existe ncessairement au moins un compte systme rattacher aux comptes POP. Ce compte doit tre le mme que celui utilis par le serveur SMTP pour enregistrer les messages, ceci afin de coincider avec les restrictions d'accs imposes par le systme de fichiers. Par ailleurs, comme le fichier /etc/courier/userdb.dat est une base de donnes binaire, la recherche d'informations au sein de ce fichier est plus rapide que dans un fichier texte plat (En fait cela est vrai dans le cas d'un fichier volumineux). Il devient donc prfrable d'utiliser /etc/courier/userdb.dat plutt que le fichier /etc/passwd ou /etc/courier/userdb. /etc/courier/userdb est un fichier texte qui peut tre cr en utilisant n'importe quel editeur de texte. Le lignes vierges sont ignores. Les lignes qui commenent par le caractre # sont des commentaires et sont aussi ignores. Toutes les autres lignes dfinissent les proprits d'un seul compte, une ligne par compte dfinir. Attention, /etc/courier/userdb peut aussi tre un rpertoire plutt qu'un fichier. Dans ce cas, tous les fichiers de ce rpertoire sont alors concatns puis traits comme un seul et mme fichier. L'intrt de crer un rpertoire plutt qu'un fichier consiste mes yeux de pouvoir ranger les comptes POP par domaine heberg. Ainsi le fichier /etc/courier/userdb/domaine.com contient tous les comptes POP de domaine.com, et /etc/courier/userdb/exemple.com tous les comptes de exemple.com... Cela tant, la syntaxe de ces fichiers reste la mme que si /etc/courier/userdb tait un fichier unique. Chaque ligne du fichier /etc/courier/userbd prend la forme suivante : nompop<TABULATION>champs=valeur|champs=valeur ...

http://extranet.clg.fr/articles.php3?id_article=65

68

Installation d'un serveur de messagerie Postfix

nompop est le nom du compte POP. nompop ne DOIT contenir que des caractres en minuscules. Si Courier-pop est configur pour interprter les majuscules et les minuscules des comptes pop de manire identique, nompop est alors suivi par exactement un seul caractre de tabulation, puis par une liste de paires champs/valeurs spares par la barre verticale (pipe).

Champs est le nom d'un champs et valeur sa valeur... Les champs et leurs valeurs ne peuvent par contenirs les caractres / (slashes) ni de caractres de contrle. Les champs peuvent tre indiqu dans n'importe quel ordre. Notes que tous les champs dfinis dans la liste ci-aprs ne sont pas utiliss par toutes les applications pouvant lire le fichier /etc/courier/userdb.dat. Voici la liste des champs actuellement dfinis :

uid Sa valeur reprsente l'identifiant numrique unique d'un utilisateur dfini sur le systme d'exploitation et rattach ce compte. gid - Sa valeur reprsente l'identifiant numrique unique d'un groupe dfini sur le systme d'exploitation et rattach ce compte. home Sa valeur reprsente le rpertoire de base de ce compte. shell Sa valeur reprsente le shell par dfaut utiliser avec ce compte. systempw Sa valeur reprsente le mot de passe de ce compte. Voir aussi la commande userdbpw(8) pour les dtails concernant la configuration de ce champs. pop3pw, esmtppw, imappw... - Leurs valeurs reprsentent des mots de passes distinct utiliss uniquement pour identifier les connexions en utilisant un service spcifique, comme POP3, IMAP, ou tout autre chose. Si aucun de ces champs n'est dfini, systempw est toujours utilis. Cela permet de restrindre l'accs d'un compte a certains services, comme le POP3, mme si d'autres services sont aussi fonctionnels sur le serveur. mail - Sa valeur reprsente l'emplacement de stockage du type Maildir de la bote aux lettres de ce compte. Il s'agit d'un champs optionel qui est d'ordinaire utilis lorsque le fichier userdb fournit des alias pour d'autres comptes mail. quota Sa valeur reprsente le quota d'une bote aux lettres de type Maildir pour un compte donn. Ceci n'a aucun rapport avec les quotas dfinis par le systme de fichiers. Courier possde son propre systme de gestion de quotas sur les botes aux lettres de type Maildir, ce qui ncessite en outre une configuration et une installation supplmentaire. Voir le manuel de maildirquota(7) pour de plus amples informations.

Attention: Aprs toutes modification dans le fichier /etc/courier/userdb ou dans l'un des fichiers du rpertoire /etc/courier/userdb, il est ncessaire d'executer la commande makeuserdb pour gnrer la base binaire /etc/courier/userdb.dat.

11.2 Migration des comptes POP


Ne perdons pas de vue que la prsente documentation doit migrer un serveur de courier multihttp://extranet.clg.fr/articles.php3?id_article=65 69

Installation d'un serveur de messagerie Postfix domaine sous Qmail vers un serveur de courier multi-domaine sous Postfix. C'est ici chose faite. Sauf que notre serveur Qmail encore en service utilise Qpopper version 3.0, un autre serveur POP3, et que sa mthode d'identification est base sur des comptes systmes rels. Il nous faut donc migrer les fichiers /etc/passwd et /etc/shadow vers un fichier ou un dossier /etc/courier/userdb. Notre choix se porte sur un dossier userdb contenant autant de fichier qu'il y a de domaines. La gestion des comptes POP par domaine est ainsi plus aise.

11.2.1 Procdure
Nous allons crer un script permettant de rcuprer les informations contenues dans les fichiers /etc/passwd et /etc/shadow de notre serveur Qmail, et de les transformer au format userdb. Comme pour la migration Qmail vers Postfix, nous allons avoir besoin du fichier /var/qmail/postfix_config/domainsref que vous avez gnr au moment de la migration des adresses de messagerie. Le script gnre un dossier /var/qmail/postfix_config/userdb contenant des fichiers au format userdb et nomms par domaine. Toutefois, il existe un fichier appell null qui contient la liste des comptes problmatiques ou des comptes qui n'ont pas lieu d'tre car il ne s'agit que de redirection. Pour cela :

Se connecter sur le serveur Qmail Placez vous dans le dossier /var/qmail (cd /var/qmail) Crez un dossier nomm postfix_config si ce n'est dj fait (mkdir postfix_config) Placez vous dans ce dossier (cd postfix_config) Editez un nouveau fichier nomm qpopper_courier.sh (vi qpopper_courier.sh) Copiez le contenu du script ci-aprs dans ce fichier Enregistrez vos changement et quittez votre editeur (:wq!) Affectez les droits d'execution du ce fichier (chmod u+x qpopper_courier.sh) Executez le script (./qpopper_courier .sh) Vous allez rcuprer un dossier nomm userdb qu'il faut copier sur votre nouveau serveur de messagerie, dans /etc/courier. Se connecter sur le nouveau serveur de messagerie. Placez vous dans le dossier /etc/courier Vrifiez que la copie du dossier userdb s'est bien droule Dplacez le fichier /etc/courier/userdb/null dans /etc/courier

http://extranet.clg.fr/articles.php3?id_article=65

70

Installation d'un serveur de messagerie Postfix

Rsoudre la main les ventuelles erreurs de comptes qui sont prsents dans le fichier nomm /etc/courier/null. Executez la commande makeuserdb pour gnrer le fichier userdb.dat Gnerer les dossier de stockage des comptes.

11.2.2 Contenu du script qpopper_courier.sh


#!/bin/sh REPBASE=/var/qmail/postfix_config REPQMAIL=/var/qmail CUID=105 CGID=65534 CHOMEBASE=/home/vmail/inbox CSHELL=/bin/false CQUOTA=40960 if [ -f ${REPBASE}/userdb ] then rm -f ${REPBASE}/userdb fi if [ -d ${REPBASE}/userdb ] then rm -rf ${REPBASE}/userdb fi mkdir ${REPBASE}/userdb # for each user, read his password in /etc/shadow, get his domain name and # build Courier-pop userdb file unset Vlogin for Vlogin in `cat /etc/passwd | grep '/home/mail' | sort -fin -t : -k 3 | awk -F: '{print $1}'` do unset Vpass unset Vdomain unset Vhome Vpass=`cat /etc/shadow | grep ^${Vlogin}: | awk -F: '{print $2}'` if [ "${Vpass}" = "!!" ] then Vpass="!" fi if [ -z "${Vpass}" ] then Vpass="!" fi # Get Qmail domain for current user definition if [ -f ${REPQMAIL}/users/assign ] then unset DOMALIAS DOMALIAS=`cat ${REPQMAIL}/users/assign | grep ${Vlogin} | sed -e '1,$s,^=,,g' | sed -e '1,$s,^+,,g' | grep -v '^.$' | awk -F: '{print $1}' | awk -F- '{print $1}' | head -1` if [ -z "${DOMALIAS}" ] then DOMALIAS=null fi

else

http://extranet.clg.fr/articles.php3?id_article=65

71

Installation d'un serveur de messagerie Postfix


fi echo " Error: ${REPQMAIL}/users/assign not found. "

# Get Domain Name Referential for current user if [ -f ${REPBASE}/domainsref ] then Vdomain=`cat ${REPBASE}/domainsref | grep :${DOMALIAS}: | awk -F: '{print $1}'` if [ -z "${Vdomain}" ] then Vdomain=null fi echo " Error: ${REPBASE}/domainsref not found. "

else fi

# Get current user's home Vhome=`cat /etc/passwd | grep ^${Vlogin}: | awk -F: '{print $6}'` # We need to convert Qpopper home to Courier home if [ -f ${REPBASE}/domainsref ] then unset HOMEDIR HOMEDIR=`cat ${REPBASE}/domainsref | grep :${DOMALIAS}: | awk -F: '{print $3}'` if [ -z "${HOMEDIR}" ] then HOMEDIR=null fi Vhome=`echo ${Vhome} | sed -e '1,$s,'${HOMEDIR}','${CHOMEBASE}'/'${Vdomain}',g'` else echo Error: ${REPBASE}/domainsref not found. fi # Build userdb echo -e "${Vlogin}\tuid=${CUID}|gid=${CGID}|home=${Vhome}|mail=${Vhome}/ Maildir|shell=${CSHELL}|quota=${CQUOTA}|systempw=${Vpass}" >> ${REPBASE}/ userdb/${Vdomain} done

11.2.3 Paramtrages des droits sur les dossiers des comptes POP
Nous l'avons vu, les mails seront dlivrs dans le dossier /home/vmail/inbox. Il nous faut non seulement crer ce dossier (mkdir /home/vmail/inbox) mais aussi lui affecter les droits d'criture l'utilisateur qui crira dans ce dossier, savoir vmail (Cf : default_privs et virtual_uid_maps de postfix). Dans notre cas, l'UID de l'utilisateur vmail correspond l'uid indiqu statiquement dans le fichier de configuration main.cf de postfix a la section virtual_uid_maps, ainsi que dans les fichiers du dossier /etc/courier/userdb. Il nous faut donc crer la structure des dossiers de chaque compte. Pour cela, j'ai fait un petit script en ligne de commande :
# cd /etc/courier/userdb # for Vdomain in `ls -1` > do > for Vhome in `cat ${Vdomain} | awk -F"|" '{print $3}' | sed -e '1,$s,home=,,g'` > do > mkdir -mode 700 -parent ${Vhome} > maildirmake ${Vhome}/Maildir > done

http://extranet.clg.fr/articles.php3?id_article=65

72

Installation d'un serveur de messagerie Postfix


> chown -R vmail /home/vmail/inbox/${Vdomain} > done

11.2.4 Transfert des botes Qmail Maibox dans les botes Postfix Maildir.
Il nous faut convertir les botes aux lettres de type Mailbox issues de Qpopper au format Maildir. Pour cela, tlchargez l'outil de Philip Mak sur: http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl et copier le dans le dossier /usr/bin de votre serveur Postfix-Courier. Changer les droits de ce fichier par la commande chmod 755 /usr/bin/perfect_maildir.pl. La syntaxe de ce programme crit en Perl est la suivante : perfect_maildir.pl ${HOME}/Maildir < ${OLDHOME}/Mailbox Il nous faut donc crer encore un petit script pour transfrer tous les messages. Je vous laisse imaginer le votre. Commenons par copier l'intgralit des botes Qmail sur notre nouveau serveur. Il suffit en effet de simplement recopier de manire rcursive tous les dossiers de /home/mail sur le nouveau serveur car ce dossier n'existe pas dans l'arborescence de notre nouveau serveur.

12 Gestion et utilisation au quotidien


12.1 Se connecter au serveur de messagerie

Ssh [email protected]

12.2 Ajouter ou modifiez un domaine gr par le serveur Postfix


Editez le fichier /etc/postfix/virtualdomains avec un editeur de texte (vi) Ajoutez ou retirez le domaine voulu en le sparant des autres par une virgule. Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload

12.3 Ajouter ou modifier une adresse ayant un compte POP correspondant.


Il est entendu par adresse ayant un compte POP correspondant toute adresse de messagerie dont les messages sont directement stocks dans un dossier Maildir sur le serveur. Si vous devez crer une adresse de messagerie expdiant ses messages plusieurs destinataires, voyez plutt le chapitre suivant. Dans tous les cas, il ne faut jamais qu'une mme adresse de messagerie soit utilise comme index (1er colonne) dans le fichier /etc/postfix/virtual ET dans le fichier des botes aux lettres /etc/postfix/vmailbox.

Editez le fichier /etc/postfix/vmailbox avec un editeur de texte (vi) Indiquez en premire colonne l'adresse de messagerie Indiquez dans la seconde colonne l'emplacement relatif du dossier de stockage (mondomaine.tld/compte_pop/Maildir/) Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-gnrez la hashmap par la commande postmap /etc/postfix/vmailbox Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload 73

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

12.4 Ajouter ou modifier un alias d'une adresse pointant sur une autre adresse.
Les alias sont des adresses de messagerie capable d'expdier leurs messages vers une ou plusieurs adresses. Les adresses de destination peuvent tre locales (donc gres par le serveur) comme distante (donc gres par un autre serveur SMTP). Dans tous les cas, il ne faut jamais qu'une mme adresse de messagerie soit utilise comme index (1er colonne) dans le fichier / etc/postfix/virtual ET dans le fichier des botes aux lettres /etc/postfix/vmailbox.

Editez le fichier /etc/postfix/virtual avec un editeur de texte (vi) Indiquez en premire colonne l'adresse de messagerie Indiquez dans la seconde colonne l'adresse de destination Indiquez dans la troisime et toutes les colonnes suivantes les adresses de destinations (un alias peut pointer sur plusieurs botes aux lettres) Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-gnrez la hashmap par la commande postmap /etc/postfix/virtual Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload

12.5 Ajouter ou modifier un alias de compte local


Editez le fichier /etc/postfix/aliases avec un editeur de texte (vi) Indiquez en premire colonne le nom de l'alias Indiquez dans la seconde colonne le nom du compte local destinataire, ou bien une adresse de messagerie de destination Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-gnrez la hashmap par la commande postalias /etc/postfix/aliases Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload

12.6 Ajouter ou modifier un rseau ou un domaine autoris


Editez le fichier /etc/postfix/access avec un editeur de texte (vi) Indiquez en premire colonne le nom du domaine, une adresse de messagerie ou une adresse IP. Indiquez dans la seconde colonne la valeur a retourner (OK ou REJECT) Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-gnrez la hashmap par la commande postmap /etc/postfix/access Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload

12.7 Ajouter ou modifier une rgle de filtrage sur les enttes.


Editez le fichier /etc/postfix/header_checks avec un editeur de texte (vi) Sur la premire colonne, ajoutez une chaine de recherche encadre par deux slashes (/). La chane rechercher est une expression rgulire, similaire la syntaxe sed de recherche. Le 74

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix dbut d'une ligne est caractris par le chapeau (^). La fin d'une ligne par le dollard ($). N'importe quel nombre et type de caractre est reprsent par le point suivi d'un astrisque (.*). Pour rechercher un point (.) ou un astrisque (*) ou un slashes (/) ou n'importe quel caractre de contrle, le prfixer par un anti-slash (\).

La deuxime colonne est en gnral REJECT , bien que l'on puisse indiquer IGNORE , REJECT Motif , OK , WARN . Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload

12.8 Ajouter ou modifier une rgle de filtrage sur le corps du message.


Editez le fichier /etc/postfix/body_checks avec un editeur de texte (vi) Ce fichier a rigoureusement la mme syntaxe que le header_checks indiqu dans le chapitre prcdent. Sauvegardez vos modifications et quittez l'diteur de texte (:wq!) Re-chargez la configuration de postfix par la commande /etc/init.d/postfix reload

12.9 Ajouter ou modifier un compte POP


Se placer dans le dossier /etc/courier Il est possible de faire les modifications avec un editeur de texte dans les fichiers nomms par leur nom de domaine, et plas dans le dossier /etc/courier/userdb. Toutefois, il existe aussi la commande userdb qui permet de faire cela. Utilisez la commande userdb show -f userdb/nomdedomaine compte_pop pour visualiser un compte. Utilisez la commande userdb -f userdb/nomdedomaine compte_pop del pour supprimer un compte. Utilisez la commande userdb -f userdb/nomdedomaine compte_pop add pour ajouter un compte. Utilisez la commande userdb -f userdb/nomdedomaine compte_pop set propriete=valeur pour modifier une proprit d'un compte. La liste des proprits possibles est dfinie dans le paragraphe relatif au Format du fichier /etc/courier/userdb. Aprs toute modification, utilisez la commande makeuserdb

12.10 Modifier le mot de passe d'un compte POP


Se placer dans le dossier /etc/courier Comme pour modifier une proprit d'un compte POP, il faut utiliser la commane userdb, mais aussi la commande userdbpw. Ainsi pour modifier ou dfinir le mot de passe d'un utilisateur, on utilise la commande userdbpw | userdb -f userdb/domaine compte_pop set systempw Saisir le mot de passe et le confirmer. Aprs toute modification, utilisez la commande makeuserdb 75

http://extranet.clg.fr/articles.php3?id_article=65

Installation d'un serveur de messagerie Postfix

12.11 Gestion des files d'attente Postfix.


Pour visualiser le contenu des files d'attente, utilisez la commande mailq . Pour forcer la remise d'un message de la file d'attente, utilisez la commande postsuper -r ID , avec ID tant l'identifiant de file affich par la commande mailq . Pour forcer la livraison des messages de la file d'attente, utilisez la commande postfix flush ou encore la commande postqueue -f Pour forcer la remise de tous les message de la file d'attente, utilisez la commande postsuper -r ALL Pour supprimer un message de la file d'attente, utilisez la commande postsuper -d ID , avec ID tant l'identifiant de file affich par la commande mailq . Pour supprimer tous les messages de la file d'attente, utilisez la commande postsuper -d ALL . Pour mettre en quarantaine un message de la file d'attente, utilisez la commande postsuper -h ID , avec ID tant l'identifiant de file affich par la commande mailq . Pour mettre en quarantaine tous les messages de la file d'attente, utilisez la commande postsuper -h ALL . Pour desactiver la mise en quarantaine d'un message, utilisez la commande postsuper -H ID , avec ID tant l'identifiant de file affich par la commande mailq . Pour desactiver la mise en quarantaine des tous les messages, utilisez la commande postsuper -H ALL . Pour rparer les files d'attente aprs un crash du systme, utilisez la commande postsuper -s . Pour supprimer les fichiers temporaires crs la suite d'un crash du systme, utilisez la commande postsuper -p .

13 Webographie
http://www.postfix.org/: Postfix HomePage. http://x.guimard.free.fr/postfix/: La traduction officielle en franais de Xavier GUIMARD http://cjovet.free.fr/cours/postfix.htm: La documentation de Postfix de Cyril JOVET. http://www.linux-france.org/article/mail/postfix-jaco/: Poster et recevoir du courrier avec Postfix http://people.via.ecp.fr/~alexis/formation-linux/serveur-mail2.html: Monter un serveur de mail avec Debian GNU/Linux http://perfectmaildir.home-dn.net/: Programme Perl permettant de migrer les boites au format Mailbox vers le format Maildir/. http://www.sinasina.com/linux/reseaux/relais_smtp.php: Mise en place d'un relais SMTP en utilisant Posstfix. http://www.courier-mta.org/: Le site officiel de Courier Mail Server.

http://extranet.clg.fr/articles.php3?id_article=65

76

Installation d'un serveur de messagerie Postfix http://marc.boget.free.fr/stage-html2/Memoire%20de%20stage-8_2_9.html: Aide la configuration de Courier. http://www.alcove-labs.org/en/documents/install_mail/: Guide pour installer un serveur de mails multidomaine utilisant un annuaire LDAP. http://da.andaka.org/Doku/courier-vmaildir.html: HOWTO: Virtual Domains with the Courier Mail Suite. http://www.topology.org/linux/postfixloop.html: notes on postfix configuration mail for host.domain.net loops back to myself http://reseau.univ-aix.fr/doctech/spam.html: Lutte contre les envois massifs de courrier (SPAM) avec Postfix. http://www.e-glop.net/howtos/antivirus-mail.xhtml: Mettre en place un anti-virus sur son serveur de mail. http://www.miscmag.com/articles/index.php3?page=113: Scuriser un serveur Postfix. http://mirabellug.org/docs/postfixfetchmail/x110.html: Configuration de Postfix et Fetchmail.

http://extranet.clg.fr/articles.php3?id_article=65

77

Installation d'un serveur de messagerie Postfix

14 Annexe
14.1 Licence
Le prsent document est soumi la GNU Free Documentation license. Il n'existe pas aujourd'hui de traduction franaise de la licence GNU GPL ni GNU FDL dont on puisse affirmer qu'elle ne contienne pas de contre-sens. Malgr les risques d'incomprhension lis une licence en langue anglaise, on estime prfrable de s'y rfrer exclusivement. Pour trouver une traduction officielle, il est conseill de consulter la page http://www.gnu.org/licenses/translations.html#FDL. Cette licence est donc donne ici dans son intgralit et en version initiale, copie conforme du site http://www.gnu.org/copyleft/fdl.html#TOC1. Toutefois, il existe pour la version 1.1 deux traductions mentionnes par la Free Software Fundation, mais qui n'ont rien d'officielles :

http://cesarx.free.fr/gfdlf.html http://www.idealx.org/dossier/oss/gfdl.fr.html

D'une manire plus gnrale, les traductions franaises officielles sont disponibles sur le site de l'association FSF France l'adresse http://fsffrance.org/.

14.1.1 GNU Free Documentation License


Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or http://extranet.clg.fr/articles.php3?id_article=65 78

Installation d'un serveur de messagerie Postfix distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or BackCover Texts, in the notice that says that the Document is released under this License. A FrontCover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standardconforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", http://extranet.clg.fr/articles.php3?id_article=65 79

Installation d'un serveur de messagerie Postfix "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS http://extranet.clg.fr/articles.php3?id_article=65 80

Installation d'un serveur de messagerie Postfix

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate http://extranet.clg.fr/articles.php3?id_article=65 81

Installation d'un serveur de messagerie Postfix some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

http://extranet.clg.fr/articles.php3?id_article=65

82

Installation d'un serveur de messagerie Postfix 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS licence The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a http://extranet.clg.fr/articles.php3?id_article=65 83

Installation d'un serveur de messagerie Postfix draft) by the Free Software Foundation.

14.1.2 How to use this License for your documents


To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

http://extranet.clg.fr/articles.php3?id_article=65

84

Vous aimerez peut-être aussi