utilisation de procmail - linux-france :: accueil · · 2001-01-05... une série de pointeurs...
TRANSCRIPT
Procmail
Utilisation de procmail
Olivier Tharan<[email protected] ug.or g>
Cedocumentdécritl’utilisation deprocmaildansla vie detouslesjours.
1. Intr oductionCedocumentessaied’expliquercommentinstalleret utiliserProcmailpourfiltrer lecourrierélectronique.Procmailestun outil trèspuissantpourtraiter, dequelquemanièrequecesoit,descourriersélectroniques.Cedocumentessaiededonnerdesexemplessimplesàmettreenoeuvre,toutenn’oubliantd’expliquerle pourquoidecesexemples.
Lesrecettessonttiréesdemonexpériencepersonnelle,et représententmescommentairessurlesdocumentationslargementdisponibles.
NOTE : cedocumentestencoursd’élaborationet estévidemmenttrèsincomplet(maisil évoluepeuàpeu!). Lessourcescontiennentdescommentairesguidantun peul’évolutiondu document,leslire poursavoir oùajouterdeséléments,chercherle mot’FIXME’ ! Commeil aétérelu parpeud’autrespersonnes,il sepeutquecertainesinformationssoienterronées.
Cedocumentsetrouvesursonsitederéférence(http://www.linux-france.org/article/appli/procmail.html).
1
Procmail
1.1. Qu’est-ce que procmail ?Procmailestunoutil permettantprincipalementdefiltrer desmessagesélectroniques(ilnefautpasoublierformail, livréavecprocmail,qui estunadjointappréciableàcedernier).Il esttrèspuissantet sescapacitésdefiltragelui permettentdedélivrerdescourriersdansdifférentesboîtesauxlettres,delesrenvoyer, voire d’effectuern’importequelleactionenfonctiondufiltre désigné.
Procmailfonctionnegrâceàunsystèmederègles,qu’il parcourtlesunesaprèslesautres,afindedéterminersi le messagequ’il traitesatisfait àunerègleenparticulier, etexécutel’action associéeà la règletrouvée,le caséchéant.
Vousavezpeut-êtreentenduparlerdeprocmail.Vousavezpeut-êtrevu desrèglesprocmail,et vousêtesenfui encourantaprèsça(çasepeut!). Vousconnaissezlapuissancedeprocmail,maisvousnesavezpastropparoùcommencer. Cedocumentestpourvous.Il expliqueracommentinstallerprocmail,et commentl’utiliser demanièresimpleaudébut. Finalement,unesériedepointeursvouspermettrad’aller plusloin, unefois lesbasesassimilées.
Pré-requispourutiliser procmail:
• savoir utiliser le courrierélectronique(je nevaispasl’apprendreàvotreplace,maissi vousêteslà, c’estquevoussavez,n’est-cepas? ;-)
• avoir desconnaissancesdebaseenexpressionsrationnelles(lesfameusesregexp !),qui sontabondammentutiliséesdanslesrèglesdeprocmail.Rassurez-vous,j’essaieraidemettresuffisammentd’exemplespourquecelarestecompréhensible.Sinon,procmailutilise lesexpressionsrationnellesstandardsd’egrep, doncvouspouvezlire lespagesdemanuelegrep(1) etregex(7) pourplusd’informations.
2
Procmail
2. Installation de procmail
2.1. CompilationL’installationdeprocmailn’estpastrèscompliquée.Si vousn’êtespasl’administrateurdevotresystème,il faudracontactercedernierpoursavoir si procmailestinstalléoupassurle serveurdecourrier. Si vouspouvez(ou devez!) l’installer vous-même,cen’estpasdifficile. Engénéral,procmailestdistribuésousformed’un paquetpourlesdistributionsLinux (procmail-3.14-2.i386.rpm pourla Redhat-6.2,procmail_3.13.1-3.deb pourla Debian2.2,etc.)ou d’un port pourFreeBSD.Sivousnetrouvezpasdedistributionbinairepourvotresystème,il estpossibledelecompileràpartir dessources,quel’on peuttrouversurle sitedeprocmail(ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/procmail.tar.gz)ouplusrapidementauLip6 (Jussieu)(ftp://ftp.lip6.fr/pub/unix/mail/procmail/procmail.tar.gz).La dernièreversionàcejour est3.15.
2.2. ConfigurationIl existeplusieursmanièresd’appelerprocmail,selonquel’administrateursystèmeestcoopératifou non! Il esteneffet possibled’utiliser procmaildemanièreglobale(procmailpeutservirdefiltre général,avantmêmela livraisondu courrieràchaqueutilisateur-- pourpasserun anti-virusà l’entréedusystème,parexemple),oubiendemanièreindividuelle(utilisationdeprocmailsansdisposerdedroitsparticuliersautresqueceuxdu répertoirepersonnel).
2.3. Installation personnelleIl estpossibled’installerprocmailpourunusagepersonnel,si jamaisle systèmen’estpasparamétrépourutiliserprocmailconjointementavecle serveurdecourrier. Pourcela,la documentationdeprocmailindiquedemettrela ligne suivantedansle fichier.forward devotrerépertoirepersonnel:
3
Procmail
"| IFS=’ ’&& exec /usr/bin/procma il -f-||exit 75 #MON_LOGIN"
Notezle « tube» (|) endébut deligne 1 ! Le fichier.forward estcherchéparleserveurdecourrieràchaquecourrierqui nousestdestiné; si cefichierexiste,il permetdedéfinir, soit uneadresseà laquelleredistribuer(= forwarder)le courrier, soitunecommandeà traverslaquelleon passele courrier. Dansnotrecas,on indiqueauserveurdecourrierdepasserlescourriersentrantsnousétantdestinésà traversla commandeprocmail.
3. Interaction avec le reste du système
3.1. Procmail comme livreur de courrierUnemanièretrèsutile demettreprocmailàdispositiondetouslesutilisateursestdel’installer commeoutil delivraisonducourrierenlocal.procmailesteneffet aussiunMDA (Mail DeliveryAgent,outil delivraisondecourrier),c’est-à-direquele courrierlocal traitéparle serveurdecourrierestenvoyéà procmailpourquecedernierplacelecourrierdanslesboîtesauxlettresdesdestinataireslocaux(engénéral,dans/var/mail/login).
Demanièrehistorique,c’estl’outil /bin/mail qui faisaitofficedelivreurdecourrierlocal. Il a tendanceàêtreremplacéparprocmail,carcedernierpermetaussidefiltrer lecourrierentrant.L’un desinconvénientsdeprocmailestqu’il estpluslourdà lanceràchaquefois qu’uncourrierdoit êtrelivré.
Parcontre,unefois installédemanièreglobale,procmailpeutservirdefiltre pourlespersonnesqui le désirent,et commesimplelivreurdecourrierpourlesautres.Il suffitpourlespremiersd’avoir unfichierdeconfiguration.procmailrc dansleur répertoirepersonnel.Si cefichiern’estpasprésent,procmaillivrerale courrierdansla boîteauxlettreshabituelledela personne.
4
Procmail
L’installationdeprocmailcommeMDA local estrelativementsimplepourlesserveursdecourrierlespluscourants.Étudionslescaslespluscourants.
3.2. Procmail et SendmailSi vousparamétrezsendmailaveclesmacrosm4, il suffit deplacerla ligne suivantedanssendmail.mc (ouconfig.mc suivantl’Un*x utilisé 2 ) :
FEATURE(local_pr ocmai l) dnl
et,si votreprocmailn’estpasdans/usr/local/bin 3 :
define(‘PROCMAIL _MAIL ER_PATH’, ‘/usr/bin/procma il’ )d nl
3.3. Procmail et PostfixPourutiliser procmailavecPostfix,rien deplussimple: renseignezla lignemailbox_commanddu fichiermain.cf 4 , enindiquantle chemincompletversprocmail.Parexemple:
mailbox_command = /usr/bin/procma il
3.4. EximPourutiliserprocmailavecExim, il fautremplacerle contenuhabitueldu~/.forwardpar:
|/usr/bin/procma il
5
Procmail
Cettesolutiondevrait enfait fonctionneravectout serveurdecourrierpossédantunecompatibilitéprochedeSendmail.Si quelqu’unaunesolutiongénériquenenécessitantpasl’écritured’un fichier~/.forward, elle estla bienvenue!
3.5. Autres serveur s de courrierFIXME: qui aenvie d’écrirelà-dessus?QMail, etc.
3.6. Procmail et fetchmailCeuxqui seconnectentépisodiquementà InternetparuneliaisonPPPutilisentpeut-êtrefetchmailpourrécupérerleur courrierdepuisle serveurPOPou IMAP deleurfournisseurd’accès.fetchmailestun trèsbonclient POP/IMAP, queje vousrecommande.
En tempsnormal,fetchmailrécupèrele courriersurle serveurdistantet l’adresseauserveurdecourrierlocal,surle port25 (SMTP).Cetteméthodefonctionnesi vousavezconfiguréun serveurdecourriersurvotremachine(Sendmailou Postfix),maisestrelativementlourdecarunefois passéàSendmail,le courrierfinira parpasserdanslesmainsdeprocmail.On peutéviterun sautsupplémentaireenfaisantpasserle courrierdirectementdefetchmailàprocmail.Pourcela,il suffit d’ajouterl’option deconfigurationsuivantedansle fichier.fetchmailrc :
mda "/usr/bin/procmai l -Y -d %T"
Le paramètre-mda passéenlignedecommandefait la mêmechose.
3.7. Configurer Gnus pour qu’il utilise procmailÉric Jacoboniacontribuécettesectionsurl’utilisation deGnusconjointementàProcmail.Gnusestsuffisammentimportantet puissantpourqu’ondoive le configurer
6
Procmail
demanièreà l’utiliser proprementavecprocmail.
Gnuspermetdecréerdefaçonsimpledesdossiersdecourrierselonlescritèresdevotrechoix : il suffit d’utiliser la fontionnnmail-split-methods et despécifier,pourchaquedossier, l’expressionrationnellesurlaquelleon sebaserapourclasseruncourrierdanscelui-ci.
Voici, parexemple,cequepourraitcontenirun.gnus pouractivercettepossibilité:
;; On utilise le backend nnml pour le courrier (car par défaut,;; Gnus lit les news...)(setq
gnus-secondary-se le ct -meth ods ’((nnml ""))mail-sources
’((directory:path "~/incoming/" ;; cf. variable MAILDIR de .procmailrc:suffix "" )
))
Ici, nousavonschoisid’utiliser le répertoireincoming commesourcedecourrier,c’estcelui oùprocmailrangesesdossiers.GnustranfèreraalorslescourriersdanslesrépertoirescorrespondantsdeMail (c’estle répertoirepardéfaut).
Toutefois,cetteméthodeaquelquesinconvénients: le principalestqu’elle fait doubleemploisi l’on utilisedéjàprocmailpour, parexemple,mettreauxoubliettesdescourriersdeprovenancedouteuse,ou poursupprimerlesdoublons(voirprécédemment).Un autreinconvénientestqu’elleestpropreàGnus,cequi rendobsolètestouscesdossierssi l’on décidedechangerdeMUA (maisquelleidéesaugrenue...).
Pourcetteraison,il estplussagedeconfigurerGnuspourqu’il utiliseprocmailpourgérercesdossiers:
;; Utilisation du backend nnml avec procmail;; nnmail-procmail- di re cto ry correspond à la variable MAILDIR;; de votre .procmailrc(setq
gnus-secondary-se le ct -meth ods ’((nnml ""))
7
Procmail
gnus-use-procmail tnnmail-spool-file "procmail"nnmail-procmail-d ir ec tor y "~/incoming/"nnmail-procmail-s uf fi x ""
)
;; Pour les nouvelles versions de Gnus (>= 5.8.7)(setq mail-sources
(list ’(directory:path "~/incoming/":suffix ""
))
)
et c’esttout...Gnusutiliseralesrèglesdéfiniesdansvotre.procmailrc pourcréersesdossiersdecourrier.
Le principeestsimple: lorsquevouslancerezGnus,celui-ci ira consulter~/incomingoù doiventsetrouver lesdifférentsfichierscréésparprocmail.Si cesfichiersnesontpasvides,il leslit et transfèrelescourriersqu’ils contiennentdanslessous-répertoiresde~/Mail encréantun fichierparcourrier. Aprèscetteétape,lesfichiersde~/incoming sontdonctousvides.
Si vousavez,parexemple,lesrèglessuivantesdansvotre.procmailrc :
# *FreeBSD-Stable:0* ^TO.*stable@FreeB SDFreeBSD-Stable
# *Systeme:0* From:.*(root|news )@ch ezmoiSysteme
# *Perso:0* ^TO.*moiPerso
8
Procmail
# *Le-reste:0* ^TO.*Le-Reste
Vousaurezlesfichiers~/incoming/FreeBSD-Stable, ~/incoming/Systeme,~/incoming/Perso et~/incoming/Le-Reste qui seremplirontaufur etàmesurequevousrecevezdesmessagescorrespondantauxrèglesci-dessus.En lançantGnus,celui-ci créera(si cen’estdéjàfait) lesrépertoires~/Mail/FreeBSD-Stable,~/Mail/Systeme, ~/Mail/Perso et~/Mail/Le-Reste et chacund’euxcontiendradesfichiersportantdesnomssurle mêmeprincipequ’unspooldenews :
% ls -l ~/incoming/Pers o-rw------- 1 moi moi 0 26 jul 14:05 /home/moi/incomi ng/P ers o
^^^
% ls ~/Mail/Perso1 11 13 2 4 6 810 12 14 3 5 7 9
L’avantagedecetteméthodeestdecentraliserle triageducourrierenun seulendroit:.procmailrc. D’autrepart,procmaildisposedemoyensbienplusperfectionnéspourspécifierlesexpressionsrationnelles(la macro^TO_,notamment).
Parcontre,Gnusconsidèreraquechaquefichier de~/incoming contientunelistedecourriers: si vousavezdonccrééunfichiermsgid.cache danscerépertoireaveclarègle
:0 Wh: msgid.lock| formail -D 8192 msgid.cache
vueplushaut,Gnusseplaindraquecedossiern’estpasaubonformat.Pourréglerceproblème,il suffit demodifiercetteentréeen:
:0 Wh: msgid.lock
9
Procmail
| formail -D 8192 /tmp/msgid.cach e
cequi a l’avantagesupplémentairedenettoyercefichieràchaqueredémarragedevotresystème(s’il estconfigurépournettoyer/tmp).
Ressources:
Commed’habitude,le fichier info deGnusdonnetouslesrenseignements(Rubrique’SelectMethods’-> ’GettingMail’ -> ’Mail andProcmail’).
La FaqGnus(http://www.ccs.neu.edu/software/contrib/gnus/)contientégalementunerubriquesurcetteconfiguration(contributiondeRandalSchwartz).
GnusRuLeZ!
3.8. Utilisation de Mutt avec ProcmailMutt s’accomodetrèsbienà la sauceprocmail.Il lit lesboîtesauformatmbox, formatpardéfautsousUnix, qui estle formatstandardécrit parprocmail.Il suffit doncd’indiqueràmutt le répertoirequ’utiliseprocmailpourstocker lesboîtesauxlettres.Sivousutilisezla configurationindiquéeci-dessous,le répertoireest$HOME/Mail, qui estle répertoirepardéfaututilisé parmutt.La boîteauxlettresnormale,celleoù procmailstockerale courrierqui n’a pasététrié et quemutt lira audémarragesansautreindicationdevotrepart,est/var/mail/$LOGIN (ou/var/spool/mail/$LOGIN).
Si vouschangezle répertoireoùprocmailstockerale courrier, il fautaussil’indiquer àmutt,enutilisantla variablefolder. Par exemple: set folder=~/courrier dansvotre.muttrc. Voir la variableMAILDIR deprocmail.
Si vousmodifiezla boîteauxlettressystème(celleoù devraientêtrestockésvoscourriersendéfinitive)avecla variableDEFAULT deprocmail,il faudraaussil’indiqueràmutt.Pourcela,vouspouvezsoit utiliser la variablespoolfile danslaconfigurationdemutt : set spoolfile=~/Mail/inbox, soit positionnerla variabled’environnementMAIL.
Touscesrenseignementssetrouventdansle manueldemutt (installéengénéraldans/usr/share/doc/mutt/manual.txt).
10
Procmail
4. Configuration de procmailL’utilisation deprocmailrevientàpeuprèsàsecréerunfichier deconfiguration; c’estpeut-êtrela partiela plusdifficile du parcours,maisavecdesexemplesbienchoisis,c’estplusclair.
4.1. Écriture du fic hier .procmailr cLe fichier.procmailrc estunecombinaisond’assignationsdevariableset derecettes. Lesrecettesprocmailsontcomposéesdetroisparties:
• l’en-têteet sesoptions;
• lesrèglesdecorrespondance: expressionsrationnellessurlesen-têteset corpsdesmessagespermettantdedéterminersi le messagevaêtretraitéparcetterecette;
• l’action associéeàcetterecette.
La premièrecorrespondancetrouvéel’emporte,et terminela lecturede.procmailrc; si aucunecorrespondancen’esttrouvée,le courrierestlivrédansla boîteauxlettrespardéfaut(/var/mail/toto parexemple).
4.1.1. Variab les
Il estpossiblededéfinir desvariablesdansle fichier deconfiguration.procmailrc.Certainesd’entreellesaurontunesignificationparticulièrepourprocmail,alorsquelesautrespeuventêtreutiliséesdanslesrèglesqui suivrontcommedesvariablesnormales.Voici unexemplecommenté:
# Variables spéciales pour procmail
# caractère verbeux de procmail ; mettre ’yes’ per-met d’avoir des messages# supplémentairesVERBOSE=no
11
Procmail
# pas obligatoire : procmail détermine votre nom de lo-gin tout seul, mais pour# l’exemple on supposera que l’utilisateur s’appelle ’toto’LOGNAME=toto
# mettre /bin/sh surtout si vous utilisez tcsh !SHELL=/bin/sh
# chemin d’accès aux exécutables ; en mettre le mini-mum, pour n’accéder qu’aux# programmes indiqués dans le fichier de configurationPATH=/bin:/usr/b in: /u sr /lo ca l/b in :/ home/ tot o/ bi n
# réper-toire où seront stockés les mails ; s’assurer que votre MUA sait y# accéder aussiMAILDIR=/home/to to/ Mail
# si procmail n’arrive pas à délivrer le cour-rier, cette boîte sera utilisée# en dernier ressort : il vaut mieux définir cette variable !ORGMAIL=$MAILDIR/emer gency -i nbox
# boîte de réception par défautDEFAULT=/var/mai l/t ot o
# fichier de log de procmail ; si vous définissez cette variable,# procmail gardera une trace de son exécution dans le fichier# indiqué. À consulter périodiquement !LOGFILE=$MAILDIR/.p ro cmail .l og
Lesautresvariablesutiliséesou définiesparprocmailsontdécritesdansla pagedemanueldeprocmailrc(5).
4.1.2. Séparer le fic hier en plusieur s par ties
Il estpossibledescinderle fichier .procmailrcenplusieursparties,afin d’enaméliorerla lisibilité. En fait, onpeutinclureun fichiergrâceà la directivesuivante:
12
Procmail
INCLUDERC=nom_de_fi ch ie r
oùnom_de_fichier estle fichier à inclureà l’endroit dela directive,c’estsoit unchemincomplet,soit un cheminrelatif aurépertoirecourant.On peutincluredesfichiersdefaçonimbriquéesansaucunproblème.
4.1.3. Recettes
Unerecettea le formatsuivant:
:0 [drapeaux] [ : [verrou_local] ]<zéro ou plusieurs conditions (une par ligne)><exactement une ligne d’action>
Unerecettecommencepar:0 ; surla mêmeligne,on ajouteradesdrapeauxsupplémentairesselonlescas.Lesdrapeauxsontdécritsdansla pagedemanueldeprocmailrc(1). Lesplusutiliséssont:
• H : passel’expressionrationnellesurlesen-têtesdu message;
• B : idemsurle corps;
• h : n’envoie quelesen-têtespourtraitement;
• c : gardeunecopiedumessagepourtraitementultérieur
Finalement,enfin deligne,on ajoutera: si ondésireun fichierdeverrou(afindenepascorrompreunfichier eny écrivantsimultanémentdeuxcourriers).
Leslignessuivantesindiquentzéroou plusieursconditions,chacunesurunelignedifférente,permettantdetestersi uncourriercorrespondàcequel’on cherche.Lesconditionscommencentparle caractère* et tout cequi suit estenvoyéà la commandeegrep interneàprocmail.Il fautquetouteslesconditionssoientvraiespourconsidérerla recettecommevraieet activer l’action qui suit (conditionsdetypeAND).
Finalement,l’action àeffectuersi lesconditionsontétévérifiéessont:
13
Procmail
• la redirectionversunfichier : actionla pluscourante,elle permetdedélivrer lecourrierdansla boîteauxlettresindiquée.Il faudrafaireattentionàspécifierunverrouaudébut dela recette.Il suffit d’indiquersurla ligne le nomdu fichierou durépertoiredanslequelstocker le courrier;
• la redirectionversunprogramme: cetteactionpermetd’envoyer le courriersurl’entréestandardd’un programmequi s’occuperaducourrier. Le verroun’estplusnécessaire,et on indiquerala redirectionencommençantla ligneparunebarreverticale(|) puisla commandeàexécuter;
• l’envoi versuneautreadresseélectronique: le verrouestinutile, et la ligned’actioncommenceraparunpoint d’exclamation,suivi del’adressederenvoi.
4.2. Quelques recettes utilesVoici unelistedésordonnéederecettesdebasequi pourrontêtreutiles,et qui sontdifférentesdesrèglesqu’on trouvedanslespagesdemanueldeprocmail.
1. Negarderqu’unseulexemplaired’un mail, mêmesi on le reçoitdeuxfois ; utile,parexemple,quandon reçoituneréponsed’unelistedediffusion,à la foisdirectementet parl’intermédiairedela liste. Il estpossiblederéglerla taille ducacheenchangeantle nombre(8192).
:0 Wh: msgid.lock| formail -D 8192 msgid.cache
2. Cesrèglespermettentdetrier unelistedediffusiondansundossierséparé,afindenepastrop encombrerla boîteauxlettresnormale.
Imaginonsqueje soisabonnéà la listePostfix-Fr. L’adressepourenvoyerunmessageàcettelisteest<[email protected]>, maisquandvousenrecevez,l’adressedel’expéditeurest<[email protected]>. Il nousfautdonctrouverune
14
Procmail
expressionsuffisammentcomplètequi nouspermettederepérerun tel messagesansambiguïté.Unetelle expressionpeutêtreexpriméeparla règlesuivante:
:0:* ^From.*postfix-f r- ownerpostfix-fr
Danscetterègle,nousrecherchonssi l’en-têtereprésentantl’expéditeur(la partie^From del’expressionrégulière)contientla chaînepostfix-fr-owner, et sic’estle cas,plaçonsle courrierdansla boîteauxlettresnommée« postfix-fr ».
Pourtrier d’autreslistesdediffusion,le principeestle même: trouvezdanslesentêtesdescourriersdesélémentssuffisammentsignificatifssurlesquelsvousbaserezvotretri (From.*liste-owner pourunelisteSympa,From.*owner-liste pourunelisteMajordomo,From.*liste-admin pourunelisteMailman,etc.).
3. La règlequi suit permetdetrier un courriersursonsujet,cequi permetdefiltrercertaineslistesdediffusionajoutantsystématiquementleur nomdansle sujetducourrier. Vouspouvezaussidiscuterd’un thèmeprécisavecdesamis,descollèguesenconvenantd’un mot-clédansle sujet.
:0:* ^Subject:.*\[bla gue\]copains/blagues
Touslescourriersdontle sujetcontientla chaîne[blague] (aveclescrochets)iront dansle dossierblagues setrouvantdansle sous-répertoirecopains devotrerépertoiredecourrier. Lescrochetssontéchappésparunebarreobliqueinverse(\) caril s’agit d’uneexpressionrationnelledanslaquellelescrochetsontunesignificationparticulière.
4. La règlesuivante,assezimpressionnante,permetdetrier enunseulcouptouslescourriersarrivantdelistesdediffusionsimilaires.L’exempletypiqueenestles
15
Procmail
listesdediffusiondu projetDebian(http://www.debian.org/), auxquellesla règlefait référence(maiscelapourraitfonctionneraussipourleslistesFreeBSD;-) :
:0 H* ^X-Mailing-List: .* [<] .* li sts \. deb ia n\ .or g[ >]* ^X-Mailing-List: .* [<] *\/[^ ][^@]*$MATCH
Cetterègleà l’apparencebarbares’appuiesurle fait quelescourriersdeslistesDebiancontiennentl’entêteX-Mailing-List:[email protected], et quela variable$MATCH contientcequi aététrouvédansl’expressionrationnelleprécédenteà partir de\/. Pourclarifier,l’expression\/[^ ][^@]* « correspondra» àun début d’adresseélectronique(sansla partiedomaine)et seraaffectéà la variable$MATCH. Pourla [email protected] parexemple,le courrierdoncseraplacédansle dossierdebian-french.
CetteméthodefonctionnepourtoutesleslistesDebian,si vousêtescommemoiabonnéàplusieursd’entreelles.
5. Question: je récupèremoncourrierdepuisuneseuleadresse,et j’aimeraisle trierenfonctiondudestinataire,selonquel’adressesoitJean Dupont
<[email protected]> ouSuzanne Dupont <[email protected]>.
Unesolutionpeutêtred’utiliser fetchmail et sonmodemultidrop, oubienlesrèglesprocmailsuivantes:
:0* ^TO_Suzanne.*Dup ont! suzanne
:0* ^TO_Jean.*Dupont! jean
Faitestoutefoisattentionàcequ’uneboîteauxlettresrécupèrele courrierquiseraitéventuellementpasséà travers; ceserale casquandl’adressedu destinataire
16
Procmail
n’aurapasla formesouhaitée.C’estentoutcasunefaçonrapide,maispeuefficace,dedistribuerdu courrierenprovenanced’uneseuleadresseàdestinationdeplusieurspersonnes.Unesolutionpluspratique,parexemple,estd’utiliser UUCP.
6. L’utilisation la plusattenduedeprocmailestle traitementdesspams.Bienqu’ilsoitpossibledelesbloquerplusenamont(listesnoiresaveclesserveursdecourriers,commeRSS,ORBS,MAPS,etc.),ondétestegénéralementlesvoirarriverdansla boîteauxlettres.JevousrenvoiesurlessitesstyleCauce(http://www.cauce.org/) pourlesraisonsphilosophiquesdela luttecontrele spametproposeunesolutionsimplepourmettredecôtélescourriersnondésirés.Jen’indiquepascommentlesjeter(/dev/null) carj’ai eudemauvaisessurprises:mieuxvautavoir un oudeuxspamsdansla boîtequ’un courrierimportantà latrappe!
La règlequi suit utilise la méthodedela « listenoire», quel’on gèreeninsérantdansun fichieruneadressenondésirée,voire uneexpressionrationnellesi l’onveutbloquerundomaineentier, parexemple.Elle utilisedeuxprogrammes,extract-addrs etmatch-email-addr tirésdela définitiondecetterègleadaptéedelistenoire.Pourl’historique,je mesuisbasésurlesrèglesdeLarzWirzenius(fameuxancienmodérateurdecomp.os.linux.announce)disponiblesàhttp://www.iki.fi/liw/mailfilter .html ; RichardGooch(fameux« hacker» dunoyauLinux, entreautres)a adoucicesrègleset metlessourcesdesdeuxprogrammescitésàdispositionà ftp://ftp.atnf.csiro.au/pub/people/rgooch/5 .
Compilezcesdeuxprogrammes,mettez-lesàun endroitaccessibleparprocmail(rappelez-vousdela variablePATH du.procmailrc), et incluezla règlesuivante:
# À modifier selon les casBLACKLIST=$MAILDIR /. bla ck li st
:0 Whic| extract-addrs | match-email-addr $BLACKLIST
# Si on a trouvé une adresse de spammeur (ci-dessus), alors...:0 a{:0:
17
Procmail
junk/spam}
Mettezdepréférencecetterègleversla fin devotrefichier deconfigurationprocmail,carelle passele courrierà traversdeuxtubeset estun peuplusgourmandequelesautresvuesauparavant.Lesdeuxpremièreslignesenvoientlecourriersurextract-addrs qui extrait lesadressesélectroniquesdu messageetlesenvoie àmatch-email-addr qui lescompareraavecle contenudela listenoire.
Encasdecorrespondance,le résultatdela commandeserapositif et la règlesuivanteseraexécutée,cequi abasiquementpoureffet demettrele courrierdecôté.Lisezcetteboîtedetempsentemps,onnesait jamais...
Le contenudufichier delistenoireestle suivant.Jevousconseillevivementdecréervous-mêmevotrefichierdelistenoire,aufur et àmesuredesnouveauxspams.Coupléeà d’autresrègles(pasdeHTML, est-cequele courrierm’estbienadressé,etc.),cetteméthoderéduiténormémentle nombredespamsdansla boîteprincipale(maispasle nombreabsoludecourriersnonsollicités,hélas).
# Les commentaires ainsi sont possibles --en tout cas, ça marche chez moi# (tm) -- voir le source de match-email-addr pour plus de détails
# quelques adresses « connues »[email protected] mfriend@everywher e. co [email protected] te .c om
# quelques expressions rationnelles ; je suis un peu bour-rin sur ce coup# le mot-clé !regexp est important!regexp [@.]msn\.com!regexp [@.]aol\.com!regexp [.@]writeme\.com
Note: cepassagesurle spamdevrait fairel’objet d’unesectioncomplètepourlaprochainerévisiondu document.
18
Procmail
4.3. Utilisation en dehor s d’un serveur de courrier
4.3.1. Formail
Pourretraiteruneboîteauxlettresnontriéeavecunfiltre particulier, onpeututiliserformail, qui appelleraprocmailàsontour. Exemplepratique:
formail -s procmail fichier_filtre < boite_a_traiter
oùfichier_filtre estun fichiercontenantlesrèglesprocmailnécessairesautraitementdu fichieretboite_a_traiter estla boîteauxlettrescontenantlescourriersàfiltrer.
On peutomettrefichier_filtre, auquelcasle fichier deconfigurationpardéfaut(.procmailrc) serautilisé.
Formail permetbiend’autreschosesutiles,notammentcelled’extrairedeschampsparticuliersdesentêtesd’un courrier, ou d’ajouterdesentêtesparticuliers.Cecipeutêtreutile dansle casd’un répondeurautomatique(explicationdécortiquéedanslasectionsurl’utilisation avancéedeprocmailci-dessous).
L’utilisation deformail estdocumentéedansla pagedemanuelformail(1).
4.3.2. Mailstat
Si vousgénérezdestracesdel’utilisation deprocmail(parl’utilisation dela variableLOGFILE, parexemple),vousaurezenvie d’enavoir un condensérégulier; leslireexhaustivementpeutprendredu temps.L’outil « mailstat», livréavecProcmail,peutserviràcela6.
La commandesimplesuivantepermetdegénérerun résumédestracesdeprocmailtoutengardantle fichier detraceintact:
mailstat -klm procmail.log
19
Procmail
Le scriptsuivantpermetuneutilisationplusavancée,à lancerrégulièrement(unefoisparsemaine,parexemple):
#! /bin/sh# zerostat : archive les logs de procmail, envoie un ré-sumé par email
# Variables à modifier en fonction de votre environnement
# mettre votre loginMOI=toto
# indiquer le fichier de traceLOGFILE=~/Mail/. pro cmai l.l og
# utilisez gzip ou bzip2, au choixZIPEXE=bzip2
PATH=/bin:/usr/b in: /u sr /lo ca l/b in
mailstat -l $LOGFILE | \mail -s ’Statistiques procmail’ $MOI$ZIPEXE -f ${LOGFILE}.old
L’utilisation demailstatestdocumentée(succintement)dansla pagedemanuelmailstat(1). Nepasoublierdepasserle nomdu fichierà traiterenparamètre!
5. Utilisation avancéeOn peututiliser procmailpourd’autresutilisationsavancées,notammententantquefiltre globalpourtraitertout le courrierentrant.Lesutilisationspossiblessontdepouvoir filtrer lesspams,lesvirus, fairedesactionsdéfinies,avantquele courriernesoit délivréàchaqueutilisateur. Cecipeutêtretrèspratiquesurun relaisdecourrieràl’entréed’uneorganisationparexemple.
20
Procmail
Uneautreutilisationpossibleestdemettreenplaceun répondeurautomatique.Celapeutservirà plusieurschoses.
• Mettreun répondeurquandon partenvacanceset qu’on nerépondrapastoutdesuite,maisensignalantà l’expéditeurquele messageestconservé(principeduprogrammevacation).
Problèmesposés: nepasrépondredeuxfois à la mêmepersonne(utilisationd’unhachagepourrepérerlespersonnesauxquellesle filtre a déjàrépondu),nepasrépondreauxlistesdediffusion(c’esttrèsennuyeux,onsupposeraqueleslistessontdéjàtriéesquandle messagearrive,on vérifieraquandmêmequ’on netombepassurungestionnairedelistes,etc.).
• Faireun mini-serveurdefichiers,déclenchéparunebalisespécialedansle sujet(exemple: Subject: GET liste-fichiers.gz)
Problèmesposés: selimiter àunelistedefichierdéterminée,nepasaccepterlescaractèresbizarresqui pourraientcréerun trou desécuritéet permettredeservirn’importequelfichier dusystème.
5.1. Refuser des attac hements (Word, HTML, etc.)ThomasNemetha donnéla recettequ’il utilise pourfiltrer desmessagescontenantdesattachementsindésirables: scriptsVisualBasic(.vbs), desexécutablesWindows(.exe), desdocumentsWord (.doc) ou Excel(.xls). Cetterecettea poureffet derenvoyerun messageà l’expéditeurlui demandantdenepasenvoyercegenred’attachements.
:0 HB* ^Content-Type:.*\ .( ex e|v bs |do c| dot|x ls )*$ !X-Loop:.*$MOI| (formail -rtk -p ’| ’ \
-A "X-Loop: $MOI" \-A "Precedence: junk"; \cat $HOME/.procmail /ba df ile ) | $SENDMAIL -t -oi
21
Procmail
Cetterecetteutiliseprincipalementformail pourgénérerun messaged’auto-réponse.On recherche,à la fois danslesen-têteset dansle corps(drapeaux’H’ et ’B’), unen-têteMIME décrivantle contenu(Content-Type) et indiquantun nomdefichierseterminantparlesextensionsdéfiniesdansl’expression(exe|vbs|doc|dot|xls).Libre àvousd’enajouteroud’en retirer.
En casdecorrespondance,ongénèreuneréponseautomatique,qui incluerale messagecomplet: celui-ciestdoncperdupourun traitementultérieur, copiez-lesi vousvoulezle garderquandmême.Lesoptionsutiliséessontdécritesdansla pagedemanueldeformail. On inclut le messaged’origine,puisun messageexpliquantle refuset le toutestpasséàSendmail.
Vousavezsûrementremarquéla troisièmelignedecetterecette.Expliquons-laplusendétail.Quandnousgénéronsle message,nousajoutonsun en-têteX-Loop contenantnotreadresseélectronique(la variable$MOI està renseigneraudébut dufichier deconfiguration),qui serviraàprocmailpourtestersi le messageestdéjàpasséentresesmains.Ceciaunbut : éviterlesbouclesdecourrier, qui peuvents’avérertrèsgênantesàdécouvriret à réparer. On testedoncaveccetterèglequele messagen’a pasdéjàsubiun filtrage.Le signe$ derrièrel’étoile endébut deligne indiqueàprocmailquesetrouventdansla lignedesvariablesqu’il faudrasubstituer(ici, $MOI).
Il estpossibled’optimisercetterecette,pourcoller plusspécifiquementauformatMIME. En effet, l’en-têteContent-Type contientle typeMIME del’attachement,quiestplusdoncplusfiableàchercherquel’extensiondunomdefichier. On pourraitécrirela deuxièmeligneainsi,pourchercherlesattachementsbinairesWindows,parexemple:
* ^Content-Type:.*a ppli cat io n/o ct et -st re am. *n ame=. *\ .ex e
L’expressionrationnellecherchelesen-têtesreprésentantun attachementdetypeapplication/octet-stream, dontle nomseterminepar.exe. On peutfairedemêmeavecd’autrestypesd’attachement,le mieuxestdetester. Le tableausuivant
22
Procmail
représentedesattachementscourantsavecleur typeMIME correspondant:
Table 1. Attachements et types MIME
type MIME extension nom courant
application/octet-stream .exe binaireWindows
application/msword .doc documentWord
application/vnd.ms-excel .xls documentExcel
application/vnd.ms-powerpoint
.pps,.ppt documentPowerPoint
application/x-zip-compressed
.zip documentcompresséZip
application/x-unknown-content-type-hlpfile
.hlp documentd’aideWindows
application/pdf .pdf documentPDF
image/jpeg .jpg, .jpeg imageJPEG
image/gif .gif imageGIF
text/html .htm,.html documentHTML
text/x-vcard VCardNetscape
6. Conc lusion
6.1. Quelques ressour ces en ligneJevaistenterderésumerlesprincipalesressourceset documentationsdisponiblessur
23
Procmail
procmail.Il n’existepasàmaconnaissancedelivresurprocmail: unerecherchesurlachaîneprocmail surle siteAmazon(GB) (http://www.amazon.co.uk/)n’a rien donné,ni surle siteAmazon(USA) (http://www.amazon.com/).Parcontre,desréférencesàprocmailexistentdansleslivrespubliéschezO’Reilly.
Jetiensd’ailleursà noterqueje nesouhaitepasfaireun repompageouunetraductiondesdocumentsquej’énumèreici, sinonceneseraitpasdu jeu.Si je trouvedesmorceauxintéressantssurle forumfr.comp.mail ou quequelqu’unm’envoie desinformationsintéressantes,je lesincluedanscedocument.
Voici uneliste,nonexhaustiveévidemment,desitestraitantprincipalementdeprocmail.
6.1.1. Sites en anglais
• Procmail.org (http://www.procmail.org/)
• FAQ surprocmail(http://www.iki.fi/era/procmail/mini-faq.html)
• RessourcessurProcmail(http://www.procmail.org/jari/)
6.1.2. Sites en français
• unbonarticlesurprocmailsetrouvedansle numéro26dela Linux Gazette: LinuxGazetteenfrançais(http://www.linux-france.org/article/lgazette/issue-26/issue-26-4.html)
• cedocumentsetrouvesursonsitederéférence: Linux-France(http://www.linux-france.org/article/appli/procmail.html)
24
Procmail
6.2. Remerciements
• Nat Makarévitch,pourl’hébergementsurLinux-France;
• StéphaneÉcolivet,mainteneurdela sectionapplicationssurLinux-France,qui m’apousséà fairecedocumentquandil n’était qu’engestationdansmatête,et qui m’afourni lespremierspatchs;
• Éric Jacoboni,qui aécrit la sectionsurl’utilisation deGnusavecProcmail;
• ThomasNemeth,qui adonnéla recettepourfiltrer lesattachements,ainsiqued’autreséléments;
• NicolasLe Scouarnec,Didier Belot,contributeursdenombreusesastuces;
• lescontributeursdu forumfr.comp.mail ;
• tousceuxquej’ai oubliés,évidemment...
Notes1. et toutesmesexcusespourl’avoir oubliéaudébut...
2. Cefichier estgénéralementsituédans/etc/mail oudans /etc/sendmail,voire,d’aprèsÉric Jacobonidansl’article Configurationsimple(ou simplifiée)desendmailpourPPP(http://www.linux-france.org/article/mail/sendmail/sendmail.html), dans/usr/lib/sendmail-cf/cf si le systèmeutilisé estunedistributionRedHatdeLinux.
3. /usr/local/bin/procmail estl’emplacementpardéfautdeprocmail selonsendmail.
4. Cefichier setrouveengénéraldans/etc/postfix.
5. Le parcoursdesrèglesdecesdeuxpersonnesesttrèsinstructif et témoignentd’uneutilisationavancéedeprocmail.
25