Ubuntu Server

Embed Size (px)

Citation preview

Serveurs "soho" sous Ubuntu ServerDploiement et exploitationMichel Blanc, netWorks Serveurs "soho" sous Ubuntu Server: Dploiement et exploitationpar Michel Blanc$Revision: 1.23 $Publi le $Date: 2007/07/07 14:26:00 $iDdicaceMille mercis Margaux, Virginie, Corentin et Hugo qui ont support leur boullllu soir aprs soir avecpatience tout en vitant le DocBook : The Definitive Guide [http://www.docbook.org/tdg/en/html/docbook.html] qui traversait souvent la pice basse altitude...iiTable des matiresIntroduction............................................................................................................... viii1.Cequ'estcedocument..................................................................................... viii2.Cequecedocumentn'estpas........................................................................... viii3.Audience....................................................................................................... viii4.Nouvellesversionsdecedoc..............................................................................ix5.Revisions........................................................................................................ ix6.Contributions................................................................................................... ix7.Feedback........................................................................................................ ix8.Copyright........................................................................................................ ix9.Prrequis......................................................................................................... ix10. Conventions utilises dans ce document ..............................................................ix11.Organizationdecedocument............................................................................. x1.Principesgnraux.................................................................................................... 11.1.Pourquoicesprincipes?.................................................................................. 11.2.L'OSSestunavantage..................................................................................... 11.3.Lascurit,partieintgrante............................................................................. 21.4.Priviligierlasimplicit................................................................................... 21.5. Principe du privilge minimum et sparation des pouvoirs.....................................21.6.Dployerlestrictncessaire............................................................................. 31.7.Procdures..................................................................................................... 31.8. Dimensionner les mesures de scurit................................................................32. Post-configuration du systme d'exploitation ..................................................................52.1. Modifier un fichier de configuration ...................................................................52.2. Suppression des services et paquetages inutiles .....................................................62.2.1.Objectifs............................................................................................. 62.2.2.Dnicherlesservices.............................................................................62.2.3.Dnicherlespaquetages.........................................................................62.3.Ajustementssystme....................................................................................... 82.3.1.Sysctl................................................................................................. 82.3.2.IPv6................................................................................................. 132.4.ConfigurationdelapileIP.............................................................................. 142.4.1.Adressage.......................................................................................... 142.4.2.RsolutionDNS................................................................................. 152.4.3.Filtragedebase.................................................................................. 162.4.4.Modifierlesrgles.............................................................................. 212.5.Intgritdesfichiers...................................................................................... 212.5.1. Installation du serveur OSSEC ..............................................................222.5.2. Installation d'un client OSSEC ..............................................................223. Dploiement et guide des oprations OpenSSH .............................................................233.1.Qu'estcequ'OpenSSH?................................................................................. 233.2.Installation................................................................................................... 233.3.Configuration............................................................................................... 243.3.1.Portd'coute...................................................................................... 243.3.2.Paramtres......................................................................................... 263.4. Authentification par clef publique ....................................................................273.4.1.Crationdeclefclient......................................................................... 273.4.2. Mise en place des clefs sur le serveur .....................................................283.4.3. Regnration des clefs sur le serveur ......................................................293.4.4. Modification du mot de passe d'une clef prive .........................................314. Dploiement et guide des oprations Apache ................................................................324.1.Historiqueetdescription................................................................................. 324.2.Architecture................................................................................................. 324.2.1.ModlesMPM................................................................................... 324.2.2.Modules............................................................................................ 334.3.Grerleservice............................................................................................ 34Serveurs "soho" sous Ubuntu Serveriii4.3.1.Dmarrageetarrt.............................................................................. 344.4.Filtrage........................................................................................................ 344.4.1.Filtrage............................................................................................. 354.4.2. Protection contre les dnis de service (DoS) ........................................354.5.Configuration............................................................................................... 384.5.1.Fichiersdeconfiguration...................................................................... 384.5.2.Configurationgnrale......................................................................... 384.5.3. Site par dfaut et VirtualHosts ..............................................................404.5.4.Crationd'unVirtualHost..................................................................... 404.5.5.Contrled'accs................................................................................. 425. Dploiement et guide des oprations PHP ....................................................................455.1.Installation................................................................................................... 455.2.Configuration............................................................................................... 475.2.1.Restrictions........................................................................................ 475.2.2.Limites............................................................................................. 485.2.3.Gestiond'erreurs................................................................................. 495.2.4.Exceptions......................................................................................... 496. Dploiement et guide des oprations MySQL ................................................................ 516.1.Installation................................................................................................... 516.2.Grerleservice............................................................................................ 526.3.Notionsdebase............................................................................................ 536.3.1.Fichierdeconfiguration....................................................................... 536.3.2.Utilisateurs........................................................................................ 536.3.3.Basesdedonnes................................................................................ 536.3.4.Outils............................................................................................... 546.3.5. SQL par l'exemple en 3 minutes ............................................................546.4.Configurationinitiale..................................................................................... 566.4.1.Utilisateurs........................................................................................ 566.4.2.Basesdedonnes................................................................................ 596.4.3.my.cnf............................................................................................616.4.4.Enfiniravecl'historique...................................................................... 626.4.5.Filtrage............................................................................................. 626.5.Gestiondesdroits......................................................................................... 636.5.1.GRANT............................................................................................636.5.2.REVOKE......................................................................................... 646.5.3.Visualisationdesdroits........................................................................ 646.5.4. Droits utilisables avec GRANT et REVOKE ..........................................656.6.Pertedesidentifiants...................................................................................... 656.7. Sauvegarde et restauration de bases ..................................................................667. Dploiement et guide des oprations ProFTPD ..............................................................707.1.Installation................................................................................................... 707.2.Configuration............................................................................................... 727.2.1. /etc/proftpd/modules.conf ......................................................727.2.2. /etc/proftpd/proftpd.conf ......................................................737.3.Filtrage........................................................................................................ 737.4.Grerleservice............................................................................................ 767.4.1.Dmarrageetarrt.............................................................................. 767.4.2. Supervision des connexions ..................................................................767.4.3.Suspendreleservice............................................................................ 767.4.4.Logs................................................................................................. 778. Dploiement et guide des oprations Postfix .................................................................788.1.Installation................................................................................................... 788.2.Configuration............................................................................................... 818.2.1.Reconfigurationdebase....................................................................... 818.2.2.Fichiers............................................................................................. 828.2.3.Principalesdirectives........................................................................... 838.2.4.Alias................................................................................................ 858.2.5.Rcritured'adresse............................................................................. 86Serveurs "soho" sous Ubuntu Serveriv8.3.Grerleservice............................................................................................ 878.3.1.Dmarrageetarrt.............................................................................. 878.3.2.Gestiondelaqueue............................................................................ 878.4.Filtrage........................................................................................................ 889. Dploiement et guide des oprations Samba .................................................................909.1.Installation................................................................................................... 909.2.Configuration............................................................................................... 929.2.1.LesdmonsSamba............................................................................. 929.2.2. Dmon permanent ou super-serveur xinetd ..............................................929.2.3.Choixd'architecture............................................................................ 939.2.4. /etc/samba/smb.conf ..................................................................939.3.Filtrage...................................................................................................... 1019.4.Grerleservice........................................................................................... 1039.4.1.Gestiondesutilisateurs.......................................................................10410.ChiffrementSSL/TLS........................................................................................... 10610.1.Gnralits................................................................................................10610.1.1.Problmatique................................................................................. 10610.1.2.Architecture.................................................................................... 10610.2.Prparatifs................................................................................................ 10710.2.1. Le paquetageOpenSSL ...................................................................10710.2.2. Cration d'une autorit de certification .................................................10810.2.3. Cration d'un certificat serveur ...........................................................10910.2.4.Listedervocation.......................................................................... 11110.3.Dploiement..............................................................................................11210.3.1.HTTPS.......................................................................................... 11210.3.2.FTP/TLS........................................................................................ 11510.3.3.MySQL/SSL................................................................................... 11610.3.4.SMTP/TLS..................................................................................... 11711. Dploiement et guide des oprations OpenVPN .........................................................11811.1.Installation................................................................................................ 11811.2.Configuration............................................................................................ 11911.2.1. Gnration des paramtres Diffie-Hellman ...........................................12011.2.2. Gnration de la requte de signature de certificat client ..........................12011.2.3. Signature de la demande de signature ..................................................12111.2.4. Fichier de configuration serveur .........................................................12211.2.5. Fichier de configuration client ...........................................................12311.2.6.Testdelaconfiguration.................................................................... 12311.2.7.Autresparamtres............................................................................ 12411.2.8.Dmarrageauboot.......................................................................... 12511.3.Filtrage.................................................................................................... 126A.Firewalldebase.................................................................................................... 127B. GNU Free Documentation License ...........................................................................131B.1.PREAMBLE.............................................................................................. 131B.2. APPLICABILITY AND DEFINITIONS .........................................................131B.3.VERBATIMCOPYING............................................................................... 132B.4.COPYINGINQUANTITY.......................................................................... 133B.5.MODIFICATIONS...................................................................................... 133B.6. COMBINING DOCUMENTS .......................................................................134B.7. COLLECTIONS OF DOCUMENTS ..............................................................135B.8. AGGREGATION WITH INDEPENDENT WORKS .........................................135B.9.TRANSLATION......................................................................................... 135B.10.TERMINATION....................................................................................... 135B.11. FUTURE REVISIONS OF THIS LICENSE ...................................................136B.12. ADDENDUM: How to use this License for your documents ..............................136Glossary................................................................................................................... 137Bibliographie............................................................................................................ 140vListe des illustrations2.1.Premierboot.......................................................................................................... 52.2.Traficegressetingress ......................................................................................... 165.1.PHPInfo............................................................................................................. 467.1.Choixd'installation................................................................................................ 717.2.ModeFTPpassif...................................................................................................757.3.ModeFTPactif.................................................................................................... 757.4.ftptop................................................................................................................. 768.1. Postfix: Choix du type d'installation .........................................................................798.2. Postfix: Choix du nom du serveur ............................................................................798.3.Postfix:ChoixdurelaisSMTP................................................................................ 809.1. Vue du serveur dans le Voisinage rseau ..............................................................9510.1.TestHTTPS.....................................................................................................11511.1. Principe de fonctionnement d'une PKI ...................................................................119viListe des tableaux1.Conventionstypographiques........................................................................................ x4.1. Apache : dtermination de la restriction ....................................................................436.1. Exemple SQL : Table des Gnies ............................................................................. 549.1. Samba : principales variables de substitution ............................................................101viiListe des exemples4.1. Apache: configuration du filtrage TCP en entre .........................................................354.2. Apache : Limitation de connexions avec ipt_limit .......................................................364.3. Apache : Limitation de connexions avec ipt_recent ......................................................376.1. MySQL : configuration du filtrage TCP en entre .......................................................628.1. Postfix : configuration du filtrage TCP en entre .........................................................888.2. Postfix : configuration du filtrage TCP en sortie .........................................................899.1. Samba : configuration du filtrage UDP en entre et en sortie ........................................1029.2. Samba : configuration du filtrage TCP en entre .......................................................1039.3. Samba : configuration du filtrage TCP en sortie ........................................................10310.1. Apache HTTPS: configuration du filtrage TCP en entre ...........................................11411.1. OpenVPN : configuration du filtrage UDP en entre .................................................126viiiIntroduction1. Ce qu'est ce documentCe document dtaille les diffrentes tapes ncessaires la mise en place de serveur type SOHO sousUbuntu linux. Par SOHO, j'entends un serveur de fichiers, un serveur web, quelques applications relais(proxy cache, serveur mail sortant, cache DNS 1) et une passerelle Internet. Ce document dcrira lespremiers pas suivre afin de : scuriser une installation par dfaut Ubuntu dployer une passerelle internet dployer un serveur LAMP + FTP dployer un serveur Samba installer une petite PKI et dployer un serveur OpenVPNLa plupart des oprations d'exploitation courantes seront dtailles pour chaque service.Lorsdel'installationetdelaconfigurationdechaquelment,l'impactsurlascuritglobaleseravoqu. Parallelement, des mesures seront mises en place chaque tape afin de conserver un niveaude scurit maximum pour l'installation.Ces serveurs peuvent tre ou non dploys sur une seule machine. Suivant la fonction du serveur, ilsera plus raisonnable de ne pas l'exposer directement sur Internet et d'en faire, si possible, un serveurspcifique placer derrire un pare-feu.2. Ce que ce document n'est pasCedocumentn'estpasunguided'administrationsystmeLinux,pasplusqu'unmanueldeconfiguration des diffrents services voqus. Il existe d'excellent documents dcrivant ces aspects.Le lecteur interess par la scurit sera probablement combl par le [SecDebian].Commelargementexpliquparailleurs,lascuritn'estpasunproduit,etiln'yapasdepotionmagique permettant de rendre un systme sr. En revanche, il existe des bonne pratiques que nousessayeronsdemettreenuvrelelongdecedocument.Evidemment,cedocumentnepeuttreexhaustifenlamatire;ilfaudradoncgarderlesyeuxetlesoreillesouvertsencequiconcernelascurit.3. AudienceCe document est principalement destin : aux admins systme dbutants qui cherchent un guide des oprations pour ce type de serveur aux sysadmins habitus, qui se disent depuis des annes qu'ils devraient se faire une checklist afinde ne rien oublier lorsqu'ils dploient un serveur; une telle checklist peut tre facilement dduite dece document et un squelette de rgles est donnes dans Annexe A, Firewall de base . auxwizardsdelascuritetdesdiffrentsservicesvoqussousLinuxquinemanquerontpasd'envoyer des commentaires ou de modifier directement ce document aifn de l'amliorer1Tous ces services ne seront pas abords dans ce documentIntroductionix4. Nouvelles versions de ce docLesnouvellesversionsdecedocumentserontdisponiblessurreseau.erasme.org[http://reseau.erasme.org].Ce document tant ralis sous DocBook, il est disponible au formats XML, PDF, PS, HTML, man,rtf, tex, texte, ...5. RevisionsHistorique des versionsVersion 1.1 2007-05-01 MBCration.Version 1.0 2002-12-29 MGInitial release for TLDP6. ContributionsAucune pour l'instant. Les vtres seront les bienvenues.7. FeedbackToutes les remarques, contributions, corrections sont les bienvenues:

8. CopyrightCopyright 2007 Michel Blanc.Permission is granted to copy, distribute and/or modify this document under the terms of the GNU FreeDocumentation License, Version 1.1 or any later version published by the Free Software Foundation;with no Invariant Sections, with no Front-Cover Texts and no Back-Cover Texts. A copy of the licenseisincludedinAnnexeB,GNUFreeDocumentationLicenseentitledGNUFreeDocumentationLicense .ReadTheGNUManifesto[http://www.fsf.org/gnu/manifesto.html]ifyouwanttoknowwhythislicense was chosen for this book.The author and publisher have made every effort in the preparation of this book to ensure the accuracyof the information. However, the information contained in this book is offered without warranty, eitherexpress or implied. Neither the author nor the publisher nor any dealer or distributor will be held liablefor any damages caused or alleged to be caused either directly or indirectly by this book.The logos, trademarks and symbols used in this book are the properties of their respective owners.9. PrrequisLelecteurgagneratrefamilieravecleslignedecommande.Mmesidesoutilsgraphiquestrspuissantspourgrerdesservicesexistent(SWAT,Webmin[http://www.webmin.com/]),onprivilgieralecontactdirectaveclesfichiersdeconfiguration.Unecertaineaisanceaveclamanipulation de fichiers et la ligne de commande est donc souhaitable.10. Conventions utilises dans ce documentLes conventions typographiques suivantes sont utilises tout au long de ce document :IntroductionxTableau 1. Conventions typographiquesType de texte Signification Texte cit Citations, texte cit tel quel, expressionsterminal Sortie sur un terminal.saisie Saisie utilisateur sur un terminal.commande Nom d'une commande qui peut tre utilise enligne de commande. Eventuellement nom d'undmon.VARIABLE Nom d'une variable, comme dans $VARNAME.option Option d'une commande, comme dans l'option-a de la commande ls .argument Argument d'une commande, comme dans voirman ls .commande options arguments Synopsys ou usage gnral d'une commande.nom de fichier Nom d'un fichier ou d'un rpertoire, par exemple Aller dans le rpertoire /usr/bin. Touche Touches du clavier, comme par exemple tapezQ pour quitter .Bouton Bouton graphique cliquer, comme le boutonOK. Mais bon, les boutons, ce n'est pas laspcialit maison :)Menu # Choix Choix slectionner dans un menu graphique,par exemple : Selectionnez Aide # A propos deFirefox dans votre navigateur. Mme remarqueque prcdemment...Terminologie Terme ou concept important. Terme tranger. Le kernel Linux Voir Chapitre 1, Principes gnraux Lien interne au document.Kernel.org [http://kernel.org] Lien cliquable vers un site ou une ressourceexterne.11. Organization de ce documentListe de chapitres et appendices : Chapitre 1, Principes gnraux Chapitre 2, Post-configuration du systme d'exploitation Chapitre 3, Dploiement et guide des oprations OpenSSH Chapitre 4, Dploiement et guide des oprations Apache Chapitre 5, Dploiement et guide des oprations PHP Chapitre 6, Dploiement et guide des oprations MySQL Chapitre 7, Dploiement et guide des oprations ProFTPD Chapitre 8, Dploiement et guide des oprations Postfix Chapitre 9, Dploiement et guide des oprations SambaIntroductionxi Chapitre 10, Chiffrement SSL/TLS Chapitre 11, Dploiement et guide des oprations OpenVPN Annexe A, Firewall de base Annexe B, GNU Free Documentation License (en VOST) Glossary Bibliographie1Chapitre 1. Principes gnraux$Revision: 1.11 $$Date: 2007/07/03 17:00:14 $Aujourd'hui,lefoisonnementd'outils,souventdisponiblesenOpenSource,permetdedployerrapidementetrelativement facilement un grand nombre de services internet. Cette facilit ne doit pas faire oublier les dangersinhrentslamiseenligned'unservicequelqu'ilsoit.Ondevradoncaccompagnercesdploiementsaveclarigueurncessaireafinqueleservicenesetransformeenvecteurdenuisance,aussibienpoursapropreinfrastructure que pour celle des autres.1.1. Pourquoi ces principes ?Dployer un serveur n'est gnralement pas anodin. Par dfinition, un serveur fournit un service unou plusieurs utilisateurs. La rupture, le dtournement, le vol ou la dgradation de ce service ont doncforcment des consquences.Sans entrer dans une paranoa excessive, il convient de garder l'esprit un certain nombre de grandsprincipes.Mmes'ilspeuventparfoisparatredmesurs,ilssonttoutdemmeapplicablesquelleque soit la taille du systme d'information dploy. Si l'on garde l'esprit ces principes pour encadrerle dploiement et la gestion d'un serveur, on rduit considrablement ses possibilits de dfaillance.Les bonnes pratiques en administration systme dcoulent de ces quelques principes. Ils ne sont pasexhaustifs. Les scurit est un processus; ce n'est pas un tat du systme. Les menances et le systmed'information voluent. La scurit doit suivre.1.2. L'OSS est un avantageDes discussions sans fin opposent rgulirement les spcialistes en scurit afin de dterminer si leslogicielsOpenSource(OSS,OpenSourceSoftware)apportentunplusparrapportauxautreslogiciels. La situation en ce domaine est rsolument en faveur de l'OSS.Toutd'abord,ducodeOSSc'estducodelibrementdisponible:n'importequipeutavoiraccsaucode source. Cela a de multiples implications. Les auteurs sont souvent plus soucieux d'crire du codelisible. Non que les logiciels commerciaux soient mal cods, mais les logiciels OSS ne sont pas soumis la pression commerciale, aux dates de release, etc... La lisibilit qui en rsulte est probablement plusgrande.Uncodedisponible,c'estaussiuncodequipeuttreaudit.LeprojetOpenBSD[http://www.openbsd.org]aunequipeddiequi,depuisplusde10ans,auditelecodedesapplicationsutilises par OpenBSD. Tous ces dveloppement s'effectuent donc en public, sous le regard des pairs,ce qui ne peut qu'amliorer la qualit du code produit. Bien sr, dans la mesure ou la disponibilitdu code source permet d'identifier plus facilement les dfauts, il peut aussi permettre aux personnesmalveillantes de reprer des failles directement dans le code. Mais de ce point de vue, l'histoirique desfailles de scurit montre que l'obscurit et la non divulgation du code source n'ont visiblementjamais t des solutions ce problme.BruceSchneier[http://www.schneier.com],cryptographeminentetspcialisteincontestdelascurit informatique l'a dit lui mme : Demand open source code for anything related to security [Schneier1999] 1.Enfin, mme si l'OSS reprsente un plus important en terme de scurit, ce n'est absolument pas unecondition suffisante qui elle seule peut garantir la scurit d'un systme d'information quel qu'il soit.Le pire ennemi de la scurit est le sentiment de scurit.1 Exigez du code open source pour tout ce qui touche la scurit. Principes gnraux21.3. La scurit, partie intgranteLa scurit doit tre considre comme faisant partie intgrante de chaque lment du systme. Chaqueservice, chaque brique logicielle, chaque choix configuration ont un impact sur la scurit globale dusystme. C'est donc un elment constituant de toutes les parties. Il faut le traiter ainsi, et non commeune couche supplmentaire du systme. La scurit, c'est apache bien configur sur un systme bienconfigur avec un firewall implment correctement. Ce n'est pas apache + firewall.Exprimautrement,lascuritn'estpasunlogiciel,cen'estpasladernireappliancelamodeachetegrandsfrais2.C'estunensembledebonnespratiquesquel'onappliquel'ensembledeslementsdusystme.Vuainsi,lorsquelascuritseraapprhendecommetantpartiedechaquelment, le systme sera beaucoup plus robuste, plus rsilient et l'impact d'une attaque russie seramoins important. C'est le fondement de la scurit par/en couches, qui ne cherche pas supprimercompltementlamenace(c'estimpossible),maisralentirlaprogressiondel'attaquantetrduireles consquences de son attaque (concept de dfense en profondeur [http://en.wikipedia.org/wiki/Defense_in_depth] ).1.4. Priviligier la simplicitLasimplicitdoitguidertouteslesmodificationsetdploiementssurunserveur.Leprincipedesimplicit, baptis KISS (Keep It Simple, Stupid) pourrait tre paraphras en la solution la plus simpleest la meilleure. , ou, selon les termes d'Albert Einstein, tout devrait tre conu le plus simplementpossible, mais pas plus. .Ilesteneffetfaciledeconcevoirquelesusinesgazserontplussujettesauxfuitesquedessystmes simples. L'enchevtrement de composants, de services, de protocoles nuit la comprhensionglobaledusystme.Etenl'absencedecomprhension,impossibled'exploiterlesystmedansdesconditionssatisfaisantesdescurit.Encasdedfaillancedusystme,commentidentifierlecomposant responsable ? Et quel sont les effets de bord envisager si le composant X tombe en panne? Ou si le dmon Y est compromis ? Ou encore si je mets jour la librairie Z ? Ou bien si je migrevers la la dernire version du systme d'exploitation ?Il faudra donc, autant que possible, spcialiser les diffrents serveurs afin de ne pas crr de serveur tout faire qui, lorsqu'il sera en panne, impactera un nombre important de services, ou qu'il seraimpossible de faire voluer. L'utilisation de la virtualisation peut aider rsoudre ce problme, mmesi cette technologie n'est pas encore bien aprhende en ce qui concerne la scurit.1.5.Principe du privilge minimum etsparation des pouvoirsLorsqu'undmonsevoitcompromis,parexemple,parundbordementdepile[http://fr.wikipedia.org/wiki/Buffer_overflow], l'attaquant peut excuter du code (des ordres) avec les droitdecedmon.Siceserveurfonctionneaveclesdroitsdel'utilisateurroot,lecodeinjectparl'attaquantauraluiaussilesdroitsderoot.Oncomprenddoncl'intertd'excutercelogiciel(parexemple, le serveur web apache) avec des droits minimum. En gnral, lorsqu'un logiciel type dmonestinstallsurunserveur,unutilisateurspcialestcrceteffetafindelimiterlacasseencasd'intrusion.Ce principe de privilge minimum s'applique aussi aux utilisateurs. Il faut restreindre les droits affectsauxutilisateursenfonctiondeleurbesoin.Cen'estpasuniquementunequestiondeconfiance:lecompte de l'utilisateur peut tre compromis, l'utilisateur peut ne pas avoir conscience des problmeslislascurit,etc...Ilfautdonclaussifournirleminimumdeprivilgesl'utilisateurafind'viterunecatastrophedmesureparrapportauxdroitsrllementrequispourcetutilisateur.2et gnralement batie avec des logiciels Open Source.Principes gnraux3Atitred'exemple,imaginonsqu'unutilisateurdoiveenvoyerdesfichierssurunserveurweb.Sil'administrateurduserveursecontentedecreruncomptecetutilisateur,ilpossderapardfautun shell. Ce shell pourra ventuellement tre utilis via ssh, ou au travers d'une application Web malprogramme, ou en local sur la console. Si le seul besoin est d'envoyer des fichiers, l'utilisateur nedoit pouvoir faire que cela.Privilge minimumAppliquer le principe du privilge minimum, aussi bien aux applications qu'aux utilisateursLe corolaire au privilge minimum est la sparation des pouvoirs. A l'instar des pouvoirs lgislatifs etexcutifs que nous connaissons ailleurs, une machine ne doit pas offrir des services, qui, cumuls, luidonneraient un pouvoir trop important sur l'activit du site. C'est une question de rsilience du systmed'information, mais c'est surtout un prrequis permettant d'viter une ventuelle escalade de privilges.Ilestdconseiller,parexemple,d'installeruneautoritdecertification(CA) 3surunemachinefournissant un autre service. Idem pour les serveurs DNS, LDAP, SQL, qui contiennent ou serventsouvent des lments utiliss dans la scurit d'autres machines (authentification, noms d'htes, ...)revtant ainsi une importance toute particulire. Il en va de mme pour les utilisateurs pouvoir : il fautsparer les pouvoirs afin d'avoir des gardes fous sur l'utilisation qui est faite du systme d'information.Un chef d'entreprise ne devrait pas, par exemple, grer la messagerie de ses employs, afin d'vitertoute tentation offerte par l'accs aux botes.Sparation des pouvoirsAppliquer la sparation des pouvoirs, aussi bien aux machines qu'a leurs administrateurs1.6. Dployer le strict ncessaireUn des nombreux avantages des systmes GNU/Linux est de pouvoir slectionner la quasi totalit descomposants installs. Bien sr, certains de ces composants sont obligatoires (le noyau, la glibc), maisdans la grande majorit des cas il est possible d'influer sur l'installation ou non d'un composant, de luiprfrer un quivalent ou une autre version. Cette souplesse doit tre mise profit en n'installant quele strict ncessaire sur la machine. Pourquoi installer un serveur web si l'on n'a pas besoin de serveurweb ? Pourquoi dmarrer un serveur web si l'on en a qu'un besoin occasionnel ? Pourquoi installerun compilateur C si l'on rien compiler ? En rsum, Small is beautiful : il ne faut pas installercequiestinutileafind'viterquececomposantinutilenesetransformeenvecteurpermettantdecompromettre la machine.1.7. ProcduresLesincidentsarrivent.Quelsquesoientlesinvestissementsralisspourscurisersonsystmed'information, il faudra un jour restaurer un serveur, fonctionner en mode dgrad, grer une intrusion,etc... A cet instant, rien ne sera plus inefficace que l'improvisation.Il faut donc, avant d'en avoir besoin, dvelopper des procdures qui seront appliques le moment venu.Ces procdures devront tre rgulirement testes (que le backup marche, c'est bien; si la restaurationfonctionne, c'est mieux...), values, et remises jour.1.8.Dimensionner les mesures de scuritScuriser un systme d'information est une qute sans fin. La question qui se pose en gnral est :jusqu'o aller ? Afin de pouvoir rpondre, il est ncessaire d'valuer le systme d'information : Quelest mon bien ? Quel est sa valeur ? Quels cots seront engendrs par un acte malveillant ?3 il est d'ailleurs fortement dconseill de mettre une machine servant de CA en rseauPrincipes gnraux4Ces cots peuvent tre directs et directement quantifiables (quipements, cots de rinstallation d'unserveurcompromis,cotsd'uneactionlgale,...)ouindirects,lisdesbiensimmatriels(cotsd'image, vol de secrets, ...).En regard de ces diffrents cots, il faudra dimensionner l'infrastruture de scurit. Inutile, priori, dedployer des milliers d'euros en quipements de protection si vous devez uniquement protger votreaccs internet. En revanche, quand il s'agit d'un rseau plus important et de quelques serveurs, il fautpeut tre envisager la chose.5Chapitre 2. Post-configuration dusystme d'exploitation$Revision: 1.24 $$Date: 2007/07/05 01:18:23 $L'installation du systme d'exploitation n'est pas couverte dans ce document. En revanche, les choix par dfauteffectus par les distributions Linux sont rarement parfaits. Aussi faut il gnralement faire un peu de nettoyageet ajuster quelques paramtres juste aprs l'installation. Nous partirons de l'hypothse que l'utilisateur ayant lesdroits d'administration est oper et que le nom du serveur est ubuntu. D'autre part, il est fortement conseilld'effectuer l'installation : sansrseau,etdenepaslebrancheravantd'avoirconfigurlefiltrage(Section2.4.3,Filtragedebase)afin d'viter tout risque, sans slectionner de paquetage particulier (notamment LAMP ou Serveur DNS ).Figure 2.1. Premier bootDans ce chapitre, nous voquerons les sujets suivants : Suppression des services et des paquetages inutiles Ajustements systme Configuration de la pile IP Mise en place d'OSSEC (TBD)2.1. Modifier un fichier de configurationAvant de se lancer dans la modification du sytme install, il est important de connaitre au moins cettebonne pratique essentielle : il est impratif, avant tout changement sur un fichier de configuration, d'enfaire une copie sur place. La raison est simple et vidente : quand on aura copieusement modifi lefichier de configuration et que plus rien ne fonctionnera correctement, on sera bien heureux de pouvoirPost-configuration dusystme d'exploitation6rcuprerlasituationparunsimplecp.Onpourrammeraffinerunpeulamthodeencopiantlefichier original en fichieroriginal_YYYYMMDDNN (ou YYYY reprsente l'anne, MM le mois,YYjejouretNNunnumrodesrie)avantdel'diter.Celapermettradereveniruneancienneconfiguration si l'on s'aperoit du problme plus tard. On veillera changer les droits de ces fichiersafin que seul root y ait accs (chmod 600 ...).2.2. Suppression des services et paquetagesinutiles2.2.1. ObjectifsUne machine ayant vocation offrir un service donn ne devrait contenir que les lments logicielsncessaires la fourniture de ce service. Quel est l'intrt d'avoir le compilateur gcc sur un serveurWeb ? Pourquoi dmarrer portmap si aucun service n'a besoin du portmapper ?Effectuerunnettoyageenrgledusystmenepermetpasseulementungaindeplace.Lesrlsinterts sont ailleurs. Supprimer les services inutiles c'est d'abord suprimer le risque que la machine soitcompromise grce ce service. Mme si le service excut est exempt de bugs et de failles de scuritle jour J, il ne le sera peut tre pas le jour J+1. Grce au banner fingerprinting (dtermination delogiciel et de version grce aux bannires), les dlinquants informatiques scannent massivement desblocs d'adresses la dcouverte des services situs sur les machines. Ces services sont ensuite identifissipossiblegrceleurbannired'accueil.Ilspeuventainsiseconstituerunebasededonnesdeslogiciels/versions en fonctionnement sur une des machines donnes. Si, le jour J+1, une vulnrabilitexploitableestdcouvertedansversionXdulogicielL,ilnerestequ'arechercherdanslabasededonnes la liste des machines immdiatement vulnrables. Ces machines n'ont alors aucune chancede mettre en place un correctif avant d'tre attaqus.Enfin, supprimer les services inutiles permet une conomie de stockage, de RAM et de CPU.Mme si sur les distributions Ubuntu serveur sont trs propres l'installation, il convient de savoireffectuercenettoyage.Cepourratreutilesurd'autresdistributions,ousurdesversiond'Ubuntuserveur peut tre moins abouties.2.2.2. Dnicher les servicesLorsque l'on cherche des services inutiles sur un systme, il est souvent plus simple de regarder quellessontlessocketouvertesencoute.Celanegarantitpasdetrouvertouslesservices(dmons)quitournent sur la machine (tous n'ont pas vocation couter sur des ports) mais permet d'liminer lesplus importants en premier lieu. On pourra s'attacher liminer le reste ensuite.netstat permet d'afficher la liste des sockets ouvertes sur le systme. Nous ne sommes intresss quepar les socket TCP en coute (LISTEN) et par les sockets UDP. La sortie de netstat sera donc filtrepar un egrep "LISTEN|udp" :oper@ubuntu:~$ sudo netstat -tunap | egrep "LISTEN|udp"udp 00 0.0.0.0:690.0.0.0:*3745/dhclient3

oper@ubuntu:~$ Le seul dmon (rseau) en cours de fonctionnement semble tre le client dhcp. Lorsque l'adressage IPsera correctement configur (Section 2.4.1, Adressage ), ce dmon ne sera plus dmarr au boot.2.2.3. Dnicher les paquetagesSous Ubuntu serveur, seule une poigne de packages peut tre supprime. Ces packages sont installsgrce au mta-package ubuntu-standard. Un mta-package est une package virtuel vide,qui, grce ses dpendances, implique l'installation (ou la dsinstallation) d'autres packages.Post-configuration dusystme d'exploitation7Tous les paquetages dont dpend ubuntu-standard sont optionnels. en dsinstallant l'un d'entreeux,onforceraaussiladsinstallationdupackageubuntu-standard.Rinstallercedernierforcera la rinstallation de toutes ses dpendances.Pour connatre les paquets installs comme dpendance d' ubuntu-standard, on peut faire appel la commande apt-cache show ubuntu-standard :oper@ubuntu:~$ apt-cache show ubuntu-standardPackage: ubuntu-standardPriority: standardSection: metapackagesInstalled-Size: 44Maintainer: Matt Zimmerman Architecture: i386Source: ubuntu-metaVersion: 1.43Depends: at, cpio, cron, dmidecode, dnsutils, dosfstools, dselect, ed, fdutils, file, ftp, hdparm, info, inputattach, iptables, iputils-arping, iputils-tracepath,logrotate, lshw, lsof, ltrace, man-db, manpages, memtest86+, mime-support, nano, parted, popularity-contest, ppp, pppconfig, pppoeconf, psmisc, reiserfsprogs, rsync, strace, tcpdump, telnet, time, w3m, wgetRecommends: command-not-found, mtr-tiny, openssh-client, update-manager-coreFilename: pool/main/u/ubuntu-meta/ubuntu-standard_1.43_i386.debSize: 17158MD5Sum: 4b9cfdce3972c9d6e4752d1fc4bd42ffDescription: The Ubuntu standard system This package depends on all of the packages in the Ubuntu standard system. This set of packages provides a comfortable command-line Unix-like environment. . It is also used to help ensure proper upgrades, so it is recommended that it not be removed.Bugs: mailto:[email protected]: UbuntuTask: ubuntu-standardoper@ubuntu:~$Cette commande renvoie, la suite du paramtre Depends:, une liste des paquetages dont dpendubuntu-standard et qui sont supprimables.Par exemple, si le serveur n'a pas vocation utiliser ppp ou pppoe, il est possible de supprimer lespackages ppp, pppconfig et pppoeconf.oper@ubuntu:~$ sudo apt-get remove --purge ppp pppconfig pppoeconfLecture des listes de paquets... FaitConstruction de l'arbre des dpendances Reading state information... Fait Les paquets suivants seront ENLEVS :ppp* pppconfig* pppoeconf* ubuntu-standard*0 mis jour, 0 nouvellement installs, 4 enlever et 4 non mis jour.Il est ncessaire de prendre 0o dans les archives.Aprs dpaquetage, 2339ko d'espace disque seront librs.Souhaitez-vous continuer [O/n] ? OPost-configuration dusystme d'exploitation8(Lecture de la base de donnes... 14372 fichiers et rpertoires dj installs.)Suppression de ubuntu-standard ...Suppression de pppoeconf ...Purge des fichiers de configuration de pppoeconf ...Suppression de pppconfig ...Purge des fichiers de configuration de pppconfig ...rmdir: /var/cache/pppconfig: No such file or directorySuppression de ppp ...Stopping all PPP connections...done.Purge des fichiers de configuration de ppp ...oper@ubuntu:~$ On remarquera, au passage, que le package ubuntu-standard est dsinstall comme prvu.2.3. Ajustements systme2.3.1. Sysctlsysctl permet de modifier le comportement du systme en ajustant certains paramtres du noyau. Cesparamtres sont disponibles : soit sous /proc/sys/ soit grce l'outil sysctlA titre d'exemple, mettre le paramtre ip_forward la valeur 1 peut se faire de deux manires : via sysctl : sysctl -w net.ipv4.ip_forward=1 en modifiant le fichier : echo 1 > /proc/sys/net/ipv4/ip_forwardPour que ces paramtres soient appliqus au dmarrage du systme, on met gnralement les valeurs configurer dans le fichier /etc/sysctl.conf.sysctl permet aussi d'afficher la valeur d'un paramtre actuellement en vigueur (sysctl param), voirela totalit des paramtres (sysctl -a).oper@ubuntu:~$ sudo sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 0oper@ubuntu:~$ sudo sysctl -a...net.ipv4.ip_forward = 0...oper@ubuntu:~$ Certaines valeurs sont parfois disponibles sous les variables all, default, ou un nom d'interface.Parexemple,rp_filterexistedanslesvariablesnet.ipv4.conf.all.rp_filter,net.ipv4.conf.default.rp_filter, net.ipv4.conf.eth0.rp_filter, etc... allpermet de fixer la valeur pour toutes les interfaces. Si un interface reoit une valeur explicite via, parexemple, net.ipv4.conf.eth0.xyz, c'est cette dernire qui sera utilise. default permet dedfinir une valeur par dfaut qui sera utilise si une nouvelle interface est cre dynamiquement (cartePCMCIA ou dispositif USB par exemple).D'une manire gnrale, il conviendra, lorsque une valeur est donne pour all, d'appliquer la mmevaleur default.Quelques optimisations intressantes sont dcrites ci-dessous. Mme si la valeur par dfaut est donnepourchacuned'entreelles,ilvautmieuxnepasprsumerdesvaleurspardfautetrenseignersystmatiquement /etc/sysctl.conf.Post-configuration dusystme d'exploitation92.3.1.1. SYN protectionPour tablir une connexion TCP, les deux parties doivent passer par le three-way handshake : leclient envoie un paquet TCP vide avec le drapeau SYN, le serveur rpond avec un paquet contenantlesflagsACK(pouracquitterlepremierSYN)etSYN(sonpropredrapeaudeSYNchronisation).Le client achve l'tablissement de la connexion en envoyant le troisime et dernier paquet contenantsimplement un acquittement (ACK) du SYN serveur.Tout cela fonctionne bien tant que le processus d'tablissement de connexion va son terme. Si le 3-way handshake n'est pas complt, la connexion reste moiti ouverte. Aux dbuts de TCP/IP,ce n'tait pas peru comme un problme : il n'y avait pas de malveillance. La plupart des piles TCP/IPse contentaient alors d'avoir une queue de SYN ( SYN backlog ) de quelques entres, gnralementautour de 8. En clair, le systme ne pouvait maintenir que 8 connnexions en cours d'tablissement.Il est apparu rapidement que cette manire de fonctionner tait problmatique. Effectuer un dni deservice tait particulirement trivial en remplissant le backlog de connexions moiti ouvertes( SYN flooding ).Pour rsoudre ce problme, plusieurs techniques sont utilises sous Linux. Par dfaut, Linux utiliseune FIFO ( SYN backlog ). Lorsque la file de connexions en attente est pleine, les plus anciennessont supprimes. Si la rponse (ACK) du client arrive aprs que la demi-connexion ait t supprime,un paquet RST sera mis et la connexion sera (normalement) retente par le client. Le backlog sousUbuntu est de 1024 entres.L'autrepossibilitestd'activerlessyncookies.Lessyncookiesdsignentunmcanismepermettant de gnrer un numro de squence initial (ISN) dans la rponse au client (SYN+ACK). CetISN est construit de telle sorte qu'il n'est pas ncessaire de conserver l'information du SYN initial afinde valider que le dernier paquet du 3-way handshake est correct (voir [SynDJB] et [SynWiki]).Beaucoup d'encre et de sang (voir SYN cookie monsters dans [SynWiki]) ont coul autour dessyncookies,enparticulierconcernantleurutilisationsurdesserveurschargs.Cependant,ilvautprobablement mieux les activer en toutes circonstances. A part dans des cas de congestion extrme, ilsont probablement la meilleure rponse au problme du syn flooding .Les syncookies sont pilots par la variable net.ipv4.tcp_syncookies. Elle est 0 par dfaut,il faut donc ajouter la ligne suivante dans /etc/sysctl.conf.net.ipv4.tcp_syncookies = 12.3.1.2. ICMP echoIlestpossibled'empcherlapileIPderpondreauxICMPechorequests.Ilestprobablementprfrable d'utiliser netfilter pour limiter le volume d'icmp echo requests (c'est ce qui sera implmentdanslasectionddieaufiltrage,Section2.4.2,RsolutionDNS).EneffetSupprimercompltement l'mission d'icmp echo replies viole la RFC 792 (voir [RFC792]) :3.2.2.6Echo Request/ReplyEvery host MUST implement an ICMP Echo server function thatreceives Echo Requests and sends corresponding Echo Replies.

ainsi que la RFC 1812 ([RFC1812]) au choix, selon que net.ipv4.ip_forward soit 1 ou non :4.3.3.6 Echo Request/Reply

A router MUST implement an ICMP Echo server function that receivesEcho Requests sent to the router, and sends corresponding EchoReplies. Post-configuration dusystme d'exploitation10

Parailleurs,celan'apporteabsolumentrienentermedescurit.L'poquedespingdelamortestrvolue.IgnorerlespaquetsICMPnerglepaslesproblmesdesaturationrseau,depileIPboggueoudetroudelacouched'ozone...Enfin,secachernersoudpaslesproblmes de scurit... Si malgr tout, le blocage complet est requis, il suffit de mettre la variablenet.ipv4.icmp_echo_ignore_all la valeur 1.Variable net.ipv4.icmp_echo_ignore_allMettre net.ipv4.icmp_echo_ignore_all 1 viole les RFC 792 et 1812 ! Il est trsfortement conseill de recourir au rate limiting ICMP la place.2.3.1.3. ICMP redirectsLe paquets ICMP redirects permettent aux routeurs de prvenir des htes qu'une meilleure route estdisponible et qu'ils peuvent l'utiliser. Un paquet ICMP redirect contient la nouvelle gateway que l'htedoit utiliser.Surunrseaubienconfigur,l'ICMPredirectestinutile.Deplus,l'utilisationdel'ICMPredirectpourraitpermettred'injecterdesroutesdanslestablesderoutagesdeshtes.Ilestdoncconseilldesupprimerl'acceptation(net.ipv4.conf.all.accept_redirects)etl'mission (net.ipv4.conf.all.send_redirects) de paquets ICMP redirect.Enfin,lavariablenet.ipv4.conf.all.secure_redirects,lorsqu'elleest1,permetd'accepter les ICMP redirect depuis une gateway liste comme telle. Il est aussi conseill de passer cettevaleur 0. Attention : la configuration par dfaut fait exactement l'inverse pour toutes ces variables.2.3.1.4. ICMP echo broadcastsLespaquetsICMPechorequestenvoysenbroadcastpermettentdefacilementpinguertouteslesmachinesd'unsousrseau.Mmesicettefonctionnalit(quitienttoutdemmedel'effetdebord) peut sembler pratique, il est dconseill de l'activer. L'effet d'amplification induit peut poser desproblmes de dni de service smurf attacks (voir http://en.wikipedia.org/wiki/Smurf_attack). Il estdonc prfrale de mettre la variable net.ipv4.icmp_echo_ignore_broadcasts 1.2.3.1.5. Bogus ICMPLenoyau,pardfaut,logguelespaquetsICMPmalforms(coded'erreurinconnu).Logguercespaquetsinduitunecrituresurledisque.Celapeutpermettreunattaquantd'effectuerundnideservice en remplissant les logs de messageskernel: XX.XX.XX.XX sent an invalid ICMP type T, code C...L'accumulationdecesmessagespeutfinirparremplirlefilesystemetaccueillantleslogs.Ilestdoncprfrabledesimplementignorerceserreursenaffectant1net.ipv4.icmp_ignore_bogus_error_responses.Sincessaire,onpourratraitercesmessages avec d'autres applications plus spcialises.2.3.1.6. Source routingLesourceroutingpermetdespcifier(l'intrieurmmed'unpaquetIP)lespasserellesparlesquellesdoittransitercepaquet.C'estproscrire.Lesimplicationsentermesdescuritsontmultiples(spoofing,networkingerprinting,etc...).net.ipv4.conf.all.accept_source_route doit donc tre 0.Source routingIl n'y a aucune raison valable d'utiliser le source routing . Le laisser activ est extrmementdangereux. Si l'on dsire vraiment s'affranchir de la topologie de routage, on utilisera un VPN.Post-configuration dusystme d'exploitation112.3.1.7. Dfragmentation IPSilamachineconfiguredoitservirdepasserelleNAT(masqueradingouSNAT),ilfautactiverl'optionnet.ipv4.ip_always_defrag.Cettedernireforcelapasserelleeffectuerlerassemblage de paquets pour ses clients. Comme la passerelle maitient une table de correspondancequi s'appuie sur les ports source/destination des paquets, un fragment (en dehors du premier) ne pourrapas tre d-NAT, puisqu'il contient une portion du paquet qui ne contient plus ces informations.2.3.1.8. SpoofingLa variable net.ipv4.conf.all.rp_filter permet de vrifier qu'un paquet arrive bien parl'interface sur laquelle il devrait arriver. Par exemple, si mon interface eth0 est 192.168.0.1/24et que je recois un paquet avec l'IP source 192.168.0.34 sur eth1, ce paquet sera rejet puisqu'ilne peut arriver sur cette interface. De mme, 127.0.0.1 est une adresse source invalide pour unpaquet arrivant sur une interface autre que la loopback (lo).Par dfaut, cette fonction est dsactive. Il faut donc activer net.ipv4.conf.all.rp_filteren mettant sa valeur 1 dans /etc/sysctl.conf.2.3.1.9. Logguer les martiensLesmartienssontdespaquetsayantdesadressessourcesoudestinationinvalides(voir[RFC1812], 5.3.7 Martian Address Filtering , p.96) . Les paquets source routs (Section 2.3.1.6,Sourcerouting)etspoofs(Section2.3.1.8,Spoofing)refussserontaussiloggsgrcecettergle.Linuxpermetdelogguerlesmartiensenmettantlavaleur1danslavariablenet.ipv4.conf.all.log_martians.2.3.1.10. Fichier sysctl.confLe fichier ci-dessous donne une exemple de base de fichier sysctl.conf, ajuster au besoin enfonction de la machine sur laquelle il sera implant.## On loggue le trafic bizare## Log des martiens#net.ipv4.conf.default.log_martians = 1net.ipv4.conf.all.log_martians = 1## Source routing## Refus des paquets source-routs# net.ipv4.conf.default.accept_source_route = 0net.ipv4.conf.all.accept_source_route = 0## On n'envoie pas de paquets avec # des options de source routing#net.ipv4.conf.default.mc_forwarding = 0net.ipv4.conf.all.mc_forwarding = 0## ICMP## Ignorer les paquets ICMP redirectnet.ipv4.conf.default.accept_redirects = 0net.ipv4.conf.all.accept_redirects = 0#Post-configuration dusystme d'exploitation12# Pas d'envoi d'ICMP redirect#net.ipv4.conf.default.send_redirects = 0net.ipv4.conf.all.send_redirects = 0## IP forwarding# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!# !! Ajuster au besoin !!# !! Un routeur doit forwarder !!# !! Un hte non !!# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#net.ipv4.conf.default.forwarding = 0net.ipv4.conf.all.forwarding = 0net.ipv4.ip_forward = 0## Divers## Reverse path : vrification de la cohrence# interface d'entre / table de routage#net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.all.rp_filter = 1## Par de relais bootp/dhcp#net.ipv4.conf.default.bootp_relay = 0net.ipv4.conf.all.bootp_relay = 0## ARP## Pas de proxying ARP# net.ipv4.conf.default.proxy_arp = 0net.ipv4.conf.all.proxy_arp = 0## Taille maximum de la table ARP# # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!# !! Ajuster au besoin !!# !! En fonction de la taille!!# !! Du subnet occup!!# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#net.ipv4.neigh.default.gc_thresh3 = 256## Limite au dela de laquelle le nettoyage de la table ARP# sera engag#net.ipv4.neigh.default.gc_thresh2 = 256## Limite en dessous de laquelle le nettoyage de la table ARP# sera stopp#net.ipv4.neigh.default.gc_thresh1 = 32Post-configuration dusystme d'exploitation13## Intervalle de nettoyage de la table ARP#net.ipv4.neigh.default.gc_interval = 302.3.2. IPv62.3.2.1. Un peu tt ?IPv6 est install et activ par dfaut sur toutes les distributions. Son intrt est cependant limit. Il n'ya aucune raison d'activer IPv6 tant que le site n'a pas de connectivit IPv6 ou que ce site n'exprimentepas IPv6 explicitement.Epuisement des adresses IPv4L'puisementdesadressesIPv4estannoncdepuislongtemps.Enparticulierparlespromoteursd'IPv6.Maisaujourd'hui,ladatesembleplusprochequejamais:plusieurstudes ([Potaroo2007], [Hain2007]) s'accordent sur mars 2010. D'ici l, il faudra maitriserles masques sur 64 bits et les adresses sur 128 !LaisserIPv6activc'estprendrelerisquedes'exposerdenouveauxproblmes.Ceprotocoletantrelativementnouveau,lesproblmesd'implmentationoummededesignapparassentprogressivement ([v6SrcRoute]).SimalgrtoutIPv6resteactiv,ilfaudraseposerlaquestiondesonfiltrageprimtrique(surleprimtre rseau) et sur chaque machine. En effet, par dfault, il n'y a aucun filtrage. Chaque interfaceIPv6 ayant (ou pouvant avoir) plusieurs adresses (link local, site scope, global scope) le filtrage estplus dlicat mettre en uvre.2.3.2.2. Dsactiver IPv6IPv6 peut tre dsactiv dans le fichier /etc/modprobe.d/aliases. Il faut remplacer la ligne :alias net-pf-10 ipv6paralias net-pf-10 offIPv6 ne sera alors plus activ au prochain redmarrage.Une autre possibilit consiste ajouter la ligneblacklist ipv6dans un fichier que l'on mettra dans /etc/modprobe.d/. Cette option est plus propre : si nousdevons effectuer un upgrade du package module-init-tools, le fichier /etc/modprobe.d/aliases ne sera pas mis jour si nous l'avons modifi. Cela peut tre ennuyeux si la mise journcessite d'introduire des alias pour les pilotes.oper@ubuntu:~$ sudo -iPassword:****root@ubuntu:~# cat > /etc/modprobe.d/blacklist-persoblacklist ipv6blacklist pcspkr^Droot@ubuntu:~# cat /etc/modprobe.d/blacklist-persoblacklist ipv6blacklist pcspkrPost-configuration dusystme d'exploitation14root@ubuntu:~# logoutoper@ubuntu:~$ 2.4. Configuration de la pile IP2.4.1. AdressageLaconfigurationdel'adressageIPsousUbuntuestconcentredanslefichier/etc/network/interfaces.Ce fichier contient la liste des interfaces du systme et leur configuration IP. Dans sa forme la plussimple, et la plus frquente, la configuration d'une interface se prsente sous cette forme :iface inet static address netmask gateway La passerelle_par_defaut ne devrait apparaitre que sur le configuration d'une seule interface.Dans ce fichier, on trouve aussi la directive auto, suivie de noms d'interfaces. Elle permet d'indiquerau systme d'activer cette interface au boot.Onprivilgiera,autantquefairesepeut,l'adressagestatique(ifaceeth0inetstatic)l'adressageDHCP(ifaceeth0inetdhcp).Certainsserveurs(Samba)nencessitentpasforcment une adresse statique, mais utiliser des adresses statiques permet de filtrer plus efficacementles flux entre machines.La directive pre-up peut tre adjointe la configuration d'une interface. Nous l'utilserons plus baspour charger les rgles de filtrage iptables.Le dtail et toutes les possibilits du fichier de configuration /etc/network/interfaces sontdonns dans la page de man d'interfaces (man 5 interfaces).### Interface de loopback# dmarrage au boot des interfacesauto lo eth0# dfinition loopbackiface lo inet loopback# dfinition eth0iface eth0 inet staticaddress 192.168.0.33netmask 255.255.255.0gateway 213.245.116.99Lefichier/etc/iftabauneimportancelorsquelemachinepossdeplusieurscartesrseau.Ilpermet au systme de savoir quel nom (eth0, eth1, ...) il doit affecter une interface physique.Le fichier est compos de lignes sous la forme mac Par exemple :eth0mac 00:12:79:59:8D:38Post-configuration dusystme d'exploitation15eth1mac 00:12:79:59:8D:56Grce cette association statique entre l'adresse MAC de la carte et le device, on peut tre sr que lespriphriques rseau seront conformes ce qui est prvu. Si ce fichier n'est pas renseign, on ne peutabsolument pastre sr qu'une carte rseau prendra un nom d'interface particulier. L'ordre de dtectionde ces interfaces pouvant varier au boot, on sera alors sur une rgle premier arriv, premier servi.2.4.2. Rsolution DNSLarsolutionDNSestgrssouslessystmesUnixparunelibrairieparticulire:leresolver.Ceresolver est principalement configur dans deux fichiers : un fichier de configuration gnrale danslequel on liste les DNS, et un fichier contenant les associations statiques.2.4.2.1. Configuration gnrale : /etc/resolv.confCe fichier contient la liste des serveurs DNS que le resolverinterrogera pour effectuer une rsolution.Leresolvercommenceraparinterrogerlepremier.S'ilnereoitaucunerponse,ilinterrogeraledeuxime, etc... Il ne faudra pas confondre aucune rponse et rponse ngative (i.e. Ce nom d'hten'existe pas. ). Une rponse ngative est un rponse, les autres serveurs ne seront donc pas interrogs.On pourra spcifier jusqu'a trois serveurs DNS avec le mot clef nameserver.Le mot clef search permet de spficier les domaines de recherche qui seront utiliss comme suffixepour qualifier un nom d'hte incomplet. Par exemple, si l'on demande au resolver de trouver l'adresseIP de machine, il devra transformer ce nom en nom d'hte valide, compltement qualifi. Pour cela, ilajoutera successivement (et uniquement si ncessaire) la valeur configure dans search et effecturaune rsolution, jusqu'a ce qu'une rponse positive soit reue. Afin d'viter les confusions malheureuses,notamment en utilisant un navigateur Web1, on vitera de recourir cette valeur et on utilisera desnoms compltement qualifis.La directive domain permet de spcifier le domaine de l'hte local et de qualifier automatiquementles noms ne contenant pas de . . Si cette directive est absente, le rsolveur essayera de dterminerautomatiquementcettevaleurpartirdunomd'htecompletdelamachine.domainetsearchtant mutuellement exclusifs, on prfrera l'utilisation de domain, mais on essayera si possible detoujours utiliser des noms d'hte compltement qualifis.## /etc/resolv.conf# # search exemple.lan example.org# domain example.lan.nameserver 190.62.57.12nameserver 174.70.56.72##2.4.2.2. Associations statiques : /etc/hostsCe fichier contient les associations statiques IP/nom. Il est en gnral interrog avant le serveur DNS2.Il est constitu d'entres sous la forme :adresse_ip nomUn des usage les plus intressants de fichier est d'y insrer les adresses des htes qui sont sous ntreresponsabilitadministrative.Celapermetd'viterderecourirunserveurDNSpourrsoudreles1Les navigateurs utilisent en gnral leur propre algorithme de requalification de nom avant le resolveur.2L'ordre d'interrogation est donnn par la ligne hosts: du fichier /etc/nsswitch.conf.Post-configuration dusystme d'exploitation16noms de nos machines et ainsi de rduire les possibilits d'attaque de type Man In The Middle .Beaucoup d'autres usages sont possibles : masquer un vrai nom DNS, crer des noms DNS uniquementaccessibles la machine (pour tester des virtualhosts (Section 4.5.3, Site par dfaut et VirtualHosts )sur le serveur web local par exemple), etc...## /etc/hosts# 127.0.0.1 localhost192.168.17.139ubuntu.exemple.lan vhost1.exemple.lan vhost2.exemple.lan192.168.17.254gw passerelle gw.exemple.lan192.168.17.1alice alice.exemple.lan##2.4.3. Filtrage de baseLe filtrage s'entend gnralement par l'limination des paquets entrants sur un rseau ou un dispositif.Cen'estqu'enpartieexact.Lefiltrage,c'estl'applicationd'unepolitiquelatotalitdutraffic:letraffic entrant (qu'il soit destination de la machine ou devant tre relay par elle) appell ingress,ainsi que le traffic sortant (qu'il soit mis ou simplement transmis par la machine), nomm egress.Figure 2.2.Trafic egress et ingressOnmetsouventl'emphasesurlefiltragedutrafficingress,destinationdelamachineoudevanttreroutparelleversunrseauinterne.Al'vidence,lespaquetsentrantcontiennentdutrafficpotentiellement dangereux. Mais il ne faut pas sous-estimer l'importance du filtrage egress : le trafficque l'on envoie destination du reste du monde. Ce trafic est aussi potentiellement dangereux : desmachines de mon rseau local peuvent tre infectes par des vers ou compromises. Le filtrage egresspermet de limiter au maximum le primtre des dgats.La configuration ci-dessous est un squelette de base pour protger un serveur. Il faudra l'adapter (enajoutant des rgles sur la chane FORWARD) dans le cas d'un routeur.La politique par dfaut utilise est DROP pour les trois chanes INPUT, OUTPUT, et FORWARD. LesrglesutilisesdcoupentletraficsurdeschainesreprsentantlesprotocolesICMP,UDPetTCP(respectivement ICMP_*, UDP_* et TCP_*) ainsi que le sens du traffic (*_IN pour le traffic entrant,*_OUT pour le traffic sortant). Par exemple, la chane TCP_OUT contient les rgles autorisant le trafficTCP en sortie.## On ne traite que filter#Post-configuration dusystme d'exploitation17*filter## Cration et remise zro des chanes#:INPUT DROP [0:0]:FORWARD DROP [0:0] 0:OUTPUT DROP [0:0]:DROP_ME - [0:0] O:ICMP_IN - [0:0] O:ICMP_OUT - [0:0] O:STATEFUL - [0:0] O:TCP_IN - [0:0] O:TCP_OUT - [0:0] O:TCP_INLIMITS - [0:0] O:TCP_SYNLIMITS - [0:0] O:UDP_IN - [0:0] 0:UDP_OUT - [0:0] 11#0Politiques par dfaut des chanes INPUT, OUTPUT et FORWARD.OChane prenant en charge le rejet du paquet et enenvoi vers syslogOCette chane acceptera les paquets lis une connexion existante (plus exactement, une entreexistante dans la table conntrack).OO0Cration des chanes ddies au traitement en entre des paquets tcp, udp et icmp.OO11Cration des chanes ddies au traitement en sortie des paquets tcp, udp et icmp.OChane qui recevra les rgles de limitation de trafic TCP.OChane qui recevra les rgles de limitation d'ouvertures de connexions TCP entrantes.## ####################################### INPUT Dispatch 0# #######################################-A INPUT -i lo -j ACCEPT -A INPUT -m state --state INVALID -j DROP_ME -A INPUT -s 127.0.0.0/255.0.0.0 -i ! lo -j DROP_ME-A INPUT -p tcp -j TCP_IN -A INPUT -p udp -j UDP_IN -A INPUT -p icmp -j ICMP_IN ## ####################################### OUTPUT Dispatch O# #######################################-A OUTPUT -o lo -j ACCEPT -A OUTPUT -p udp -j UDP_OUT -A OUTPUT -p tcp -j TCP_OUT -A OUTPUT -p icmp -j ICMP_OUT -A OUTPUT -j STATEFUL -A OUTPUT -j REJECT O## ####################################### STATEFUL : accepte les paquets lis une connexion existante O# #######################################Post-configuration dusystme d'exploitation18-A STATEFUL -m state --state RELATED,ESTABLISHED -j ACCEPT -A STATEFUL -j RETURN...# ####################################### DROP_ME : la chane qui jette en laissant des traces dans les logs O# Par dfaut, cette chane poubellise les paquets en silence# En changeant la dernire rgle par les deux commentes, on notifie la source# du rejet du paquet, c'est plus conforme la norme. Aprs, chacun dcide s'il# vaut mieux se conformer la norme avec du trafic qui n'a pas lieu d'tre...# --limit permet d'viter de mettre la machine genoux en cas de dni# de service# #######################################-A DROP_ME -p tcp -m limit --limit 10/min -j LOG --log-prefix "DROP:" --log-level 6 -A DROP_ME -p udp -m limit --limit 10/min -j LOG --log-prefix "DROP:" --log-level 6## On pourra utiliser REJECT si l'on souhaite tre poli##-A DROP_ME -p tcp -j REJECT --reject-with tcp-reset ##-A DROP_ME -p udp -j REJECT --reject-with icmp-port-unreachable -A DROP_ME -j DROP #OChane prenant en charge le rejet du paquet et enenvoi vers syslogOCette chane acceptera les paquets lis une connexion existant (plus exactement, une entreexistante dans la table conntrack).0Dispatch des paquets entrants vers les chanes de traitement.ODispatch des paquets sortants vers les chanes de traitement.OPermetderejeterlespaquetsavantqu'ilsn'atteignentlapolitiquepardefault.Cettederniretant DROP, les dlais seraient trop long pour les connexions inities localement et rejetes. Afind'accelrer le rejet, on appelle explicitement REJECT.## ####################################### ICMP entrant 0# #######################################-A ICMP_IN -j STATEFUL-A ICMP_IN -p icmp -m icmp --icmp-type 3 -j ACCEPT -A ICMP_IN -p icmp -m icmp --icmp-type 11 -j ACCEPT -A ICMP_IN -p icmp -m icmp --icmp-type 0 -j ACCEPT -A ICMP_IN -p icmp -m icmp --icmp-type 8 -m limit --limit 5/sec -j ACCEPT ## ####################################### ICMP sortant O# #######################################-A ICMP_OUT -j STATEFUL-A ICMP_OUT -p icmp -m icmp --icmp-type 8 -j ACCEPT ## ######################################Post-configuration dusystme d'exploitation19# TCP entrant O# Il faudra ouvrir des ports au fil de l'eau# lors de la mise en place de # services TCP (ssh, apache, ...).# #######################################-A TCP_IN -j TCP_INLIMITS-A TCP_IN -j STATEFUL-A TCP_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m limit --limit 10/min -j LOG --log-prefix "TCP_IN:" --log-level 6 -A TCP_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -j DROP# Ajouter les rgles ici lors de l'installation de services TCP si ces services# doivent tre ouverts## ####################################### TCP sortant O# Cette machine initie des connexions HTTP vers fr.archive.ubuntu.com# et security.ubuntu.com pour les mises jour# #######################################-A TCP_OUT -j STATEFUL-A TCP_OUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m limit --limit 10/min -j LOG --log-prefix "TCP_OUT:" --log-level 6 -A TCP_OUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -j DROP O-A TCP_OUT -p tcp -d 194.2.0.36 --dport 80 -j ACCEPT-A TCP_OUT -p tcp -d 82.211.81.138 --dport 80 -j ACCEPT-A TCP_OUT -p tcp -d 91.189.88.31 --dport 80 -j ACCEPT## ####################################### UDP entrant O# L'appel STATEFUL suffit pour accepter les rponses DNS# Il faudra cependant ouvrir des ports au fil de l'eau lors de la mise en place# de services UDP (DNS, NTP par exemple).# #######################################-A UDP_IN -j STATEFUL# Ajouter les rgles ici lors de l'installation de services UDP si ces services# doivent tre ouverts## ####################################### UDP sortant O#-remplacer SERVEUR_DNS par le serveur DNS et rpter la ligne pour chacun des# serveurs (primaire, secondaire, etc...)#-remplacer SERVEUR_NTP par l'adresse IP du serveur NTP si ce protocol est # utilis# #######################################-A UDP_OUT -p udp -m udp -j STATEFUL-A UDP_OUT -d 192.168.0.254 -p udp -m udp --dport 53 -j ACCEPT ## Remplacer SERVEUR_DNS1, SERVEUR_DNS2 et SERVEUR_NTP par les bonnes valeursPost-configuration dusystme d'exploitation20##-A UDP_OUT -d SERVEUR_DNS1 -p udp -m udp --dport 53 -j ACCEPT ##-A UDP_OUT -d SERVEUR_DNS2 -p udp -m udp --dport 53 -j ACCEPT ##-A UDP_OUT -d SERVEUR_NTP-p udp -m udp --dport 123 -j ACCEPT## Dans le cas surprenant ou le serveur serait en DHCP## -A UDP_OUT -p udp -m udp --sport 68 --dport 67 -j ACCEPT #COMMIT#0OOAjouter dans cette partie les rgles permettant respectivement d'accepter les paquets icmp/tcp/udp en entre. Les paquets retour de connexions inities par la machine sont normalement prisen charge par la chane stateful et ne ncessitent pas d'tre explicitement autoriss ici.OOOAjouter dans cette partie les rgles permettant respectivement d'accepter les paquets icmp/tcp/udp en sortie. Les paquets retour de connexions inities par des clients sont normalement pris encharge par la chane stateful et ne ncessitent pas d'tre explicitement autoriss ici.OLes paquets TCP qui ne sont pas lis une connexion existante (donc qui ne sont pas matchs parla chane STATEFUL) doivent forcement avoir uniquement le flag SYN. Dans le cas contraire,on loggue la situation anormale (avec une limite afin d'viter un DoS par remplissage du systmede fichiers).La chane TCP_INLIMITS permet d'appliquer des rgles de limitation de trafic avant tout traitement.On l'utilisera plus loin pour protger des services mais on peut dja limiter globalement le taux desconnexions entrantes.Nousutiliseronslemoduleiptablesipt_limitpourcela.Cesystmedelimitationfonctionnecomme un sac de billes. Dans les rgles ci-dessous, chaque ouverture de connexion consomme unebille. Lorsque le sac sera vide, la connexion sera rejete pour prvenir l'expditeur et il faudra attendreque le sac se remplisse avant de pouvoir en accepter une autre. Les paramtres --limit-burst et --limit d'ipt_limit controllent respectivement le nombre de billes maximum que la sac contient(on commence avec un sac plein) et la vitesse de remplissage de ce sac. Par exemple, si l'on souhaiteavoir un sac de 10 connexions, se rechargeant la vitesse d'un par seconde, nou utiliserions :## ####################################### Limitation des connexions TCP entrantes# Les connexions trop nombreuses sont rejetes.# ######################################## Si la connexion est dans les limites fixes, on retourne d'ou l'on vient-A TCP_SYNLIMITS -p tcp -m tcp --syn -m limit --limit 1/sec --limit-burst 10 -j RETURN## Sinon, on loggue#-A TCP_SYNLIMITS -m limit --limit 1/min -j LOG --log-prefix "TCP_SYNLIMITS:" --log-level 6 -A TCP_SYNLIMITS -j REJECT#Ces rgles pourront tre sauves dans le fichier /etc/network/iptables et charges avant laconfigurationdel'interfaceaubootgrceladirectivepre-updufichierdeconfiguration/etc/network/interfaces :iface eth0 inet static address 192.168.0.33 netmask 255.255.255.0 gateway 213.245.116.99 pre-up iptables-restore < /etc/network/iptablesPost-configuration dusystme d'exploitation212.4.4. Modifier les rglesPour modifier les rgles, il suffit d'diter le fichier /etc/network/iptables et de les rappliqueraveciptables-restore> .ssh/authorized_keysroot@ubuntu:~# chmod 700 .ssh/ Oroot@ubuntu:~# chmod 600 .ssh/*root@ubuntu:~# logout Ooper@ubuntu:~$ logoutConnection to 192.168.17.139 closed.alice@michel:~$ ssh [email protected] OEnter passphrase for key '/home/alice/.ssh/id_dsa': ***** OLinux ubuntu 2.6.20-15-server #2 SMP Sun Apr 15 07:41:34 UTC 2007 i686The programs included with the Ubuntu system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted byapplicable law.root@ubuntu:~# 0scppermetdecopier(SecureCoPy)defichierstraversuncanalsshscuris.Icioncopie~alice/.ssh/id_dsa.pub vers le rpertoire $HOME de l'utilisateur oper de la machineserveur. Nous somme oligs de passer par ce compte utilisateur puisque root n'a pas de mot depasse. Attention ne pas oublie les : dans la commande, sinonn'effectuera qu'une copielocale.OAlice se connecte en tant que oper sur le serveur.Ooper est dans le groupe admin, et il est donc autoris passer root grce sudo.Ossh est trs regardant concernant les permissions des fichiers. Il n'autorisera les connexions quesi les fichiers d'autorisation et les clefs sont correctement protges des regards indiscrets. Aliceaurait pu aboutir au mme rsultat en faisant un umask 077 aprs le sudo.OUne fois le fichier mis en place et les permissions corriges, Alice peut se dlogguer du compteroot (elle revient du sudo), puis du serveur (elle revient du ssh).OLe moment de vrit... Alice essaie de se connecter en tant que root sur le serveur.OMaintenant Alice utilise le mot de passe qu'elle a utilis lors de la cration de sa clef prive.Pour faire mmoriser une clef dbloque ssh-agent, il suffit d'invoquer ssh-add et de taper le motde passe de dblocage de la clef.alice@linus:~$ ssh-addEnter passphrase for /home/alice/.ssh/id_dsa: *****Identity added: /home/alice/.ssh/id_dsa (/home/alice/.ssh/id_dsa)Identity added: /home/alice/.ssh/identity (alice@linus)alice@linux:~$ ssh [email protected] login: Wed Jun6 17:54:41 2007 from 192.168.253.70[root@ubuntu root]# 3.4.3. Regnration des clefs sur le serveurOn peut parfois avoir besoin de regnrer les clefs du serveur. Dans le cas de machines clones parexemple, si rien n'est fait les clefs seront identiques sur les clones. Il est prfrable de gnrer unenouvelle clef de serveur afin que chaque serveur ait son propre jeu de clefs.Poure regenrer les clafs serveurs, on peut invoquer le script de post-installation Ubuntu avec dpkg-reconfigure openssh-server :Dploiement et guidedes oprations OpenSSH30alice@michel:~$ ssh [email protected]@ubuntu:~# rm /etc/ssh/*key*root@ubuntu:~# dpkg-reconfigure openssh-serverCreating SSH2 RSA key; this may take some time ...Creating SSH2 DSA key; this may take some time ... * Restarting OpenBSD Secure Shell server... [ OK ] root@ubuntu:~# Une autre possibilit consiste les gnrer la main :alice@michel:~$ ssh [email protected]@ubuntu:~# ssh-keygen -f "/etc/ssh/ssh_host_rsa_key" -N '' -t rsaGenerating public/private rsa key pair./etc/ssh/ssh_host_rsa_key already exists.Overwrite (y/n)? yYour identification has been saved in /etc/ssh/ssh_host_rsa_key.Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.The key fingerprint is:eb:46:c3:9c:6f:90:06:b6:c9:f6:3a:9b:11:28:87:41 root@ubunturoot@ubuntu:~# ssh-keygen -f "/etc/ssh/ssh_host_dsa_key" -N '' -t dsaGenerating public/private dsa key pair./etc/ssh/ssh_host_dsa_key already exists.Overwrite (y/n)? yYour identification has been saved in /etc/ssh/ssh_host_dsa_key.Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.The key fingerprint is:78:46:c7:97:7d:2f:a7:ad:21:77:9c:01:20:06:29:61 root@ubunturoot@ubuntu:~# Dans les deux cas, Alice devra aussi effectuer une modification dans sa configuration. En effet, sshtant plutt strict, il refusera de vous laisser vous connecter un serveur dont la clef chang. Ces clefsserveurs sont parfois stocks globalement (/etc/ssh/ssh_known_hosts) mais le plus souventresidentdans~/.ssh/known_hosts.Cefichierestengnralrempliparsshaveclaclefd'unserveurlorsdelapremireconnexion(saufsileparamtreStrictHostKeyCheckingestyesdans/etc/ssh/ssh_config.Il faudra alors supprimer manuellement l'ancienne clef serveur de ~/.ssh/known_hosts. Commele message d'erreur comporte le numro de ligne (NN ici) contenant l'ancienne clef, l'astuce vi +NNd+x/home/alice/.ssh/known_hostspermetdesupprimerlamauvaiseclefenuneseulecommande. Il suffit ensuite de relancer la connexion et d'accepter la nouvelle clef.alice@linus:~$ ssh [email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host iseb:46:c3:9c:6f:90:06:b6:c9:f6:3a:9b:11:28:87:41.Please contact your system administrator.Dploiement et guidedes oprations OpenSSH31Add correct host key in /home/alice/.ssh/known_hosts to get rid of this message.Offending key in /home/alice/.ssh/known_hosts:43RSA host key for 192.168.17.139 has changed and you have requested strict checking.Host key verification failed.alice@linus:~$ vi +43d +x /home/alice/.ssh/known_hostsalice@linus:~$ ssh [email protected] authenticity of host '192.168.17.139 (192.168.17.139)' can't be established.RSA key fingerprint is eb:46:c3:9c:6f:90:06:b6:c9:f6:3a:9b:11:28:87:41.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.17.139' (RSA) to the list of known hosts.Enter passphrase for key '/home/alice/.ssh/id_dsa': *****Last login: Wed Jun6 22:41:50 2007 from 192.168.0.228Linux ubuntu 2.6.20-15-server #2 SMP Sun Apr 15 07:41:34 UTC 2007 i686The programs included with the Ubuntu system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted byapplicable law.root@ubuntu:~# 3.4.4. Modification du mot de passe d'une clef priveOnpourraitcritiquerdel'utilitd'unetellefonctionnalit.Eneffet,pourquelleraisonvoudrait-onchangerdemotdepasse?Soitlemotdepasseestcompromis(ouestsusceptibledel'tre).Dansce cas, la clef prive l'est aussi. Soit on dsire utiliser un mot de passe plus robuste. C'est donc quel'ancien ne l'tait pas et que la clef n'est pas consquent plus digne de confiance.La aussi, chacun d'entre nous devra peser le pour et le pour et dcider d'utiliser ou non cettefonctionalit. C'est l'option -p de la commande ssh-keygen qui permet de modifier le mot de passede la clef.32Chapitre 4. Dploiement et guide desoprations Apache$Revision: 1.30 $$Date: 2007/07/07 19:53:15 $Apache est sans aucun doute le serveur HTTP le plus configurable du march. Sa vaste panoplie de directives etsurtout la multiplicit de leur combinaison peut rebuter au premier abord. Ce chapitre tente d'introduire les grandsprincipes qui permettront ensuite de configurer des serveurs Web sous Apache sans difficult.4.1. Historique et descriptionLe serveur HTTP Apache a t cr au dpart afin de palier l'arret du dveloppement du serveurNCSA. Il est, depuis 1996, le serveur le plus rpandu dans le monde ([Netcraft]). Il a t cre au dpartafin de palier l'arret du dveloppement du serveur NCSA. Trois versions majeures sont aujourd'huimaintenues : la branche 1.3, ancienne, mais trs prouve et donc particulirement stable, la branche 2.0, qui apporte le support des threads et un meilleur support des plateformes non Unix, la branche 2.2, apporte une configuration plus modulaire (mais pas forcment plus simple...),des amliorations sur les modules de proxy et d'authentification.Ubuntu Serveur 7.04 est livre avec les version 1.3.34 et 2.2.3. Nous utiliserons cette dernire version(packageapache2),plusintgre.Maislabranche2.2tantplusrcenteet(relativement)moinsteste il faudra tre vigilant sur les ventuels correctifs appliquer en exploitation.4.2. ArchitectureA chaque version majeure, Apache est devenu plus modulaire. Les version 1.x autorisaient l'utilisationde modules pour dlguer une partie du traitement (les fameux mod_*); la version 2 a introduit lanotion de Multi-Processing Module (MPM).4.2.1. Modles MPMLesMPMpermettentApachedetraiterplusieursrequtessimultanment.Traditionnellement,Apachetraitaitceproblmeenpr-forkant:ilsedupliquaitlui-mmeNfois(paramtrable)audmarrageetainsipouvaittraiterunnombreplusimportantderequtes.L'inconvnientdecettemthode est l'empreinte mmoire : quand on se rplique, on rplique aussi la mmoire du processusinitial.Les versions 2.0 et suprieures introduisent d'autres modles, principalement worker (ou thread-pool)et event. Le premier modle consiste en un seul processus parcouru par plusieurs fils d'xcution (desthreads). On pourrait faire l'analogie avec une route. Au lieu de construire plusieurs routes entre A etB afin de pouvoir faire circuler plusieurs vhicules (pre-fork), on met simplement plusieurs voituressur une seule route. Il faudra juste veiller aux collisions. C'est plus efficace et cela ncessite moins debitume. Le modle event en revanche permet de traiter plusieurs connexions dans un seul processus entraitant les connexions les unes aprs les autres mais partiellement, afin d'avoir un traitement parallledes connexions (plusieurs voitures mais un seul conducteur).Le choix de modle de fonctionnement conditionne le paquetage a installer. Par dfault, un apt-getinstall apache2 installera le modle worker. Si l'on dsire un autre modle, il suffira de l'installerexplicitement.root@ubuntu:~# apt-get install apache2-mpm-preforkDploiement et guidedes oprations Apache33Lecture des listes de paquets... FaitConstruction de l'arbre des dpendances Reading state information... Fait Les paquets suivants seront ENLEVS :apache2-mpm-workerLes NOUVEAUX paquets suivants seront installs :apache2-mpm-prefork0 mis jour, 1 nouvellement installs, 1 enlever et 4 non mis jour.Il est ncessaire de prendre 0o/429ko dans les archives.Aprs dpaquetage, 8192o d'espace disque seront librs.Souhaitez-vous continuer [O/n] ? Odpkg : apache2-mpm-worker : problme de dpendance, mais suppression comme demand : apache2 dpend de apache2-mpm-worker (>= 2.2.3-3.2build1) | apache2-mpm-prefork (>= 2.2.3-3.2build1) | apache2-mpm-event (>= 2.2.3-3.2build1) ; cependant :Le paquet apache2-mpm-worker doit tre supprim.Le paquet apache2-mpm-prefork n'est pas install.Le paquet apache2-mpm-event n'est pas install.(Lecture de la base de donnes... 14790 fichiers et rpertoires dj installs.)Suppression de apache2-mpm-worker ... * Stopping web server (apache2)... [ OK ]Slection du paquet apache2-mpm-prefork prcdemment dslectionn.(Lecture de la base de donnes... 14785 fichiers et rpertoires dj installs.)Dpaquetage de apache2-mpm-prefork ( partir de .../apache2-mpm-prefork_2.2.3-3.2build1_i386.deb) ...Paramtrage de apache2-mpm-prefork (2.2.3-3.2build1) ... * Starting web server (apache2)... [ OK ] root@ubuntu:~# ApacherecommandeleMPMworker.Enrevanche,siPHPestrequis,leMPMpre-forkdoittreutilis (PHP n'tant pas thread-safe).4.2.2. ModulesLesmodulesd'Apachepermettentdegrerunaspectspcifiquedutraitementd'unerequtehttp:authentification(mod_auth),chiffrement(mod_ssl),interprtationduPHP(mod_php),etc...Cesmodules peuvent tre chargs ou non en fonction de la configuration souhaite. On vitera videmmentd'activer des modules inutiles pour l'usage souhait d'Apache. Les versions 2+ d'Apache fournissentles outils a2enmod et a2dismod pour respectivement demander le chargement ou non d'un moduleau boot.Par exemple, si l'on dsire activer SSL, il suffira d'excuter la commande a2enmod ssl :root@ubuntu:~# a2enmod sslModule ssl installed; run /etc/init.d/apache2 force-reload to enable.root@ubuntu:~# /etc/init.d/apache2 force-reload * Forcing reload of web server (apache2)... [ OK ] root@ubuntu:~#Dploiement et guidedes oprations Apache34Ces scripts (ce sont des scripts shell) fonctionnent un peu la manire de update-rc.d ou chkconfig:ilscrentunliensymboliquedans/etc/apache2/mods-enabled/depuislefichierdeconfiguration chargeant le module (/etc/apache2/mods-available/).4.3. Grer le service4.3.1. Dmarrage et arrtLes gestion du service s'effectue avec un script SysV habituel (/etc/init.d/apache2) ou avecla commande d'invocation de ces scripts (invoke-rc.d).invoke-rc.d apache2 {[start] | [stop] | [restart] | [reload] | [force-reload]}ou/etc/init.d/apache2 apache2 {[start] | [stop] | [restart] | [reload] | [force-reload]}Les arguments possibles sont : start : dmarre le serveur, stop : arrte le serveur; les ventuelles connexions en cours sont brutalement coupes, reload : arrte les serveur sans couper les connexions en cours (il refuse les nouvelles connexionset attend que les connexions en cours soient termines), force-reload : stoppe le serveur avec stop puis redmarre avec start restart : comme force-reloadLescript/etc/init.d/apache2estenfaitunwrapper(unesurcouche)delacommandeapache2ctl. Il est recommand d'utiliser le wrapper dans la plupart des cas. Mais cette commande offrequelques fonctionnalits supplmentaires utiles : graceful-stop et configtest qui permettent,respectivement de stopper le serveur sans couper les connexions en cours et de tester la configuration.Cettedernirepossibilitestparticulirementutilesurdesserveursenproduction.LescriptSysVutilise d'ailleurs configtest lorsqu'il est invoqu avec l'argument reload.root@ubuntu:~# apache2ctl configtestSyntax OKroot@ubuntu:~#4.4. FiltrageRiendetrscompliqupourouvrirl'accsauport80aveclesrglestabliesprcdemment(Section2.4.3,Filtragedebase).Enrevanche,nouspouvonsyajouterquelquesrglesafind'laborer une stratgie de protection contre les dnis de services.Dploiement et guidedes oprations Apache354.4.1. FiltrageExemple 4.1. Apache: configuration du filtrage TCP en entre## ####################################### TCP entrant# Il faudra ouvrir des ports au fil de l'eau# lors de la mise en place de # services TCP (ssh, apache, ...).# #######################################-A TCP_IN -j TCP_INLIMITS-A TCP_IN -j STATEFUL-A TCP_IN -j TCP_SYNLIMITS-A TCP_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m limit --limit 10/min -j LOG --log-prefix "TCP_IN:" --log-level 6 -A TCP_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -j DROP# Ajouter les rgles ici lors de l'installation de services TCP si ces services# doivent tre ouverts#-A TCP_IN -s adresse_ip_autorise -p tcp -m tcp --dport 80 -j ACCEPT 0# on peut aussi dbloquer le port 80 pour tout le monde-A TCP_IN -p tcp -m tcp --dport 80 -j ACCEPT O#0Rgle autorisant l'accs au port 80/tcp (http) pour l'adresse adresse_ip_autorise (qui peut aussitre un subnet). Cette rgle peut tre rpte autant de fois