Post Fix

5
Avant de s’amuser à traiter des files d’attente, il serait bon de comprendre comment sont orchestrées ces files et par qui. Déjà, pour qu’on parle tous le même langage, je vous mets à disposition un diagramme des composants de Postfix et montrant leur manière 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: Démons et gestion des files d'attente MTA, MDA, MUA, LDA... Qu'est - ce que ? Dans le monde de Postfix, ces acronymes sont légions, si vous voulez vous en sortir, il est quand même bon de connaître leur signification. MTA Pour Mail Transfer Agent (ou Message Transfer Agent) c’est le logiciel qui est responsable de l’envoi et de la réception des messages ENTRE les systèmes. Ils ne font que deux choses: envoyer et recevoir, ils ne font rien d’autre. La plupart du temps ils causent en (E)SMTP ((Extended) Simple Mail Transfer Protocol couche 7 (application) du modèle OSI) historiquement sur le port 25. On y reviendra par la suite, c’est un protocole très simple (et vieillissant à mon goût). MDA Pour Mail Delivery Agent, il s’occupe de la dernière étape lors de la transmission d’un mail: le déposer dans la bonne boîte aux lettres du bon utilisateur. On peut y coupler un système de filtre, Procmail fait ça très bien. Le MTA cause avec le MDA via l’intermédiaire 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 dépassé, etc…). MUA: Pour Mail User Agent. Inutile de faire compliqué, c’est 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 récupérer ses mails via différents protocoles: le vieillissant POP3 ou le plus actuel IMAP qui dispose de plus de fonctionnalités. Postfix mardi 5 mai 2015 12:03 Postfix Page 1

description

serveur de messagerie

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