• No se han encontrado resultados

Desplegament d'una infraestructura de sistemes informàtics basada en programari lliure

N/A
N/A
Protected

Academic year: 2020

Share "Desplegament d'una infraestructura de sistemes informàtics basada en programari lliure"

Copied!
156
0
0

Texto completo

(1)Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure Treball de Final de Carrera: Plataforma GNU/Linux Jordi Mallach Pérez. Miquel Àngel Senar Rosell Enginyeria Tècnica d’Informàtica de Sistemes 13 de gener de 2013. c 2013 Universitat Oberta de Catalunya ○. 13 de gener de 2013.

(2) Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure. Dedicatòria Als meus companys de l’equip de sistemes de l’Institut Tecnològic d’Informàtica, per aquells 5 anys de treball i aprenentatge. A Debian i a la comunitat del programari lliure, per donar-me un espai on aspiracions professionals i compromís social i polític tenen una trobada. A Maria, per la seua paciència durant tants mesos de lliuraments, exàmens i nervis, per animar-me a arribar fins ací. A Aran, el nostre primer fill, que va nàixer just quan començava el semestre i a qui he furtat massa temps per completar aquesta memòria. Resum Aquest treball sintetitza amb tot el detall possible, el desplegament dels serveis de xarxa més importants i comuns per donar servei a una organització fictícia de tamany mitjà, amb uns 40 llocs de treball. Des de la instal·lació dels servidors amfitrions fins a la configuració de totes les màquines virtuals, es descriu tot el que cal fer per, seguint aquest manual, obtenir una infraestructura de sistemes d’informació amb serveis complets de correu, directori, DNS, web, eines de desenvolupament, gestor de projectes, i altres, totes basades íntegrament en programari lliure. A més de la tria de solucions lliures, també es posa èmfasi en la simplicitat, lleugeresa del programari, facilitat per a fer futures actualitzacions a noves versions del sistema operatiu Debian i el cost monetari més baix possible.. Índex 1. Introducció Aspectes formals del document Mètode de desenvolupament Planificació dels treballs 2. Instal·lació de Debian GNU/Linux 7.0 wheezy Introducció Instal·lació bàsica Primer reinici del servidor Configuració de la xarxa 3. Configuració d’un amfitrió d’LXC Introducció Serveis de monitoratge Servidor d’accés remot Serveis per als servidors virtuals 4. Instal·lació de contenidors Debian wheezy amb LXC Introducció Creació d’una màquina virtual Configuració de la xarxa dins del contenidor Configuració de l’APT Utilitats del sistema Serveis de monitoratge Reconfiguració i monitoratge de serveis 5. Configuració de DNS i DHCP per a una LAN Introducció Instal·lació i configuració del dnsmasq Instal·lació configuració del powerdns-recursor Treball de Final de Carrera: Plataforma GNU/Linux. 1/6.

(3) Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure. 6. Configuració d’un servidor autoritatiu de DNS Introducció Instal·lació i configuració del servidor primari Instal·lació i configuració dels servidors secundaris 7. Instal·lació d’un servidor de directori i eines de gestió Introducció Instal·lació d’un servidor Samba amb LDAP Instal·lació d’un servidor de replicació d’LDAP Impressió amb CUPS via Samba Instal·lació de GOsa Configuració de clients Windows Tutorial de GOsa Configuració addicional per a MySQL Scripts i utilitats per administrar LDAP Apèndix: smb.conf Apèndix: gosa.conf 8. Instal·lació d’un servidor web i servidor intermediari d’HTTP invers Introducció Instal·lació d’Nginx Configuració d’Nginx 9. Instal·lació dels serveis de correu Introducció Instal·lació i configuració de l’imapd: Dovecot Instal·lació i configuració del smtpd: Postfix Instal·lació i configuració del webmail: Roundcube Instal·lació i configuració del gestor de llistes: Mailman Apèndix: fitxers de configuració complets 10. Instal·lació i configuració d’un gestor de projectes: Redmine Introducció Instal·lació del Redmine Configuració del Redmine Configuració de la visualització externa del Redmine 11. Configuració i gestió de còpies de seguretat amb rdiff-backup Introducció Instal·lació i configuració de Kunoichi Gestió bàsica de les còpies de seguretat 12. Conclussions del projecte 13. Glossari 14. Bibliografia. Treball de Final de Carrera: Plataforma GNU/Linux. 2/6.

(4) Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure. Introducció Aquest és, sense dubte, un projecte personal. Després de catorze anys d’usuari de sistemes operatius lliures, i onze com a desenvolupador del projecte Debian, he anat arreplegant moltíssimes preferències en quant a la forma de gestionar servidors basats en GNU/Linux, muntar serveis de xarxa i seleccionar el programari en què basar aquests serveis. Al món dels sistemes informàtics basats l’ecosistema Windows hi ha ben bé poca diversitat: l’oferta unificada de productes de Microsoft fa que gairebé tots els dissenys d’una infraestructura basada en Windows passen pels mateixos productes: Active Directory, Exchange, MS SQL Server, Hyper-V, IIS (amb el permís d’Apache httpd) i la resta de tecnologies que conformen la família de serveis per a servidors de Microsoft. Així, la documentació es troba molt unificada a can Microsoft, i segurament la majoria de desplegaments es fan d’una manera molt, molt pareguda, ja que aquestes eines no deixen espai per a grans divergències. El món GNU/Linux, però, és tot el contrari. Hi ha una gran oferta de distribucions on triar, diferents models de desenvolupament; opcions amb servei de suport de pagament i altres que deleguen això a empreses del sector; solucions finançades per empreses i altres gestionades totalment des del voluntariat; projectes que publiquen versions amb una cadència establerta, altres que només publiquen versions noves quan es considera que el producte és preparat per sortir del forn. A l’hora de desplegar un simple servidor web, per exemple, el primer que cal fer és triar el programari, perquè es pot emprar el líder indiscutible, Apache, però també altres alternatives emergents, lleugeres, simples i funcionals com poden ser Lighttpd, nginx o Cherokee. Els motius per triar un o altre son moltes: salut del projecte, facilitat de configuració, extensibilitat, lleugeresa, requeriments de maquinari. . . De la mateixa manera, es pot triar una solució de virtualització entre molts models existents diferents, cadascun amb els seus avantatges i desavantatges, des de la virtualització total a nivell de maquinari, com KVM, a la paravirtualització com Linux-VServer, OpenVZ o Linux Containers. Com ja s’ha mencionat, segurament moltes de les decisions tècniques que es desenvoluparan en aquest document són fruit d’anys de treball i molts costums adquirits. Tot i això, segurament totes les decisions responen a tres grans raonaments: ∙ La creació d’una infraestructura que siga barata en termes econòmics, mitjançant la tria de programari que, tot i no ser el més conegut, complet i documentat, oferisca absolutament tota la funcionalitat requerida pels nostres usuaris i al mateix temps, tinga un consum de memòria i temps de computació baix. Això ens permet aprofitar els servidors amfitrions de la infraestructura per a oferir més serveis, rebaixant el cost de la infraestructura inicial i el seu manteniment i renovació, i simplificant l’estructura del CPD. ∙ La instal·lació i configuració del programari de manera que facilite la seua mantenibilitat des del punt de vista de la gestió de configuracions del sistema operatiu emprat, i la facilitat de fer actualitzacions a versions noves del sistema operatiu respectant les nostres modificacions i personalitzacions. ∙ La utilització de programari lliure, sempre que això siga possible, tot i que existisquen solucions igual o més convenients amb llicència privativa.. Tria de programari La lleugeresa i simplicitat han sigut una de les característiques principals que s’ha tingut en compte a l’hora de triar el programari principal de la nostra arquitectura. Podem dir que la nostra columna vertebral és, sense dubte, Debian GNU/Linux, i el servidor web nginx és el material de construcció bàsic més preciat. Debian és una de les grans distribucions de GNU/Linux, un projecte fundat al 1993 que ha anat cosolidant-se al llarg de gairebé vint anys, i ara mateix és la distribució no comercial més emprada per a l’ús com a servidor, i una seriosa competidora de l’hegemònica Red Hat Enterprise Linux. Debian té un gran prestigi al món dels administradors de sistemes GNU/Linux per ser extremadament fiable i fidel a la política de «no destorbar l’usuari». Les versions de Debian eixen cada dos anys aproximadament, però a diferència dels cicles de llançament fixats en el temps molt comuns en els últims temps, com fa Ubuntu, en Debian es mantenen fidels a llançar una versió nova quan l’equip de desenvolupadors. Treball de Final de Carrera: Plataforma GNU/Linux. 3/6.

