You are on page 1of 84
Installez un serveur de mails Ww Gérez une liste de diffusion | d ITED. Ce. Mth —-G—A—4 Ain oti MAO crn, Complétez installation i Le service FTP : installation, gestion et ‘| protection a de votre serveur Internet 4 ons (Bind) | vW. Organisez E Découvrez les alternatives logiciel les vos journaux Ricca i é systeme ‘ a TUES TURE LR UE LU (UTWeL Brae WA) Source Phinaires eo iid Oo Tg Parc SS uy] (4 Ie GUTH GUT @eremey ieee AHCI pL Aree Oo TTT Cth ieee) Shr EAU OT TE eer Bonjour a tous et toutes, Le présent hors série peut étre vu comme une: suite du précédent, dans lequel nous avons détaillé les éléments et les explications indispensables pour mettre en ceuvre un serveur Web dans son intégralité. ‘Ce magazine que vous tenez dans vos mains regroupe les autres services que vous seriez tenté d’installer une fois votre serveur Web fonctionnel. Nous détaillons dans ces pages la maniére d’installer plusieurs services importants comme le FTP pour 'échange et le partage de fichiers, le SMTP pour la gestion du courrier électronique, le DNS pour la résolution de noms, ou encore les services de listes de diffusions ou les proxies. Tout comme le précédent hors série, nous baserons nos explications sur une distribution Debian, que nous trouvons parfaitement adaptée pour un serveur quel qu’il soit. Nous parlerons également de la configuration et de installation de logiciels et d’éléments du systéme qui ne sont pas liés directement avec la mise en place de services. Ceci concerne par exemple Open SSH, indispensable pour prendre le contréle de votre serveur a distance en toute sécurité, ou encore de la configuration et du principe de fonctionnement des journaux systémes ou du tunneling permettant de sécuriser un service peu sir. Nous avons réut dans ces pages des informations que nous espérons pratiques pour vous et pour Pusage que vous comptez avoir de votre serveur. Bien évidemment, nous n’exposons ici qu’une seule maniére de procéder et, pour quasiment tous les sujets abordés, qu’un seul logiciel. Mais sachez qu'il existe plusieurs logiciels réputés pour chaque service décrit dans ce magazine et que rien ne vous oblige 4 vous limiter 4 nos cexplications... Sur ce, je vous laisse découvrir le monde merveilleux de installation de serveur sur Internet. Denis Bodor © ails 4 Installer un serveur de mail 2 —_Fittrer les mails avec Exim 18 utter contre le Spam 22 création et gestion d'une liste de diffusion 3O installer un serveur POP3 et IMAP @erveur FTP 32 —_Proftpd:: votre serveur FTP 38 configuration avancée de proftpd Qutres services 3 installation d'un serveur DNS 49 instaltez un proxy Squid SO stunnet: tunneliser ses communications 5B surveiltez ractivité de votre serveur G1 ssi: Secure Shell G64 installer un serveur Cvs 75 Diffuser de la musique sur le Net @nciens numéros et bon de commande 80 @bonnement 82 Installer un serveur de mail Si vous étes un habitué des applications mail comme celle incluse dans Netscape ou Mozilla, effacez tout ce qui concerne le principe de fonctionnement de votre mémoire. Avec un systéme de type Unix, la gestion du courrier électronique se divise en deux parties. Ceci est totalement occulté par les applications qui expédient directement un mail en contactant un serveur spécifique. Ici, vous devrez apprendre comment tout cela fonctionne pour mettre en ceuvre votre propre serveur. Les deux parties dont nous venons de parler se répartissent la tche de la gestion du courrier © le MUA (Mail User Agent) est linterface entre le systéme de messagerie et l'utilisateur. Il ne siagit en réalité que d'un simple utilitaire permettant de lire les messages. Il existe bon nombre de MUA sous Linux. Les plus connus sont Mutt, Pine, ou encore le couple Emacs/Gnus. Ces applications ne soccu- pent absolument pas (en principe) de 'expédition et de la réception des messages. Elles ne font que pré- senter les données & l'utilisateur afin qu'il puisse les lire et les utiliser. © le MTA (Mail Transfer Agent) est 'application qui sloccupe de la livraison des messages. Le plus connu des MTA est sans le moindre doute Sendmail. Mais il west pas le seul et l'utilisateur pourra en choisir un qui correspondra le mieux & ses goiits : Postfix, Omail ou encore Exim, qui est le MTA installé par défaut sur une distribution Debian. Le MTA se charge nor- malement de délivrer des messages localement (d'uti- lisateur A utilisateur d'un méme héte) et sur le réseau. Le MTA est done chargé, comme l'acronyme lin- dique, du transport du courrier électronique. Lorsque cela se fait via un réseau, il utilise un pro- tocole particulier : SMTP (Simple Mail Transfer Protocol). L’envoi d'un message d'une machine a une autre est une négociation entre le MTA local et celui distant via SMTP. En simplifiant grandement les choses, on peut dire alors qu'un message prove- nant de Mr YX sur I'hote machineX a destination de Mme Y sur V'hote machineY est une expédition de fichier déclenchée par le MUA de Mr X via son MTA, vers la boite de Mme ¥ via son MTA. Pour en revenir aux applications que vous étes ccensé oublier, elles incluent directement une gestion du protocole SMTP. Ceci afin de contacter le ser- veur SMTP de votre fournisseur d'accés et lui demander d'envoyer votre courrier. Dans la méme situation, le MUA Mutt vous permettra de forma- ter votre message et de le passer & votre MTA local. Ce dernier contactera alors le serveur SMTP de votre fournisseur d'accés 4 Internet et lui demande- ra d'envoyer le message au destinataire. Le routage Le routage est la technique qui consiste & envoyer un message d'un destinataire local vers une autre machine. Le transfert de message ne se fait, en effet, pas & l'aveuglette. Le MTA local doit, avant toutes choses, déterminer en fonction de l'adresse du desti- nataire, quelle machine il doit contacter. Ceci peut paraitre surprenant 4 premiére vue, puisqu’on considére généralement qu'une adresse moi@monsi- te.com informe implicitement qu'on souhaite contacter monsite.com et délivrer le message & moi. Mais ceci est impossible, monsite.com est un domai ne et non une machine. En réalité, un h6te spécifique doit étre désigné comme responsable de la gestion de la messagerie pour un ou plusieurs domaine(s). Ceci se fait sous la forme d'un enregistrement DNS. Rappelez-vous. Jes manipulations décrites dans le précédent hors série consacré a la mise en euvre d'un service HTTP. Nous avons, a ce moment, décrit l'utilisation d'un serveur DNS public permettant d'associer notre nom www.monsite.com a l'adresse IP de notre serveur, Cest également ki que nous désignerons la machine chargée de la gestion du courrier Glectro- nique pour notre ou nos domaine(s). Deux cas se présentent alors, tout comme dans le numéro précédent : * Vous avez une adresse IP fixe (merci Nerim) et dans ce cas, vous avez précédemment ajouté un champ "A" dans votre enregistrement DNS pour votre serveur Web. Il vous suffira done d'ajouter un nouvel héte nommé, par exemple, ‘mail. monsite.com. En fait, vous n’étes absolument pas obligé de faire cela, mais l'ajout d'une machine ‘mail monsite.com facilite grandement la gestion des domaines. Autant avoir un peu d'ordre et faire cela proprement, De plus, dédier un nom de machine uniquement pour la messagerie vous permettra de utiliser pour tous vos domaines sans vous mélan- ger les crayons... * Ou vous utilisez une adresse IP dynamique et faites usage d'un service comme dyndns.org. Dans ce cas, vous n'ajouterez aucune entrée "A" (surtout pas, dailleurs) ou "CNAME" (alias). A présent, il vous suffit d'ajouter une entrée "MX", en d'autres termes ajouter un renseignement per- mettant de définir quelle machine gére la message- rie pour un domaine. Le DNS public de ZoneEdit utilise des pages de configuration relativement intuitives et la simple lecture du formulaire vous renseignera sur la maniére de procéder. Allez sur www.zoneedit.com, authentifiez-vous, entrez dans la configuration de votre domaine et utilisez 'onglet ‘Mail Servers. On trouve ici un formulaire : /champ] handle mail [1st] for domain [champ], ce qui donne en francais [champ] gérer les mails en [premier] pour le domaine [champ]. Le premier champ est le nom de votre machine qui gére la messagerie (mail. monsite.com pour une adresse fixe ou votre nom de machine DynDNS en cas d'adresse IP dyna- mique). Le sélecteur central vous permet de définir une préférence si vous spécifiez plusieurs entrées "MX". Ne nous fatiguons pas ici ; de toutes maniéres, en principe, nous n'avons qu'un seul ser- veur. Enfin, le dernier champ vous permet de spéci- fier le domaine dont s'occupe votre machine SMTP. Il peut siagir tout simplement du domaine en cours. Nous ne pousserons pas plus loin, mais sachez qu'une configuration DNS permet bien plus, comme la mise en place de www.titi monsite.com, perso.monsite.com, etc. et pour chaque domaine, il est possible de dési- gner un serveur de mail diffrent. Ceci fait, voila comment les choses vont se passer Une personne, quelque part sur Internet, va vous envoyer un courrier électronique ‘moi@monsite.com. Son client mail va passer le mes- sage & son serveur SMTP (ou celui de son fournis- seur d'accés). Ce dernier va consulter un serveur DNS pour déterminer quelle machine s'occupe de la gestion des messages pour monsite.com, il recevra ‘mail. monsite.com et Vadresse IP correspondante en guise de réponse. Enfin, il pourra contacter votre MTU via le protocole SMTP et lui passer le message. Note : En réalité, sil n'y a pas d’entrée "MX" cor- respondant & un domaine, le MTA va essayer de contacter la machine dont I'IP est associée au domaine lui-méme. Mais prudence est mére de sire- té... Ne loubliez pas. Votre serveur Vous l'aurez compris, il faut que sur votre machine SMTP (mail. monsite.com par exemple) réside un MTA correctement configuré pour gérer les mes- sages. Nous traiterons ici du MTA exim installé par défaut sur la distribution que nous avons choisie comme support depuis le hors série précédent. Si vous utilisez une distribution différente, un package exim existe sans doute, mais il ne sera peut-étre pas utilisé par défaut. Consultez alors la liste des pac- ages pour retirer le MTA actuel et installer exim. La configuration d'exim repose sur un fichier de configuration principal, _habituellement etc/exin/.conf ou /etc/exim/contig. Quelle que soit votre distribution, vous pourrez trouver Tem- placement et le nom du fichier de configuration et vérifier par la méme occasion la présence du MTA nfigure_ file ‘cont # exim -bv im version 3.12 #1 built 03-J pyright (c) Univers: Ici, nous avons done affaire a un exim 3.12 et devons éditer /etc/exim.coné. Afin de conserver une compatibilité avec tous les MUA, mais égale- ment les scripts shell ou Perl, et les utilitaires divers qui envoient des mails, un lien symbolique est créé entre /usr/sbin/exim et /usr/sbin/sendnail Enfin, pour en finir avec la configuration globale du systéme, il faut savoir qu'exim peut fonctionner en standalone en tant que démon, ou étre appelé par le super démon inetd dés qu'une connexion sur le port SMTP (25) arrive. Par défaut, c'est ce dernier mode de fonctionnement qui est utilisé sur une Debian. I! pourrait cependant vous étre utile de choisir le mode démon en cas de charge importante sur le serveur, En effet, le démarrage d'exim par inetd prend un certain temps et le choix du mode démon dans ce cas améliorerait les performances de votre serveur étant donné qu'exim serait déja pré- sent en mémoire et n'aurait qu'a forker. ‘Voyons a présent ce qui se trouve dans le fichier de configuration par défaut. Nous nous pencherons ensuite sur les couples probléme/solution au cas par cas. qualify_donain monsite.com permet d'ajouter le nom de domaine que vous avez. déposé pour les messages envoyés depuis I'héte local. ocal_donains ocalhost :egon:monsite.o spécifie les noms de domaine pour lesquels exim gére le courrier. Dans le cas oi cette configuration dexim doit gérer les messages de plus d'un domai: ne, vous pouvez les spécifier tout en les séparant d'un double-point. Dans le cas ot le nombre de domaines est trés important, plutot que de tous les spécifier ici, il est possible de les stocker dans un fichier de base de données. Pour cela, commencez, par créer un fichier source contenant les noms de tous les domaines : # fichier dosain.ist onsite.con autresite.org Ensuite, utilisez exin_dombuild pour eréer le fichier database dona ins a partir de domain.1 # exin donbuild dona: 3 entries written Dés lors, le fichier conains pourra étre utilisé & la place des mentions des domaines dans le fichier de configuration. Il suffira d'utiliser la directive a suivie du chemin complet vers le fichier fraichement créé: local domains = localhost :dbn; /etc/exin/donains Un grand nombre d'options peuvent étre configu- rées de la sorte dans le fichier de configuration. Das que vous avez. affaire a une liste, vous pouvez, en principe, utiliser un fichier database a la place en utilisant la méme syntaxe. _-donains_include_host = true include_host_literals Accepte respectivement les mails a destination de votre nom d'hote et de votre adresse IP. _accept_relay = localhost Voici un paramétre trés important. Il vous permet de spécifier de quelle machine notre serveur acceptera des messages a envoyer. Ici seul le /ocalhost est auto- risé a demander des envois de mail ou plus exacte- ment, il est le seul & bénéficier du relaying. Votre four- nisseur d'accés, par exemple, autorisera le relaying pour tous ses clients ou, en d'autres termes, pour toutes les adresses IP qui font partie de son réseau, Si votre serveur de courrier électronique fait égale- ment passerelle NAT pour partager votre connexion Internet avec un réseau local, vous pou- vez tout naturellement autoriser les machines du LAN a utiliser votre serveur SMTP pour l'envoi de mails : soit le réseau local 192.168.0.0. Si vous d rez faire la manipulation, vous ajouterez alors iei Vous pouvez, comme ici, spécifier une plage d'adresses IP, mais vous pouvez également définir plusieurs IP ou noms d'hote distincts. Encore une fois, ce qui peut étre défini par une ligne de plu- sieurs éléments peut I'étre a l'aide d'un fichier de base de données, Attention ! Ne mettez JAMAIS un masque comme 0.0.0.0/0, méme si cela vous semble une trés bonne solution pour vous faciliter la maintenance. En effet, vous autoriseriez ainsi n'importe quelle machine a utiliser votre serveur SMTP. En faisant cela, votre serveur serait en open relay et il ne tarde- rait pas & crouler sous la charge tant des personnes peu scrupuleuses sen serviraient pour inonder des utilisateurs de publicité. De plus, il faut savoir qu'un grand nombre de serveurs SMTP vont verifier si votre machine est en open relay. Si cest le cas, votre IP sera automatiquement ajouté dans une base de données mondiale, une liste noire de serveurs dont il ne faut pas accepter de messages. sntp_verify Ceci permet d'ajouter une compatibilité avec la commande VRFY utilisée par certains serveurs SMTP. Autant éviter les problémes et rester compa- tible avec le plus grand nombre. entp_accep nection = Cette ligne permet de définir un nombre maximal dlentrées dans la file d'attente pour une connexion. Le mécanisme des files d'attente sera discuté un peu plus loin dans l'article, freeze_tell_nailnaster Ceci permet diinformer la personne responsable de la maintenance du serveur de mails (vous ?) qu'un message est gelé, Il existe un grand nombre de rai- sons pour lesquelles cela peut arriver, comme par exemple le fait que le SMTP destinataire ne répon- de pas. Dans ce cas précis, d'autres tentatives auront lieu avant l'abandon de la procédure et le retour du message & 'expéditeur. Cependant, un tel probleme n'est pas forcément di une erreur sur I'hote dis- tant et l'administrateur doit étre tenu au courant afin quil corrige un éventuel probléme local, received header_text = "Received: \ {:sender_revhos n\t) sender (from ${sender, ident {from sender_ ved_protocol})} (Bin (Debian)) ved_protocol (with $(recei- (version_nunber} #${compile_num- ber’ nessage_id) received_for {\n\tfor ; Fri, 25 Jan 2 26:34 +0: Received: from denis by egon with local (Exim 3.12 #1 (Debian) ) id 16U3QW-0000n7-00 for ; Fri, 25 Jan 1:17:44 +0100 2002 Ce message a été regu par econ (notre localhost) sur ordre de l'utilisateur denis 11:17. De la, le message est parti et a été ensuite regu par wwa-lefinnois.net & 11:26. Il était destiné a Tuti- lisateur 1efinnois du domaine 1efinnois.net. Enfin, ce message regu par ww. lefinnois .net provenait de 193.252.208.11. Nous pouvons donc suivre le chemin emprunté par le message et, en cas de probléme, vérifier chaque point de passage. Nous allons maintenant aborder les trois points importants du mécanisme de livraison de courrier électronique tel qu'il est prévu dans exim. Le traite- ment du courrier se fait par le biais de-trois pilotes différents : les Transports, les Directors et les routers. Le schéma en figure 1 montre organisation et la répartition des taches entre les différents pilotes. Les Transports Un Transport est un pilote qui a pour tache de transmettre un message d'une file d’attente vers un destinataire. Un Transport dans le fichier de confi- guration est défini par son nom suivi d'un double- point. Les lignes suivantes sont les directives du Transport en question jusqu'a la mention d'une nouvelle definition ou de linstruction enc, L'ordre apparition des Transports n'a aucune importance. Voici les Transports définis dans le fichier de confi- guration par défaut : ery: appendfile nail 0660 node_fail_narrover = false envelope_to_add = true file = /var/spool /nail/{Local_part Le Transport 1ocal_delivery définit la maniére de délivrer un message & un utilisateur local. On utilise le pilote appendfile intégré (built-in) dans exim pour ajouter le message dans le fichier de mail de lutilisateur concerné (/ lisateur)). ool /mail/ [uti- Ce Transport décrit la maniére de traiter un tube (pipe) généré par un fichier de redirection personne (C/. forward) ow un alias (les alias seront vus plus loin dans l'article). addvess_pipe définit par défaut l'utilisation du pilote intégré pipe, et si la redirection génére une sortie sur stdout, le retour du résultat a lexpéditeur. Nous pouvons facilement illustrer ceci en imaginant un utilisateur_ voto ayant placé dans son. forwar< une ligne : "| fusr/bin/script.pl*, tot Cette ligne définit qu'un message arrivant & coto@monsite.com sera "tuyauté" vers le script script.pl et envoyé en paralléle a l'utilisateur voto. Peu importe ici ce que fera script .pl, la chose importante est de savoir qu'en utilisant return_output dans le Transport, tout ce quiafti- chera (sur stdout) le script sera automatiquement renvoyé a lexpéditeur du message original. Ceci peut étre trés utile dans certains cas, pour que l'ex- péditeur puisse connaitre le résultat de sa manipu- lation. En revanche, si le script est, par exemple, un systéme d'archivage ou autre, mieux vaut se passer de revurn_output en le mettant en commentaire (avec un #) et ajouter veturn_fail_outputw ne renvoyant la sortie quen cas de probléme. Soyez trés vigilant en ce qui concerne les scripts et autres programmes que vous allez écrire pour ce genre de chose. II vous faudra faire extrémement attention en ce qui concerne la sécurité et la fiabilité de vos créations. En "tuyautant" un message vers un tel script, vous risquez, en cas d'erreur de concep- tion ou dimplémentation, de perdre des messages ou, pire encore, d'ouvrir des failles de sécurité dans votre systéme, address_file: driver = appendfile Voici un Transport trés simple puisquil est destiné & ajouter le message dans un fichier désigné par un alias ou .forwaré d'un utilisateur, address_éirecton driver = appendfile Ce Transport applique le méme principe que le pré- cédent, a la différence qu’il concerne un répertoire et non un fichier désigné par un alias ou un . £ox~ ward. Dans ce cas, chaque message sera placé dans un fichier spécifique dans le répertoire défini. Il est également possible de demander une organisation de type naildic. Il s'agit d'un format utilisé par certains clients mail pour organiser leurs messages. Pour ce faire, il vous suffira d'ajouter une ligne sup- plémentaire contenant naildir_format. address_repl driver = autoreply Le Transport address_reply est utilisé pour les réponses automatiques dans les procédures de fil- trage de messages. En effet, exim dispose d'un mécanisme permettant d'analyser les différentes caractéristiques d'un message (en-téte, corps, taille, etc.) et de réagir en conséquence. Le mécanisme de rage peut, le cas échéant, étre amené A répondre a Yexpéditeur d'un message afin de I'informer de ce qui se passe (refus de livraison en raison d'une taille trop importante par exemple). ‘ocmail -d ${local_part}* Ce Transport est défini pour le cas oti vous souhai- teriez faire usage de procmail. Cet utilitaire est un MDA (Mail Delivery Agent) quia pour but d'orga- niser, de trier et de "dispatcher" les messages en fonction de plusieurs critéres dans des comptes ou des fichiers différents. Un bon exemple est le cas ot vous vous inscrivez. 4 plusieurs listes de diffusion sous une seule et méme adresse et que vous souhai- tez répartir les messages recus dans différents fichiers en fonction de la liste dont ils proviennent. Si vous installez ce type de mécanisme utilisant procna!l, vous devrez utiliser ce Transport afin de rediriger tous les messages vers le MDA. Sachez cependant qu'exim dispose d'un mécanisme de fil- trage permettant de faire la méme chose et surtout, que vous étes en train de configurer votre propre serveur. En conséquence, vous pouvez a souhait créer des comptes pour chaque liste & laquelle vous vous abonnez. Enfin, voici le dernier Transport défini par défaut. I permet le traitement des redirections et des renvois, de messages via SMTP. La definition des Transports se termine ensuite avec une ligne : end Les Directors Un Director est un pilote chargé de déterminer comment la livraison d'un message doit étre faite. Un Director dirige la livraison et ne concerne que les messages locaux (destinés aux utilisateurs de la machine qui gére les domaines dans Jocal_domains). Comprenez bien qu'un Director ne fait que prendre une décision mais ne livre pas le message lui-méme. I! deésigne un ou plusieurs Transports pour V'application d'une décision. 1_local: prefix = real- driver = localuser transport = local_delivery Cette premiére configuration désigne le Transport & utiliser pour un message réellement local. Entendez par li un message d'un utilisateur local du systéme destination d'un autre utilisateur du méme systé- me. Pour ce type de messages, nous utilisons le Transport \ocai_e1ivery. Vous pouvez dailleurs en faire immédiatement le test en vous envoyant un message sur I'hote qui héberge le serveur SMTP. Dans les journaux diactivité d'exim (/var/1og/exin/mainlog) vous devriez voir appa- raitre quelque chose proche de ceci : 2002-01-28 14:47:43 16vCBN-00006y-00 <= denis@egon Usdenis P=local $=647 id=20020128144743.a423@mon- site.con 2002-01-28 14:47:43 16VC8N-00006y-00 => denis D-localuser T=local_delivery 2002-01-28 14:47:43 16VCBN-00006y-00 Completed On voit clairement qu'exim a regu un message de Tutilisateur denis de Ihéte local (econ) a destina- tion de Genis@egon. Le Director localuser (p=...) a décidé de faire livrer le message en utili- sant local_delivery comme Transport. La men- tion completed. signale que lopération sest parfai- tement bien déroulée. Le code que vous voyez appa- raitre entre l'heure et le message est un identifiant unique permettant de suivre le déroulement de la procédure. Il figurera également dans I'en-téte du message regu par l'utilisateur denis. systen_aliases: Griver = aliasfile file transport = address_file pipe transport = address pipe file = /etc/aliases search type = Lsearch Ce Director stoccupe des alias d'adresses. En temps normal, un utilisateur denis d'une machine rece vra des messages destings & denis u est cependant possible de multiplier les adresses sans multiplier pour autant les comptes utilisateurs sur le systéme. Il suffit de eréer un alias comme coto@nonsite.com et les messapes destinés a cette adresse arriveront également a l'utilisateur Afin de traiter ces alias, nous avons besoin d'un Director spécifique qui lira, ici, le fichier /etc/aiases et y fera une recherche. Sila recherche aboutit, le Director changera le destinataire final. Ensuite, tout dépend de ce qui se trouve dans le fichier d'alias. Sa syntaxe est trés simple : pour un alias d'un nom ¢'utilisateur, il suffit d’ajouter, dans le cas présent, une ligne contenant toto: mo Dans ce cas, systen_aliases passera le relais a localuser qui utilisera 1ocal_deiivery pour livrer le message. 2002. denis@egon cone -B423@non- site.con 2002-01-28 15:14:49 16vCv! D=localus 2002-01-28 15:14:49 16V Mais le fichier d'alias peut parfaitement contenir un nom de fichier ou un pipe vers une application, comme ici ot toto: dnoi a été remplacé par toto: /tmp/totofichier dans le fichier d'alias : 02 -28 15:51:50 16vD8Q-00009E-00 <= denis@egon Usdenis Pelocal $=639 id=20020128155150.a5636non: site.con 2002-01-28 15:51:50 16VD8Q-00009E-00 => /tmp/toto fichier D-system aliases address_file 02-01-28 15: 50 16vD89-00009E-00 Completé Dans ce cas, ce sont les Transport: et address_pipe qui seront utilisés pour la son du message. address_file rocmai. driver = localuser transport = procnail_pipe require files = $(local_part) :+${home) :+5 home} bin/procmail no_verify procnailre:+/usr Voici le Director permettant l'utilisation de mail. Le Transport a utiliser sera procmail_pipe, mais seulement sous certaines conditions. La direc- tive require files définit en effet que plusieurs éléments doivent exister sur le systéme : l'utilisateur, le répertoire privé de Tutilisateur, un fichier .proc- nailre dans ce répertoire et le binaire de proc mail dans /usr/bin/. Si un de ces éléments est absent, le relais sera passé & localuser qui se char- gera de prendre une décision. userforvard: driver = forvardfile file_transport = adiress_file pipe_transport = address reply_transport = address_rep) no_verify check ancestor file = forward nodenask = 002 et Ce Director est chargé de faire appliquer les dé sions tirées du fichier . forward. Les Transports mis en ceuvre sont respectivement address_file, address_pipe et address_reply. Vous voyez, ci- dessous, les logs d'exim pour les trois types de for- warding : /tmp/denisfichier dans le .forvard de denis 2002-01-28 16:07:03 16vBNS-00009W-00 <= denis@egon Usdenis P= 0020128160703 A5814non- site.com 2002-01-28 16:07:03 L6VvDN9-D0009W-00 => /tmp/denisfichier D-userforvard ‘Teaddress_file 2002-01-28 16:07:03 16VDN9-00009W-00 Completed KkunGailleur.com dans le .forward de moi 2002-01-28 16:22:44 16vDcK-0000CK-00 denis P=local $637 i site.com 2002-01-28 16:22:49 16vDcK-0000CK-00 => kkun@ailleur.com R=lookuphost T=reno- te_smtp Hemail.ailleur.com (64.617.56.299] 2002-01-28 16:22:49 16vDcK-0000CK-00 Compl: denistegon 1002128162244 .A755enon- 4 \fnome/noi /script pl dans le .forward de moi 2002-01-28 16:19:36 16VDZ1-0000Bs-00 <= denis#egon jenis P=local $=637 id=20020128161936.A727@non- site.com 2002-01-28 16:19:36 16vD2T-0000Bs-00 ** Phome/noi/script.pl 6VDZT-00008S-00 Usnail Pelocal S=1440 2002-01-28 16:19:36 16VDZT-0000Bs-00 Error ne: sent to denis@egon 2002-01-28 16:19:36 16VDZT-0000Bs-00 Completed 2002-01-28 16:19:36 16VDZI~0000Bx-00 => deni: D=localuser T-local_delivery 2002-01-28 16:19:36 16vDZI-0000Bx-00 Complete: Ce dernier extrait du journal d'activité d'exim parle d'un message d'erreur retourné a lexpéditeur du message. II siagit en réalité de la sortie sur stcc faite par script .p1, mais le script retourne une valeur de sortie supérieure a zéro : This nessage was created autonatically by ma: delivery software A nessage that you sent could not be delivered one or nore of its recipients. The following address(es) failed: noigegon: generated |/hone/noi/script.pl The following text was generated during the del very attempt: ~ | fhome /deni s/s ipt.pl - pouet - This is a copy all the headers. message, inclu: ‘Vous conviendrez avec moi quill faudra prendre de grandes précautions avec ce genre de script, tant au niveau de ce qui est pergu de la part de Vexpéditeur d'un message qu'au niveau des actions du script et de ses permissions. driver = localuser transport = local_delivery end Enfin, ce dernier Director est le fameux localuser largement utilisé. Cest lui qui se chargera de com- manditer la livraison des messages pour les utilisa- teurs locaux. Les hétes virtuels Test possible avec un seul exim de gérer les mails de plusieurs domaines. Nous avons déja vu la partie concernant les entrées DNS ainsi que la directive 1ocal_donains. Imaginons a présent que vous ayez les domaines monsite.com et autres: Les comptes de votre machine SMTP, que nous appellerons egon, sont tous uniques. Il ne peut, en effet, exister qu'un seul compte du méme nom sur un systéme donné. Le probléme est done le suivant : comment différen- cier denie@nonsite.com de denisaautre- site.com ? La réponse se trouve dans les alias. Il suffit de ne eréer aucun compte de ce nom, m: plutét mdenis pour monsite.com et adenis pour autvesite.con. Nous pouvons maintenant utiliser des alias pour rediriger les messages arrivant sur les adresses completes vers les utilisateurs respectif’. Pour cela, nous ne pouvons pas utiliser un fichier dalias unique puisque la redondance poserait éga- Jement probleme ici. Nous allons multiplier les fichiers d'alias autant de fois que nous avons de domaines a gérer. Dans la partie concernant les Directors, nous allons ajouter : virtual: Griversaliasfi domains=dbm; /etc/exim/donains no_nore Le=/etc/exim/Sdonain search_type=search Ce nouveau Director va se servir du fichier de base de données que nous avons utilisé en début d'article. Bien sir, vous pouvez __remplacer bm; /etc/exim/donains par la liste des domaines séparés d'un double-point. Cependant, I'utiisation d'un fichier dim s'avére ici plus souple puisqu'il nous suffit ensuite de le modifier sans avoir 4 tou- cher au fichier de configuration d'exim. Lorsqu'un message arrivera sur l'un des domaines présents dans le fichier dn, la variable $domain sera initiali- sée avec le nom de domaine en question. De ce fait, le fichier d'alias correspondant sera automatique- ment lu dans le but de trouver l'utilisateur adéquat. Les files d'attente Si votre serveur SMTP doit faire face a un gros tra- fic de messagerie, il est possible d'optimiser le fonc- tionnement d'exim. De base, les messages sont déli- vrés immédiatement, ce qui entraine un démarrage dexim par message. En cas de grosse charge, il est plus raisonnable de stocker les messages dans une file d'attente et de les traiter par lot a intervalles réguliers. Vous trouverez, a ce propos, un fichier /eve/cron.é/exin qui définit un démarrage dlexim toutes les 30 minutes sur un systéme Debian, Une option spécifique est utilisée, -c. Elle permet de lancer une vérification des files d'attente auto- matiquement. Nous ne nous étendrons pas longtemps sur la confi- guration des files d'attente, car normalement, votre configuration sur ligne ADSL ou cable ne nécessi- tera pas une utilisation intensive de ce type de mécanisme. Sachez simplement que vous pouvez, forcer la mise en file d'attente de tous les messages en ajoutant cueue_only dans la premire partie du fichier de configuration. De la méme maniére, queue_only_load_ suivi d'une valeur numérique permettra de mettre en file diattente tous les mes- sages si la charge systéme dépasse la valeur donnée. ‘Méme sans files d'attente explicitement configurées, il peut arriver, en cas de probléme qu'un ou plusieurs messages soient placés dans des files. Vous pourrez utiliser, en tant qu'utilisateur root, la commande nai lq pour liter le contenu de cette file d'attente : # mail 87m 1.4K L6VDQL-00009x-00 <> *#* frozen +#* denistegon 8ém 1.5K 16VDSM-0O00AN-00 <> *** frozen *** denis@egon 80m 1.5K 16VDW6-0000Ar-00 <> *** frozen *** denis@egon Nous avons ici trois messages & destination de denis@egon "gelés" dans la file d'attente depuis 87, 84, et 80 minutes. Nous pouvons afficher les infor- mations sur le traitement de ces messages grace leur code : # exin -Wvl L6vDH6-0000ar-0 28 16:16:18 | -P : address.p fi sss of ac fa Nous pouvons en déduire que quelque chose ne fone- tionne pas correctement dans le . forward ou dans le script de l'utilisateur denis. En tant quadministra- teur, nous devons informer l'utilisateur en question et régler le probléme en corrigeant le script ou en élimi- nant tout simplement le . forward de l'utilisateur. Nous avons fait le tour des principales fonetionnali- tés d'exim. Ces informations devraient vous per- mettre de mettre en place votre premier serveur filtrer tes mails Filtrer les mails avec Exim Quelle que soit l'utilisation de votre ou vos adresse(s) email, il est parfois utile de procéder a un tri automatique (voire 4 des épurations massives) des messages afin que vous et vos utilisateurs n’ayez pas a le faire manuellement. Ce filtrage est habituellement fait par l'intermédiaire de procmail qui permet de délivrer les messages dans différentes boites en fonction de divers critéres. Mais ce travail peut étre fait par le MTA (Mail Transfer Agent). U’avantage du filtrage par le MTA est évident. Vous n’avez pas a installer de programmes supplémentaires et surtout, en tant qu’administrateur du serveur SMTP, vous pouvez contréler le contenu de chaque message. Lorsqu'il s‘agit d'une installation réseau regrou- pant des systémes divers, le filtrage de la part des postes clients devient rapidement. difficile gérer. II vous faut connaitre chaque systéme et les configurer en conséquence. Sachant que certains de ces systémes sont particuliérement fragilisés en raison du MUA utilisé, mieux vaut faire le ménage le plus t6t possi messages. Pourquoi filtrer les mails ? I existe plusieurs raisons Iégitimes parmi lesquelles on pourrait citer * Limiter les risques de contamination concernant les plateformes ayant des défenses faibles ou inexis- tantes. Entendez par-la tous les risques liés a la réception et surtout lexécution de scripts sous la forme de fichier VBScript ou de macros pour des applications résidentes sur des systémes faibles. Bien sir, les pigces jointes au format binaire exécu- table entrent également dans cette catégorie et ce, pour toutes les plateformes, y compris GNU/Linux. © Limiter les risques de saturation des systémes de fichiers. En effet, si 'espace disque de la machine oii résident les boites email est physiquement limité, il est préférable de refuser les messages d'un trop grand volume. Cela entre dans les fonctionnalités offertes par le filtrage de messages. © La nécessité de signaler l’état d’un correspondant. On peut par exemple filtrer les messages & destina- tion d'un utilisateur de notre systéme et, en cas @absence de la personne, opter pour un comporte- ment spécifique. * Le catalogage, le tri et la classification des mes- sages. On imagine facilement ce genre de systéme le, et donc das la réception des sur une boite commune, comme par exemple le ser- vice a la clientéle. En fonction de mots clefs prédéfi- nis figurant dans le corps ou I’en-téte du message, nous pouvons replacer les messages dans les comptes spécifiques ou les rediriger vers des desti- nataires aptes & répondre au mieux aux messages en question. La maniére la plus courante de procéder pour ce genre de chose est d’utiliser procmail, mais les MTA sont parfaitement capables d’en faire autant. © La surveillance de la correspondance. II est en effet possible de faire n'importe quoi avec des filtres dun MTA, Ceci inclut des pratiques illégales dans certaines mesures ou certaines conditions. Vous pouvez par exemple dupliquer un message arrivant ou sortant du serveur SMTP et rediriger la copi vers un autre destinataire pour analyse ou archiva- ge. Attention, dans le cas d’une entreprise, veillez a respecter la législation de votre pays en ce qui concerne le respect de I'intimité des correspondants sur le lieu de travail. * Le respect des standards, Vous pouvez, a 'aide un filtre, sélectionner les messages entrants et sor- tants afin d’en vérifier la syntaxe et le formatage, Je pense par exemple aux clients mail qui ont la facheuse tendance d'utiliser le HTML comme s'il s‘agissait d'un standard. Une fois le message repéré, ‘vous pourrez opter pour le comportement qui vous convient comme la redirection vers un autre comp- te, la suppression ou encore la correction du proble- me 4 l'aide d’un utilitaire. C’est également dans cette catégorie de filtres que nous avons choisi de placer les modifications systématiques des messages sortants. II est ainsi possible de concevoir un syste ‘me qui ajoutera une signature a chaque message sans que l'utilisateur n’ait besoin de configurer son client mail pour le faire, Quelle que soit la raison pour laquelle vous désirez filtrer vos mails ou les mails des utilisateurs de votre réseau, les fonctionnalités offertes par exim pour- ront vous satisfaire. Ce MTA posséde en effet des fonctionnalités intégrées de filtrage avancés qui vous permettront sans doute de vous passer d’un utilitaire supplémentaire. Exim La totalité des MTA permettent aux utilisateurs avoir recours a un fichier spécifique de leur réper- toire personnel (-/. forward) leur permettant de procéder au traitement de leurs emails, Il s’agit la en quelque sorte d’un filtrage disponible pour chaque utilisateur, étant donné que par lintermé- diaire de ce fichier, il est possible d’utiliser des utili- taires de tri et de filtrage. Exim permet d’étendre et de déplacer vers l'admi nistrateur les fonctionnalités de filtrage. Ceci a pour avantage de centraliser la gestion du filtrage dans un seul et méme fichier. Ceci n’enléve en rien la pos- sibilité aux utilisateurs de faire usage du . forward, mais les régles de filtrage d’exim s’appliqueront, avant toute chose. Il est également important de préciser que chaque utilisateur peut, dans son forward définir des régles de filtrage d’exim, Nous l'avons déja dit, les régles de filtrage sont pla cées dans un fichier séparé. Celui-ci doit IMPERA- TIVEMENT débuter la une ligne suivante. Cest également valable pour le . forward de chaque uti- lisateur souhaitant utiliser les régles de filtrage dexim # Exim filter Ce fichier sera ensuite référencé dans le fichier de configuration principal d’exim avec la directive : message_filter = /chemin/fichier_des_filtres Note : N’ajoutez pas cette ligne dans le fichier de configuration d’un serveur SMTP en production (en cours de fonetionnement). En effet, a chaque transaction, ce fichier sera parcouru dans le but d'appliquer les régles de filtrage. Si vous sauvegar- dez un fichier comportant des erreurs de syntaxe ou de mauvaises définitions de filtres, vous irez au- devant de gros problémes. Nous verrons plus loin comment tester les filtres avant de les appliquer & ensemble des messages. Syntaxe du fichier Les régles de filtrage sont définies dans le fichier que vous allez désigner sous la forme de conditions ££, Voici un premier exemple simple : og Message de $sender_address co! finish endif Ce filtre est sans doute le premier qui vous sera réellement utile si vous administrez un réseau com- prenant des machines Windows. Il permet en effet de détecter la présence de la chaine de caractéres «.vbs» dans le corps des messages. La condition porte done sur un objet smessage_body qui est le corps du message. Nous testons s'il contient (contains) la chaine recherchée et ajoutons (anc) dans la condition qu’il ne doit pas s’agir d’un mes- sage d’erreur (not error_message). Suite a la condition i, nous commengons la por- tée avec la directive tnen, puis nous détaillons la maniére de réagir si la condition est vérifiée. Ici nous nous contenterons de notifier la verification de la condition dans un fichier journal. Nous spé& fions donc le fichier en question avec ety écrivons l'information avec Logwrite. Note : Prenez garde aux permissions sur les fichiers lorsque vous utilisez la directive L’exemple donne ici est destiné a étre placé dans le fichier de définition des filtres globaux. exim possé- de les permissions nécessaires pour 'écriture dans /var/loc, ce qui n’est pas le cas des utilisateurs «normaux». En conséquence, ce type de filtre pro- voquera une erreur s'il est placé dans le . forwara un utilisateur, car celui-ci ne peut pas écrire dans /vax/1og. Dans ce cas, il vous faudra désigner de manigre absolue le chemin vers un répertoire et un fichier dont les permissions correspondent (/nome/moi /exim_filterlog pour le .forwara de utilisateur noi par exemple), Avant de procéder & la mise en place de ce filtre, il convient de s’assurer de son bon fonctionnement. exim permet par T'intermédiaire d’une option ->¢ de procéder aux tests adéquats. Commencez par composer un message avec votre MUA préféré et enregistrez-le dans un fichier message_cest. Utilisez ensuite la ligne de commande suivante pour vous assurer du bon fonctionnement du filtre : noiGegon:-§ /usr/sbin/exin -v -bf .forward.test < message_test Sender fron *Fron* line: lefinnois¢monsite.con Testing Exin filter file .forward Sub-condition is true: $message_body contains .vbs Sub-condition is true: not error message Condition is true: $message body contains .vbs and not error message logfile /hone/noi/exin_filterlog Logurite *2002-02-05 10:09:37 Message de lefinnoisénonsite.con correspond au filtre !\n* ‘nish er processing ended: Filtering did not set up a significant delivery. Normal delivery will occur. delivery) et que le mail en question sera traité nor- malement (Normal delivery will occur). Notez qu'il existe deux variantes, Poption -»= qui ‘applique aux tests de filtre dutilisateur (ceux qui figureront dans le . forward) et ~bF pour les filtres systéme sappliquant l'ensemble des messages. Ceci est important dans le sens oii certaines variables (comme Srecipicents) ne sont dispo- nibles qu’avec les filtres systémes. Dans le cas d’un message ne vérifiant pas les condi- tions de filtrage, le test nous le signalerait avec les lignes suivantes : ng Exim filter forward Sub-condition is false: Snessage_body contains svbs Condit: and ni ise: $message_body contains nessage Réle des filtres sur le routage Le bref test que nous venons d’effectuer nous per- met de voir un point important dans la rédaction de filtres exim. Certaines actions peuvent étre considé- rées comme un routage de mail. En d'autres termes, les significant iveries impliquent qu’exim ne continuera pas le traitement normal du message. Nous venons de le voir avec le précédent filtre, la notification dans un journal d’activité n'est pas un significant delivery. Ce n'est pas le cas pour toutes les directives définissant des actions dans les régles de filtrage. Selon action définie, un message peut étre considéré ou non comme traité, Les ae: Je vous ferai grice du contenu du message. Sachez simplement qu’il contenait un fichier joint utilisant Vextension «.vbs». Par cette ligne de commande, exim traitera le mail contenu dans nessage_test actions suivantes n'influencent pas le traitement normal des mails aprés le filtrage et appliquera les filtres définis dans forward. test. Il teste alors les conditions que nous avons spécifiées (trois premiéres lignes en gras). Les conditions sont ici vérifiées et les actions définies dans le fichier de filtres sont appliquées. ‘Nous trouverons dans le fichier exim_£ilterlog la ligne suivante 2002-02-05 10:08:01 Message de denis@egon corres- pond au filtre | Les deux derniéres lignes de la sortie du test du filtre sont importantes. exim nous signale que le filtre ne définit pas d’action qui influe sur le routage du mes- sage (Filtering did not set up a significant © ada qui permet d’incrémenter un compteur ; * logfile qui définit un fichier log ; ® logweice qui ajoute une ou plusieurs ligne(s) au log; aii qui permet l’envoi d’une réponse automa- tique ; oth sh qui signale la fin du traitement de filtrage. En revanche, celles-ci sont considérées comme étant_ un traitement de mail et aucun autre routage ne sera effectué par le systéme de traitement des messages : ver qui permet de «forwarder» le mail & une autre adresse ; © save qui permet d’enregistrer/ajouter le message dans un fichier passé en paramétre ® pipe qui permet de «tuyauter» le message vers un script ou une application quelconque pour un trai- tement plus complexe. Bien sir, tout cela n'est pas rigide et vous pouvez, utiliser une directive d'action significative tout en Jaissant la main a exim pour la suite des opération, Il est done possible d’utiliser de1iver, save ou pipe sans interrompre le processus normal de livraison/routage. Voyons un exemple concret en réutilisant le message précédent. Soit le filtre : y -bt .forvard.test? < message_test from *Fron’ line: lefin r file .forvard.te: $message body contains .vbs Sub-condition is true: not error message Condition is true: ¢message body contains .vbs and not error_message Deliver message to: denistegon Filter processing endec Filtering set up at least one significant delivery or other action. Wo other deliveries will occur. jistnonsite.com Notre directive deiiver fait effectivement son tra- vail et exim nous signale qu'il s'agit d'une action significative (deux derniéres lignes). Si nous souh: tons livrer une copie du message vérifiant les condi tions 4 denis tout en laissant le systéme de routage faire son office normalement, nous devons modifier le filtre et ajouter une directive indiquant a exim que Vaction de1iver n'est pas significative # Exin filter if Smessage_body contains *.vbs* and not error_message then x "denis ” ains .vbs and or_message Unseen deliver message to: deniste Filter processing ended: ing did not set up a significént Normal delivery will occur. Autres sources de filtrage Pour I’heure, nos deux exemples concernent le méme critére : la présence d’une chaine dans le corps du message. Pour mettre en ceuvre toutes les conditions de filtrage que nous avons exposées en début d'article, nous pouvons faire, bien sir, usage de nombreuses autres sources d'information pour le filtrage. Il est possible de définir des conditions de test sur tous les éléments de l’en-téte d’un message en utilisant une variable composée de sheader_ suivie du nom de la ligne dans Ven-téte. Ces noms de lignes correspondent a celles définies dans la RFC 822. On y trouvera, par exemple Fron, 7, Subject... 11 est ainsi possible de filtrer les messages en fonc- tion de chaines présentes (contains) ou non (does © contains) dans différentes parties de Ien-téte, Voici un exemple de filtre vérifiant la présence de la chaine «lefinnois» dans le champ Fron des mes- sages # Bxim filter if Sheader_From contains ‘then logfile /hone/noi /ex: logurite *Stod_log me $sender_address correspond au finish endif Note : Attention, il s’agit bien d'une vérification portant sur une chaine de caractéres présente dans un champ de len-téte et non d’un nom d’utilisateur local. Ce genre de filtre s‘avére utile dans le cas of vous vous abonnez a différentes listes de diffusion et que vous souhaitez placer les différents messages dans des boites différentes (avec la directive save) ou les rerouter vers d'autres comptes utilisateurs (avec deliver). Si le nombre de listes de diffusion est grand, le fichier de définition des filtres devient rapidement trés gros et difficile a gérer. On utilisera alors un autre systéme pour procéder au tri. Nous eréons dans un premier temps un fichier 1 lefinnois@lefinnois.né kkun@ailleur.con: kkundautre@site.con: iste=oui boit ‘Nous pouvons ensuite composer un filtre en consé- quence : # xin if $ (Lookup ($s ‘ess: Liste)1search{/home/noi /1 iste} (Svalue}} i then logfile /home/moi/exin_filterlog logwrite ‘Le message de Ssender_address ira dans $ (lookup ($sender_address:boite) lsearch{ /home/moi /1 iste) ($value) }!* endif La condition de départ (if) recherche (1search) une ligne correspondant a l'adresse de Pexpéditeur dans le fichier 1isce puis extrait la valeur associée 4 Liste pour le test. Si la correspondance avec la chaine «oui» est vérifiée, nous appliquons les actions prévues par le filtre. Nous faisons ici une simple notification dans un journal, mais il est clair qu’en temps normal nous utiliserions save ou deliver. Dans l'argument de la directive Jogwrite, nous réutilisons le fichier 1iste mais, cette fois, pour trouver et extraire la chaine associée a poite. La sortie du test avec option bf vous ‘montre le résultat de expansion des variables : -§ Jusr/sbin/exim -v -bf < message_test Sender from “Fron” line: Testing iter file Condition is true: $( lookup {S$sender_address: liste} Isearch' iste) (Svalue)} is oui Logfile /home/moi /exim_filterlog Logwrite “Le message de lefinnois@lefinnois.net ira dans listel!\n" Filter processing ended: iltering did not set up a significant delivery, forward, hhome/moi /1 Normal delivery will occur. La directive 1ookup respecte ici la syntaxe suivante S{lookup(clef} type_de_recherche (fichier) {$value} Pour résumer, le filtre que nous venons de compo- ser commence par faire une recherche de l’expedi- teur dans le fichier 1isce. S'il trouve une corres- pondance, il vérifiera que nous considérons les mes- sages de cet expéditeur comme provenant d'une liste de diffusion. Enfin, nous faisons une nouvelle recherche dans le fichier pour connaitre le nom de la boite ou du destinataire a qui transférer le messa- ge. II ne nous reste plus, ensuite, qu’a remplir le fichier 1iste avec les adresses d’expéditeurs, la ‘mention informant qu’il faut les gérer comme des mails d'une liste de diffusion, et la boite 4 utiliser pour ’archivage. Informer l'expéditeur Filtrer des messages conduit parfois & en refuser un certain nombre car ils comportent des éléments indésirables. Eliminer un message sans en informer Vexpéditeur (et peut-étre méme le destinataire) pro- voque souvent davantage de problémes que de solu- tions. L'expéditeur pourrait en effet s‘obstiner dans ses tentatives et le destinataire, s'il est local, pour- rait parfaitement «vous tomber dessus», vous reprochant de ne pas recevoir LE mail trés impor- tant qu'il attend depuis des semaines (en cas de pro- bléme, le mail non regu est toujours le plus impor- tant et le plus attendu). Pour informer un expéditeur d’un probleme lié au filtrage de son message, vous pouvez utiliser la directive maii. Cette directive permet de renvoyer un message 4 l’expéditeur ou a toute autre person- ne, Tous les éléments courants d’un message peu- vent étres utilisés (ro, cc, bee, from, subject, text, replay_to) sous la forme : mail © notre ligne d’authentification AUTH PLAIN [login et mot de passe formaté en base 64] ; enfin, la réponse du serveur confirmant le succ de Pauthentification. Ce mécanisme d’authentification est normalement supporté par la plupart des applications mails ‘gérant directement les connexions SMTP. C’est par exemple le cas de Netscape Messenger. Bien sii, il existe toujours des applications réfractaires aux standards d'usage et aux RFC courantes. C’est le cas par exemple d’un client mail largement utilisé sur la plateforme Windows : Outlook Express. Ce client ne reconnait pas l'authentification RFC 2595 et utilise en lieu et place un mécanisme oii le serveur doit demander sous la forme d'une invite Username: et Password: les éléments d’authentifica- tion. Si certains de vos utilisateurs ont fait le choix @'utiliser ce client mail, vous devrez configurer exim de maniére a ce qu'il devienne compatible : ixed_login: driver = plainte public_nane = LOGIN server_pronpts = User Name : server_condition = \ $(if and {(eq{$1} {ph10}} {eq{$2) {secret }})} {yes} {no}} server_set_id = $1 Password Ceci est I’équivatent de la configuration précédente, mais utilisant le mécanisme d’authentification Login. I est, bien sir, possible de faire cohabiter les deux systémes d’authentification comme le montre Te test avec telnet + Connected to egon. Escape character is ‘*]'. 220 egon ESMTP Exim 3.12 17:15:59 +0100 BLO morgane 250-egon Hello denis at morgane (192.168.0.10 250-S12E 250-PIPELINING 250-AUTH PLAIN LOGIN 250 HELP aur Losrm 334 viicizoril ‘oGgxMA== 334 UGPzc34venQ= eavjenv0 235 Authentication succeeded urr 221 egon closing connection nection closed by fore: Tue, 05 Feb 2002 host. Comme précédemment, les lignes en gras signalent les informations importantes : Le serveur nous informe qu'il dispose des méca- nismes d’authentification PLAIN et LOGIN. © Nous choisissons ’authentification par login. *Le serveur nous demande notre Username: (en base 64). * Nous lui répondons “ph10” toujours en base 64. *Tldemande le mot de passe correspondant. * Nous nous authentifions en lui répondant “secret” en base 64. + Et Pauthentification réussit ! Attention : Les deux mécanismes d’authentification que nous venons de décrire ne représentent qu’une solution pour éviter Open Relay avec des clients non sédentaires. II ne s’agit en aucun cas d’un systé- me permettant d’ajouter une sécurité dans les tran- sactions entre client et serveur. Ce n'est d’ailleurs pas le but de l'authentification. L’encodage en base 64 nest pas un chiffrement des informations d’au- thentification. Un utilisateur “écoutant” le réseau pourra parfaitement reproduire le dialogue entre client et serveur. Ne vous repliez done pas derriére ce genre de mécanisme en guise de sécurisation du ser- veur. Si vous souhaitez réellement sécuriser les tran- sactions, utilisez un tunnel (voir article sur stunnel). Quitte & vous lasser, disons-le encore une fois : lais- ser un systéme en Open Relay est trés dangereux. Non seulement n'importe qui peut utiliser votre ser- veur SMTP, mais il faut également savoir qu'un cer- tain nombre de serveurs SMTP & qui vous ou vos utilisateurs enverront des messages, testeront votre configuration. Si vous étes en Open Relay, il y a de fortes chances que vous soyez placé sur une liste noire de serveurs dont il ne faut rien accepter. Ce dernier avertissement est occasion d’introduire le prochain chapitre de article : les Realtime Blackhole Lists. Les Realtime Blackhole Lists Les Realtime Blackhole Lists ou Realtime Blocking Lists, ou encore plus généralement appelée RBL sont des serveurs référengant les adresses des serveurs connus pour spammer des utilisateurs a travers le monde. Ces serveurs sont enregistrés dans un serveur DNS que votre serveur SMTP peut consulter lors- qu'il regoit une connexion externe. S'il existe une entrée correspondante sur le serveur DNS du RBL, le ‘message pourra étre rejeté (en fonction de ce que vous aurez configuré). La liste des serveurs est réguliére- ment mise & jour et compltée via des réclamations dutilisateurs spammés. Votre fournisseur d’accés & Internet dispose sans doute d'une adresse abuse@... permettant de signa- ler le comportement outrageusement/sauvagement commercial de spammeurs. Si le ou les administra- teur(s) chez votre fournisseur d'accés sont compé- tents et soucieux du bien-étre de leur client, ils feront sans doute les démarches adéquates. Dans le cas contraire, vous pourrez contacter directement les responsables de la RBL que vous utilisez. Le plus connu et le plus utilisé des systémes anti- spam de ce type est le MAPS RBL (Mail Abuse Prevention System Realtime Blackhole List). 11 exis- te d’ailleurs des lignes prédéfinies (en commentaire) dans le fichier de configuration par défaut d'exim : xbl_donains = rbl.naps.vix.com xbl_reject recipients rbl_varn header = true Le simple fait de “décommenter” ces trois lignes dans le fichier de configuration aura pour effet de rejeter systématiquement tous les messages en pro- venance d’adresses IP présentes dans la RBL MAPS. Nous pouvons également ajouter quelques paramétres utiles comme recipients _reject_except postmaster@monsite.com qui définira une adresse acceptant les messages provenant d’un serveur sur la liste noire. Ceci permettra & 'administrateur de Ja machine prise en faute de s'informer sur les rai- sons du rejet. ORBL ORBL signifie Open Relay Black List. L'utilisation de ce type de liste est une technique bien plus violente qu’une simple RBL. Ici, ce sont tous les serveurs SMTP en Open Relay qui seront sur la liste noire. La encore, une ORBL est une liste réguligrement tenue a jour et regroupant des adresses IP et des noms de machine étant SMTP en Open Relay. Accepter ou non de recevoir des messages en fonc- tion des entrées dans une telle base est une méthode brutale consistant refuser tout message provenant d'un serveur SMTP, méme dans le cas ou il n'a jamais servi a envoyer du spam. Dans la plupart des cas, aucune différence n'est faite entre les gros pro- viders Internet et de simples machines d'entreprises ou de particuliers. Il y a moins d’un an, le principal fournisseur frangais (Wanadoo) s'est vu “black listé” de la sorte car un de ses serveurs était en Open Relay. Les serveurs SMTP faisant usage d'une telle liste refu- saient donc systématiquement tous les messages en provenance du principal fournisseur d'accés frangais. Le choix dutiliser ou non une tele liste est difficile car, {utter contre te Spam d'un cdté, vous vous protégez du mieux possible contre les spammeurs, mais d'un autre, vous risquez de péna- liser les expéditeurs “normaux” Une demiére solution du méme tenant est dutiliser via un filtre un script vérifiant si le serveur d’oit provient le message est en Open Relay. Ceci est rela- tivement facile a faire puisque, manuellement, un simple celnet suffit WAIL FROM: denis 550 relaying to prohibited by administrator guir Comme ici, une connexion telnet sur le port SMTP (25) d'un serveur of nous tentons de nous envoyer un mail doit conduire a une erreur 550 : un refus de relais. Si la derniére commande (RCPT TO: ...) retourne un 250, le serveur est en Open Relay, et done potentiellement capable d’étre utilisé libre- ‘ment par un spammeur, Terminons en signalant qu’une ORBL se configure de la méme maniére qu'une RBL dans exim. Il vous sulfira d'utiiser les paramétres donnés par le serveur que vous souhaitez utiliser. Vous le voyez, lutter contre Ie spam nest pas forcément facile. Il est trés malheu- reux que ce genre de pratiques commerciales existe, mais nous n'y pouvons rien. Il y a fort & parier que cela n’ira qu’en s‘ageravant car de plus en plus de per- sonnes se connectent chaque jour a Internet, venant ainsi grossir la liste des victimes des spammeurs.. S Création d'une liste de diffusion Création et gestion d’une liste de diffusion Lorsque I’on travaille a plusieurs sur un projet ou que l'on partage simplement les mémes gots dans certains domaines, il est agréable de pouvoir partager des informations avec les autres membres du groupe. Internet est sans le moindre doute le média le plus pratique pour cela. Reste ensuite choisir la méthode de communication la plus efficace. Internet est un lieu d’échange par définition. Des personnes peuvent ainsi partager des connaissances, des opinions et des informations trés rapidement. Dans ce genre de situation, le Web offre quelques fonetionnalités intéressantes via la mise en ceuvre de forums. Il existe également IRC (Internet Relay Chat), davantage axé vers la communication en direct. Enfin, il y a le classique courrier électronique. Une liste de diffusion est, en quelque sorte, une exten- sion de ce dernier canal de communication, & la gran- de différence qu’il existe une adresse email correspon- dant & ensemble des membres du groupe. Une version trés basique d’une liste de diffusion est tout simplement un alias pointant vers une liste de noms dutilisateurs : # fichier /etc/al sync: root ganes: root a liste: denis, moi, master, lef Ici, si un expéditeur adresse un message a liste@monsite.com, les quatre utilisateurs listés rece- vront leur exemplaire du message. Malheu- reusement, méme si cela peut paraitre suffisant pour un petit groupe de personnes, ce n'est pas le cas. Un grand nombre de fonctionnalités néces- saires 4 la mise en place d’une veritable liste de dif- fusion sont absentes. Nous ne gérons pas, par exemple, 'identité de lexpéditeur d’un message. Avec une liste de diffusion, seuls les utilisateurs adhérant a la liste regoivent et surtout émettent des messages a destination de la liste. De plus, des mécanismes d’inscription doivent étre mis en place dans le cas d'une liste ouverte au public. Un simple «bricolage» a aide d’alias et de filtres n'est done pas suffisant pour une véritable liste de diffusion. Il vous faudra faire appel a un gestion- naire spécifique. I! en existe beaucoup, et les trois plus connus sont sans doute listar, mailman et Majordomo, Ce dernier, n'est ailleurs pas intégré dans les packages Debian en raison de la licence spécifique interdisant I'intégration de code Majordomo dans certaines applications. Nous allons étudier chacun de ces logiciels en détail. Listar Ce premier applicatif de gestion de listes de diffu- nest réputé pour sa modularité. Il s‘installera trés facilement l'aide d’un simple root@egon:-# apt-get install Listar Reading Package Lis Building Dependency ‘The following NEW packages will be installed: Lister 0 packages upgraded, 1 nevly installed, renove and 46 not upgraded Need to get 0B/301K8 of archives 720kB will be used. ‘Sélection du paquet éselectionné, cture de 1a base ipertoires déja Dépaquetage de Listar_0.129a. Paramétrage de * Upgrading = Moving £11 + puild 7 upg: to After unpi If you are upgrading and have virtual listar hosts set up, you will want su listar -c ‘/usr ~cfg-file -upgrade’ Listar is now installed on your sy it is not yet ready for ib/listar/listar -c vhos sm. However, use. Eefore using Listar, sone listar configure you will need to modify files in /etc/listar, add things to your fetc/aliases file, and set up a mailing list. usr/share/doc he Comme d’habitude, a5t-cet fait son travail et ins- talle les éléments nécessaires (binaires, comptes lis- tar, fichiers et répertoires de configuration et de cache). A ce point de installation, listar est prét & tre utilisé, Mais il vous faut maintenant eréer votre premiére liste de diffusion : root@egon:~# /usr/lib/listar/listar -nevlist maliste Creating new list ‘maliste’ List adnin e-mail: postaasterduonsite,com Wr: ig file. done. Creating default user file... done. Sending aliases for sendnail/Exim/Postfix/2mailer to stdout # Aliases for ‘maliste’ mailing list. 2 "| fusr/1ib/listar/listar maliste-request: "| /usr/1ib/1: maliste" maliste-repost: "| /usr/1ib/listar/listar maliste" maliste-admin aiming maliste" maliste-noderator: moderators nalist maliste-bounce: "| /usr/lib/listar/listar -bounce maliste" maliste-owner: postmaster@nonsite.com "|/usr/1ib/Listar/Listar "|/usr/1ib/listar/listar Cette commande va eréer tous les éléments de configuration pour la liste maliste. Elle affiche également un certain nombre d’alias permettant de <’ command to get more inforna- tion about a specific list. Si vous recevez un message du démon MTA, c’est mauvais signe ! Vous avez di rater quelque chose dans la procédure d’installation ou les permissions ne sont pas correctes. Si vous recevez bien le messa- ge de majordomo, tout est correctement installé et vous étes prét pour la prochaine étape : créer votre liste de diffusion. Tout comme pour la procédure d'installation de majordomo, la création dune liste se fait en plu- sieurs étapes, comme précisé dans la documentation officielle : 1) Passez sous Pidentité de l'utilisateur majorcom avec su majordom. 2) Placez-vous dans le sous-répertoire lists du répertoire d’installation de majordomo (/usr/local/majordomo dans notre exemple) et créez un fichier vide du nom de la liste & créer: touch lilist chmod 664 lilist 3) Créez un fichier d'information sur la liste, avec votre éditeur de texte préféré, sous le nom de la liste etunsuffixe .info: echo lilist. info ed chmod 664 Lilist une liste de test pour Linuxllag* 4) Editez le fichier des alias de majordomo pour y ajouter les alias nécessaires & la nouvelle liste. Un certain nombre d'alias pour une liste test existe déja. Vous pouvez vous servir de ces entrées en guise d’exemple. Vous devez définir quatre alias au minimum : © Lilist, qui est la liste elle-méme ; * ouner-1itist, qui est adresse du propristaire de la liste (il recevra une copie des messages) : * lilist-request, qui est ’adresse recevant les directives d'administration (adhésion, informations, ete); * 1ilist-approval, qui est l'adresse du modéra- teur de la liste (si besoin). Un dernier alias est enfin ajouté afin que majordo- ‘mo puisse intercepter les commandes dans les mes- sages de la liste : il s'agit de 1i1ist-1ist. On défi- nit alors les alias suivant : li include: /usr/Local /majordono/lists/lilis owner-Lilii master ilist-request: _*| /ust/local/majordomo/ wrapper request-answer lilist' lilist-approval: master Ceci est la configuration la plus simple. L’utilisateur master est le propriétaire et 'administrateur de la liste. L’adresse de la liste de diffusion est lilist@monsite.com et les requétes/directives sont & envoyer sur lilist-request@monsite.com. Plus généra- lement, on fait usage du vesena du wrapper major- domo pour traiter les directives dans les messages Ce qui nous donne : lilist: */usr/ local /majordomo/ wrapper resend -1 lil st* rc uusr/local najordono/1ists/1i1 owner-Lili Lilist-request: request-answer Lilist-approval: mast * L/usr/ local /majordono/wrapper master Ici, adresse de la liste est toujours lilis(@mon- site.com, mais nous faisons transiter les messages par le wrapper majordono avant de les renvoyer vers liliste-list, qui est la véritable adresse de la liste, Le reste des alias est identique. 6) Avant de mettre en route la liste, assurez-vous une derniére fois que les fichiers utilisés appartien- nent bien a l'utilisateur majordom, que les fichiers aient des permissions en 664 (-r-rw-r-) et les répertoires en 775 (drwxewe-). 7) Enfin, adressez un mail 4 majordomo@mon- site.com contenant dans le corps du message config lilist lilist.adnin Si tout fonctionne correctement, majordomo devrait répondre ce message par un bref descriptif du fichier de configuration suivi de ce dernier. Dans le méme temps, un fichier de configuration /usr /local /majordono/1is config aura été créé. Vous pourrez ensuite, & souhait, le modifier en respectant la syntaxe décrite dans le message de réponse de Majordomo. Ce fichier est lar- gement commenté et ne devrait pas poser de proble- ‘me. Les derniers tests consisteront a vous inscrire a la nouvelle liste en utilisant /list-request@monsite.com. Nous arrivons au terme de cet article. En guise de conclusion et de résumé, je dirais que Listar est pa faitement adapté pour une petite configuration avec des besoins réduits. Majordomo, pour sa part, est trés puissant, mais la configuration et la création manuelle des listes est une chose qui en rebutera plus d’un. Sans oublier le probléme de sécurité inhérent & la conception de majordomo, qui reste un élément dans le choix d’un gestionnaire de liste, tout comme le probléme de licence, Enfin, Mailman semble le plus adapté et le plus convivial des ges- tionnaires ; il est largement utilisé (projet GNOME, Samba, XFree86, Freshmeat, RedHat, etc.) et, ne Youblions pas, c’est un véritable projet GNU. Si vous disposez d'un serveur HTTP ou que vous pouvez facilement en installer un, la question semble réglée. Sachez également que si l’interface Web est importante pour vous. des projets collaté- raux a Listar et Majordomo développent ce type Coutil. Installer un serveur POP3 et IMAP Disposer d'un serveur SMTP fonctionnel et parfaitement configuré est une chose trés intéressante. Si votre environnement réseau est 100% Unix, un MTA sur chaque machine permettra chaque utilisateur de recevoir ses messages en temps réel. Le serveur SMTP principal renvoyant directement les messages aux différents hétes du réseau. Malheureusement, tout le monde n’utilise pas un systéme Unix, il faut donc utiliser une autre solution logicielle. Si nous prenons le cas de votre fournisseur d’accés Internet, il est fort peu probable qu'il route directe- ment les emails qui vous sont destinés vers votre machine. I] vous faut aller les chercher avec votre MUA (s'il le permet) ou avec un MDA (comme procmail ou feichmail). Le protocole utilisé est tota- Jement différent, y compris dans le principe de fonc- tionnement. En effet, si un serveur SMTP contacte un autre serveur, la récupération de mails se fait & la demande du client. Celui-ci se connecte au serveur, s‘authentifie et télécharge les messages regus par le serveur SMTP a son attention. Les deux protocoles les plus utilisés sont POP3 (Post Office Protocol version 3) et IMAP (Internet Message Access Protocol), couverts respectivement par les RFC 1939 et 2060/2061. Notez que ces pro- tocoles utilisent une communication en clair sur le réseau, ce qui pose quelques problémes de sécurité quant a I’écoute du réseau par une personne malin- tentionnée. Vous devrez utiliser un tunnel si vous souhaitez sécuriser la communication entre client et serveur (voir l'article sur stunnel). POP3 Le Post Office Protocol version 3 est sans doute le plus largement utilisé des protocoles. Il est supporté par la totalité des MUA quel que soit le systéme exploitation concerné. Liinstallation d’un serveur POP3 est vraiment une chose aisée puisqu’il vous suffira d’installer le package qpopper pour le mettre en @uvre sans aucune configuration : 5 a8 qpopper nvest pas un démon fonctionnant en per- manence, celui-ci est lancé uniquement lors d’une connexion sur le port 110. C’est le super-démon inetd qui se chargera du lancement de gpopper. Vous trouverez & ce propos une ligne dans le fichier ‘etc/inetd.cont Yous pourrez done immédiatement configurer vos MUA pour qu'ils utilisent votre serveur POP3. Les utilisateurs feront usage de leur identifiant sur votre systéme et du mot de passe correspondant. Notez bien que si un alias de moi vers machin est defini sur le serveur SMTP et que l'utilisateur posséde machin@monsite.com comme adresse email, il devra utiliser son veritable nom de compte : moi. En tant qu’administrateur, vous serez sans doute obligé de faire face certaines demandes ou pro- blemes de configuration de la part des utilisateurs du serveur POP3. Il vous sera done utile de vérifier le bon fonctionnement du serveur pour certains comptes. Il est clair que reconfigurer votre MUA ou MDA pour ces tests serait fastidieux. Voila pour- quoi vous devez connaitre un minimum de com- mandes POP3 Vous utiliserez ces commandes en faisant un net sure port 110 du serveur. Voici un exemple Nous avons utilisé ici le jeu de commandes suivant (dans ordre) : suse suivi d’un nom d’utilisateur du systéme. Nous nous identifions auprés du serveur POP3. + Pass suivi du mot de passe correspondant au compte précédemment spécifié. Nous nous authen- tifions. “nist nous permet de lister les messages dispo- nibles pour ce compte. Les informations retournées sont un numéro de message et une taille en octets. +neme suivi d'un numéro de message nous permet 'afficher le message en question. POPB/IMAP pete suivi d’un numéro de message permet de sup- primer un message du serveur. + our? puisqu’il faut bien partir un jour :) Une commande POP3 trés intéressante est TOP sui- vie d'un numéro de message et d’un nombre de lignes. Elle permet de récupérer l'en-téte du message uniquement, plus le nombre de lignes du corps du message & afficher en plus. On utilisera habituelle- ment la syntaxe 70? num_message 0 pour ne récu- pérer que l'en-téte. Ceci est trés utile dans le cas ot un utilisateur ne souhaite pas récupérer un message et demande 'administrateur de le supprimer du serveur. Bien sir, ceci peut étre fait également par Yutilisateur en question mais peu connaissent les commandes POP3. IMAP L'Internet Message Access Protocol est de plus en plus utilisé et remplace doucement POP3. Liinstallation d’un serveur IMAP est aussi simple sur la Debian servant de support au magazine que qpopper. Un simple apt-get install imap instal- lera un serveur IMAP qui sera appelé par inetd, & instar de qpopper : Le serveur IMAP attendra les connexions sur le port 143. A 1a différence du protocole POP3, IMAP permet une gestion plus avancée et plus souple des messages. POP3 ne stocke que les nouveaux mes- sages et se limite a la fourniture de fonctionnalités basiques. IMAP, pour sa part, permet des choses comme le stockage permanent (méme aprés sup- pression d’un message), la recherche ou encore I’ac- és & plusieurs comptes dans une méme transaction. IMAP est un choix pertinent si votre machine est un serveur de courrier pour beaucoup d’utilisateurs. Le choix entre IMAP et POP3 doit étre guidé par un souci de facilité, Installer et configurer un ser- veur IMAP n’est véritablement utile qu’avec de gros serveurs. Dans le cadre de ce magazine, T’installa- tion concerne surtout une installation personnelle et il est trés peu probable que vous ayez a utiliser IMAP. Voila pourquoi nous ne détaillerons pas plus loin installation du serveur. Référez-vous directe- ment aux documentations dans /usr /doc/inap pour modifier la configuration si celle par défaut ne ‘vous convient pas. Proftpd : votre serveur FTP Lorsque vous souhaitez échanger des fichiers avec plusieurs utilisateurs ou simplement mettre des archives a la disposition des visiteurs de votre ou vos site(s), la meilleure archives via HTPP et I'intéressante fonctionnalité de fancy indexing d'Apache mais si vous recherchez la souplesse, FTP est la réponse. En effet, un serveur FTP inclut de base toutes les fonctionnalités permettant la gestion des utilisa- teurs et des droits daccés. De plus, il vous sera po: sible d'autoriser le téléchargement de fichiers de la part des clients vers le serveur, chose plus difficile ment réalisable avec un serveur Apache et PHP, bien qu’étant parfaitement possible. La solution FTP reste la moins contraignante pour Vadministrateur et pour le visiteur. I] existe un grand nombre de logiciels serveurs pour GNU/Linux mais le choix se résume habituellement autour de wu-ftpd ou de proftpd. Notez qu'un autre serveur gagne de jour en jour davantage de popularité. Il sagit de PureFTPd qui est basé sur Troll-FTPd. Pour cet article, nous avons choisi proftpd car il s'agit d'une solution classique et qu'il est relativement facile & configurer, tout en restant efficace et souple. En effet, sa configuration repose sur un seul fichier de configuration dont la syntaxe n'est pas sans rappeler celle du fichier httpd.conf d’Apache. Installer proftps sur votre distribution Debian n'est pas un probleme, la simple commande ap:-get install proftpd lancée en tant qu'utilisateur root suffira ‘hone /der t-get install prot 9 Package Li Done ing Dependency Tree... Done ‘The following NeW packages will be installed: oftpd 0 packages upgraded, 1 newly inst move and 39 not upgraded Need to get 357kB of archiv be used. :// ftp. fr debian.org led, 0 unpacking table/nain proftpd 1 (357%) 4. 8KB/=) n du paquet proftpd précédennent ionné. de 1a base de don B11 fichiers Le script d'installation associé au package sarréte ensuite pour vous poser une question. Souhaitez~ yous autoriser les accés anonymes sur votre serveur FTP ? Dans la plupart des cas, la réponse sera oui et les utilisateurs inconnus pourront accéder aux fichiers mis a leur disposition sur votre site : Enable anonymous ftp access [y/N]? y Adding new user ftp (101) with group nogroup, iting hone directory /hone/ ftp. usr /share/doc/proftpa/exanples/welcone.msg -> fhone/ ftp/welcome msg ng /ete/proftpd.cont .. -p daemon proftpd. La procédure d'installation va également eréer pour Yous un utilisateur ftp.nogroup et un message d'accueil exemple placé automatiquement dans /none/£tp. Le fichier en question, welcone.msg, pourra étre personnalisé par vos soins. Nous ver- rons cela un peu plus loin dans T'article. Enfin, le démon du serveur FTP est Jancé en utilisant les valeurs du fichier de configuration par défaut. Vous pouvez immédiatement faire un test depuis une autre machine (ou la méme) : denisénorgane:~ # ftp egon Connected 220 ProPTPD 1 .Qprel0 Server (Debian) [egon] Name Password: Nous nous logons ici en tant qu'utilisateur anony- me (anonymous), le mot de passe demandé est alors une adresse email utilisant une syntaxe correcte. Nous arrivons sur le serveur FTP et sommes accueillis par un message contenu dans le fichier 3. Enfin, nous avons la main et pou- vons explorer le contenu du serveur dans la mesure oli nos droits le permettent. Le fichier de configuration Nous I'avons dit plus haut, un fichier de configura- tion a déja été installé en méme temps que le pack: ge. Votre serveur est fonctionnel, mais il est impor- tant de connaitre la syntaxe du fichier de configura- tion si vous désirez personnaliser l'installation ou les fonctionnalités du serveur. Voyons dans un pret par défaut Jetc/proftpa ier temps ce qui est configuré Le fichier de configuration est conf. Vous y trouverez ceci * Dans un premier temps, tous les paramétres concernant le serveur lui-méme et la maniére dont il doit fonctionner erverNa La premiére ligne détermine le nom du serveur tel qu'il s‘affichera dans la banniére sur serveur. En plagant ici "Egon World" en lieu et place de "Debian", le visiteur verra 2.0prel0 Server (Egon World) [egon La seconde ligne détermine le mode de fonctionne- ment du démon proftpd. Deux valeurs sont pos- sibles, standalone pour démarrer un démon et attendre les connexions sur le port FTP ou ined pour ne rien lancer et demander au super démon inetd de lancer proftpd lorsqu'une connexion est Gtablie. Enfin, la derniére ligne active ou désactive le fait de retirer le contenu donné par la directive servernane de la banniére, Ainsi Deferwelcone cn n’affichera plus que : 220 ProPTPD 1.2.0pre10 Server ready. * Viennent ensuite les paramétres "cosmétiques” + MultilineRFc2228 on Default server on jowSyml inks on Allowoverwrite on La premiére directive permet de choisir un arrange- ment des lignes entre la RFC 959 et la 2228. I faut cependant savoir que le miei tine de la RFC2228 est beaucoup plus compatible avec les navigateurs Web que la 959. pefauirserver est une option utile dans le cas 8 vous souhaiteriez travailler avec des serveurs virtuels la maniére d'Apache. Nous verrons cette option plus loin au moment oii nous apprendrons configurer de tels serveurs, Pour Iheu- re, activons cette directive sans raison apparente, La troisiéme ligne comprend une directive, cette foi réellement "cosmétique" puisqu'en l'activant, vous permettez au visiteur de voir que tel fichier ou tel répertoire est un lien symbolique ou non. Pour finir avec ce paragraphe, AllowOverwrite permet & un visiteur d'éeraser un fichier (si ses droits le permet- tent). Par défaut, un client FTP ne peut pas écraser un fichier existant, cette option permet done de passer outre. Displaytogin welcone.nsg DisplayFirstchdir message Lsbefaultoptions sar Toujours des paramétres permettant d'augmenter la convivialité pour les clients. Nous configurons ici, respectivement, le nom du fichier contenant le mes- sage d'accueil au moment du login, le nom du fichier d'information a afficher lorsque l'utilisateur Ss HS Proftpd Fu entre dans un répertoire du serveur FTP et une (ou plusieurs) option par défaut pour le listage des fichiers. ‘* Nous avons ensuite la gestion des temporisations avec TimeoutNoTransfer Timeoutstalled 600 Timeout Idle 1200 Les trois directives déterminent le temps limite pour un client connecté qui n’engage pas de transferts, pour un transfert de données "bloqué" (stalled) et pour un client qui ne fait rien. Les valeurs sont données en nombre de secondes. * Enfin, pour en finir avec les paramétres globaux, il nous reste & utiliser quelques directives impor- tantes : Port 21 Unask 022 022 iaxInstances 30 User nobody Group nogroup Nous définissons tout d'abord le port sur lequel le serveur FTP doit attendre les connexions. Ici, il agit du classique port 21, comme le définit le stan- dard. Mais vous auriez tout aussi bien pu choisir n'im- porte quel autre port disponible sur votre systéme. unas permet de définir des permissions automa- tiques pour les fichiers et répertoires créés lors d'une session FTP. Le premier argument de la direc- tive concerne les fichiers et Ie second les répertoires. 022 est un excellent masque par défaut puisqu'il permet de définir que les fichiers et répertoires créés ne pourront étre lus ou exécutés par les utilisateurs du méme groupe ou par les autres utilisateurs. I] s‘agit d'une précaution définie par défaut : autant en profiter, Maxinstances permet de définir le nombre maxi- mal de processus fils qui devront étre lancés par le serveur FTP. Plus votre configuration matérielle est légére et plus votre connectivité Internet est basse, plus ce chiffre devra étre petit afin d’éviter tout engorgement de la machine. On retrouve ce genre de paramétre dans le fichier de configuration d’Apache. Enfin, user et Group définissent un nom d'utilisa- teur et un nom de groupe sous lesquels doivent étre exécutes les processus du serveur FTP. Un utilisa- teur sans aucun privilége particulier est tradition- nellement utilisé afin d'éviter tout probleme de sécuri- té majeur. Ne vous inquiétez pas quant a la création de cet utilisateur, la procédure d'installation du pac- kage profipd de Debian Taura fait pour vous. Passons maintenant aux paramétres de gestion des archives. A l'instar du fichier de configuration d'Apache, on utilise des directives entre < et > afin de déterminer la portée des instructions. Voyons directement un exemple avec : on Ici, nous définissons un bloc d'instructions portant sur les répertoires (Directory /*). Nous fermons le bloc d'instruction avec un ¢ag (marqueur) /pirectory. Toutes les instructions se trouvant entre ces deux marqueurs ne s‘appliqueront qu’a Vobjet concerné. Ici, nous utilisons la directive Allowoverwrite on afin d’autoriser I'écrasement des fichiers. Pour l'heure, seuls les utilisateurs possédant un compte sur la machine serveur peuvent accéder au FTP en utilisant leur identifiant sur la machine et Jeur mot de passe correspondant © Nous langons un client FTP sur egon (le serveur) n World) [ * Nous nous identifions comme l'utilisateur moi et utilisons le mot de passe correspondant : 0 User moi logged in. Reno Using binary m * Enfin, nous listons le contenu du répertoire dans Iequel nous arrivons. Il s'agit de notre répertoire "maison" en tant qu'utilisateur moi = ftp> 1s 200 FORT command s Dec 19 226 Quotas © En tant qu'utilisateur du systéme distant, nous pouvons naviguer dans le systéme de fichiers comme si nous étions en face de la machine. wero Ceci n'est pas une trés bonne idée en soi. En effet, un utilisateur client du FTP n'est pas foreément une personne de confiance (sinon nous lui aurions per- mis un login avec ssh par exemple). Le laisser ainsi aceéder en lecteur au systéme de fichiers dans sa presque intégralité n'est pas vraiment sage de notre part. proftpd met notre disposition une directive dans le fichier de configuration qui permet d'éviter ce genre de chose et d'ainsi limiter I'accés de l'utili- sateur & son seul répertoire personnel. Ajoutez. pour cela dans les paramétres globaux du fichier de configuration la ligne suivante : DefaultRoot ~ Nous définissons une racine par défaut comme ant le répertoire de Tutilisateur en cours. I nous faut bien sir redémarrer le serveur suite & la modi- fication du fichier avec : jetc/init .d/prot: proftpd d Résultat, Yutilisateur ne peut plus remonter dans les répertoires supérieurs 230 User moi logged in. Renote system type is UNIX. Using binary node to transfer files. 226 Quotas off irclogs 22 Bien qu'il n'obtienne aucun message d'erreur ou dlavertissement, il ne pourra pas accéder a dautres répertoires que le sien et ceux sy trouvant. Il perce- vra ainsi son répertoire comme étant la racine du systéme de fichiers. Les utilisateurs anonymes Dans bien des cas, le but d'un serveur FTP n'est pas de permettre aux utilisateurs du systéme de récupé: rer leurs fichiers ou de parcourir leurs répertoires a distance. Le plus souvent, un serveur FTP permet de mettre des archives et des fichiers & la disposition de tous. En réalité, "tous" n'existe pas dans un sys- téme de type Unix. De ce fait, lorsqu'un serveur FTP est ouvert tous, on utilise en réalité en tant quutilisateur anonymous ou ftp. Ceci n'est guére visible si vous utilisez un navigateur Web pour aceéder aux serveurs FTP publics, En fait, votre navigateur utilise le compte anonymous de maniére transparente afin de vous éviter la pro- cédure de connexion et vous afficher la liste des fichiers mis 4 votre disposition. Voici tout d'abord les directives utilisées pour créer un aceés anonyme sur votre serveur : Use! Use! ~ftp> ftp nogroup anonymous toires disponibles. Nous plagons ensuite une limita- tion concernant I'écriture avec , puis nous interdisons cette opération a tous les visi- feurs avec Denyail. Enfin, nous fermons tous les marqueurs, Si la syntaxe permettant de limiter les droits des uti- lisateurs vous rappelle quelque chose, ne cherchez pas. Le fichier de configuration d’Apache utilise précisément la méme. C'est également en cela que profipd s'avére étre un bon choix. Et voila, relancez le service proftpds comme précé- demment et votre serveur FTP pour accueillir les La definition d'un accés de ce type se fait par les visiteurs anonymes et vous pourrez mettre vos directives et . La pre- archives a disposition de tous dans le répertoire miére débute la portée du code de configuration et /home/£t; la seconde la ferme. La premiere directive prend en compte un paramétre qui est le répertoire racine du serveur. Ici, il n'est pas nécessaire de faire usage de faultRoot, un serveur anonymous limite auto- matiquement le parcours des répertoires a la racine du serveur. On dit alors que le serveur est chrooté. Car on change la racine comme le fait la commande oe Ere eee ery On utilise ensuite les directives User et Pp pour donner une identité de fonctionnement du ser- veur. Ici, pas de surprise, l'utilisateur £cp est utilisé. On détermine ensuite des alias permettant & lutili- sateur anonymous de se loguer sur le serveur FTP en utilisant les noms anonymous et fep. HI n'y aura pas pour eux de mot de passe réel donner, ils devront néanmoins compléter la demande qui leur sera faite par une adresse email 4 la syntaxe valide. Ce dernier point reste invisible pour les visiteurs utilisant un navigateur Web puisque ce dernier sen charge. irae Deeheeae teed Nous limitons également le nombre de clients simultanés pouvant se connecter a notre serveur de maniére anonymous. Il ne faudrait pas, en effet, ner les utilisateurs du systéme en leur bloquant Vaceés si trop d'utilisateurs anonymes sont présents FTP4ALL: Scar icentesencnertt i Peete eres ayLogin et DisplayFirstchdir permettent de définir des fichiers contenant le message d' ccueil sur le serveur et dans les répertoires. Enfin, il s'agit d'un accés public, nous devons done limiter les manipulations et interdire toute écriture sur le serveur. Nous utilisons tout d'abord le mar- queur pour désigner tous les réper- ‘ac Prottpd Configuration avancée de proftpd Pour I'heure, nous n‘avons pas fait grand-chose par rapport a I'installation de base du serveur FTP. Les paramétres que nous avons détaillés dans I'a le précédent sont tous déja définis dans le fichier de configuration par défaut. A présent, nous connaissons suffisamment la syntaxe du fichier de configuration pour nous attaquer a des situations plus poussées. Bon nombre de serveurs FTP publics mettent a dis- position des fichiers, mais permettent également que les utilisateurs anonymes puissent envoyer des fichiers sur le serveur. On voit alors apparaitre un répertoire incoming prévu a cet effet. La mise en place de ce type de fonctionnalité ne présente pas de difficultés particuliéres. Il suffit en effet de spécifier des permissions particuliéres pour le répertoire en question a l'aide des . Nous issons donc, dans un premier temps, une inter- mn d’écriture sur le serveur pour les connexions anonymes : puis, nous redéfinissons de nouvelles permissions pour un répertoire en particulier (incoming) : AllowalL ‘Nous avons ici deux . La premiére permet diinterdire la lecture dans le répertoire incoming afin que les utilisateurs anonymes ne puissent pas se servir de ce répertoire comme lieu d'échange de fichiers. La seconde autorise le stockage d'un fichier en provenance d'un client vers le serveur. Note : Noubliez pas que les permissions sur le sys- téme de fichiers du serveur prennent toujours le pas sur les directives du fichier de configuration. Lorsque vous allez créer le répertoire incoming assurez-vous qu'il appartienne ensuite a l'utilisateur fep.nogroup et non, par exemple, au root. En cas contraire, les directives du fichier de configuration ne serviraient & rien. Le répertoire appartenant & un autre utilisateur, le démon proftpa ne pourrait y accéder en écriture et les tentatives d'upload de fichiers aboutiraient l'échec. Ainsi, les utilisateurs anonymes peuvent envoyer des fichiers et non les lire : er sne:~ # ftp egon Connected to egon 220 ProPTPD 1.2. Name (egon:denis) 331 Anony address as passwo! Passwo: el0 Server anonymous ‘ok, send your complete e-mail Egon World) [egon] 230- 230-This is an experine any unusual problens, 230-please repo: 230- 230 Anonymous access Remote system type Using binary mode to tr: ftp» put ecole.pdt local: ecole.paf renote: ecole.pdf 200 PORT command successful. 150 Opening BINARY mode data connection for ecole. pdf. 226 Transfer complete 263461 bytes sent in 0.321 8 (8e+02 Kbytes/sec) rotted ftp> get ecole.pdf local: ecole.pdf renote: ecole.pdf 200 PORT command successful. 550 ecole.pdf: Permission non accordée ftp> 221 Goodbye: Selon le serveur et le but dans lequel vous le déployez, ce type de fonctionnement peut étre suffi- sant, Si, par exemple, votre serveur FTP met a la disposition de tous des images ou des applications que vous développez, les visiteurs peuvent vous envoyer des contributions (code, images, doc, etc.) dans le répertoire incoming. Vous n'avez pas besoin alors de eréer des comptes utilisateurs permettant un accés en écriture pour certains visiteurs ou cer- taines classes de visiteurs. La bonne solution est alors de restreindre davantage 'accés en n'autori- sant tout simplement pas les connexions de la part d'utilisateurs réellement existants sur le systéme. Pour cela, il nous suffit dajouter deux limitations. Tout d'abord, en dehors de la définition du serveur anonymous, nous interdisons l'accés :* DenyAll Ainsi, en principe, plus personne ne peut se loguer en FTP sur le serveur. A lintéricur de la portée de Ja configuration du serveur anonymous, nous pla- gons une directive inverse : sli ‘Comme ces dernieres lignes se trouvent dans la por- tée de , elles ne concernent que les connexions anonymes. Si un utilisateur du systé- me tente de se connecter au serveur en FTP, il sera traité comme un utilisateur inexistant ou dont le ‘mot de passe n'est pas valide denis@norgane: Connected to egon. Server (Egon World) fegon] ired for moi. 331 Password requi Passwo: 530 Login incorrect. Manipulation avancée des répertoires Liorganisation est une chose fort intéressante, elle permet de travailler plus vite et de retrouver plus facilement ses affaires. Ceci est valable pour bien des domaines et pour un serveur FTP également. Organiser un serveur peut se faire trés simplement si vos besoins ne sont pas importants, mais peut rapidement devenir une tache fastidieuse si vous souhaitez structurer votre serveur de maniére trés propre. La convention veut que le répertoire habituellement destiné a recevoir des fichiers soit appelé incoming. De la méme maniére, la plupart des serveurs FTP de la plandte ne mettent pas les fichiers 4 disposi- tion a la racine. On erée alors un répertoire pub qui contiendra des sous-répertoires par types de fichiers diffusés. Jetez un ceil 4 des serveurs existants depuis fort longtemps, comme fip.lip6.fr pour vous forger une idée de la choss En plus de la rigueur qui est naturellement la votre en ce qui concerne l'organisation des données (?), profipd vous offrira quelques facilités intéressantes. L'une d'entre elle est de permettre un accés direct & certains répertoires en fonction du nom d'utilisateur employé pour la connexion au serveur. Imaginez les alias suivant pour l'utilisateur tp : UserAlias anonymous ftp a ftp ftp Nous conservons anonynous par souci de compa- tibilité avec les navigateurs Web, mais nous ajou- tons quatre nouveaux alias. Ceux-ci sont destinés a tre utilisés pour les accés aux archives de, respecti- vement, logos, images, fond d'écran et vidéos, Note : On regrettera ici le fait de ne pas pouvoir définir plusieurs alias sur une seule ligne. En effet, la directive useralias ne prend en argument, dans ordre, qu'un alias suivi d'un nom d'utilisateur valide. Ensuite, nous allons eréer quatre répertoires du méme nom dans /home/£:p. Enfin, nous ajouterons dans notre fichier de configuration (a fintérieur de la portée du serveur anonymous) la ligne suivante : UserD Dés le redémarrage du démon, un utilisateur se loguant sous anonymous ou fp arrivera sur un serveur chrooté dans /none/£tp. En revanche, si par exemple il utilise £-.p2, il arrivera sur un serveur chrooté dans hone/ftp/£tp1. Gestion des utilisateurs Une autre forme d'organisation est, bien sir, la ges- tion des utilisateurs. Méme dans le cas d'un serveur offrant un aceés public, il peut étre bienvenu qu'un certain nombre de personnes soient autorisées 4 mani- puler certains fichiers et répertoires sur le serveur. Il n'est pas nécessaire pour autant qu'il s'agisse <'utilisateurs ayant la permission de se loguer sur le systéme a distance ou méme localement. De plus, méme si l'utilisateur posséde effectivement un compte sur la machine, il n'est pas nécessaire que son répertoire personnel soit automatiquement celui auquel il accéde en FTP. Prenons un exemple concret pour clarifier tout cela. Prenons le cas selon lequel nous avons installé un serveur FTP anonymous destiné a partager certains travaux d'un groupe. Les membres du groupe sont denis et moi. Ces deux utilisateurs partagent publi- quement des fichiers sur le serveur FTP. Ces fichiers sont récupérables par n‘importe quel visiteur ano- nyme mais seuls nos deux membres peuvent modi- fier les données en question a distance. ‘Nous choisissons done de créer a la racine du ser- veur FTP un répertoire pour chaque utilisateur égitime. Nous avons donc dans /home/ ftp 4096 1 2 denis denis 4096 jan 22 10% 2 fp negrow 4096 Jan 21.19: users 4096 jan 22 09; rot fy 24 2001 velowe.neg Vous remarquerez les permissions sur les réper- toires en question, Les utilisateurs ont toutes les permissions sur leurs répertoires alors que les autres peuvent uniquement y entrer et lire le contenu. A présent, passons au fichier de configuration. Notre section contiendra ceci : User ftp Groupnogroup UserAlias anonymous ftp RequireValidshell off MaxClients 1 playLoginwelcone.msg yFirstChdir message ry *> DenyAlL DenyAll STOR> nous ajoutons RequireVal idshe! DefaultRoot Defaultchdir yhome/ ftp ‘Yoome/£tp Cest surtout cette derniére ligne qui est trés impor- tante, Elle nous permet de désactiver le fait que, par défaut, un utilisateur Iégitime du systéme arrive directement dans son répertoire personnel. Ici, nous Tenvoyons directement a la racine du serveur FTP anonyme et la directive DefauitRoot l'empéche de remonter dans I'arborescence. Les permissions données sur les répertoires des uti- lisateurs interdisent aux utilisateurs anonymes d’écrire dans les répertoires en question. Nous niavons done pas besoin de spécifier le Limit pour configurer ce point. Le résultat est exactement ce que nous souhaitions. Les utilisateurs denis et moi peuvent allégrement modifier, ajouter et supprimer des fichiers dans les répertoires /nome/fep/denis et /nome/£tp/noi, tout en autorisant les visiteurs anonymes a récupérer les fichiers qui s'y trouvent, Imaginons a présent que l'utilisateur responsable du serveur FTP ait pour tache d'éviter que des données également douteuses soient diffusées par les utilisa- teurs denis et moi via leur répertoire. II faut alors Proftd posséde la permission de supprimer des fichiers dans ces répertoires. Le probléme qui se pose est le suivant : il sagit de permettre a denis et noi d'écrire dans leur répertoire respectif tout en permettant a un utilisateur que nous appellerons master de faire de méme dans les mémes réper- toires. Bien sii, il ne faut pas que denis puisse écrire dans le répertoire de mo’ et inversement. ‘Nous ne pouvons plus nous baser sur les permis- sions Unix car, méme en utilisant un groupe com- ‘mun, nous n'arriverions pas au résultat escompté. Voila un travail pour le systéme de permissions de proftpd, Dans un premier temps, les répertoires en question n’appartiendront plus aux utilisateurs légi times mais 4 ftp.nogroup : Qrom-arx 5 ftp regroup 2p regroup Dip rogroup att regrow 1 root 100 Nous changeons également les permissions afin de permettre & tous les utilisateurs d'écrire, de lire et de parcourir ces répertoires. Sans modification du fichier de configuration, n'importe qui pourrait maintenant faire ce qu'il désire dans ces répertoires, ‘Nous nous empressons donc d'ajouter les lignes sui- vantes dans le fichier de configuration de profipd (en dehors de la section du serveur anonymous) : DenyUser !master, noi DenyUser !naster, !denis Nous utilisons un iimit pour chacun des réper- toires concernés et faisons usage d'une directive nouvelle : DenyUser. Celle-ci permet, a linstar de Denya1, d'interdire laction spécifiée par le mar- queur Limit, & la différence quelle prend en argu- ‘ment un ou plusieurs noms d'utilisateurs. Le / est le signe de la négation, notre restriction définit done une interdiction en écriture dans les répertoires pour tous les utilisateurs excepté le responsable du serveur (master) et l'utilisateur du répertoire en question, Nous aurions également pu utiliser les lignes sui- vantes WRI DenyAlL Allowser master, moi ‘Vous conviendrez que la premiére syntaxe est beau- coup plus concise et facilite la maintenance. Le résultat est le suivant : # Les utilisateurs anonymes peuvent lire et réeu- pérer le contenu des répertoires noi et denis Les utilisateurs moi et denis peuvent écrire dans leur répertoire respectif uniquement. * Llutilisateur master posséde un droit d'éeriture dans les répertoires noi et denis. Comme vous le voyez, l'organisation des permis- sions et des répertoires n'est pas une tache complexe pour peu que l'on s'attarde posément sur nos besoins. Surveiller le serveur profipd comme bien des démons serveurs permet Yarchivage des journaux d'activité. Ces journaux sont une partie importante de la gestion des ser- veurs. Ils permettent de résoudre les problémes de configuration, de surveiller l'activité et la popularité de vos serveurs et surtout, ils sont la principale source de renseignement en cas de probléme de sécurité ou dattaque externe, Par défaut, en 'absence de configuration spécifique, profipd est peu bavard. Les informations envoyées dans le syslog se Bref, nous ne savons pas grand-chose, si ce n'est qu'un utilisateur provenant de I'héte morgane stest déconnecté, et done connecté 4 un moment donné. Nous remarquons aussi qu'un utilisateur qui s'est identifié sous le login nini sest vu refusé car il n'exis- te pas de compte sous ce nom sur notre serveur, Voyons dans un premier temps ce que proftpd est capable de faire seul. Ajoutez tout d'abord les lignes suivantes dans votre fichier de configuration ar/log/protts La directive excendedtiog permet de définir des fichiers journaux personnalisables. Le premier argu- ment de la directive est un chemin absolu vers le fichier journal. Le second argument, séparé par une espace, est un mot clef spécifiant le type d'inform: tion a stocker dans le fichier. Nous définissons ici trois fichiers. Le premier archi- vera des informations sur les activités de lecture et écriture sur le serveur FTP. Le second archivera tout ce qui concerne lauthentification des utilis: teurs. Enfin, le dernier contiendra absolument toutes les informations découlant d'une connexion 4 notre serveur. D'autres mots clefs pourront étre utilises + INFO reportera toutes opérations sur la demande d'information (commandes PWD, SYST, ete.) * DIRS reportera toutes opérations concernant les répertoires (listage, création, suppression, etc.) * MISC reportera toutes opérations non-clas- sables dans les autres catégories. Praftpd Les informations ainsi envoyées dans les journaux sont formatées automatiquement par profipd, mais il est possible de personnaliser le formatage & l'aide d'une directive spécifique : LogFornat . Cette directive prend en paramétre une chaine com- posée de méta-séquences (débutant par le symbole %) et de chaines de caractéres fixes. Les méta- séquences permettent de spécifier des informations spécifiques a placer pour composer une ligne du journal d'activité du serveur FTP : %A Le nom dutilisateur anonyme (son adresse email donnée en tant que mot de passe) ou UNKNOWN sil s‘agit d'un utilisateur légi- time, %b Le nombre doctets envoyés pour une requeéte. %f — Le nom du fichier récupéré (RETR) ou envoyé (STOR). Il s'agit du chemin absolu, %F Le nom du fichier récupéré (RETR) ou envoyé (STOR) tel que le client le voit. %h Le nom de Ihdte distant (client). %a adresse IP de thote distant. %l Le nom d'utilisateur distant ou UN KNOWN sila requéte ident échoue, %m La commande regue de la part du client (RETR, LIST, STOR, etc.). %p Le port local utilisé par le serveur. Yov — Lenomd’héte local du serveur. %P PID du serveur. Yr La ligne de commande complate envoyée par le client. %T Le temps de réception/émission pour un fichier en secondes, %s Le code de réponse numérique (200, 404, ete). %a — L'ID utilisateur d'un visiteur Iégitime et authentifié. 1 vous suffit a présent de composer vos formats de journaux en associant toutes ces méta-séquences : Logformat Emtaccess "th #1 tu tt \"ér\" ts bt Notez que la chaine est entre guillemets et que si yous souhaitez faire apparaitre le symbole dans les journaux, il vous faudra le faire précéder ici d'un anti-slash (\). Il en va de méme avec le % qui devra étre écrit %% dans la définition de format de jour- naux. Le second argument de la directive LogFormat est un nom de format arbitrairement choisi par vos soins. Vous pourrez ensuite le réutili- ser avec la directive #xcendediog : ExtendedLog READ r/log/px% pd-access.10g pac Le fichier prort selon fmtaccess. -access. log sera done formaté Un dernier point important avant de terminer cet article : il est recommandé de ne pas annoncer le type de logiciel que vous utilisez comme serveur FTP. En effet, vous n’étes jamais Tabri d'un éven- tuel bogue de sécurité qui pourrait étre rendu public. De ce fait, vous ne fournissez pas d'informa- tions a d'éventuelles personnes malveillantes. Pour cela, ajoutez la ligne Serverident off Il reste beaucoup de choses dire sur profipd mais cet article n'a pas la prétention d'étre une documen- tation officielle, Les informations données ici devraient étre suffisantes pour la mise en ceuvre d'un serveur FTP viable et fonctionnel. Pour plus dinformations, reportez-vous directement au site officiel. eee Cer reared er a Fer ee Eon ee Se Dore aa eee ee Installation d’un serveur DNS Dans cet article, je supposerai que vous disposez d’un réseau local en état de fonctionne- ment et que vous maitrisez les bases de l'utilisation d'un systéme de type Unix (shell et édi- teur de textes notamment) et de TCP/IP (adressage, sous-réseaux. Je ne détaillerai pas forcément le fonctionnement des divers utilitaires concernés, aprés tout, vous étes assez grand pour lire une page de manuel, non? ;-) Pourquoi un serveur DNS ? Si vous disposez d'un réseau local, des commandes comme "telnet 192.168.131.5" vous sont probable- ment familiéres. Si vous n’avez que quelques machines, c'est au pire un peu fastidieux a taper ; si vous en avez un peu plus, vous allez finir par avoir ‘du mal A vous rappeler que la station qui est dans le bureau a l’étage est 192.168.131.5. Bien sir, il est possible d'indiquer les correspondances dans le fichier © (ou son équivalent sur des OS non-Unix), mais la synchronisation des données entre les différentes machines devient rapidement pénible, et c'est encore pire dans le cas des réseaux hétérogénes oi les données doivent étre maintenues séparément pour chaque systéme. Dans ce cas, il est plus simple de centraliser les information ; la fagon Ja plus courante de le faire est d'utiliser un serveur DNS. Choix du logiciel serveur et installation Dans un environnement Unix, la question ne se pose pas vraiment ; le seul logiciel généraliste un tant soit peu répandu est BIND. Il en existe quelques autres, mais BIND est le seul étre a la fois "terminé” (cest-A-dire utilisable en production) et raisonnablement complet. La configuration don- née ici est valable pour BIND 8.x ; les nouveautés de BIND9.x seront mentionnées & la fin de l'article Prenez garde & toujours disposer de la derniére ver- sion (9.1.2 ou 8.2.4 & Vheure oi j'écris ces lignes) ; en effet, des trous de sécurité sont réguligrement corrigés. La plupart des distributions GNU/Linux modernes incluent BIND. Si a vétre ne propose pas la dernié- re version, vous pouvez télécharger les sources & adresse donnée ci-dessus ; installation se fait par un simple . /cont ig pour la version 9.x ou par make clean depend ali install pour la version 8.x. Sur ma machine, les binaires sont dans ‘in et les fichiers de configuration dans mis & part le fichier qui se trouve dans /ete ; il se peut que ces emplacements soient différents chez. vous. ake ; make instal Un serveur seul Entrons dés a présent dans le vif du sujet. Pour le ‘moment, je suppose que votre réseau n'est pas relié 4 Internet. Je supposerai aussi que votre réseau est 192.168.131.0/32 (c’est-a-dire que vos adresses IP sont de la forme 192.168.131.x) et que vous utilisez le nom de domaine houba.maison (c’est-a-dire que les noms de vos machines sont de la forme machi- nne,houba.maison). Plus précisément, je supposerai que vous disposez de trois machines, ns.houba.mai- son (192.168.131.1), stationS.houba.maison (192.168.1315) et station’. houba. maison (192.168.131.6). Attention, l'utilisation du TLD (Top Level Domain, domaine de plus haut niveau) fictif maison est volontaire, Surtout n‘utilisez pas un TLD existant (com, .fr ou autre) & moins d'étre propriétaire du domaine utilisé, ou vous aurez des problémes quand votre réseau local sera connecté & Internet. Pas la peine de dire que ca n’arrivera jamais, je sais bien que vous n'y croyez pas plus que moi Le fichier named.conf Le fichier est le centre de la configuration de BIND. Voici son contenu: naste *naster/192 0.0.127. in-addr.arpa* master *naster/127.0. ‘Comme vous pouvez le constater, ce fichier se com- pose de blocs entre accolades précédés d’étiquettes Vous pouvez de plus y insérer des commentaires sous diverses formes. * Un commentaire. Deux conment is commen aD Voyons maintenant en détail la signification des directives de ce fichier. options Ce bloc contient des options (eh oui!) qui affectent le fonctionnement général du logiciel. L’option directory indique 4 BIND que ses fichiers de configuration se trouvent dans le répertoire /var/named. En Voccurrence, c’est la seule dont nous avons besoin. zone *houba.1 type master; Chaque bloc "zone quelque chose" contient la description d'une zone. Nous allons les voir en détail. La zone "houba.maison" contiendra la des- cription du domaine houba.maison, Cest-a-dire la liste des adresses IP des machines du domaine, mais aussi la liste des serveurs de noms, des serveurs de courrier et quelques autres renseignements du méme genre. La directive type master signifie que notre serveur est maitre pour cette zone, c’est-a-dire qu'il dispose de tous les renseignements utiles. Il existe aussi des serveurs esclaves, qui ne disposent pas des données avant de les demander & un serveur maitre ; nous en parlerons un peu plus loin. Enfin, file "master/houba.maison" donne le nom du fichier contenant les données de la zone; ici, c'est /var/named/master/houba.maison (la directive directory du bloc options est utilisée pour com- pléter ce nom). zone *131 ype naste fe *naster/192.168.131"; 168.192. in En général, quand on interroge un serveur DNS, on lui indique un nom de machine (par exemple ns.houba.maison) et le serveur renvoie l’adresse IP de la machine en question (en l’occurrence 192.168.131.1). Il est parfois utile de faire une requéte inverse : on dispose de I'adresse IP et on veut connaitre le nom de la machine, Dans ce cas, on résout adresse .in- addrarpa ; par exemple, pour trouver le nom de 192.168.131.1, on résout J. 131.168. 192.in-adr.arpa. Crest ce & quoi sert cette zone. 27 in type file Cette zone est similaire a la précédente ; en prin pe, elle ne devrait pas servir, dans la mesure ot 127.0.0.1 se trouve en général dans le fichier hosts de ‘chaque machine, mais l'indiquer ici ne coate rien. Les fichiers de zones Voyons maintenant les fichiers décrivant les diffé- rentes zones. Tous ces fichiers doivent se trouver dans /var/named/naster. houba.maison Le fichier de zone commence par un champ SOA 2001062201 ax 2H 1D) Le symbole @ désigne la zone décrite par le fichier de configuration (ici houba.maison). Le mot clé IN signifie qu’il s‘agit d'une zone Internet ; c'est tou- jours le cas sauf cas trés particuliers, Ce mot clé est ‘ailleurs optionnel. La directive SOA signifie Start of Authority ; elle sert & donner des informations sur la gestion de la zone, Ensuite, on trouve dans Yordre le serveur de nom qui dispose du fichier de zone de référence (ns.houba.maison), adresse de la personne responsable de la zone (root @houba.maison, le @ est remplacé par un point), le numéro de série (il sert a synchroniser les serveurs maitres et esclaves, important est qu’il augmente & chaque modification de la zone ; ici, Cest la date de la derniére modification de la zone suivie d’un numéro deux chiffres) et divers délai correspondant au temps a attendre avant de rées- sayer en cas d’échec d’une requéte ou a la durée de validité des données (les valeurs par défaut données ici devraient fonctionner dans tous les cas usuels) Notez que les noms de machines doivent se termi: ner par un point ; & défaut, BIND rajoute le nom de la zone. Par exemple, "ns. hou’ désigne —ns.houba.maison, alors que "ns houba maison” désignerait ns.houba.mai- son.houba.maison. C’est une des sources d’erreurs les plus fréquentes. Ensuite, nous indiquons le serveur de noms a consulter pour résoudre un nom dans houba.mai son, au moyen d’un champ NS. Les champs SOA et NS font référence & une machi ne ns.ho ; attribuons-lui une adresse au moyen d’un champ A. Profitons-en pour ind quer aussi les adresses IP des stations. Le champ SOA fait aussi référence & une adresse électronique root @houba.maison. Nous allons donc indiquer au moyen d’un champ MX que le courrier destiné aux adresses de la forme houba.maison doit étre envoyé & une machi- ne mail.houba.maison, qui en "occurrence sera aussi ns-houba.maison. Notez au passage qu'une machine peut avoir plusieurs noms, et que plusieurs ‘champs A peuvent renvoyer la méme adresse IP. Servear DNS Le nombre 10 dans le champ MX indique la priori- té du serveur concerné. On peut indiquer plusieurs champs MX avec des priorités différentes. Dans ce cas, le serveur ayant la priorité la plus basse sera utilisé, puis les autres par priorité croissante si le premier est indisponible. Enfin, chaque domaine devrait (ce n'est pas obliga- toire) comporter un champ A pour localhost, qui renvoie 127.0.0.1. En effet, il se peut que le nom soit complété en host nom.du.domaine.local (ici localhost host .houba maison), host. a ici donc le fichier de zone complet: 2001062: aH 2H ‘maison, localhost INA ii my Lins mail INA TM 3-13" mA Notez que tous ces champs, a l'exception de SOA, peuvent étre présents en plusieurs exemplaires ; C'est méme recommandé pour les NS et les MX dans le cas d’un domaine un peu important, pour désigner des serveurs secondaires devant prendre le relais en cas de panne. Notez aussi qu’on peut lais- ser des lignes vides dans ce fichier et qu’on peut y mettre des commentaires qui commencent par un point-virgule. 192.168.131 Comme la précédente, cette zone comporte un champ SOA et au moins un champ NS. En outre, elle indique le nom associé & chaque adresse IP de la classe ; pour cela, on utilise le champ PTR, par exemple, pour indiquer que 1.131.168.192.in- adér.arpa (‘est-A-dire 192.168.131.1) correspond Ans.houba.maison ns. houba.naison. Crest tout ce qu’on doit y trouver. Finalement, le fichier resemble a ceci : e ow SOA ns. houba.maison master. houba.naison. ( 2001062201 8a 2H 1N 1D) e INNS. houba.maison. 1 IN PTR ns.houba.maison. PIR station5.houba.naison. IN PTR. station6.houba.maison. 127.0.0 Cette zone ressemble a la précédente, si ce n'est qu'elle ne comporte qu’un seul enregistrement, qui permet de résoudre 127.0.0.1 en localhost /. @ oN 80A localhost. root.localhost. ( 3H 15M W 1D) Ns 1 PIR host. jocal host Faire tourner le serveur Une fois ces fichiers en place, votre serveur est configuré, il ne reste plus qu’a le lancer. Pour cela, utilisez Putilitaire née = dis 4706 Si le serveur ne démarre pas, cherchez le message erreur dans /var/1og/message ; en général, le fichier de configuration erroné y est indiqué avec erreur. Ensuite, il faut tester la configuration, par exemple avec I'utilitaire nslookup, qui permet d’in- terroger directement le serveur. + nslookup Default Server Address: 0.0.0.0 ‘ns. houba maison > server 192.168.131.1 Default Server: (192.168.1311 Address: 192.168.131.1 > ns.houba.taison 192.16B.131 Address > 192,168.131.5 Server: 168.131 irese: 192.168.131 Name: station5.houba.maison Address: 192.168.131.5 > set g-mx > houba.maison houba maison nmail.houbal houba.maison mail houbal ns-houba.m + Ici, le serveur répond bien aux requétes ; si ce n’est pas le cas, il est mal configuré. Vérifiez en particu- lier que vous avez bien mis des points aux bons endroits dans les fichiers de configuration. Une fois que votre serveur répond comme il faut, il ne reste plus qu’a indiquer son adresse au résolveur (en gros la partie de la 1: qui interagit avec les serveurs DNS, c’est lui qui fait la traduction entre nom et adresse IP de maniére transparente un peu partout sur votre systéme). Pour cela, éditez le fichier /etc/resolv.cont et mettez-y ce qui suit : searci houba .naiso 192.168 Faites cette manipulation sur toutes vos machines Unix ; je vous laisse trouver l’équivalent sur les autres systémes, ;-) Une derniére verification, pour la route : Ga marche, c'est pas merveilleux? Redondance Eh bien non, c’est pas merveilleux, quand on y regarde de plus prés ! Pourquoi ? Parce que le jour oil ns. houba.maison sera arrété pour une raison ‘ou pour une autre, ga ne marchera plus, Solution ? Mettre un deuxiéme serveur pour prendre le relais, Et on ne va pas se fatiguer & dupliquer nous-mémes les données sur les deux serveurs ; ils peuvent trés bien faire ga tout seuls. Supposons done que votre nouveau serveur répon- de au doux nom de ns2.houba.maison, et posséde adresse 192.168.131.2. Commengons par le rajou- ter a la zone houbs.maison, et profitons-en pour indiquer qu’il est serveur de courrier secondaire (aprés avoir configuré en ce sens, bien siir) Ajoutez done les lignes suivantes au fichier de zone, sans oublier d’inerémenter le numéro de série (utili- sé pour la synchronisation des serveurs) : ¢ IN ON @ IN Mm IN A La premiére de ces lignes doit impérativement se trouver aprés le premier champ NS pour une raison que nous verrons plus loin. N’oubliez pas d’indi- quer la résolution inverse dans la zone 192.168.131, Ia encore en incrémentant le numéro de série: Ensuite, tapez nde reload pour indique que vous avez modifié vos zones. Serveur esclave Maintenant vient le moment de commencer la magie noire. Commencez par configurer 02 : il aura la méme zone 127.0.0 que son grand frére, et il sera serveur esclave pour les zones houba maison et 192.168.131, le maitre étant 192.168.131.1 Finalement, son fichier naned.. cont doit ressembler a 192. in-addr.arpa* Laver \ type ma: file Les données concernant les zones houba maison et 192.168.131 seront stockées dans le répertoire /var/naned/siave ; l'utilisateur qui fait tourner BIND, qui répond chez moi au nom de named, doit avoir Ie droit d’y écrire. Pas la peine d’y mettre quoi que ce soit, ce répertoire sera peuplé par le serveur lui-méme. La zone 127.0.0 ne risquant pas de chan- ger, ns2 peut étre maitre pour cette zone ; I'utilisa- tion d'un serveur esclave ne se justifie que pour une zone "vivante", pour éviter de devoir dupliquer les changements sur tous les serveurs de noms. La machine ns2 doit done disposer de deux fichiers de configuration pour BIND: /etc/named.coné et /var/naned/naster/127.0.0. Serveur maitre Il ne reste plus qu’a indiquer ns. houba.maison que son petit camarade a le droit de lui demander tout le contenu des zones houba.maison et 192.168.131, et que lui-méme a le devoir de signaler Jes changements sur ces zones & ns2 ; pour cela, on utilise respectivement les directives a for et not ity. Le fichier ressembler a ga: rectory */var/named" *houba.maison* pe masters zone Une fois ces modifications effectuées, tapez nac restart surns et nde start sur ne? et attendez quelques instants ; les deux serveurs devraient maintenant pouvoir répondre aux requétes. Plus CAlires sanicas qu’A rajouter la ligne suivante dans vos fichiers resolv.cont : naneserver 1 168. Comment ¢a marche ? Quand vous indiquez au BIND de ns de recharger ses zones, par exemple avec la commande nde reload, il compare le numéro de série de chaque zone avec les anciens numéros de série. Si le numéro de série d’une zone comportant la directive not ‘fy yes; a augmenté, c’est que la zone a change ; BIND envoie alors un signal a chacun des serveurs cde noms listés dans le fichier de zone (champs NS), & exception du premier. C'est pour ga qu'il est impor- tant de déclarer ns avant ns2, Quand un de ces ser- veurs (52 en occurrence) regoit un tel signal, il véri- fie quril est bien esclave pour la zone concernée, et demande au maitre de la lui transmettre, ce qui se fait normalement en quelques secondes. Et Internet ? Maintenant, vos serveurs de noms répondent aux requétes concernant votre réseau local, mais com- ment faire pour leur faire résoudre aussi les adresses Internet publiques ? Rien de plus simple, il suffit d’ajouter une zone sur chaque machine : type hint; file *naned.r0 Comment obtenir ce fichier naned.root ? C'est la sortie de la commande dig a servers.net. Voila, un petit ndc restart et yous pouvez maintenant résoudre tous les noms DNS d'Internet (a condition d’étre connecté, bien évi- demment). root~ ui er BINDO BIND9 demande (ou du moins recommande forte- ment) la ligne suivante au tout début de chaque fichier de zone: STTL 3h De plus, Putilitaire nac n’existe plus, ila été remplacé par rnde. Si vous avez installé BIND9, vous devez avoir un fichier ride.con£ avec un bloc de ce genre : secret *c3Ry Vub3VnaCBnb3 Ig¥SBtYndgYnVOTG1hZGUg2nGyTGBgd29t WSK Recopiez ces quelques lignes dans naned.cont, et ajoutez-y ga : controls ti keys "key"; + Voila, maintenant vous pouvez utiliser rnéc. Ses possibilités ne sont pas tout a fait les mémes que celles de nac, mais son utilisation est similaire, Par contre, il ne permet pas de démarrer BIND ; pour a, vous devrez lancer nanea a la main aprés en avoir lu la page de manuel, ow utiliser les scripts de démarrage de votre distribution, Attention, la configuration décrite ici permet & niimporte quel utilisateur d’utiliser enéc. Pour évi- ter ga, le moyen le plus simple est d’interdire la lec- ture de rndc.cont ; si vous faites ga, n’oubliez pas d’interdire aussi la lecture de named.cont, qui contient la clé utilisée par enée pour communiquer avec le serveur. Chez moi root 279 naned Pour aller plus loin. Cet article est un exemple de configuration qui marche, mais il ne contient en aucun cas tout ce quill y a A savoir a propos du DNS. Si vous voulez comprendre ce que vous avez fait en appliquant ces quelques recettes, la lecture du DNS-HOWTO est indispensable. Pour plus de détails, je recommande fortement la lecture de excellent D'S and BIND. ‘Arnaud Gomes-do-Vale cee ns heep:livww.lsc.orgiproducts/BIND ices tesares Peers ee eC Toutes les informations pour monter adem coco iCom climes itty dans un seul magazine i proxy Le principe du cache est relativement simple, Lors une transaction normale entre un client et un ser- veur HTTP, le client envoie une requéte au serveur, qui analyse et retourne objet désiré par le client. Ce dialogue s’établit suivant le protocole HTTP. Ainsi, en tant que client, vous passez votre temps & demander des objets aux différents serveurs aux- quels vous vous connectez. Imaginez maintenant qu’au cours d'une visite d’un site vous soyez conduit & repasser par les mémes pages ou encore afficher plusieurs fois le méme élément graphique (images) sur les différentes pages visitées. II devient parfaitement inutile de télécharger & nouveau ces pieces depuis le serveur, il nous sulfit d"utiliser celles dgja en notre possession. Voil exactement ce que fait le cache de votre navi- gateur. Il conserve en permanence une trace des élé- ments déja téléchargés pendant un certain temps. Lorsque le contenu du cache est considéré comme périmé, il est supprimé. La solution est intéressante, mais il est possible de faire mieux. En effet, si, sur votre réseau local, plu- sieurs clients accédent au Web, il est fort probable que les sites et les pages visités soient, dans une cer- taine mesure, similaires. Il est done intéressant que Te cache soit commun & tous les utilisateurs. Le jour oii Pun d’entre eux ira sur un site déja visité par une autre personne, il ne sera plus nécessaire de télé- charger les fichiers du serveur, mais on pourra les prendre directement dans le cache commun. Plus il y aura d'utilisateurs du cache, plus chacun d'entre eux aura de chance d’optimiser de la sorte ses connexions. Un cache de ce type est appelé un proxy Installez un Si vous étes en train d’installer un serveur qui fait également office de passerelle NAT pour Vaccés a Internet (comme c'est bien souvent le cas avec une machine personnelle), vous souhaitez sans doute trouver une solution pour accélérer la navigation sur le Web. Bien sar, le cache de votre navigateur fait déja ce travail, mais pour votre poste et votre compte uniquement. Il existe une solution plus globale. Le plus connu et sans doute le plus utilisé des proxy est squid. Développé sous licence GPL par un grand nombre de personnes et dirigé par Duane Wessels, le projet squid est rapidement devenu un quasi standard en termes de proxy sous GNU/Linux. Linstallation sur votre Debian ne posera pas de probleme : root@egon:~# apt-get Readin all squid rhe Done will be ii La procédure d’installation lancera directement le démon/service squid. Vous pourrez & tout moment le stopper et le démarrer avec 4 stop Toute la configuration de squid repose sur un fic de configuration unique ece/squid.cont. Celui installé par défaut sur la distribution Debian est largement commenté, mais nécessite tout de méme quelques explications. squid est, en effet, un logiciel trés puissant et largement personnalisable en fonction de vos besoins et des ressources réseau et systéme dont vous disposez. En réalité, suite a l'installation, le serveur squid a effectivement démarré, mais le fichier de configura- tion par défaut, suivant les habitudes de la team Debian, n’autorise pas grand-chose, pour ne pas dire rien du tout. Si, sur le serveur oti vous venez d'installer squid, vous configurez votre navigateur pour qu'il utilise le proxy sur le locainost et le port par défaut de squid (3128), comme montré en figure 1, vous vous retrouverez dans l'impossibilité ee \ gemini een Pr ea daccéder au Web (figure 2). Le serveur squid par défaut refusera de travailler pour vous et ne man- quera pas de le signaler dans le journal d’activité de squid (/var/1og/squid/access. log): 013278172.271 0 127.0,0.1 ‘TEP_DEWIED/403 995 snn.google.com/ ~ NONE/~ ~ Jetons un wil au fichier de configuration. Les ligne non commentées sont les suivantes acl all sre 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0,1/255.255.255.255, 443 563 70 210 1025- jeny manage allow purge 1 ny purge La «méchante» ligne est la derniére en gras. Elle dit explicitement que l'accés HTTP (nttp_access) est interdit (deny) & tous (a1). Il est done normal que vous ne puissiez pas utiliser le proxy squid. Si vous le désirez, mais uniquement a des fins de test, vous pouvez remplacer deny par allow pour obtenir l'ef- fet strictement inverse, c'est-A-dire, autoriser tout le monde. Mettre la ligne en commentaire apportera le méme effet. Ceci n’est pas un paramétre valable pour une configuration de production d'un proxy. Autoriser n'importe qui & utiliser votre serveur est dangereux et inconscient. Le mot clef 12 est défini plus haut dans le fichier de configuration. Il s’agit d’une ACL (Access Classes Lists). Une liste regroupe un ensemble de propriétés liges & un mot clef. Ici, a1 est une sorte alias pour le masque IP 0.0.0.0/0.0.0.0, c'est dire toutes les adresses possibles sur les 32 bits dune IP. Un certain nombre d’ACL sont deja défi- nies dans le fichier de configuration. Il s’agit du Proxy Squid tres sanicas strict minimum pour les autorisations, elles aussi définies par défaut dans le fichier. Nous avons alors sept régles par défaut (dont une que nous venons de voir) http_access allow manager localhost Lacois est autorisé pour un accés avec le protocole cache_object ET depuis le 1ocainost unique- ment, Entendez bien qu'il s‘agit d’un ET logique. Il faut que les deux conditions soit remplies pour que Fautorisation soit accordée. =http_access deny manager : on interdit le pro- tocole cache_object. Comprenez bien que cette régle n’empéche pas la précédente de s‘appliquer. Si la connexion arrive du localhost Iaceés sera auto- risé par la régle précédente, Cette ligne ne sera prise en compte que si la connexion vient d’ailleurs. Et dans ce cas nous ne l'autoriserons pas. ©: On -http_access allow purge loca: autorise la méthode Pvscs si elle provient du localhost. ge : Encore une fois, la interdite si elle vient de n'impor- ess deny !Safe_ports : Nous interdi- sons 'accés SAUF (grice au «!») sur les ports que l'on considére comme sirs (80 HTTP, 21 FTP, 443 HTTPS, 563 NTTPS, 70 GOPHER, 210 23950 et de 1025 & 65535). http_access deny CONNECT !SSL_ports : Nous interdisons l'accés si la méthode conc” est utili- sée et qu'elle ne vient pas d’un port utilisé par un protocole over-SSL (HTTPS ou NTTPS). Les autorisations, ou régles, sont lues en séquence. Une seule régle est choisie au final ; il y a done une relation OU entre ces régles. Les lignes de régles sont parcourues jusqu’a ce que l'une d’elles corresponde. Si aucune régle ne correspond, I’action opposée & celle décrite par la demniere régle sera appliquée. Ces sept régles sont, de base, placées dans le fichier de configuration par défaut. La septigme devra étre personnalisée et modifiée, mais ne la supprimez pas ! Voici tout d’abord un exemple de configura- tion personnalisée simple, Nous avons déja une ACL représentant le localhost, celle-ci porte ailleurs le méme nom : Il nous est done trés simple d’autoriser le local- host A utiliser le proxy squid en ajoutant : Cette régle est simple et ne devrait pas nécessiter d'explication supplémentaire. Mais n’oubliez pas que les régles sont parcourues dans leur ordre d’ap- parition dans le fichier de configuration, Ces deux lignes ne sont done pas équivalentes & : Crest une chose trés importante car ici, la premiere régle applicable est celle qui interdit utilisation du proxy. Vous ne pourrez donc pas l'utiliser sur le localhost. Aprés toute modification du fichier de configuration, il vous sera nécessaire de relancer le service squid avec squid. Crest parfait, le navigateur lancé sur le méme hote que celui ot réside le démon squid peut librement utiliser le proxy. Trois fichiers journaux nous per- mettent de suivre les accés, le plus important étant ar/log/squii qui archive les aceés au proxy. Imaginons, a présent, que nous ayons sur notre LAN une machine nommée nora ne ayant pour IP 192.168.0.10, Nous souhaitons que l'utilisateur de cette machine puisse bénéficier du proxy squid. Nous commengons alors par ajou- ter une ACL : L’ACL morgane (mais vous auriez pu la nommer comme bon vous semble) référence un accés prove- nant de Padresse 192.168.0.10. Il ne nous reste plus, ensuite, qu’a écrire une nouvelle ligne de régle AVANT hetp_access deny all, bien sir http_access allow morgane Il ne nous reste plus qu’a redémarrer squid et a configurer le navigateur sur morgane de maniére & ce quill utilise comme proxy HTTP notre machine sur le port 3128. Ici, nous venons d’autoriser une seule machine a utiliser notre proxy. Dans la plu- part des cas, on autorisera tout un LAN 4 le faire. Cela n'est pas plus complexe puisque nous pouvons utiliser un masque pour spécifier une plage adresses concernée dans une ACL Ce type de syntaxe est classique pour peu que l'on connaisse les réseaux IP. Ici, nous spécifions que le réseau concerné est 192. 168.0. Configuration avancée Pour l'heure, nous avons vu comment utiliser squid de maniére simple, de fagon & mettre en ceuvre rapi- dement un proxy pour notre LAN. Nous sommes implicitement parti du principe que les utilisateurs du LAN avait déja accés & Internet via une passe- relle NAT iptables ou ipchains, ou encore un rou- teur NAT. Mais il faut également savoir qu'un proxy peut parfaitement remplacer une machine NAT, ow encore compléter une telle installation. Ainsi, en forgant les utilisateurs du LAN & utiliser le proxy pour certaines connexions & Internet (cer- tains ports), nous pouvons trés simplement contro- ler l'accés aux sites Web avec nos régles squid. Imaginons que les utilisateurs doivent utiliser le ser- veur squid pour le Web (il suffit de ne pas faire de NAT sur le port 80 et les utilisateurs ne pourront plus se connecter directement au Web). Nous pou- vons alors interdire l'acets & certains sites en ajou- tant des ACL et des régles. Ajoutons ceci dans notre fichier de configuration acl nie fl http_access allow morgane https dstdomain www.google.c Il faudra, bien sir, supprimer la ligne hetp_access précédemment placée pour morgane. Nous ajou- tons une ACL faisant référence & une connexion a destination du moteur de recherche Google. Puis nous la réutilisons en ce qui concerne morgane en définissant que nous autorisons la connexion en provenance de morgane et & destination de n'impor- te oti sauf vers Google. Si l'utilisateur de la machi- ne en essaie de contacter le moteur de recherche, cette régle ne sera pas vérifige mais, all oui. Il se verra done refu- ser l'accés au site en question. http_access deny ‘Nous pouvons ainsi contréler complétement Iaccés aux ressources disponibles sur Internet et ce, quel que soit le type de données accédées. Voici un autre exemple, Ici, nous allons considérer que les images au format JPEG sont formellement interdites pour la machine référencée par ACL morgane. Nous définissons done une nouvelle ACL en utilisant, cette fois, une directive uri_regex. Cette directive permet de spécifier une expression réguliére/ration- nelle concernant le contenu d’une URL. Une URL est un Universal Ressource Locator. Une URL iden- tifie le nom et emplacement dune ressource et le protocole & utiliser pour y accéder. La syntaxe d'une URL est la suivante ser Ce qui nous donne, par exemple, pour le protocole HTTP : http:l/www.monsite.comlindex.html. 11 faut également savoir qu'un objet référencé dans un fichier HTML, et qui sera demandé par le naviga- teur, aura également une URL permettant de le localiser. En d'autres termes, une image dans une page HTML posséde une URL qui sera utilisée par le navigateur pour la récupérer et 'afficher ensuite sur I’écran. Notre interdiction portant sur les images JPEG ne concerne done pas uniquement les URL visibles dans le navigateur comme hip:|heww:monsite.comlimage. jpg. Nous interdirons également les fichiers JPEG dans les pages HTML. Voici notre ACL que nous pourrons utiliser ensuite, tout comme nous l’avons fait pour interdire & no de visiter Googl Notre expression réguliére n’a vraiment rien de complexe, Elle référencera n'importe quelle URL contenant la chaine «jpg». Ceci sappliquera donc, par exemple, aussi bien a Ae¢p://www.un- site.comlimage.jpg qu’a http:/hwww.unsitejpg.com! ‘ou encore A hutp:/liwww:unsite.comiljpglindex. html. Il existe encore bien d'autres directives permettant de référencer presque n’importe quel élément d’une transaction c, nous avons vu, I s'agit de référencer l'adres- Proxy Squid Gres canicas se IP source d’une connexion. ~ ést, idem pour une adresse de destination, - sredonain permet de référencer un domaine source. - dstdonain idem pour une destination (comme avec Google précédemment). - srcdom_regex toujours un domaine source, mais cette fois, le référencement est plus souple & l'aide d'une expression réguliére. ~ dstdom_regex idem pour une destination. uripath_regex, tout comme url_zegex vu pré- cédemment, nous référengons une URL mais cette fois uniquement sur la partie concernant le chemin dans URL. Attention, l’expression réguliére st sensible & la casse des caractéres contrairement & url_regex. ~ port référence un port IP. = proto référence un protocole (HTTP, FTP, etc.). + method référence une méthode HTTP comme GET, POST, etc. - browser référence un navigateur Web a l'aide une expression réguliére. ent référence un nom dutilisateur via ident. + ident_vegex idem mais avec une expression régu- ligre, - max_conn permet de référencer une limite de connexions provenant d’une seule adresse IP. req_mine_type référence un type MIME deman- dé dans len-téte dune requéte. - azp nest disponible que si votre version de squid a été compilée avec les options nécessaires. Cette directive permet de référencer l'adresse MAC dune interface Ethernet. - time permet des référencements de données tem- porelles. Cette demnigre directive est trés intéressante sur plus un point. Référencer une information concernant le temps vous permettra de gérer votre accés aux ressources d'Internet. Vous pourrez, avec la syntaxe de cette directive, établir des régles strictes dutilisa- tion du proxy : acl nom tine [ jour est une lettre désignant un jour dans la semaine s (Sunday) pour le dimanche ™ (Monday) pour le lundi 1 (Tuesday) pour le mardi ww (Wednesday) pour le mereredi x (Thursday) pour le jeudi » (Friday) pour le vendredi (Saturday) pour le samedi Le dernier paramétre de la ligne permet de spécifier une plage horaire of hi:m1 doit impérativement @tre inférieur a Voici quelques lignes en guise d’exemple : e samedi Transparence ? Nous avons abordé le fait d’obliger les utilisateurs d'un LAN a employer notre serveur proxy préc demment. Il était question de leur refuser l'accés direct & Internet. Le probléme dans cette méthode est que l'utilisateur ne configurant pas ou suppri- mant délibérément la configuration du proxy dans son navigateur constatera qu'il y a un probléme, II peut étre souhaitable cependant pour un adminis- trateur d’obliger les utilisateurs d’un LAN a utiliser un proxy mais sans qu’ils s’en rendent jamais compte. La mise en ceuvre de squid permet un filtrage du trafic plus aisé qu’avec ipchains (kernel 2.2 sur Potato) ou méme NerFilterliptables (kernel 2.4 sur Woody). Le fichier de configuration de squid est en effet trés facile d'emploi et permet toutes les confi- gurations. Le but est done de faire transiter tout le trafic HTTP vers le proxy mais cela directement, depuis les régles de filtrage. Dans ce cas, c'est la machine faisant le NAT qui fera également fonc- tionner le proxy. Ici, nous baserons notre exemple sur une Debian Woody. Nous partons, en effet, du principe que méme si une Debian Potato est parfé tement adaptée pour la mise en place des services courants, le filtrage est bien plus efficace avec un kernel 2.4 (protection contre les boucles infinies par exemple). Le principe est simple : il nous suffit de rediriger les connexions arrivant sur le port 80 vers le port utili- sé par notre proxy (3128 par défaut pour squid). De ce fait, toutes les connexions passeront obligatoire- ment par le proxy et les utilisateurs n’auront rien & configurer et ne pourront pas se passer du proxy : top. Voici en détail le contenu de cette ligne : nous ajou- tons une régle dans le préroutage (-_ >: de la table NAT (-t_nat). Toutes les connexions a destination du port TCP 80 (-p tcp —dport 80) arrivant sur la premiére interface Ethernet (-i eth0), sont redirigées (-j REDIRECT) sur le port 3128 (-to-port 3128). Interface Web Un package squid-cgi peut étre installé. Celui-ci permet de mettre en place une interface via le Web avec le serveur squid. Vous pourrez ainsi, depuis un navigateur accéder aux paramétres de configu- ration et surtout aux statistiques de charge du proxy. Sur Debian, installez tout d’abord le packa- er unpacking g stable/nain Prony Squid Corres: aéja installés.) Dépaquetage de squid-cgi (a partir de .../squid- ai, 386.deb) ... de squid-cgi (2.2.5-3.2) PORTANT: Read the documentation in jusr/share/doc, EADME. cachengr.g2 Le script CGI sera automatiquement installé dans usr/1ib/egi-bin/ sous le nom cachengr .cgi. Ce CGI ne sera pas directement utilisable puisqu’il devra étre appelé avec les bons paramétres depuis un formulaire HTML. Vous trouverez dans le répertoire /usr/doc/squid-cei /exanples une page HTML contenant ceci : a WW interface to the instrunentation cache.

Password:
“Continue...*> Il vous suffira d’intégrer ce code HTML quelque part dans votre site pour ouvrir un aceés vers le CGI de squid ou plus simplement, de copier le oe fichier cachengr .htm1 sur votre serveur HTTP. Attention ! Le plus grand nombre de précautions sont prendre avec ce type d’interface. Bien que vous puissiez mettre en place une authentification pour accéder au script CGI de squid, mieux faut copier ce fichier dans un répertoire a part. Vous pourrez ensuite y ajouter un fichier .tacces permet- tant de restreindre encore un peu plus laceés. Le fichier htaccess pourrait, par exemple, ne limiter Paceés qu’a une seule machine : order deny,allow deny from a allow from 193.252.124.15 Une autre solution, si vous étre plusieurs & adminis- trer le serveur ou si vous étes susceptible de vous connecter depuis plusieurs endroits, est de mettre en place une authentification par mot de passe AuthUserFile AuthName “User/Pas: AuthType Ba: require user caches juid.pass sword Required" Ici, les mots de passe seront stockés dans fete/squid.pass a Taide de hepasswd et seul Puti lisateur cachenanager pourra accéder au réperto re, sil fournit le mot de passe correspondant. Une autre solution consiste 4 protéger le script CGI directement en modifiant le fichier de configuration Apache et en ajoutant au choi ou AuthUserFile /etc/squid.pass AuthGroupFile /dev/null Authane User Password Authtype Basic init GET> require user cachenanager red selon le type de restriction que vous souhaitez. Une fois cela en place, éditez 4 nouveau votre fichier de configuration squid pour sécuriser le CGI. Vous trouverez en commentaire dans le fichier exemple une directive cachengr_passwa. Celle permet de définir un mot de passe pour chaque fonctionnalité de configuration parmi 5nin, 60:nin, asndb, a nticator, cbdata, list, comm_incoming, config, counters, delay, _stats, dns, events, filedescriptors, histograms, http_headers, info, io, ipeache, mem, meni , netdb, non_peers, objects, redirector, resh, se: *, stor ._digest, stor: via_headers ou encore vm_objects, Chacune de ces fonctionnalités correspond a un élé- ment de Vnterface de configuration. De plus, le 221 permet de désigner ensemble des fonctionnalités, Ainsi, pour définir le mot de passe notdepasse pour toutes ces fonctionnalités, vous ajouterez dans le fichier de configuration : cachengr_pass z Si vous étes suffisamment sir de la limitation d’ac- cés définie au niveau du serveur HTTP, vous pou- vez également spécifier qu’aucun mot de passe n’est nécessaire engr_passwd none all Vous pourrez ensuite faire pointer votre navigateur sur la page ot est placé le formulaire (figure 3) et vous identifier. Vous arriverez sur 'interface de ges- tion et de statistique de squid (figure 4). Chaque ligne du menu correspond a une fonctionnalité uti- lisable avec cachencr_passwa. Vous y trouverez, par exemple, les statistiques d’utilisation de la mémoire (figure 5), les statistiques d'utilisation du cache (figure 6), ou les informations sur l'utilisation du répertoire de stockage du cache (figure 7). Cette interface Web ne peut pas, bien sir, remplacer Védition du fichier de configuration mais vous apportera des informations trés importantes sur la charge du serveur squid. Vous pourrez alors optimi- ser votre configuration de maniére & adapter & vos besoins. Nous n’avons pas couvert ici, toutes les fonctionnalités de squid, loin de la. Les utilisateurs soucieux de tirer le meilleur de ce logiciel sont invi- tés A consulter la documentation en ligne et la FAQ sur le serveur officiel du projet. Le fichier de confi- guration par défaut vous apprendra également bon nombre de choses concernant la configuration avancée, 0.0.0.0 cease ——en ‘Cache Manager Interface sie WH intact erent tc Sel tr ct, iene ewes Somme St HT DoH SEEE 5H Ot Sree Do Ort Stn Oo SP Gomera, 200 166 Ty ache 2 STABLES fos eaee ee cee 3 Stunnel : tunneliser ses communications La plupart des protocoles de communication ne sont pas sécurisés. Entendez par la qu'une personne faisant usage d'un simple logiciel de “sniffing” peut lire en clair toutes les informations qui circulent entre vous et un serveur. Les logi iels de ce type sont tres courants, aussi bien pour GNU/Linux que pour les autres Unix, et méme Windows et MacOS. Ils représentent un véritable danger dans certaines Le cas le plus a risque est sans nul doute celui lorsque vous vous connectez depuis un poste d'un réseau local & votre serveur Internet. En effet, dans ce cas, n'importe quel utilisateur du réseau local peut écouter sans la moindre difficulté tout ce que vous envoyez et recevez. Ce genre de manipulation est également possible dans d'autres circonstances, mais avec davantage de difficulté pour "Yespion". Exemple concret Nous lavons dit, le nombre d'utilitaires capables d'écouter un réseau sont Iégion. Mais ne vous y trompez. pas, il ne s‘agit pas seulement de logicieis pour pirates en herbe. Ces utilitaires vous permet- tront d'administrer votre réseau et d'analyser les informations qui y circulent afin de corriger les pro- blémes et de sécuriser ce qui doit létre. Llutilitaire d'administration de ce type le plus cou- rant, et sans doute installé par défaut sur votre sys- téme, est fepcump. Il s‘agit d'un réel outil d'adminis tration, et méme si son utilisation peut paraitre complexe, sa puissance est indéniable. Ne vous fiez pas & 'apparence des données qui affiche, repdump niest qu'un exemple. Bon nombre d'u beaucoup plus conviviaux (en particulier sous Windows), et permettent & des personnes n'ayant quasiment aucune connaissance des réseaux de récupérer vos logins et mots de passe. Voici un exemple de ce que peut faire tcpdump. Nous avons en présence I'héte egon sur lequel rési de un serveur FTP et morgane, notre machine clien- te pour le FTP. Ici, les deux machines sont sur le LAN, mais si le serveur FTP se trouvait sur Internet, nous obtiendrions le méme résultat puisque les connexions des machines du LAN vers constances. Internet "diffusent” sur tout le réseau local. Sur morgane, lutilisateur moi se connecte légitime- ment sur le serveur FTP eco nected to TPD fe Debian Ware (egon:denis): moi 331 Password required for moi. sword: noi saisit son login et le mot de passe correspon- dant. Le probléme est alors le suivant : ces informa- tions sont envoyées en clair sur le réseau et un utili- sateur du LAN pourra les lire en employant I demande a tcpdump d'afficher les données circu- lant sur le réseau & destination d'egon, notre ser- veur FTP (ds: egon), sur le port 21 (port 21) et en TCP. Le résultat est édifiant. Parmi les données affichées, on trouve : 0043 4 CG.PASS.morgane 0x00 Pour peu que l'on connaisse vaguement les com- mandes FTP ou que I'on soit un tantinet observa- teur, on arrive vite & déduire que le login est noi et le mot de passe morgane. Voili comment un utilisa- teur du LAN peut connaitre votre mot de passe sur un serveur FTP. Mais cela ne s'arréte pas li, ceci est applicable & beaucoup d'autres protocoles comme Vauthentification HTTP, la récupération de mail en POP ou IMAP, les connexions en shell distant non sécurisé (rlogin, telnet, rsh) et bien d'autres encore. De plus, repdump niest pas le plus ais¢ des utilitaires de sniffing, ni le plus clair. Pour un débutant, des logi- ciels comme dsniff sont encore bien plus parlants : (0/01/02 23:2 39.1 ‘USER anonymous PASS moi@kkpart.fr 92.168.0.51.110 (pop) user moi morgane 566 }kKGIDI RSS motdepass: dsniff est spécialisé dans V'analyse des transactions et affiche directement les informations que l'utilisa- teur “epson” recherche. On voit alors clairement PAutces] apparaitre les logins et mots de passe pour le mail (POP), le FTP, mais aussi pour l'authentification HTTP sur un serveur Web. Et encore, il s'agit 1a d'un utilitaire GNU/Linux, mais des équivalents colorés et simplistes existent pour bien des plates- formes. La solution : le tunneling Vous ne pouvez. changer les protocoles et, méme dans ce cas, vous rendriez votre configuration com- plétement propriétaire, opaque et surtout incompa- tible avec le reste d'Internet. La solution consiste donc a ne pas contacter directement votre serveur depuis un environnement que vous ne contrélez pas totalement. Puisqu'une connexion directe entre une machine et votre serveur est "écoutable", il suffit de prendre ses, informations, transitant au regard de tous, et de les enfermer a l'intérieur d'une communication qui, elle, est illisible, si ce n'est pas vous et le serveur, Cette technique est appelée tunneling. On crée un tun- nel de communication entre deux machines. A Tinté- rieur du tunnel, les données peuvent circuler en toute sécurité. En revanche, les données percues de l'exté- rieur du tunnel sont indéchiffrables car cryptées. Ce genre de tunnel est trés facilement réalisable avec un utilitaire appelé stunnel. Celui-ci utilise SSL afin de protéger les informations circulant dans le tunnel, Son installation sur une distribution Debian se fera d'un simple # apt-oet inst all stunnel Le systéme aptldpkg installera automatiquement les bibliothéques et packages nécessaires au fonction- nement de lutilitaire en méme temps que ce dernier. Vous remarquerez également un message indiquant que le script d'installation a besoin d'un grand nombre de données aléatoires et quil est conseillé de lancer un find / pour eréer de Tactivité systéme Paranétrage de stunnel (3.11 T need to ga 1 create as 00 long ure setup foi strenents lus strenents écrits. SERVEUR <> Données en cae St——> Données provégies <> Communication interne en clair Cette masse de données aléatoires est nécessaire pour la création d'un fichier de clefs permettant de sécuriser la transaction. Ces clefs seront placées dans /etc/ssi/cert 1 /stunnel.pen, La figure 1 montre le principe de fonctionnement de stunnel en complément d'un client mail se connectant a un serveur POP. En rouge est illustré le fonctionnement normal d'une connexion : le client mail (MUA) contacte le serveur sur le port 110 (celui du serveur POP). Avec stunnel, nous n'établissons plus de connexion directe du client vers le serveur. Le client mail se connectera au port POP sur la machine locale (en Vert). stunnel sera a l'écoute sur ce port et utilisera ces données quill va chiffrer et envoyer au démon stunnel du serveur. Sur ce dernier, les données seront déchiflrées et envoyées sur le port 110 (au serveur POP), En fonctionnant de la sorte, aucune information en clair n'est transmise. Il devient impossible pour un utilisateur espion d'écouter les données, et donc les mots de passe de l'utilisateur relevant ses mails. De plus, comme le tunnel ne passe pas par le port nor- malement utilisé (110), le vilain ne verra rien du tout, pas méme une communication quill aura bien du mal a analyser et lire La pratique Nous avons a présent tous les éléments nécessaires a la création d'un tunnel entre notre client et notre serveur. Si nous conservons le cas d'un client mail et d'un serveur POP, nous utiliserons stunnel de la maniére suivante : * Sur le serveur, nous attendons les connexions sécurisées sur le port 14000 (option -a). Celles-ci seront déchifirées et renvoyées sur le port 110 de Théte local (option -r): Lioption -f demande un fonctionnement en avant- plan et -> 7 un niveau de débogage maximum. Ces deux options sous permettront de suivre le déroule- ment des opérations. Bien stir, en temps normal, vous ne ferez pas usage de ces deux paramétres et lancerez alors stunnel en mode démon. Sur la machine cliente, nous procédons de méme. Nous définissons que les connexions arrivant sur le port 110 de I'héte local soient chiffrées SSL, puis envoyées 4 I'h6te egon sur le port 14000. Nous venons justement de définir sur le serveur que les données sont attendues sur le port en question. # stunnel -D 6 -f -d1 egon:14000 A présent, lorsque nous souhaiterons contacter de maniére sécurisée notre serveur POP sur eon, nous niaurons qu’a demander & notre client mail de les relever sur I'héte local et son port 110. stunmel prendra alors le pas et contactera le serveur sur le port 14000. ‘Un éventuel espion écoutant les communications sur le port 110 ne verra rien et quand bien méme il écouterait Je port 14000, il n'y comprendrait rien. Ce genre ce mécanisme avec stunnel fonetionne avec presque tous les protocoles. Malheureusement, ce n'est pas le cas du FTP, car la méthode utilisée spé- cifie un tunnel par port. Or, le FTP utilise générale- ment plusieurs ports et de ce fait, si la transaction semble bien débuter, elle méne rapidement a un échec et un gel du client. Diautres utilitaires du type stunnel existent, comme SSLwrap par exemple, mais le méme probléme se pose avec le FTP. Dans ce genre de situation, mieux vaut se tourner vers des logiciels serveurs et clients FTP, qui supportent directement SSL. Enfin, pour conclure, signalons qu'il existe une version Windows de stunnel qui s'utilise de maniére similai- re, Vous pourrez ainsi vous connecter de maniére sécurisée depuis un ordinateur ne disposant pas du systéme GNU/Linux. Ceci peut s‘avérer trés utile lorsque la machine client est celle de votre lieu de travail et que I'installation de notre cher OS n'est pas possible, See Dean aed Ce fee Pee eee eee Acti tu serves Surveillez l'activite de votre serveur La mise en ceuvre d'une machine serveur dédiée sur Internet peut paraitre aisée avec les distributions modernes et facile & maintenir. Cependant, personne n'est a l'abri de problémes, en particulier lorsqu'une machine est publiquement accessible par des milliers d'utilisateurs potentiels. Un systéme Unix comme GNU/Linux dispose d'un mécanisme puissant et fiable pour garder une trace de toutes activités sur une machine : les journaux systeme. Installé avec n'importe quelle distribution, le service sysklogd permet d'enregistrer activité sur une machine, de maniére organisée et grandement configurable. sysklogd est composé de deux pro- grammes démons. Le premier, syslogd, est chargé de la gestion des requétes qui lui sont envoyées par toutes les applications du systéme. Ce démon est une version évoluée de l'utilitaire Berkeley du méme nom. Le second, klogd est pour sa part chargé de spect "Noyau" ; il gérera tous les messages en provenance du programme le plus important du systéme et celui qui a le plus de droit sur la machine : le noyau Linux Les deux démons fonctionnent de concert sur un systéme GNU/Linux. Nous ne parlerons ici que de syslogd, car ce qui nous occupe est principalement le fonctionnement des applications serveurs (Apache, Exim, qpopper, proftpd, etc.) Toutes ces applications utilisent syslogd pour archiver les infor- mations sur ce qu‘lles font, comment elles le font et qui leur demande de le faire. C'est dans les journaux de syslogd, les syslogs que vous trouverez tout cela. Attention, k/ogd n'en est pas moins important, car étant donné les informations qu'il manipule, vous avez tout intérét a le surveiller. Cela aussi bien sur une machine serveur que cliente, klogd archive les messages en fonction de leur priorité. Ces priorités vont de 7 0 et tout ce qui est d'une priorité entre 3 et | est trés important. Enfin, la priorité 0 est uti sée pour les situations véritablement critiques. Dans ce cas, l'utilisateur, méme averti, se contentera d'une prigre pour St Kernel et sera sans doute foreé de faire usage de Tinterrupteur d'alimentation. Les messages de klogd aprés traitement sont envoyés a syslogd. syslogd utilise deux types de catégorie pour désigner les informations. Dans un premier temps, une infor- mation est désignée par sa priorité ou, en d'autres termes, son importance (ici lstée par ordre croissant) : simples informations de débogage messages d'informations simples .¢ : messages significatifs mais "normaux" 5 : messages d'alerte, quelque chose de Touche se passe error : messages d'erreur une situation critique se présente messages d’alerte, ici I'intervention ine est demandée, et le plus rapidement possible le systéme devient instable/inutilisable En plus d'un classement par priorité, syslogd orga- nise les messages en fonetion de leur type. On parle alors de "facilités" fournies par syslogd. Voici les facilités disponibles ea pour tout ce qui traite de la sécuri- tet de fauthentification @ cron pour ce qui est en rapport avec les taches réguliéres (systéme cron et at) @ ca, pour les messages provenant des démons en fonctionnement @ kern pour les messages du kernel (provenant de klogd) @ 1ocal0 & 1ocai7 pour les informations locales. On peut parler de facilité personnalisable pour les applications locales du systéme. ‘© pr pour ce qui est relatif au systéme d'impres- sion @ aii pour ce qui concerne les mails @ news pour ce qui est en rapport avec les news USENET @ sysios pour les informations relatives au fonctionnement de syslogd lui-méme @ user pour les informations génériques sur les utilisateurs ‘ vucp pour ce qui concerne le systtme UUCP Une fois cette double classification assimilée, vous serez prét & personnaliser le comportement de s) logd via son fichier de configuration. syslog.conf Comme la totalité des fichiers de configuration concernant le fonctionnement général du systéme, le fichier de configuration de syslogd est placé dans /etc sous le nom sysiog.coné. Dans ce fichier, les lignes vides (blanches) et celles débutant par un diése (#) ne sont pas prises en compte, Le # est utilisé pour ajouter des commen- taires. Les autres lignes sont des directives pour sy's- Jogd. Elles sont composées de deux parties séparées par un espace (caractére espace ou tabulation). La premiere partie est le champ sélecteur permettant de définir la priorité et la facilité concernée, la seconde partie est le champ d'action. Crest ici que nous indiquerons que faire des informations (mes- sages) désignées par le champ de sélection. Le champ sélecteur utilise les priorités et les facilités décrites plus haut en utilisant leur nom et en les séparant d'un point. De plus, un caractére "joker" est utilisé, clest le *. Il servira a désigner n'importe quelle facilité ou priorité selon lendroit oi il est placé par rapport au point séparateur. Vous pouvez également utiliser la virgule pour spécifier plusieurs facilités pour une méme priorité. De plus, un point- virgule peut étre utilisé pour spécifier plusieurs champs de sélection pour une seule action. Il ne faut également pas perdre de vue que les priorités spécifiges dans le champ de sélection définissent normalement une limite égale ou supérieur. Voyons quelques exemples concrets tirés du fichier de configuration par défaut d'une distribution Debian Dans leur ordre d'apparition, ces lignes définissent tous les messages utilisant la facilité kernel quelle que soit leur priorité ; ¢ les messages concernant la facilité maiz d'un niveau warn et supérieur ; @ tous les messages de toutes facilités et de toutes priorités et les messages se rapportant la sécurité qui ne possédent pas de priorité et supé- rieurs, auth et uthpriv sont équivalents ; @ enfin, tous les messages concernant la sécur 1€ quelle que soit la priorité. ‘Nous I'avons dit plus haut, en temps normal, les priorités spécifiées ne sont qu'une limite. Il est cependant possible de ne définir qu'une seule priori té (ni plus importante, ni moins) en ajoutant le signe 'égalité (=) avant la priorité définie. Le point d'exclamation permet également d’ajouter une négation. En ce qui concerne le champ d'action, seconde partie d'une ligne de syslog.conf, il s'agit d'un fichier journal. Mais ne vous y trompez pas, un fichier journal, ou logfile, n'est pas nécessaire- ment un véritable fichier. Le premier caractére du champ d'action détermine le type de "fichier" Si le champ d'action débute par un / (comme ‘var /log/n: ), Jes messages sont enregis- trés dans le fichier spécifié. Si le champ débute par un signe -, syslogd ne synchronisera pas le fichier aprés chaque message. Le probléme dans ce cas est une perte potentielle d'information si un probléme bloquant survient immédiatement apres lenregistre- ment du fichier. En contrepartie, cette possibilité vous permettra d'économiser grandement des res- sources, en particulier avec des démons trés (trop ?) bavards. Enfin, le symbole | vous permettra de redi- riger les messages vers un tube nommé ou une console (/dev/tty10). Enfin, syslogd dispose d'une fonctionnalité trés intéressante sur bien des points. Elle consiste & pou- voir envoyer les messages a un autre syslogd fone- tionnant sur un autre hote, Au premier abord, ceci offre une facilité dans la surveillance d'un pare de serveurs, Toute l'activité systéme de plusieurs ser- veurs étant enregistrée sur une seule et méme machine, il devient aisé d'administrer la chose. Laautre gros avantage concernant cette fonctionna- lité est du point de vue sécuritaire. En effet, un pira- te ayant pris tout ou partie d'une machine cherche- ra A effacer ses traces. Si les journaux sont déportés, il devra prendre le contréle de la machine archivant Yactivité. Or, justement, on prendra soin de ne faire tourner aucun autre serveur sur cette machine, offrant ainsi le minimum de points dentrée au vilain. lest de plus possible d'utiliser un tunnel chiffré entre les serveurs et la machine d'archivage afin que le pira- te ne puisse pas écouter lactivité des serveurs qui cit- ccule en temps normal en clair sur le réseau, Archiver l'activité de tous les services d'une ou plu- sieurs machine(s) est quelque chose de trés prudent. Cependant, lorsqu'un serveur met a disposition des services de mail, HTTP, FTP, etc., les journaux sys- téme arrivent vite a prendre une place considérable sur le systéme de fichiers. Dans le cas qui nous ‘occupe depuis le Hors série 9, votre serveur est sans doute une petite configuration et lespace disque est peut-étre limité. II nous faut donc trouver une solu- tion pour ne pas perdre des informations impor- tantes, tout en économisant de la place. La solution existe, Cest la rotation des logs. Le principe est le suivant : en temps normal, un fichier log grossit au fil du temps de maniére plus ou moins réguliére. Plutt que de ne conserver qu'un seul exemplaire de chaque fichier log, nous archivons @ intervalle régulier ces fichiers et en commengons un nouveau. Nos fichiers désignés dans la configuration de syslogd ne contiendront ainsi que les informations les plus récentes, les anciens messages étant regroupés dans des archives compressées. L'utilitaire habituellement mis en ceuvre pour ce type de mécanisme est logrotate. Celui-ci est appelé réguligrement depuis le crontab et utilise un fichier de configuration unique. Avec une distribution Debian, logrotate est appelé quotidiennement par anacron (une alternative au cron classique). Vous trouverez dans ly un script shell nommé usr/sbin/1¢ contenant fea dco Usagi de tapped a commande de rotation des logs avec, en para- métre, le fichier de configuration & utiliser. La périodicité utilisée dans le crontab n'est pas capita- le si ce n'est quielle doit étre plus courte que la période entre deux rotations de logs. En effet, le fichier de configuration -conf contient une directive spécifiant la fréquence de rotation : weekly Le fichier de configuration se compose de deux grandes parties, Dans un premier temps, nous avons les directives de configuration globales qui s'appli- quent & tous les fichiers logs. Ces directives sont habituellement placées en début de fichier de confi- guration. Ensuite arrivent les paramétres spécifiques de chaque fichier log sils sont différents des para- métres globaux. Pour définir des directives spécifiques un fichier log, on utilise la syntaxe suivante : ‘ctv a serveur ‘Tout ce qui se trouve entre {} ne concernera que ce fichier. Les paramétres non définis dans cette por- tée seront remplacés par les valeurs des paramétres globaux. Voyons directement un exemple avec notre fichier /var/1og/messages : var /log/messac rotate 10 postrotate sbin/killall -HUP syslogd endscript } Cette portion de paramétre concerne ‘var/log/nessages. Nous spécifions que la rota- tion de ce log doit se faire 10 fois avant sa suppres sion définitive (rotate 10). Nous spécifions égale- ment que la rotation se fera une fois par semaine (weekly). En réalité, weekty définit une rotation si Je jour de la semaine actuelle est inférieur au jour de la semaine de la rotation précédente ou si plus d'une semaine s'est écoulée entre les deux rotations. Normalement, avec un appel quotidien & te depuis la crontab, la rotation aura lieu tous les premiers jours de la semaine, tate et permettent de lancer une commande aprés la rotation du fichier log mais avant que l'ancienne version du fichier log ne soit supprimée. Ici, nous redémarrons syslogd afin de ne pas perdre un seul message durant lopération de copie/suppression. ‘Nous pourrions également ajouter la ligne suivante dans la portée de /var/10g/messages sail Kkunékkpart. fr endscript Dans ce cas, la rotation suppressive (la derniére qui déclenche la suppression du dernier fichier log), est remplacée par lenvoi d'un mail contenant ce log & la personne désignée par kkun@kkpart. fr. Cela ajoute, en quelque sorte, une sécurité supplémentai- re étant donné que l'archivage définitif se fera sur une machine sans doute différente. Cette option, combinée a l'exportation des messages syslogd vers une autre machine (sur laquelle tourne logrotate), vous assurera une relative sécurité. Arrétons 1a nos explications qui, je pense, sont suf- fisantes pour garder un ceil sur les logs systéme de maniére sire. Vous trouverez des informations plus précises dans les pages de manuel et dans les docu- mentations officielles des différents utilitaires. que le SSH : Secure Shell A l'heure actuelle, la totalité des distributions GNU/Linux fournissent aussi jien le serveur nt SSH. Du fait de cette grande diffusion, un certain nombre de documentations ont été écrites, aussi bien en francais que dans toutes les autres langues. Il s'agit souvent, malheureusement, de papiers trés théoriques, et l'utilisateur n'est guére avancé quant & l'utilisation effective de SSH. Notez que cet article est déja paru dans Linux Magazine 33. Cependant, en tant qu’administrateur, il vous est indispensable de pouvoir vous connecter sur votre serveur de maniére sécurisée. Le présent hors série n’aurait donc pas été complet sans décrire la maniere d’utiliser OpenSSH par la pratique. Nous avons donc choisi de rééditer cet article, qui vous donnera toutes les indications nécessaires pour sécuriser vos connexions. Nous allons, avec cet article, tenter d'aborder I'as- pect pratique de la mise en ceuvre d'un serveur sshd ainsi que l'utilisation du client et des divers élé- ments de contréle. Mais avant d'entrer dans le vif du sujet, passons tout de méme par la case présen- tation, histoire de voir de quoi on parle. SSH SSH est un logiciel fournissant des fonctionnalités semblables & rlogin, CGSB econo laclen ete mt ine cuca eet serveur sont chiffrées. Le principal probleme de ces Equivalents historiques était de transmettre toutes les informations en clair sur le réseau (LAN ou Internet). Ceci ouvrait la porte des attaques tres importantes, puisquiil suffisait a Vattaquant d'écou- ter le réseau avec un utilitaire adéquat (comme le simple tcpdump) pour non seulement assister en direct a tous les échanges entre clients et serveurs mais également, par la méme occasion, voir tous les mots de passe transiter. gin, rsh et rep ne sont pas les seuls pro- grammes & procéder de la sorte ; la majorité des protocoles traditionnels échangent toute informa- tion en clair sur le réseau. C'est le cas de FTP, HTTP, POP3, IMAP, NFS et tant d'autres. De base, SSH permet de remplacer les utilitaires four- nissant une connectivité distance pour le shell. Nous verrons plus loin dans cet article qui est par- faitement possible, grice 4 SSH, de sécuriser des protocoles dja existants. Nous I'avons dit, SSH chiffre la communication pour éviter les écoutes passives. Mais SSH apporte d'autres fonctionnalités trés intéressantes en termes de sécurité. II propose par exemple un systéme d'au- thentification des machines en présence. Normalement, une machine est identifiée par une adresse ou un nom. Malheureusement, ces informa- tions peuvent facilement étre utilisées par un atta- quant pour faire croire que sa machine est I'une des deux autorisées (client ou serveur). SSH permet ‘ajouter une couche d'authentification en identi- nt les parties en présence a l'aide d'une clef. Ainsi, si usurper une adresse ou un nom de machi- ne est quelque chose de relativement facile, obtenir une clef est presque impossible. Concernant le logiciel lui-méme, SSH est originelle- ment un logiciel propriétaire, certes libre d'utilis tion dans un but non-commercial, mais cela n'est pas suffisant dans une optique qui est celle que nous défendons. Voili pourquoi la quasi-totalité des utilisateurs préférent OpenSSH, qui est une implémentation Libre (licence BSD). OpenSSH repose entigrement sur une bibliothéque de fonc- tions nommée OpenSSL et utilisable sous les termes d'une licence de type Apache. OpenSSL contient tous les éléments cryptogra- phiques nécessaires au fonctionnement d’OpenSSH. Protocoles Le protocole SSH existe en deux versions majeures. SSHI, le premier (historiquement) se décline en deux sous-versions notées 1.3 et 1.5. L'autre version du protocole, SSH2, est plus récente et corrige Jement quelques erreurs de conception. Sans rentrer dans le détail, SSH1 utilise un CRC (somme de contréle) pour assurer lintégrité des données trans- mises. Ce procédé étant trop faible, SSH2 I'a rem- placé par un autre algorithme nommé HMAC. Autre changement majeur, SSH1 était monolithique alors que SSH2 divise le protocole en couches qui sont documentées dans des RFC différentes. OpenSSH supporte aussi bien SSHI (1.3 et 1.5) que SSH? dans sa version la plus récente (OpenSSH 2.9.9). Mise en ceuvre Apris cette bréve introduction théorique, passons au c6té pratique et commengons par installer les Eéments nécessaires 4 OpenSSH dont la biblio- théque OpenSSL. Bien que certaines distributions possédent un systéme de packaging extrémement performant (comme la Debian), il est plus efficace que compiler vous-méme les éléments dont vous avez besoin. Il est trés important d'utiliser les toutes, demiéres versions disponibles car des bogues et des failles de sécurité (importantes ou non) sont décou- verts réguligrement. Vous pourrez récupérer les sources mais également des packages pour votre distribution sur le serveur officiel : www.openssl.com. Ici, nous considérerons une installation a partir des sources. Décompressez archive comme d'habitude avec : Notez qu'une archive openss 0.9.6b. tar.gz est présente sur le serveur off ciel. Il sagit d’un module supplémentaire permet- tant le support de certains périphériques eryptogra- phiques (CryptoSwift, Compaq Atalla et nCipher CHI pour le moment). Considérez ce module comme expérimental, bien que trés stable. Ne pos- sédant pas un seul des périphériques en question, nous n'avons pas procédé a des tests. Peut-

You might also like