Post Fix
description
Transcript of Post Fix
-
Avant de samuser traiter des files dattente, il serait bon de comprendre comment sont orchestres ces
files et par qui.
Dj, pour quon parle tous le mme langage, je vous mets disposition un diagramme des composants de
Postfix et montrant leur manire de communiquer. On y retrouve le workflow presque complet. Presque,
dans le sens o on a uniquement le service Postfix et pas de services secondaires comme un anti-spam ou
un anti-virus:
Postfix: Dmons et gestion des files d'attente
MTA, MDA, MUA, LDA... Qu'est-ce que ?
Dans le monde de Postfix, ces acronymes sont lgions, si vous voulez vous en sortir, il est quand
mme bon de connatre leur signification.MTA
Pour Mail Transfer Agent (ou Message Transfer Agent) cest le logiciel qui est responsable de
lenvoi et de la rception des messages ENTRE les systmes. Ils ne font que deux choses:
envoyer et recevoir, ils ne font rien dautre. La plupart du temps ils causent en (E)SMTP
((Extended) Simple Mail Transfer Protocol couche 7 (application) du modle OSI)
historiquement sur le port 25. On y reviendra par la suite, cest un protocole trs simple (et
vieillissant mon got).MDA
Pour Mail Delivery Agent, il soccupe de la dernire tape lors de la transmission dun mail: le
dposer dans la bonne bote aux lettres du bon utilisateur. On peut y coupler un systme de
filtre, Procmail fait a trs bien. Le MTA cause avec le MDA via lintermdiaire du protocole
LMTP (Local Mail Transfert Protocol). Notez que Dovecot comprend un MDA, on retrouve
Courier, Cyrus ainsi que dbmail. Le MDA est sens signaler toute erreur dans la distribution du
courrier au MTA (dique full, quota dpass, etc).MUA:
Pour Mail User Agent. Inutile de faire compliqu, cest un simple client de messagerie, comme
Claws-Mail, Mutt, Thunderbird ou Outlook (oui, faut que a parle tout le monde), donc le
logiciel qui va contacter le serveur pour rcuprer ses mails via diffrents protocoles: le
vieillissant POP3 ou le plus actuel IMAP qui dispose de plus de fonctionnalits.
Postfixmardi 5 mai 2015 12:03
Postfix Page 1
-
Les rectangles bleus sont les services (ou dmons), et les boites les files dattente, au nombre de 5: hold,
maildrop, deferred, active et incoming (non, on ne compte pas corrupt).
Le script /usr/bin/postfix start lance le serveur.1.Puis le script lance /usr/libexec/postfix/master`, lui cest le patron et il lancera les autres dmons, uniquement si ncessaire.
2.
Les dmons se terminent ds quils ont fini ce quil ont faire, sauf /usr/libexec/postfix/qmgrqui lui, reste actif tout le temps, il gre les diffrentes files dattente.
3.
Globalement, a se passe comme a:
On sarrte un peu sur le patron de la file dattente et les dmons associs, jai nomm qmgr pour queue
manager. Son patron lui, cest master, qui coordonne tous les dmons de Postfix, il attend quune tche
arrive et les donne aux processus concerns, aussi, il effectue un contrle sur le nombre dinstances qui
sexcutent concurremment (on revient sur la concurrence plus loin dans larticle).Le dmon qmgr :Le gardien des couloirs de Postfix. Il gre toutes les files dattente de Postfix et orchestre le travail de chacun et notamment des dmons local, smtp, lmtp et pipe en veillant diverses choses comme la prservation des ressources et au maintien de la stabilit du systme.
Par exemple, sur des messages dont le traitement naboutit pas, qmgr ordonne de placer ledit message
dans la file deferred. Ainsi, en utilisant une file spare, cela vite les incidences sur la file de dlivrance
des messages.Le dmon pickup
Il est responsable de la rcupration des courriers locaux. En gros, sendmail pose les messages dans la
file maildrop et pickup les rcupre, effectue quelques vrifications et passe le message au dmoncleanup.
Attention, pickup est mono-thread, il ne peut donc que livrer un message la fois et sa vitesse se limite
aux capacits de lecture/criture du disque.Le dmon cleanup
Il fait les derniers traitements sur les messages, comme ajouter des enttes manquants ncessaires,
assurer les rcritures de lenveloppe et des enttes. Une fois fait, il met le rsultat de tout a dans la
file incoming et indique au dmon qmgr larrive de nouveaux messages.
Postfix Page 2
-
file incoming et indique au dmon qmgr larrive de nouveaux messages.Les dmons bouce et deferred
Eux, ils interviennent sur les messages qui nont pas pu tre dlivrs pour deux raisons possibles: une
erreur non rcuprable ou une destination inaccessible (mme temporairement). Comme indiqu plus
haut, ces erreurs sont reues par qmgr qui ordonne par la suite le dmon bounce et le dmondefer ( ne
pas confondre avec la liste !).
On va sarrter l pour les dmons, a devrait nous suffire pour comprendre la suite de larticle.
Maintenant, on passe aux diffrentes files dattente et ensuite on verra comment assurer la gestion de ces
files via quelques outils.
La file Maildrop
Plus haut, nous avons parl de pickup, ce gentil dmon qui rcupre les messages de la file maildroppour
les passer son pote dmon cleanup. Et bien la file maildrop sert a, elle met en attente les message
soumis via sendmail mais pas encore dposs dans la file dattente principale par pickup.
Si a ne vous plait pas plus que a, vous pouvez restreindre ce comportement grce une ligne de configuration nomme authorized_submit_users dans le fichier de configuration/etc/postfix/main.cf car par dfaut, la valeur est static:anyone.
Si on regarde le diagramme plus haut, on voit quentre sendmail et maildrop, il y a postdrop. Il permet
nimporte quel utilisateur du systme de soumettre un message dans la file dattente maildrop, trait
indiffremment des autres par pickup.
Des messages peuvent tre ajouts cette file mme si Postfix ne fonctionne pas, il seront tout
simplement pris en charge au prochain dmarrage de Postfix.
La file active
En vert sur le diagramme plus haut. Accrochez vous, a risque de piquer un peu !
On considre un seau dun volume quelconque (rduit, en ce qui concerne la file active)La taille du seau correspond la taille totale des informations quil peut contenirSi le volume dinformation dpasse la taille totale du seau, linformation en trop est rejete. Dans notre cas, qmgr passera le message l* file dattente deferred
La file active stocke les messages qui sont prts tre envoys. Cest qmgr qui gre la chose encore une
fois. Seul un nombre rduit de messages est autoris entrer dans cette file par qmgr pour garder un taux
de livraison stable. Cest lalgorithme du seau perc (leaky bucket en anglais) qui est appliqu pour garder
ce taux constant. Son fonctionnement est trs simple, surtout via cette analogie (do le nom de
lalgorithme):
Pour faire simple, la concurrence cest quand plusieurs entits souhaitent accder une ressource unique. En informatique gnrale cest quand plusieurs processus souhaitent accder une ressource en mme temps, le principe de lexclusion mutuelle permet dviter de mettre des processus en concurrence via diffrents moyens, comme des verrous sur les ressources utilises par exemple.
Forcment, si on remplit le seau autant quil se vide, cest juste parfait, et le taux restera constant. Par
contre, si on a une destination dun message qui est considre comme morte, et que la file sallonge
beaucoup trop (ce quon nomme congestion), qmgr enlvera de la file tous les message ayant cette
destination. Si cette destination est juste ralentie, qmgr garde les mails, mais la file se remplira plus vite
quelle ne se vide. Dans ce cas, la seule manire de dcongestionner la file est soit de rduire ce qui entre
dans la file, soit dacclrer ce qui en sort en agissant sur la latence (donc on a un peu de mal agir dessus)
ou en agissant sur la concurrence...
Postfix Page 3
-
utilises par exemple.
Pour Postfix, la concurrence se rgle dans les fichiers de configuration. Par exemple (et je nen donnerais
quun car il y a normment de paramtrages de ce type dans Postfix) la ligne de
configuration local_destination_concurrency_limit qui est fixe par dfaut 2 indique le nombre
maximum de livraisons parallles via le transport local au mme destinataire ou le nombre maximum de
livraisons parallles au mme domaine local si la ligne local_destination_recipient_limit est suprieur
1 (1 par dfaut).
a va, a suit ?
La file incoming (entrante)
Aussi nomme file entrante. On la rapidement abord quand on parlait du dmon cleanup, il rcrit ce
quil faut (enveloppe et enttes) et transmet la file entrante. Le fichier est cr par
lutilisateurpostfix (utilisateur systme hein) avec des droits daccs 0600, cleanup fait son boulot, et
quand cest prt, il change les droits en 0700 et dit son patron qmgr quil y a un nouveau venu dans la
fileincoming. Tant que les droits du fichier ne sont pas 0700, qmgr, born, part du principe que le fichier
est encore en traitement par cleanup et par consquent ne sen occupe pas.
qmgr garde un oeil sur la file entrante et transmet les nouveaux messages la file active uniquement si la
limite de la file active nest pas dpasse (20k messages). Si toutefois qmgr a trop de
boulot,cleanup attendra la valeur du paramtre in_flow_delay dont la valeur par dfaut est 1. Pour la
dsactiver il faut indiquer 0. Vous pouvez monter jusqu 10 secondes si vraiment la situation est
mauvaise.
La file deferred (retarde)
Si un instant T la livraison choue pour une raison temporaire, le message est plac dans la filedeferred.
Cette file est guette relativement souvent par qmgr. Quand je dis "souvent" cest relatif, mais surtout li
au paramtre queue_run_relay initialis 300s par dfaut (1000 dans Postfix 2.4).
Le round-robin est un algorithme dordonnancement sans priorit. qmgr soccupera de la file incoming pendant N temps puis de la file deferred pendant N temps et ainsi de suite, sans appliquer aucune priorit ou distinction.
Si toutefois qmgr est amen scruter la file incoming et la file deferred en mme temps, il respecte son
principe dconomie de ressources mais defficacit, il scrute les deux en appliquant lalgorithme
dordonnancement round-robin.
Aussi, vous pouvez jouer avec le paramtre maximal_backoff_time qui, par dfaut, attend 4000s entre
deux tentatives de livraison dun message prsent dans la file deferred.
La file hold
Celle ci est un peu particulire dans le sens o cest vous qui positionnez les messages dedans en mettant
en place dans votre configuration de Postfix diffrentes politiques daccs ou dexamens supplmentaire
des enttes ou du corps des messages par cleanup.
Cette file est un peu particulire car elle ne sera pas examine pour essayer de livrer les messages quelle
contient. Il faut que a soit obligatoirement ladministrateur qui traite ces messages.
Bon, maintenant quon sait ce que sont les files dattente, on va voir divers outils et commandes pour les
traiter !
Commandes de traitement des filesElles sont logiques, donc je ne vais pas lister tous les cas de figures, mais vous montrer des exemples que
Postfix Page 4
-
Elles sont logiques, donc je ne vais pas lister tous les cas de figures, mais vous montrer des exemples que
vous pouvez adapter simplement pour trouver ce que vous voulez:
Pour compter le nombre de mails dans la file active, on prfrera utiliser la commande find, couple
un wc comme ceci ( lancer en root):find /var/spool/postfix/active -type f | wc -l
Pour compter deux files, comme la deferred et la hold, il suffit de cumuler les emplacements dans la
commande comme ceci:find /var/spool/postfix/deferred /var/spool/postfix/hold -type f | wc -l
L'outil Qshape
Inutile de le chercher, cet outil vient en installant Postfix. Cet outil montre une vue de la file dattente sous
forme de tableau (le temps en horizontal et les domaines de destination en vertical (ou les domaines
dexpdition avec loption -s)) et dispose de quelques options.
Pour voir le tableau de la file active:qshape active
Je vous conseille de piper ces commandes avec des head (qui affiche 10 entres par dfaut) ou less. Par
exemple, pour les 10 premires entres de la file deferred, cest comme a:qshape deferred | head
Postfix permet de base de visualiser la file dattente via cette commande:postqueue -e
Lavantage, cest quelle vous donne lID des mails utilis dans les commandes suivantes.
Postsuper
Lui, il gre les files dattentes et peut interagir sur un mail en utilisant son ID de queue. Quelques
exemples:
Effacer un mail actuellement dans une des queues:postsuper -d ID_DU_MAIL
Dplacer un mail dans la file hold:postsuper -h ID_DU_MAIL
Supprimer tous les mails de toutes les files dattente (utilis trs rarement, tous les mails seront perdus
dfinitivement).postsuper -d ALL
partir de ladresse
Postfix Page 5