(5) Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure. considera que tots els problemes s’han corregit i la distribució és preparada. Com diuen ells, «Debian will release when it’s ready». El programari més crític en les infraestructures de xarxa actuals és sense dubte el servidor web, donat que cada vegada més i més serveis estan migrant d’aplicacions d’escriptori a aplicacions basades en web, normalment recolzades per una base de dades al rerefons. En aquest àmbit, Apache és el líder indiscutible en tots els sistemes operatius: Windows, BSD, GNU/Linux o Mac OS X Server. No en va, és un servidor robust, segur i modular, amb suport per servir qualsevol tecnologia de web actual. En la infraestructura que hem dissenyat, necessitarem uns quants servidors web, gairebé un per cada màquina virtual que muntarem. Cap d’aquests servidors tindrà unes exigències tècniques massa grans llevat de la capacitat de servir PHP i fer de servidor intermediari. Desplegar Apache en tots aquests casos elevaria molt la quantitat de RAM necessària als servidors amfitrions, i seria infrautilitzada ja que només empraríem funcionalitat bàsica d’un monstre complex com és Apache. És per això que hem mirat algunes alternatives com lighttpd i nginx, que han resultat ser tan vàlides com Apache, però amb un cost computacional i de recursos molt, molt menor. Una instància per defecte d’Nginx sol emprar uns 2MB de RAM, i ens permet servir, amb dimonis associats, aplicacions via FastCGI, PHP o Python. La configuració és senzilla i clara, està tan bé documentada com la d’Apache i el rendiment és òptim, superant amb escreix Apache en moltes configuracions. En definitiva, en aquest projecte hem pogut emprar Nginx sense cap problema en absolutament tots els casos d’ús, amb uns resultats òptims. De manera similar, per a altres serveis hem triat solucions menys conegudes però igual d’efectives que els líders en el seu sector: ∙ DNS: en lloc de Bind, el líder en servidors de DNS, hem optat per PowerDNS, que implementa tots els protocols i tecnologies recents de DNS: DNSSEC, IPv6, etc., a l’hora que és capaç de treballar de sèrie amb els fitxers de configuració de zones de Bind, fent molt simple una migració des d’una instal·lació Bind anterior. ∙ DHCP: en lloc de ISC DHCP, que té un registre de seguretat prou qüestionable, hem optat per la solució mixta com dnsmasq, que s’encarrega de fer de servidor de DHCP per a la xarxa interna, a més de servir el DNS intern. ∙ PHP: en totes les configuracions on era necessari instal·lar PHP, s’ha optat pel seu nou mecanisme FPM, que és molt més eficient que l’antic basat en CGI. Nginx enllaça amb PHP FPM amb FastCGI a través d’un sòcol Unix, fent que l’impacte de l’ús de FastCGI siga mínim. ∙ IMAP: Dovecot és un servidor d’IMAP molt jove, però amb un ritme de desenvolupament que prompte farà que els líders, Cyrus i Courier, es queden en segon pla. És un servidor segur, eficient i totalment modular, i és molt fàcil d’integrar amb Exim4 o Postfix. ∙ SMTP: per una vegada, ens hem adherit al líder indiscutible com és Postfix, perquè és lleuger, segur i més complet i a l’hora flexible que cap dels seus competidors. A més, permet integrar altres serveis relacionats com el Mailman o Dovecot d’una manera senzilla.. Aspectes formals del document Llengua En l’elaboració d’aquest document, s’ha intentat seguir el model de llengua de Softcatalà i TermCAT a l’hora de referir-se a tecnologies del món TIC. Això vol dir que en la major part dels casos s’ha intentat cercar el llenguatge consensuat al Recull de termes de Softcatalà , i emprar, allà on era addient, l’estil de la Guia d’estil de Softcatalà. Per exemple, en lloc de dir hardware, s’ha optat pel normatiu maquinari; en lloc de software lliure s’ha optat per programari lliure, o en lloc de socket, s’ha tractat d’emprar sempre sòcol Unix. Estructura Des del primer moment s’ha tractat de donar a aquesta memòria un format semblant al que empren els materials d’estudi de la UOC: un document individual per cada mòdul. Tot i que el resultat d’això no és exactament compatible amb els Treball de Final de Carrera: Plataforma GNU/Linux. 4/6.

(6) Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure. requeriments de l’estructura de la memòria final dels TFC de la UOC, s’ha decidit continuar amb aquest model perquè la gestió del contingut era molt més fàcil. El document final és una composició dels catorze PDF individuals generats pel codi font. Això té dos inconvenients, que es documenten aquí. Per limitacions de la maquetació del conversor de reStructuredText a Tex (només admet un títol per document), no ha estat possible fusionar tot el codi font en un sol fitxer .rst al final del procés d’elaboració d’aquesta memòria. Això té dos consequències: ∙ Els índex i apèndix de càda mòdul estan integrats en els mòduls, i no al principi i final de la memòria, com mana l’estructura. Per subsanar la part de l’Índex, he escrit a mà un Índex reduït en aquesta introducció, però aquest manca navegabilitat amb enllaços ni els números de pàgina. ∙ Els índex individuals de cada mòdul sí tenen navegabilitat, però al ser originalment documents PDF individuals, la numeració és relativa al fitxer original, i no al document fusionat. Format del codi font Aquest document s’ha escrit íntegrament emprant el llenguatge de descripció reStructuredText, posteriorment convertit a PDF amb un dels convertidors inclosos al projecte Python Docutils. Aquest format permet escriure el document en un format en text pla molt fàcil de generar, però permet fer conversions a formats rics com OpenDocument (.odt), HTML, PostScript o PDF amb aspecte LaTeX. A més de la facilitat de l’escriptura, l’ús de RST ha permès mantenir tot el codi font d’aquest projecte de TFC gestionat amb Git, amb la qual cosa s’ha pogut anar consultant l’històric de canvis en text pla, sense haver de pujar revisions de fitxers binaris com els emprats per Microsoft Office o LibreOffice. Per donar als documents finals un aspecte amb la imatge corporativa de la UOC, s’ha creat un estil de TexLive per a la UOC, amb logotip i colors blaus pels encapçalaments.. Mètode de desenvolupament Darrere d’aquesta memòria hi ha moltíssimes hores de treball no plasmades en fulls escrits. Moltes hores invertides en el desenvolupament d’aquest projecte s’hagen invertit primer en el disseny de la infraestructura que seguidament es proposa, l’anàlisi dels requeriments i la cerca de les solucions a emprar, ja esmentades en aquesta introducció. Però sense cap dubte, la gran majoria d’hores s’han invertit en la instal·lació de màquines virtuals, desenvolupament de configuracions i la prova de les mateixes, en un procés repetitiu fins trobar una solució simple i funcional per cadascuna de les propostes dels capítols següents. Així, per cada servei descrit en la memòria s’ha hagut de: ∙ Instal·lar una màquina virtual VirtualBox (en el cas de la documentació per als amfitrions) o LXC (en el cas de les màquines virtuals) de prova. ∙ Instal·lar diverses solucions per sotmetre-les a proves i per trobar la solució preferida. ∙ Iterar amb diferents versions de la configuració de la solució triada, fins arribar a la configuració desitjada. ∙ Completar la instal·lació amb solucions de còpia de seguretat i monitoratge, allà on calia. ∙ Documentar amb detall el procés exacte per arribar a aquest desplegament. Segurament el 80% del temps s’ha invertit en els 4 primers punts, i el 20% restant en l’últim, que és le que s’ha plasmat en aquesta memòria.. Treball de Final de Carrera: Plataforma GNU/Linux. 5/6.

(7) Desplegament d’una infraestructura de sistemes informàtics basada en programari lliure. Planificació dels treballs La planificació del projecte ha sigut prou senzilla i lògica: primer s’ha treballat en els fonanents de la infraestructura (els servidors amfitrions), després s’ha buscat una manera de generar una plantilla de màquines virtuals per guanyar temps a l’hora de crear-ne noves, i a partir d’aquest punt s’ha anat configurant serveis en l’ordre més lògic, segons les dependències entre ells: DHCP i DNS, LDAP, Samba i gestió de comptes d’usuari, accés web, serveis de correu, serveis de desenvolupament i de gestió de projectes i gestió de còpies de seguretat de tot l’anterior. El resultat d’aquesta planificació són 11 capítols on es detalla i justifica la configuració, desplegament i manteniment de tots els serveis descrits anteriorment, de manera que, seguint aquest manual, es podria replicar aquesta infraestructura de xarxa, basada en un sistema operatiu modern i amb les darreres versions del programari triat, gairebé a base de copia i enganxa. Val a dir que s’obvia el capítol sobre la valoració econòmica perquè no hi ha massa a dir que no s’haja comentat en aquesta introducció. Com no es requereixen llicències per a la instalació de tot aquest programari, tota la despesa serà la necessària per comprar un servidor amb una quantitat de RAM discreta, i una CPU que no té per què ser d’última generació; unes prestacions aportades per qualsevol PC de gamma mitjana del mercat actual.. Treball de Final de Carrera: Plataforma GNU/Linux. 6/6.

(8) Instal·lació de Debian GNU/Linux 7.0 wheezy. c 2013 Universitat Oberta de Catalunya ○. 13 de gener de 2013.

(9) Instal·lació de Debian GNU/Linux 7.0 wheezy. Contingut Introducció. 1. Instal·lació bàsica Primers passos de la instal·lació . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Partició del disc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Completant la instal·lació bàsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1 1 2 2. Primer reinici del servidor Instal·lació del servidor de SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuració de l’APT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3 3 3. Configuració de la xarxa Nom de les interfícies de xarxa . . . . . . . . . . . . . Dades sobre les diferents xarxes a configurar . . . . . . Configuració de la interfície de loopback . . . . . . . . Configuració de la interfície d’accés a l’amfitrió . . . . Configuració de la interfície d’accés a la xarxa pública. 4 4 4 6 6 7. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. Introducció Aquest document descriu la instal·lació d’un servidor que funcionarà com a amfitrió de màquines virtuals basades en LXC i KVM. El sistema operatiu empleat serà la versió per a arquitectures Intel o AMD de 64 bits de Debian GNU/Linux. En concret emprarem la versió 7.0 de la distribució (Debian wheezy) i per a realitzar la instal·lació utilitzarem l’última revisió disponible del debian-installer (en el moment d’escriure açò, s’ha d’emprar una versió generada automàticament cada dia perquè la versió final encara no s’ha publicat). Per a gestionar les màquines virtuals emprarem libvirt, que és una biblioteca d’abstracció de diferents tecnologies de virtualització que funcionen amb el nucli Linux.. Instal·lació bàsica En aquest apartat explicarem com instal·lar des de zero un servidor que funcionarà com amfitrió per a servidors virtuals LXC i KVM. En el cas estàndard, totes les instal·lacions es realitzaran emprant la versió de 64 bits de la distribució per a l’arquitectura amd64. Els discos es configuraran per a utilitzar LVM i el sistema de fitxers de les particions serà l’ext4. Si tinguéssim més d’un disc i no disposarem d’una controladora RAID per maquinari, seria convenient configurar la partició dels discs amb RAID per programari, emprant mdadm. Aquest document no entrarà en detall per a aquest supòsit.. Primers passos de la instal·lació Per a instal·lar el sistema emprarem un CD d’instal·lació de Debian wheezy que tinga suport per a amd64. Les últimes versions de l’instal·lador per a múltiples arquitectures es poden descarregar des de l’adreça: http://cdimage.debian.org/debian-cd/ Per a validar aquest document hem emprat la imatge diària que està disponible en la ruta http://cdimage. debian.org/cdimage/daily-builds/sid_d-i/20121104-3/multi-arch/iso-cd/ tot i que es podria haver emprat qualsevol altre CD amb suport per a amd64.. 1/8.

(10) Instal·lació de Debian GNU/Linux 7.0 wheezy. Una vegada arrancat l’instal·lador anirem contestant a les preguntes. En primer lloc se’ns preguntarà la llengua, el territori i la disposició de teclat a emprar. Per emprar el sistema en català per defecte seleccionarem com a llengua l’entrada Catalan - català. Com a territori posem Espanya, Andorra o el que vulguem, i seleccionem la disposició de teclat en Espanyol. A continuació el sistema ens sol·licitarà que configurem la xarxa; encara que l’equip dispose de diverses targetes en aquest pas de la configuració només configurarem la primera. El primer que prova l’instal·lador és la configuració usant DHCP. Si en la nostra xarxa disposem d’un servidor DHCP l’instal·lador emprarà la configuració IP obtinguda per aquest mitjà. En el cas que no tinguem accessible un servidor DHCP l’instal·lador ens demanarà que configurem la xarxa manualment, per al que necessitarem conèixer i indicar el valor de les següents dades: ∙ Adreça IP del servidor ∙ Màscara de xarxa ∙ Passarel·la o gateway ∙ Adreces dels servidors de noms Després de configurar la interfície de xarxa el sistema d’instal·lació ens demanarà el nom del servidor (si el DHCP li ha donat un ens suggerirà aquest i sinó proposarà el nom estàndard debian), i a continuació ens demanarà el nom de domini (si el servidor DHCP no suggereix un, l’instal·lador mostrarà el camp buit per defecte, tot i que sempre és recomanable emprar un, encara que siga fictici). Si la xarxa funciona correctament l’instal·lador obtindrà l’hora d’un servidor de xarxa i ens demana que seleccionem la nostra ubicació. Amb aquestes dades bàsiques, serà el moment de partir el disc per fer la instal·lació del sistema operatiu.. Partició del disc Assumirem que només tenim un disc, o que els múltiples discs estan gestionats per un RAID de maquinari que s’encarrega del manteniment del RAID1. Per això, per partir el disc amb suport LVM podem utilitzar el partidor automàtic del debian-installer: En la pantalla de partició de discs seleccionarem l’opció de particionat guiat que utilitza el disc complet i configura l’LVM. En la següent pantalla seleccionarem l’únic disc del sistema, i seguidament triarem l’opció d’emmagatzemar tots els fitxers en una única partició. Finalment acceptarem que l’instal·lador escriga els canvis en el disc i configure l’LVM. En aquest punt estaríem llests per a finalitzar, però per deixar espai lliure per fer snapshots del sistema de fitxers, és necessari que el volum lògic del sistema de fitxer no empre tot l’espai disponible en el grup de volums. Per canviar això, seleccionarem l’opció Configura el gestor de volums lògics LVM, i suprimirem el volum root, per tornar-lo a crear amb idèntic nom i en el mateix grup de volums, però canviant la mida del volum. Concretament, li haurem de donar l’espai que ens suggereix l’instal·lador, menys uns 5 GB que serà l’espai que el gestor de volums tindrà disponible per emmagatzemar els deltes temporals del snapshot. Una vegada creat el volum eixirem de la configuració del LVM, seleccionarem el volum nou, i ho configurarem com a sistema de fitxers arrel en format ext4. Ara sí, estarem preparats per acabar amb la partició i escriure els canvis en el disc. A partir d’ací l’instal·lador formatarà les particions i continuarà el procés d’instal·lació normal.. Completant la instal·lació bàsica Després de la partició, el sistema instal·larà el sistema bàsic i ens demanarà diverses dades addicionals:. 2/8.

(11) Instal·lació de Debian GNU/Linux 7.0 wheezy. 1. Creació d’usuaris. El sistema ens demana la clau del superusuari (root) i un usuari addicional. Per a la clau del root generarem una contrasenya el més aleatòria possible que emmagatzemarem en algun lloc segur (p. ex. en un fitxer xifrat o en el cap del que fa la instal·lació) i la introduirem quan l’instal·lador ens la demane. Quant a l’usuari addicional la veritat és que no és necessari, així que podem no crear-lo (cancel·lant la creació i saltant al següent pas de la instal·lació) o crear un usuari temporal amb una clau aleatòria i eliminar-ho en acabar la instal·lació. Optarem per cancel·lar el pas i seguint amb el següent. 2. Selecció de la rèplica de Debian, seleccionant primer el país i després la rèplica que més ens convinga (p. ex. ftp.de.debian.org). 3. Participació en el popularity contest. Com s’explica en pantalla, el projecte Debian manté un servei que permet saber quin programari és més emprat i té més instal·lacions actives, dades amb les quals és més fàcil realitzar tasques de neteja de l’arxiu de programari, decidir quin programari s’instal·la per defecte, etc. Les dades són anònimes i l’ús d’ample de banda és mínim. En el nostre cas, accedirem a participar, perquè les dades són molt valuoses per a Debian. 4. Instal·lació de tasques: desseleccionarem totes les tasques que apareixen en el tasksel perquè no s’instal·le res més de moment. 5. Per a acabar instal·larem el GRUB en el MBR i reiniciarem l’equip per a arrancar amb el nou sistema.. Primer reinici del servidor Després de reiniciar el sistema i extraure el CD de l’instal·lador, arrencarem el sistema recén instal·lat, ens identificarem com l’usuari administrador i executarem unes quantes seqüències d’instruccions per poder treballar remotament i completar la instal·lació bàsica del sistema.. Instal·lació del servidor de SSH Si anem a treballar en remot començarem instal·lant l’openssh-server: apt-get install openssh-server. Si volem entrar en el servidor usant claus en lloc de contrasenyes aquest seria el moment adequat per a copiar les claus dels usuaris autoritzats en el fitxer /root/.ssh/authorized_keys. Nota A partir d’aquest punt és recomanable tancar la sessió que teníem oberta en la consola i treballar remotament, ja que açò ens permet estar més còmodes i treballar en un sistema que ens permeta veure la documentació en pantalla i copiar i enganxar el que vulguem usant el ratolí.. Configuració de l’APT La instal·lació de wheezy deixa el sistema amb una configuració de fonts d’APT tal i com la necessitem, amb entrades per als origens de paquets general, d’actualitzacions de seguretat, d’actualitzacions diverses i de backports des de la següent versió de Debian. No haurem de tocar això. Per mantindre el sistema amfitrió amb el nombre de paquets estrictament necessari per a la nostra tasca, configurarem el gestor de paquets per a que, per defecte, no instal·le els paquets recomanats: echo ’APT { Install-Recommends "false"; }’ > /etc/apt/apt.conf.d/0no_recommends. 3/8.

(12) Instal·lació de Debian GNU/Linux 7.0 wheezy. Configuració de la xarxa En el cas més normal, després d’instal·lar el sistema en el fitxer /etc/network/interfaces tindrem configurats dos dispositius, l’interfície de loopback (lo) i la targeta de xarxa connectada a la xarxa pública (*eth0) configurada per a utilitzar DHCP (només en el cas que tinguéssim el servei de DHCP disponible en realitzar la instal·lació, és clar). Com volem utilitzar servidors virtuals el més semblants possibles a sistemes reals tant en el cas de KVM com en el de LXC emprarem bridging per a donar accés a la xarxa. En el cas de LXC açò suposa emprar dispositius de tipus veth, que té un cost computacional lleugerament major que les interfícies del tipus venet, però ens proporcionen un interfície de xarxa pràcticament idèntic al que empraria un sistema real, que és el que preferim (en la pàgina http://wiki.openvz.org/differences_between_ venet_and_veth s’expliquen les diferències entre tots dos tipus de dispositius). En qualsevol cas i abans de començar a configurar els dispositius ens assegurarem que disposem de suport per a configurar els bridges ethernet instal·lant les eines de suport, que en aquest cas es limiten al paquet bridge-utils: apt-get install bridge-utils. Nom de les interfícies de xarxa Si el sistema amfitrió disposa de múltiples interfícies Ethernet, els noms ethN seran assignats de forma aleatòria, per la qual cosa no tindrem cap garantia que el nom eth0 corresponga a la interfície de xarxa pública. Atès que durant la instal·lació tan sols hem configurat una targeta de xarxa, només hauria d’aparèixer una interfície Ethernet en /etc/network/interfaces, i l’execució de l’ordre següent només hauria de mostrar una línia: grep ’^iface eth’ /etc/network/interfaces. Si la línia fa referència a eth0, la interfície pública té el nom correcte. En qualsevol cas, per a assegurar-nos que les targetes tenen el nom d’interfície desitjat haurem d’alterar la configuració de l’udev i possiblement modificar /etc/network/interfaces. Començarem per inhabilitar la interfície pública executant: ifdown ethN. On ethN és la interfície mostrada per l’ordre grep anterior. Després d’açò, editarem el fitxer /etc/udev/rules.d/70-per on trobarem per cada targeta una entrada de l’estil de:. # PCI device 0xNNNN:/sys/devices/* (MODEL) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", *ATTR{address}=="NN:NN:NN:NN:NN:NN", ATTR{dev_. Amb l’ajuda del model indicat en els comentaris i les adreces MAC, modificarem els valors de NAME per donar-li a cada targeta el nom d’interfície desitjat. Una vegada fet açò, i si la interfície pública no tinguera actualment el nom correcte, ho reemplaçarem en interfaces executant: sed -i ’s/ethN/eth0/g’ -i /etc/network/interfaces. On ethN és la interfície mostrada per l’ordre grep anterior. Després de tot açò serà necessari reiniciar el sistema.. Dades sobre les diferents xarxes a configurar Per a la instal·lació que ens ocupa definirem diverses xarxes privades i afegirem interfícies de xarxa per a accedir a elles tant en el sistema amfitrió com en els servidors virtuals. Les xarxes que anem a utilitzar seran les següents:. 4/8.

(13) Instal·lació de Debian GNU/Linux 7.0 wheezy. ∙ DMZ pública: xarxa connectada directament a un tallafoc que és el que dóna accés a Internet, tots els serveis públics estan accessibles a través d’aquesta xarxa. Empra adreces de la xarxa 192.168.1.0/24 i sufix de DNS pubdmz-net. ∙ Xarxa d’accés a l’amfitrió: xarxa virtual no encaminable que es munta en cadascun dels sistemes amfitrions per a connectar els servidors virtuals amb el seu amfitrió. Empra adreces de la xarxa 172.27.0.0/16 i sufix de DNS vhost-net. ∙ Opcionalment podríem definir una DMZ privada, que seria una xarxa no accessible des de l’exterior que interconnectaria els servidors físics i virtuals emprant adreces de la xarxa 10.0.0.0/8 i sufix de DNS privdmz-net. Tot i que en xarxes més grans això seria convenient per protegir els servidors d’atacs provinents de la mateixa xarxa local, en el nostre cas assumirem que el risc no és tan gran com per complicar tant la xarxa del projecte. Nota En els punts següents explicarem com anem a configurar els dispositius que anem a emprar en el sistema amfitrió; en la descripció assumirem que hem copiat el fitxer netvars-common.sh al directori $HOME de l’usuari root; el contingut inicial del fitxer serà el següent: # Configuració de xarxa # Dades DMZ pública # ----------------# IP Prefix PUB_IPP="192.168.1" # NETWORK ADDRESS PUB_NET="192.168.1.0" # BROADCAST_ADDRESS PUB_BCAST="192.168.1.255" # NETWORK MASK PUB_MASK="255.255.255.0" # GATEWAY PUB_GW="192.168.1.248" # DNS PUB_DOMAIN="pubdmz-net" # Dades xarxa interna (xarxa d’accés a l’amfitrió) # -----------------------------------------------# IP Prefix INT_IPP="172.27" # NETWORK ADDRESS INT_NET="172.27.0.0" # BROADCAST_ADDRESS INT_BCAST="172.27.255.255" # NETWORK MASK INT_MASK="255.255.0.0" # DNS INT_DOMAIN="vhost-net" # DADES DE DNS # -----------# EXTERNAL DNS NAME SERVERS DNS_NS="192.168.1.254". 5/8.

(14) Instal·lació de Debian GNU/Linux 7.0 wheezy. # DNS SEARCH DOMAINS PUB_DNS_SEARCH="$PUB_DOMAIN $PRIV_DOMAIN $INT_DOMAIN" PRIV_DNS_SEARCH="$PRIV_DOMAIN $PUB_DOMAIN $INT_DOMAIN". Aquestes variables les utilitzarem per a generar els fragments de configuració dels diferents interfícies (accés a la DMZ pública i accés a xarxa d’accés al sistema amfitrió). Abans d’usar-les les carregarem en l’intèrpret d’ordres emprant una instrucció del tipus: . ~/netvars-common.sh. A més de les variables anteriors en els exemples crearem el fitxer ~/netvars-host.sh en el qual definirem variables addicionals relacionades amb el sistema amfitrió a configurar com les següents: # Sufix IP pública amfitrió HOST_PUB_IPS="101" # Sufix IP interna amfitrió HOST_INT_IPS="0.1". I crearem fitxers per configurar els entorns virtuals (VE) amb contingut similar al següent: # Identificador del VE VEID="1011" # Sufix IP pública VE VE_PUB_IPS="11" # Sufix IP interna VE VE_INT_IPS="$((VEID/256)).$((VEID%256))". Configuració de la interfície de loopback Per configurar els dispositius editarem el fitxer /etc/network/interfaces. En el cas de la interfície loopback, no és necessari modificar res. Simplement ens assegurarem que el fragment del fitxer d’aquesta interfície tinga un contingut semblant al següent: # The loopback network interface # -----------------------------auto lo iface lo inet loopback. Com aquesta interfície ja estava correctament configurada i activada, no caldrà fer res més.. Configuració de la interfície d’accés a l’amfitrió En el nostre model de configuració hem intentat independitzar el funcionament de les màquines virtuals de la xarxa concreta en la qual s’executen. Per a aconseguir-ho configurem les màquines virtuals perquè accedisquen a determinats serveis emprant servidors intermediaris (Relay SMTP, servidor intermediari de DNS, servidor intermediari d’HTTP, etc.) que estan accessibles emprant una IP fixa que s’assigna al sistema amfitrió. L’objectiu és emprar una xarxa interna entre l’amfitrió i les màquines virtuals que siga igual en tots els servidors i que no s’encamine a l’exterior. Com es tracta d’una xarxa interna les connexions des de qualsevol entorn virtual sempre es fan contra el servidor sobre el qual s’executa i si es migra a un altre equip les connexions es fan contra el nou amfitrió. 6/8.

(15) Instal·lació de Debian GNU/Linux 7.0 wheezy. La xarxa interna es munta emprant un bridge sobre el dispositiu dummy0, que és un interfície ethernet virtual que permet encaminar el tràfic en la màquina. La IP del bridge serà la 172.27.0.1/16 (triem aquesta xarxa privada per a evitar conflictes amb altres xarxes, però podríem haver triat la xarxa 10.0.0.0/8 perfectament). El bridge es dirà vhbr0 i la seua configuració s’afegirà al fitxer /etc/network/interfaces: # Sufix IP de l’amfitrió en la xarxa interna HOST_INT_IPS="0.1" # Afegim el valor cat >> /etc/network/interfaces << EOF # ----------------------# The virtual host bridge # ----------------------auto vhbr0 iface vhbr0 inet static address $INT_IPP.$HOST_INT_IPS netmask $INT_MASK bridge_ports dummy0 bridge_stp off bridge_fd 0 EOF. I ho activarem executant l’ordre: ifup vhbr0. Perquè els servidors virtuals puguen accedir a aquest interfície i el tràfic s’encamine correctament els afegirem un interfície lligat a aquest bridge i emprarem adreces IP del tipus 172.27.VIPHB.VIPLB, on els valors de VIPHB i VIPLB es poden triar utilitzant el VMID de la màquina virtual per a garantir que siguen únics. Nota Com el valor del VMID és un enter de 16 bits els valors de VIPHB i VIPLB es poden obtenir en l’intèrpret emprant les assignacions VIPHB=$((VMID/256)) i VIPLB=$((VMID%256)), amb la qual cosa la IP del VE seria 172.27.$VIPHB.$VIPLB.. Configuració de la interfície d’accés a la xarxa pública Per a accedir a la DMZ pública muntarem un bridge sobre el dispositiu eth0. El primer que farem serà editar el fitxer /etc/network/interfaces i suprimir la línia següent: auto eth0. Per a garantir que si el sistema es reinicia no s’active la interfície eth0 amb la configuració actual (és igual que tinga DHCP o adreça fixa, ara anem a configurar la IP sobre el bridge). A continuació afegirem l’entrada per a l’interfície vmbr0 en el fitxer /etc/network/interfaces: # # # .. Carreguem variables de l’amfitrió (bàsicament hem de tenir definida la variable ‘‘HOST_PUB_IPS‘‘, que es correspon amb el sufix IP del servidor amfitrió que estem configurant ~/network-common.sh. # Reemplacem variables en la plantilla i afegim al final del. 7/8.

(16) Instal·lació de Debian GNU/Linux 7.0 wheezy. # ‘‘/etc/network/interfaces‘‘ cat >> /etc/network/interfaces << EOF # The Public DMZ Network Interface # -------------------------------auto vmbr0 iface vmbr0 inet static address $PUB_IPP.$HOST_PUB_IPS network $PUB_NET broadcast $PUB_BCAST netmask $PUB_MASK gateway $PUB_GW bridge_ports eth0 bridge_stp off bridge_fd 0 EOF. On el valor de HOST_PUB_IPS dependrà de l’equip en qüestió i la IP definida serà la que emprarem per a accedir a l’amfitrió (en el cas general mai s’utilitzarà per a publicar serveis allotjats en servidors virtuals que s’executen en aquesta màquina). Els dominis que apareixen en aquesta configuració són ficticis, el primer es refereix a la DMZ pública i el segon a la xarxa privada que empraran els servidors virtuals (funcionarà sobre el segon interfície de cada host, si ho usem). Perquè el DNS funcione correctament executarem el següent per a crear el fitxer /etc/resolv.conf: echo "domain $PUB_DOMAIN" > /etc/resolv.conf echo "search $PUB_DNS_SEARCH" >> /etc/resolv.conf for ns in $(echo $DNS_NS); do echo "nameserver $ns" >> /etc/resolv.conf; done. Per a activar la nova interfície remotament podem intentar desconfigurar la interfície eth0 i activar el vmbr0 amb només una instrucció: ifdown eth0; ifup vmbr0. de tal forma que si tot va bé, la connexió es mantindrà i podrem seguir amb el procés. En cas que aquestes instruccions fallen podem entrar per consola i fer el mateix per a verificar que la interfície vmbr0 es configura bé. En tots dos casos l’ideal seria que una vegada que sapiem que la interfície vmbr0 funciona correctament suprimim la informació relativa a eth0 del fitxer /etc/network/interfaces. Nota Com a opció alternativa a la reconfiguració en calent també podem suprimir la configuració d’eth0 i afegir la de vmbr0 al fitxer /etc/network/interfaces i reiniciar la màquina, de tal forma que la configuració de la xarxa es faça en l’arrencada i per tant no siga necessari desconfigurar res.. 8/8.

(17) Configuració d’un amfitrió de LXC Versió per a Debian wheezy. c 2013 Universitat Oberta de Catalunya ○. 13 de gener de 2013.

(18) Configuració d’un amfitrió de LXC. Contingut Introducció. 1. Utilitats del sistema. 1. Serveis de monitoratge apticron i actualizació de paquet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fail2ban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . monit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2 3 4 4. Servidor d’accés remot. 5. Serveis per als servidors virtuals Servidor de correu de l’amfitrió . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servidor intermediari HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servidor intermediari/memòria cau per l’APT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6 6 8 9. Introducció En aquesta secció detallarem els passos a seguir per completar la instal·lació d’un servidor dedicat a la virtualització emprant LXC i KVM, seguint el nostre model d’instal·lació de serveis.. Utilitats del sistema Per començar instal·larem unes quantes eines que ens poden resultar útils quan treballem amb els servidors, tot i que no siguen estrictament necessàries. La majoria de les utilitats s’empraran localment, així que tot i que s’indique el contrari no caldrà configurar res. El primer que farem és actualitzar la llista de paquets: # apt-get update. A continuació executarem les ordres següents per instal·lar els programes: # Sistema per executar programes com a un otre usuari: sudo apt-get install sudo # Multiplexa sessions de shell i les recupera des d’un altre terminal: screen apt-get install screen # Editor de text amb afegits i paginador decent: vim vim-scripts less apt-get install vim vim-scripts less # Shell decent: zsh apt-get install zsh # Eines per a fer còpies remotes i còpies de seguretat: rsync i rdiff-backup apt-get install -o APT::Install-Recommends rsync rdiff-backup # Compressors/descompressores útils: bzip2, xz, zip, unzip apt-get install bzip2 xz-utils zip unzip. Versió per a Debian wheezy. 1/10.

(19) Configuració d’un amfitrió de LXC. # Eina per cercar a quin paquet pertany un fitxer: dlocate apt-get install dlocate # Eines per obtenir informació sobre el maquinari: pciutils usbutils apt-get install pciutils usbutils # Utilitats pel control de fitxers i procesos: file lsof psmisc apt-get install file lsof psmisc # Eines per fer proves de xarxa: host netcat apt-get install bind9-host netcat-traditional # Utilitat per generar contrasenyes aleatòries: pwgen apt-get install pwgen # Sincronització del rellotge: openntpd ntpdate apt-get install openntpd ntpdate. Dels programes instal·lats en la llista anterior, l’únic programa que llança un dimoni és openntpd, ja que ha d’estar sempre actiu per actualitzar el rellotge del sistema. Per defecte, el dimoni no ajustarà l’hora si la diferència entre el rellotge i els servidors d’hora és de més de 180 segons. Per evitar això, afegirem «-s» als paràmetres d’arrencada per defecte: sed -i -e’s/DAEMON_OPTS="/DAEMON_OPTS="-s /’ /etc/default/openntpd. I reiniciarem el servei: /etc/init.d/openntpd restart. Nota Realment això últim no hauria de ser necessari si també instal·lem el paquet ntpdate, ja que aquest programa ajusta l’hora cada vegada que s’activa una interfície de xarxa, però en qualsevol cas, la redundància no fa mal. Una vegada instal·lats tots els paquets, executem l’ordre següent per netejar la memòria cau de paquets: # apt-get clean. Serveis de monitoratge Per a controlar diferents aspectes de l’amfitrió instal·larem unes quantes utilitats de monitoratge: ∙ apticron: sistema que actualitza la llista de paquets totes les nits i envia un correu si hi ha actualitzacions pendents. ∙ collectd: sistema de captura d’estadístiques del sistema, s’integrarà amb una eina tipus rddtool per a generar informes d’ús del servidor. ∙ fail2ban: eina que afegeix regles de tallafoc quan hi ha diversos intents fallits d’accés al servidor en diferents serveis (en el nostre cas ens interessa per l’ssh). ∙ monit: sistema de monitoratge local del servidor, ho configurarem perquè supervise l’estat dels servidors locals del host. Els paquets s’instal·laran com sempre: Versió per a Debian wheezy. 2/10.

(20) Configuració d’un amfitrió de LXC. apt-get apt-get apt-get apt-get. install install install install. apticron fail2ban logcheck logcheck-database monit. apt-get install -o APT::Install-Recommends collectd. En els següents punts descriurem breument com es configuren i empren tots aquests programes.. apticron i actualizació de paquet Per defecte, l’apticron es configura per actualitzar la llista de paquets diàriament i notificar els canvis a l’usuari root, per la qual cosa no serà necessari canviar cap paràmetre de la configuració. Quan hi ha paquets pendents d’actualitzar al nostre sistema, apticron enviarà a l’administrador un correu similar al següent: Subject: Debian package updates on SERVIDOR apticron report [Thu, 02 Nov 2012 15:24:23 +0100] ======================================================================== apticron has detected that some packages need upgrading on: SERVIDOR [ 127.0.0.1 AAA.BBB.CCC.DDD ] The following packages are currently pending an upgrade: libapache2-mod-php5 5.4.4-9 php5-cli 5.4.4-9 php5-common 5.4.4-9 php5-curl 5.4.4-9 php5-gd 5.4.4-9 php5-mysql 5.4.4-9 ======================================================================== .... Seguit d’una descripció dels canvis en els paquets a actualitzar. Per a fer l’actualització, accedirem al servidor indicat com a usuari root i simularem l’actualització per comprovar que no donarà problemes, executant: # apt-get -sy dist-upgrade S’està llegint la llista de paquets... Fet S’està construint l’arbre de dependències S’està llegint la informació de l’estat... Fet S’actualitzaran els paquets següents: libapache2-mod-php5 php5-cli php5-common php5-curl php5-gd php5-mysql 6 actualitzats, 0 nous a instal·lar, 0 a suprimir i 0 no actualitzats. S’ha d’obtenir 0B/5680kB d’arxius. Després d’aquesta operació s’empraran 0 B d’espai en disc addicional.. Si no es detecta cap anomalia, podem tornar a executar l’ordre, però suprimint l’opció de simulació «-s» i deixant l’opció per respondre afirmativament a totes les preguntes «-y»: Versió per a Debian wheezy. 3/10.

(21) Configuració d’un amfitrió de LXC. # apt-get -y dist-upgrade. També és convenient netejar la memòria cau de paquets baixats, per evitar que s’acumulen i ocupen massa espai al disc: # apt-get clean. El programa collectd s’ha instal·lat amb l’opció -o APT::Install-Recommends per a garantir-nos que tots els connectors distribuïts amb el paquet tenen tot el que necessiten per a funcionar. Inicialment deixem el sistema funcionant amb la configuració per defecte, deixant per a etapes posteriors la configuració dels connectors i la generació d’informes emprant les dades adquirides.. fail2ban En el cas del paquet fail2ban tampoc tocarem res, perquè per defecte monitora l’ssh, que és la raó principal per la qual s’ha instal·lat.. monit La configuració del programa monit està en el directori /etc/monit, amb el fitxer principal sent /etc/monit/monitrc. La configuració per defecte només inclou els fragments de configuració presents a /etc/monit/conf.d, que són enllaços als fitxers presents en /etc/monit/monitrc.d. Per facilitar futures actualitzacions, evitarem modificar el fitxer principal i farem tot el que necessitem fer a través de fragments: cat set set set set set. > /etc/monit/monit.d/0_main_config << EOF daemon 120 logfile /var/log/monit.log idfile /var/lib/monit/id statefile /var/lib/monit/state eventqueue basedir /var/lib/monit/events slots 100 set httpd port 2812 address 127.0.0.1 allow localhost set mail-format { from: monit@localhost.localdomain } set alert monit@localhost.localdomain EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/0_main_config. Nota Configurames el monit per a que inicie un servidor HTTP intern, ja que és necessari per poder consultar l’estat dels serveis. Aquest només estarà enllaçat a la interfície loopback, per la qual cosa no afegim control d’accés per contrasenya. Finalment, només ens queda posar a 1 la variable startup en el fitxer /etc/default/monit: sed -i -e ’s/^startup=.*/startup=1/’ /etc/default/monit. Validem la sintaxi: monit -t. Si no hi ha errors, és l’hora d’iniciar el servei: /etc/init.d/monit start. Versió per a Debian wheezy. 4/10.

(22) Configuració d’un amfitrió de LXC. Per veure l’estat dels elements monitorats podem executar l’ordre següent: monit status. Per acabar, afegirem alguns fitxers per monitorar diferents aspectes del sistema. Per monitorar l’ús de la partició arrel, crearem el fitxer /etc/monit/monitrc.d/rootfs: cat > /etc/monit/monitrc.d/rootfs << EOF # Check disk space and inodes (alert when more than 85% used) check device rootfs with path / if space usage > 85% then alert if inode usage > 85% then alert EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/rootfs. Per rebre alertes quan la càrrega del sistema siga alta, crearem el fitxer system_load: cat > /etc/monit/conf.d/system_load << EOF check system $(hostname -f) if loadavg (1min) > 4 then alert if loadavg (5min) > 2 then alert if memory usage > 90% for 4 cycles then alert if cpu usage (user) > 70% for 2 cycles then alert if cpu usage (system) > 30% for 2 cycles then alert if cpu usage (wait) > 40% for 2 cycles then alert EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/system_load. I per activar-les, executarem l’ordre: monit reload. O reiniciarem el servei sencer: /etc/init.d/monit restart. En apartats posteriors s’aniran afegint altres fragments de configuració per monitorar els serveis a mesura que van instal·lant-se.. Servidor d’accés remot El servidor d’ssh (inclòs en el paquet openssh-server) està instal·lat en l’amfitrió des de la instal·lació bàsica i no és necessari modificar la seua configuració, llevat que es vulga canviar el port per defecte o fer que escolte únicament en part de les adreces IP del servidor. En aquest cas modificaríem el fitxer /etc/ssh/sshd_config per a canviar el valor de la directiva Port o afegir entrades de tipus ListenAddress en les quals especificaríem les adreces IP i el port que vulguem. Per a monitorar el servidor emprant monit generarem un fitxer amb un fragment de configuració que deixarem en /etc/monit/monit.d/: cat > /etc/monit/monit.d/sshd << EOF # Check ssh (port 22) check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/ssh start" stop program "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/ssh. Versió per a Debian wheezy. 5/10.

(23) Configuració d’un amfitrió de LXC. I tornarem a carregar la configuració del monit: monit reload. Serveis per als servidors virtuals Per a simplificar la configuració dels servidors virtuals i permetre la mobilitat dels mateixos entre diferents servidors físics anem a instal·lar una sèrie de serveis de suport (bàsicament servidors intermediaris) en tots els sistemes amfitrions. Per a accedir a aquests serveis els servidors virtuals empraran la IP 172.27.0.1, que sempre estarà associada a l’amfitrió en el qual s’estiga executant el sistema virtualitzat. La idea és que la xarxa 172.27.0.0/16 mai s’encamina fora dels sistemes amfitrions i quan un servidor virtual estableix connexions amb l’adreça 172.27.0.1 està connectant amb serveis que s’executen en el seu amfitrió, per la qual cosa quan migremos un sistema a un nou amfitrió les connexions s’establiran contra un servidor disitint a l’original. En els punts següents comentarem alguns dels serveis de suport que anem a instal·lar i com els anem a configurar perquè servisquen als nostres propòsits.. Servidor de correu de l’amfitrió En la instal·lació de l’amfitrió es va incloure un servidor de correu (postfix), tot i que es va deixar sense configurar. Volem que en tots els nostres servidors (amfitrió i virtuals) hi haja instal·lat un servidor de correu per a enviar els correus generats localment i, en el cas de l’amfitrió, per a reexpedir els correus dels servidors virtuals. Com el fitxer /etc/postfix/main.cf encara no existeix ho crearem ara; l’única cosa que necessitem saber en aquest moment és si anem o no a utilitzar un relay SMTP. Si el nostre proveïdor de serveis d’Internet recomana emprar un relay del mateix ISP, assignarem la seua adreça IP o nom de DNS a la variable de l’intèrpret RELAYHOST perquè es reemplace pel seu valor en el fitxer. En cas contrari definirem la variable com a buida perquè no s’utilitze cap relay a nivell global: RELAYHOST="" cat > /etc/postfix/main.cf << EOF # Set my domain mydomain = localdomain # Send mail as if it were coming from @\$myorigin myorigin = localhost.\$mydomain # Only relay mail for the localhost network mynetworks = 127.0.0.0/8 172.27.0.0/16 # Don’t relay any domain relay_domains = # Use an smarthost to send mail outside the machine relayhost = $RELAYHOST # Listen only on the loopback interface inet_interfaces = 127.0.0.1 172.27.0.1 # Don’t receive mail for the local machine mydestination = # Don’t use the local transport local_transport = error:local delivery is disabled # Don’t need local recipients local_recipient_maps = # Rewrite sender and recipient addresses using regexps canonical_maps = regexp:/etc/postfix/canonical_maps.regexp # Canonical rewrites all headers local_header_rewrite_clients = static:all EOF. Versió per a Debian wheezy. 6/10.

(24) Configuració d’un amfitrió de LXC. Aquest fitxer serà el mateix per a tots els servidors que utilitzen el mateix relay SMTP i no permet l’enviament de missatges locals (s’assumeix que tots els missatges aniran dirigits a usuaris de servidors remots). El servidor escolta en l’adreça de loopback i en la IP 172.27.0.1, de manera que tots els servidors virtuals allotjats en la màquina poden accedir al mateix i emprar-ho com relayhost (la xarxa 172.27.0.1/16 està inclosa en la variable mynetworks). Als correus generats localment que no tinguen domini en el From: o en el To: se’ls afegirà el sufix @localhost.localdoma que després serà reescrit en el fitxer /etc/postfix/canonical_maps.regexp. Gràcies a l’ús d’aquest fitxer de reescriptura, la configuració principal del servidor serà idèntica per a tots els servidors i només haurem d’editar aquest fitxer per a saber d’on vénen els missatges, encara que en general també es podrà saber quina és la màquina d’origen consultant les capçaleres dels missatges i el nom associat als emissors dels missatges, que normalment s’obté del camp GECOS. Per a reescriure les adreces dels missatges generats localment i les dels missatges que vénen dels servidors virtuals perquè s’envien a usuaris del domini definit en la variable MAIL_DOMAIN emprarem el següent fitxer /etc/postfix/canonical HOST_NAME="$(hostname -s)" MAIL_DOMAIN="virtual.organitzacio.cat" cat > /etc/postfix/canonical_maps.regexp << EOF # Rewrite USER@localhost.localdomain as USER+$HOST_NAME@$MAIL_DOMAIN /^([^@]+)@localhost.localdomain$/ \${1}+$HOST_NAME@$MAIL_DOMAIN # Rewrite USER@vhost.maildomain as USER.$HOST_NAME@$MAIL_DOMAIN /^([^@]+)@vhost.maildomain$/ \${1}.$HOST_NAME@$MAIL_DOMAIN EOF. Els missatges locals seran els que empren el domini localhost.localdomain i els dels servidors virtuals seran els que utilitzen el domini vhost.maildomain. Nota El MAIL_DOMAIN que hem definit en l’exemple (virtual.organitzacio.cat) haurà de configurarse com es comentarà més endavant per a que aquesta configuració funcione correctament. Amb aquestes reescriptures s’emprarà el signe + com recipient_delimiter (hi ha documentació de perquè serveix en http://www.postfix.org/postconf.5.html#recipient_delimiter), de manera que puguem definir usuaris de correu a nivell del domini que reben tot el correu dirigit a ells i alhora siga senzill identificar l’origen dels missatges únicament mirant les adreces de correu involucrades. Els correus d’usuaris locals de l’amfitrió seran de la forma: login+$HOST_NAME@$MAIL_DOMAIN. I assumunt que els servidors de correu dels sistemes virtuals es configuren de mode similar a l’amfitrió, les adreces dels missatges generats en ells tindran la forma: login+$HOST_NAME.$VHOST_NAME@$MAIL_DOMAIN. Perquè això siga així la configuració del servidor de correu dels sistemes virtuals serà similar a la de l’amfitrió (però en aquest cas sí que emprarem un relay host, concretament el 172.27.0.1) i empraran el següent fitxer /etc/postfix/canonica que crearem més endavant durant la seua configuració: VHOST_NAME="$(hostname)" cat > /etc/postfix/canonical_maps.regexp << EOF # Rewrite USER@localhost.localdomain as USER+$VHOST_NAME@vhost.maildomain /^([^@]+)@localhost.localdomain$/ \${1}+$VHOST_NAME@vhost.maildomain EOF. Versió per a Debian wheezy. 7/10.

(25) Configuració d’un amfitrió de LXC. Tornant a l’amfitrió, si no disposem d’un servidor de correu per al MAIL_DOMAIN i volem reenviar els missatges a usuaris remots, podem configurar dominis virtuals afegint el fragment següent al fitxer /etc/postfix/main.cf: cat >> /etc/postfix/main.cf << EOF # Virtual mail domains handled on this server virtual_alias_domains = $MAIL_DOMAIN # Virtual mail domains mapping files virtual_alias_maps = hash:/etc/postfix/virtual EOF. A continuació definirem el mapa d’usuaris en /etc/postfix/virtual: echo "@$MAIL_DOMAIN. vsadmin@organitzacio.cat" > /etc/postfix/virtual. I actualitzarem les taules: postmap /etc/postfix/virtual. Amb aquesta configuració tots els correus dirigits al domini s’enviarien a l’usuari vsadmin@organitzacio.cat; l’únic problema amb aquest model és que hem de verificar que el servidor de correu al que anem a enviar-li els missatges els accepta (si el domini no és real i apareix en una adreça From: hi ha servidors que rebutgen el missatge per a evitar l’entrada de SPAM); a més, si ens inventem el domini i en la destinació es produeixen rebots no ho detectarem, ja que ningú acceptarà aquests correus. Per resoldre això, es donarà d’alta en el DNS el nom virtual.organitzacio.cat i es configurarà el servidor de correu de l’empresa perquè gestione aqueix domini (com ja hem dit, en la nostra configuració habitual el que fem generalment és redireccionar tots els usuaris del domini a una llista de correu). A partir d’ací, el servidor estarà configurat i podrem tornar a iniciar el servei: /etc/init.d/postfix restart. Per monitorar el postfix amb el monit, generarem un fitxer amb un fragment de configuració que deixarem en /etc/monit/monitrc.d: cat > /etc/monit/monitrc.d/postfix << EOF # Check postfix (port 25) check process postfix with pidfile /var/spool/postfix/pid/master.pid group mail start program = "/etc/init.d/postfix start" stop program = "/etc/init.d/postfix stop" if failed port 25 protocol smtp then restart if 5 restarts within 5 cycles then timeout EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/postfix. I tornarem a carregar la configuració del monit: monit reload. Servidor intermediari HTTP Per restringir l’eixida dels servidors virtuals a Internet i controlar els llocs on es connecten, podem instal·lar un servidor intermediari HTTP lleuger a l’amfitrió, i fer que escolte en la IP 172.27.0.1. Per a aquesta funció, el servidor més adequat és tinyproxy. Ho instal·larem de la forma habitual: apt-get install tinyproxy. Versió per a Debian wheezy. 8/10.

(26) Configuració d’un amfitrió de LXC. Amb la configuració per defecte el servidor escolta en totes les interfícies de xarxa i només permet l’accés des de l’adreça de loopback; perquè escolte només en la IP que ens interessa i permeta l’accés des dels servidors virtuals ajustem en /etc/tinyproxy/tinyproxy.conf un parell de directives perquè el servidor escolte en la IP interna i permeta l’accés des de les màquines virtuals: Llisten 172.27.0.1 Allow 172.27.0.0/16. Una vegada hem afegit aquestes dues opcions podem tornar a iniciar el servei, i ja es podrà emprar el servidor intermediari posant com a URL l’adreça http://172.27.0.1:8888/: /etc/init.d/tinyproxy restart. Nota Aquest servidor no fa caching, però com la nostra infraestructura és xicoteta, segurament no ens cal. Una alternativa amb memòria cau és el conegut Squid, molt més pesat i complet, massa per a les nostres necessitats. Només resta monitorar el servidor amb el monit: cat > /etc/monit/monitrc.d/tinyproxy << EOF # Check tinyproxy (port 8888) check process tinyproxy with pidfile /var/run/tinyproxy/tinyproxy.pid group web start program = "/etc/init.d/tinyproxy start" stop program = "/etc/init.d/tinyproxy stop" if failed host 172.27.0.1 port 8888 then restart if 5 restarts within 5 cycles then timeout EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/tinyproxy. I tornar a carregar la configuració del monitor: monit reload. Servidor intermediari/memòria cau per l’APT A més d’un servidor intermediari de propòsit general, és interessant instal·lar un servidor específic per al gestor de paquets de Debian APT, que genere una memòria cau dels paquets .deb que van baixant-se l’amfitrió i servidors virtuals, evitant que baixem moltes vegades els paquets, estalviant molt ample de banda i recursos. Per realitzar aquesta funció, emprarem el programa apt-cacher: # apt-get install apt-cacher. Una vegada instal·lat, ajustarem el fitxer de configuració per a que l’apt-cacher escolte en l’adreça 172.27.0.1: # sed -i -e ’s/^# daemon_addr=.*/daemon_addr=172.27.0.1/g’ \ /etc/apt-cacher/apt-cacher.conf. Habilitarem el dimoni: # sed -i -e ’s/^AUTOSTART=.*/AUTOSTART=1/g’ /etc/default/apt-cacher. I ho arrenquem: # /etc/init.d/apt-cacher start. Versió per a Debian wheezy. 9/10.

(27) Configuració d’un amfitrió de LXC. Amb això, només quedarà configurar els servidors per a que empren el servidor intermediari, la qual cosa farem creant un fitxer en /etc/apt/apt.conf.d: cat > /etc/apt/apt.conf.d/90local-proxy << EOF Acquire::http::Proxy "http://172.27.0.1:3142/"; EOF. I com sempre, configurarem el monit per a que supervise l’execució del servei: cat > /etc/monit/monitrc.d/apt-cacher << EOF # Check apt-cacher (port 3142) check process apt-cacher with pidfile /var/run/apt-cacher.pid group web start program = "/etc/init.d/apt-cacher start" stop program = "/etc/init.d/apt-cacher stop" if failed host 172.27.0.1 port 3142 then restart if 5 restarts within 5 cycles then timeout EOF cd /etc/monit/conf.d && ln -s ../monitrc.d/apt-cacher. I tornarem a carregar la configuració del monit: monit reload. Versió per a Debian wheezy. 10/10.

(28) Instal·lació de contenidors Debian wheezy amb LXC. c 2013 Universitat Oberta de Catalunya ○. 13 de gener de 2013.

(29) Instal·lació de contenidors Debian wheezy amb LXC. Contingut Introducció. 1. Creació d’una màquina virtual. 1. Configuració de la xarxa dins del contenidor. 2. Configuració de l’APT. 2. Utilitats del sistema. 2. Serveis de monitoratge. 3. Reconfiguració i monitoratge de serveis Servidor d’accés remot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Monit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servidor de correu del contenidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3 3 3 4. Introducció En aquest document explicarem com crear plantilles de màquines virtuals amb LXC i com les emprarem per crear màquines virtuals emprant les utilitats d’administració d’LXC per a la línia d’ordres. També mencionarem els aspectes més importants de la configuració bàsica dels servidors virtuals per a que funcionen segons el model de xarxa que hem definit, però tenint en compte que moltes parts de la configuració seran idèntiques a les de l’amfitrió, com per exemple la configuració dels serveis de monitorització i les eines addicionals. Una vegada s’haja acabat aquesta configuració bàsica, només quedarà pendent la instal·lació dels serveis finals i principals que s’allotjaran en el servidor virtual recent instal·lat.. Creació d’una màquina virtual Hi ha moltes maneres de crear el contenidor LXC inicial que ens servirà de plantilla. Per comoditat i facilitat, ens basarem en una de les eines més simples disponibles al conjunt d’eines de suport de LXC: lxc-create: lxc-create -n template -t debian. El script de creació ens preguntarà la versió de Debian que volem emprar (7.0 wheezy) i si volem la variant de 32 o 64 bits (seleccionarem 64 bits). Seguidament, ens preguntarà quins fonts d’APT volem configurar. En el nostre cas, ens interessa tindre’ls tots disponibles, incloent-hi Proposed updates, que per defecte no està marcat. Finalment, se’ns oferirà la selecció de la rèplica de Debian, que podem establir a ftp.de.debian.org com ja es va suggerir a la instal·lació del servidor amfitrió, i les seccions de Debian a habilitar (només ens interessa main). La resta de valors poden acceptar-se amb els valors per defecte (interfície de xarxa, MAC autogenerada, contrasenya de root...). Una vegada introduïts tots els valors, el script emprarà debootstrap per generar un chroot i la configuració del contenidor. A partir d’ací, haurem de fer els canvis per adequar aquest servidor base a les necessitats de la nostra infraestructura, instal·lant la monitorització i serveis addicionals. Amb el servidor resultant, serà molt fàcil crear nous servidors a partir de la plantilla: només serà qüestió d’executar un script que farà una còpia del chroot de la plantilla, i aplicarà una sèrie d’expressions sed per reemplaçar el nom del servidor, la seua IP i generar una MAC nova. Moltes de les personalitzacions, canvis i modificacions que es faran a partir d’aquest punt es poden fer directament editant el sistema de fitxers, prenent com arrel del sistema virtual el directori /var/lib/lxc/template, o senzillament arrencant el servidor, i accedint-hi a una consola emprant lxc-console. 1/5.

Referencias

Documento similar

Provocar conflicte, crear opinió, reflexionar sobre la relació amb el planeta, però també donar a conèixer a Lynn Margulis, una biòloga que des de la seva doble condició de dona

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

Las manifestaciones musicales y su organización institucional a lo largo de los siglos XVI al XVIII son aspectos poco conocidos de la cultura alicantina. Analizar el alcance y

En este sentido, puede defenderse que, si la Administración está habilitada normativamente para actuar en una determinada materia mediante actuaciones formales, ejerciendo

En la parte central de la línea, entre los planes de gobierno o dirección política, en el extremo izquierdo, y los planes reguladores del uso del suelo (urbanísticos y

(1886-1887) encajarían bien en una antología de textos históricos. Sólo que para él la literatura es la que debe influir en la historia y no a la inversa, pues la verdad litera- ria

Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas