CONFIGURACIÓ

D'UN SERVIDOR

GNU/LINUX





























Nom: Daniel Clemente Laboreo

Tutor: Joan Canudas

Curs: 2n BAT. C

Centre: IES Bruguers (Gavà)

Data: Gener 2003

http://www.danielclemente.com/servidor/





Índex

1 INTRODUCCIÓ 1

1.1 Context 1

1.2 Justificació 2

1.3 Objectius 3

2 CONFIGURACIÓ DEL SERVIDOR 4

2.1 Preparació 4

2.1.1 Estat inicial dels ordinadors 4

2.1.2 Mètode a seguir 5

2.1.3 Elecció de l'ordinador 6

2.2 Instal·lació de Linux 7

2.2.1 Elecció de la distribució 7

2.2.2 Procés d'instal·lació 11

2.2.3 Configuracions bàsiques 14

2.3 Serveis bàsics 17

2.3.1 Integració amb la xarxa de Windows 17

2.3.2 Servidor web per a l'Intranet 23

2.3.3 Servidor d'FTP 26

2.3.4 Configuració del proxy 29

2.4 Serveis secundaris 35

2.4.1 Suport de PHP a la web 35

2.4.2 Suport de CGIs a la web 38

2.4.3 Estadístiques d'accés a la web 40

2.4.4 Connexions per Secure Shell 42

2.4.5 Web per a Internet 44

2.4.6 Servidor DNS 48

2.4.7 Firewall 52

3 CONCLUSIONS 59

3.1 Avaluació general 59

3.2 Altres utilitats 60

4 ANNEXOS 61

4.1 Comandes importants 61

4.2 Seguretat 64

4.3 Manteniment 66

4.4 Glossari de termes 67

4.5 Llicència FDL de la GNU 70

5 BIBLIOGRAFIA 71



  1. INTRODUCCIÓ

    1. Context



Sóc un alumne de l'institut IES Bruguers, de Gavà (Barcelona), usuari habitual de Linux, programador i webmaster. El meu Treball de Recerca consistirà en el reciclatge d'un ordinador vell d'una de les aules d'informàtica per convertir-ho en un ordinador central de l'institut que ofereixi diferents serveis a alumnes i professors; i només utilitzant només Linux i altre software lliure de codi obert.

L'ordinador posarà a l'abast dels alumnes i visitants una pàgina web amb continguts dinàmics, diferents formes de compartir arxius entre els departaments, servei de proxy per accelerar la navegació, i altres característiques avançades com els dominis DNS, les connexions SSH a l'ordinador, el filtrat de paquets, el PHP i els CGIs.

Tot això es farà sense haver de comprar programes professionals, ja que tot el software utilitzat és gratuït i legal. A més, aportarà a l'institut tecnologies molt més professionals en utilitzar un sistema operatiu del nivell de Linux.



El treball està orientat a lectors que ja tinguin una certa experiència en qualsevol distribució de Linux utilitzant la consola de comandes, o, al menys, que tinguin interès per aprendre (això és el més important). No s'explicaran les ordres bàsiques ja que hi ha molts tutorials més apropiats per tot Internet.

També suposarem que el lector entén una mica d'anglès (l'anglès relacionat amb la informàtica), perquè així els conceptes quedaran més clars.





    1. Justificació



He escollit aquest tema per molts motius:

En primer lloc, m'agrada molt Linux (l'únic sistema operatiu que utilitzo) i penso que tothom hauria de conèixer que hi existeix i que hi ha alternatives a Windows; és clar que cadascú utilitza el sistema operatiu que vol, però molta gent no vol saber res més només perquè pensen que “allò és només per a experts”. Aquest treball no servirà per demostrar que és molt fàcil d'usar, perquè precisament utilitzarem una de les distribucions més complicades, la Debian Mandrake o Knoppix són més adequades per als principiants, però no per a la finalitat d'aquest treball.

També he fet el servidor perquè he vist que hi feia falta un ordinador central en una xarxa cada vegada més gran; feia falta un lloc comú que servís per compartir arxius entre els diferents departaments, i per simplificar les tasques de manteniment (instal·lació d'un nou programa a cada màquina, actualització dels antivirus, etc). I a més, algunes instal·lacions ho requerien (per exemple, per assolir la velocitat màxima de la línia ADSL s'havia de muntar un proxy).

A més, crec que posar un sistema operatiu com Linux, per al qual hi existeixen milers d'aplicacions professionals des de fa molts anys, elevarà el nivell de les instal·lacions informàtiques del centre, ja que obrirà les portes a moltíssimes possibilitats per als alumnes i professors: es podran fer pràctiques de programació en qualsevol llenguatge, comprovar els coneixements de xarxes i telecomunicacions, instal·lar filtres i instruments de protecció com als ordinadors de les grans empreses, monitoritzar l'estat de tota la xarxa, i qualsevol altra cosa que puguem imaginar. L'ordinador serà del mateix nivell que els que es poden trobar a les universitats d'informàtica.

És clar que el treball també servirà per contribuir a la documentació de Linux en català, però aquesta vegada amb un cas pràctic fet per apartats, i amb les opinions, problemes, idees i errors que han aparegut durant la seva realització.

Finalment, aquest treball també l'he fet amb la intenció d'ajudar els futurs informàtics que estan aprenent i que volen conèixer coses noves. Ho faig perquè a mi m'hauria agradat assabentar-me abans de l'existència de Linux.





    1. Objectius



Què es vol aconseguir amb el treball? No és només muntar un ordinador que faci de tot, sinó que...:





  1. CONFIGURACIÓ DEL SERVIDOR

    1. Preparació

      1. Estat inicial dels ordinadors



La xarxa de l'institut Bruguers consta de dues aules, una a cada pis, més els ordinadors dels diferents departaments que hi ha a ambdós pisos. El servidor es muntarà a una de les dues aules d'informàtica.

Els ordinadors no són tots iguals; hi ha diferents marques i models. Alguns tenen hardware millor que el d'altres, o no tenen determinat perifèric (per exemple, no tots tenen targeta de so). Tots utilitzen el sistema operatiu Windows 98, però inclús l'idioma és el català en alguns i el castellà en d'altres.

Hi ha un ordinador que no utilitza Windows 98 sinó Windows NT 4, i que gestiona la xarxa i els diferents grups de treball en què es classifiquen els ordinadors. Quan integrem el nostre servidor a aquesta xarxa, ho haurem de tenir en compte i el posarem junt amb aquest servidor NT.





Una nota curiosa és que a la xarxa no només hi ha ordinadors, sinó que també hi ha altres perifèrics connectats; per exemple un JetDirect i una fotocopiadora (amb IP i pàgina de configuració).



Tot això és només per veure que, encara que els ordinadors i dispositius són molt diferents entre ells, tots tenen en comú el mateix: formen part de la mateixa xarxa. Per tant, es comportaran de manera idèntica en accedir al servidor.

Aquesta xarxa és de classe C (255 ordinadors com a màxim), i la seva direcció IP és 192.168.0.0/24 (o sigui, que la màscara de subxarxa és 255.255.255.0).



Tota la xarxa està connectada a Internet mitjançant 2 línies ADSL de 2 Mbits/s cadascuna, però una d'elles està desactivada. La que funciona està controlada per un router Cisco del qual no podem modificar la configuració ja que pertany a la xtec (Xarxa Telemàtica Educativa de Catalunya). Per tant, per fer un servidor web on es pugui entrar des d'Internet s'haurà de demanar permís a aquesta entitat.







      1. Mètode a seguir



El treball pràctic està dividit en tres blocs: instal·lació, serveis bàsics, i serveis secundaris



També pensarem en el manteniment de l'ordinador una vegada acabada tota la instal·lació, i en com actuar quan es comenci a quedar antiquat o surtin problemes.





      1. Elecció de l'ordinador



No fa falta un ordinador molt potent per a que faci de servidor d'una xarxa petita.

Encara que podem veure anuncis de servidors amb vàries GigaBytes de memòria RAM, dos o més processadors que funcionen alhora, i molt més disc dur que un ordinador estàndard, també és cert que molts particulars i petites empreses compren especialment un ordinador de segona mà per fer un servidor.

Com es pot explicar aquesta diferència tan important? No és gaire difícil: tot depèn de l'ús que vulguem donar al servidor. Les grans empreses han de rebre cada dia milers de visites a la seva pàgina web, i controlar l'ús que fan de la xarxa els centenars d'ordinadors que utilitzen constantment els serveis d'impressió, proxy, firewall, correu electrònic, etc.

En canvi, el nostre servidor no sempre estarà utilitzant-se; i quan hagi de respondre alguna connexió, servir pàgines web o executar processos dels usuaris connectats difícilment arribarà al 100% d'ús. A més, Linux -a diferència d'altres sistemes operatius molt utilitzats- aprofita perfectament els recursos de l'ordinador, podent executar-se fins i tot en 386 amb 4 Mb de RAM i menys de 100 Mb. de disc dur.




L'ordinador assignat

Al nostre centre disposem d'un ordinador de les següents característiques:



Aquest ordinador té tot el que necessitem i més per a funcionar com a servidor d'un institut. No utilitzarem el CD-ROM ni el ratolí (encara que es pot fet), ja que amb la xarxa, teclat i pantalla ja es pot fer tot.





    1. Instal·lació de Linux

      1. Elecció de la distribució



Com que Linux és software lliure que pot ésser modificat i adaptat per tothom, s'han creat moltes versions diferents del sistema operatiu, tantes que no es poden ni comptar. Hi ha distribucions especialitzades en aspectes molt concrets, i també n'hi ha d'altres per al públic general.

En principi, per a l'ús que li donarem, haurà de complir les següents condicions.

Com que no tenim cap necessitat extremadament especial, compararem només les 10 distribucions més utilitzades. Les versions analitzades quedaran antiquades en pocs mesos, però la filosofia dels programadors i el tipus de distribució de cadascuna continuarà sent el mateix.

































Les 10 distribucions Linux més usades1



Distribució























Mandrake

Red Hat

Debian

Gentoo

SuSE

Slackware

Lycoris

Beehive

Turbolinux

Caldera

8.2
Download

7.3
Standard

3.0r0
Woody

1.2
Linux

8.0
Personal

8.1
Linux

Amethyst2
Desktop/LX

0.5.0
Linux

8.0
Workstation

3.1.1
Workstation

Preu (US$)

25

60

-

-

40

40

20

-

124

99

Origen

Frància

USA

-

USA

Alemanya

USA

USA

USA

Japó

USA

Suport

Suport web 30 dies per a la instal·lació

Suport web 30 dies per a la instal·lació

Llistes de correu

Llistes de correu, fòrums

Suport 60 dies per a la instal·lació

A la instal·lació, i suport tècnic limitat

Suport per e-mail 60 dies

Llistes de correu

Per a TurboTools; il·limitat per a la instal·lació

Suport 60 dies per a la instal·lació

CDs

3

7

7

1

3

4

3

1

7

6

Versió del kernel

2.4.18

2.4.18

2.2.20

2.4.19

2.4.18

2.4.18

2.4.18

2.4.18

2.4.18

2.4.13

Instal·lació

Gràfica

Gràfica

Text

Text

Gràfica

Text

Gràfica

Text

Gràfica

Gràfica

Gestor per defecte

KDE

Gnome

-

-

KDE

KDE

KDE

KDE

KDE

KDE

Tipus paquets

rpm

rpm

deb

src

rpm

tar.gz

rpm

tar.gz

rpm

rpm



És curiós, però, d'aquestes deu, només les cinc primeres són les realment conegudes -especialment Red Hat, Suse i Mandrake- per la seva facilitat d'instal·lació i ús. És bo que utilitzem una distribució coneguda perquè així ens costarà poc trobar manuals, ajuda, o suport tècnic.

No obstant, anem a comparar-les punt per punt:



Després d'haver fet aquesta comparativa, crec que la distribució més apropiada per a l'institut és Debian, perquè, a més de representar el software lliure, és simple i molt estable. És una de les distribucions més aptes per a fer de servidor. Apart d'aquesta, també s'utilitza molt FreeBSD, que és un sistema bastat en UNIX (com Linux).

No utilitzem Mandrake, Red Hat ni Suse per ser massa orientades a usuaris domèstics i principiants. Gentoo és massa complicada i difícil de configurar, i Slackware, Lycoris, Beehive, Turbolinux i Caldera són poc conegudes (si tinguéssim un problema seria difícil trobar-hi medis per solucionar-ho).

Debian desenvolupa a la vegada tres branques del seu sistema operatiu: la versió estable, la inestable i la “en proves”. Les diferències entre versions són:



Cada versió porta un nom clau (Potato, Buzz, Rex, Bo, Slink, etc), que, per cert, són els noms dels personatges de la pel·lícula Toy Story. En el moment d'escriure això (setembre 2002), la versió estable és la Woody (és la versió 3.0), la “en proves” es diu Sarge (serà la versió 3.1) i la inestable es diu Sid,

La que utilitzarem per al servidor serà la versió estable; no ens podem arriscar provant una 'testing', i menys, una inestable, perquè poden tenir bugs i altres problemes amb la seguretat. Igualment, no haurem d'oblidar actualitzar sovint el sistema.

Per tant, ens decidim per una Debian estable.





      1. Procés d'instal·lació



Podem instal·lar Debian de diverses maneres, de les quals les més comuns són: els CDs amb les imatges i la instal·lació per Internet. També el podem comprar a alguna botiga per un preu molt reduït. Tota la informació la trobarem a http://www.debian.org, també disponible en català (a peu de pàgina hi són els enllaços per canviar d'idioma).

Com que no ens fan falta més que els programes bàsics, és més rendible fer la instal·lació per Internet, ja que si ens haguéssim de baixar un CD sencer (650 Mb) no l'aprofitaríem. A més, no ens farà falta utilitzar una gravadora de CDs, sinó només uns quants disquettes buits.



El procés és senzill:



          1. Baixem les imatges dels disquettes del mateix FTP de Debian. Les imatges de tamany disquet per a la versió estable i per a un processador x86 les trobarem a:

ftp://ftp.debian.org/debian/dists/stable/main/disks-i386/current/images-1.44

En aquest directori hi ha molts fitxers .bin d' 1'4 Mb cadascun. Per començar necessitem baixar els següents: driver-1.bin, driver-2.bin, driver-3.bin, driver-4.bin, rescue.bin i root.bin.

NOTA: Si podem utilitzar un altre ordinador alhora, no fa falta usar un disquet diferent per a cada fitxer BIN: podem fer-ho només amb dos si els anem turnant de manera que mentre un està sent llegit, l'altre estigui gravant-se, i viceversa.



          1. Gravem les imatges en disquets de 1'44 Mb. Això ho podem fer des de Linux amb la comanda dd if=nom-de-la-imatge.bin of=/dev/fd0 o des de Windows amb programes com rawrite2 o d'altres que transfereixin l'arxiu byte per byte cap al disquet.



          1. Insertem el disquet corresponent a rescue.bin i encenem l'ordinador. Quan aparegui boot: polsem Intro. Al cap d'un temps ens demanarà el disquet corresponent a root.bin i continuarà la instal·lació.

          2. Anem seguint la instal·lació de forma normal, fixant-nos especialment en els següents punts:

          1. Després de reiniciar, continuarem amb la personalització del sistema. Seleccionarem les opcions recomanades, assegurant-nos d'activar la opció de contrasenyes shadow.



          1. A l'hora de crear usuaris, haurem d'escriure la contrasenya de root, l'usuari més important del sistema. És extremadament important escollir una bona contrasenya. A més, per seguretat no treballarem sempre amb l'usuari root (és perillós), sinó que ens crearem un altre compte d'usuari normal (amb el nostre nom o nick).



          1. Quan ens pregunti des d'on instal·lar els paquets, li diem que per ftp i n'escollim un de la llista (per exemple, ftp.debian.org). Llavors Debian utilitzarà apt per baixar les últimes versions de cada programa. Haurem de decidir quins grups de programes decidim instal·lar. Seguirem aquestes indicacions:

Marcant pocs paquets ens assegurem de que no quedi instal·lat res que no ens faci falta. Si no ho fem així, en acabar la instal·lació seran tants els serveis disponibles que alguna persona se'n podria aprofitar i entrar al servidor sense permís.

          1. Quan tot estigui llest, apareixerà la llista de paquets a baixar, i el que ocupen. Diem que continuï i deixem l'ordinador engegat mentre baixa cada paquet amb les seves dependències. Quan acabi, haurem de configurar alguns paquets mentre que d'altres es descomprimiran i s'instal·laran automàticament. Si pregunta com configurar el correu, li direm que no el volem configurat; així evitarem molts bugs innecessaris.



          1. Al final acabarem en la pantalla de login, que apareixerà cada vegada que encenem l'ordinador per demanar-nos el nom d'usuari i la contrasenya.





      1. Configuracions bàsiques



Ara que tenim el sistema operatiu instal·lat hem de fer unes configuracions senzilles, que s'han de fer abans de començar a posar els programes i dimonis. Primer de tot ens identificarem com a root (amb la contrasenya que vam posar a la instal·lació).

El què farem serà:











    1. Serveis bàsics

      1. Integració amb la xarxa de Windows



Com que a l'institut els ordinadors estan connectats mitjançant una xarxa i un servidor Windows NT, seria interessant incloure-hi també el nostre servidor Linux per poder compartir carpetes o accedir a les dels altres ordinadors. També posarem a l'abast del servidor les impressores compartides a la xarxa, tot i que s'han de configurar a Linux.

Tot això ho farem fàcilment i de forma segura amb les eines que ens ofereix Samba. Samba és una implementació per a Linux del protocol SMB (Server Message Block), creat per IBM al 1985, redefinit després per Microsoft, i present a altres sistemes operatius. Amb Samba podrem accedir (per TCP/IP) a servidors SMB com a client, o muntar-ne un servidor SMB propi.



Com sempre, fem un apt-get install samba i diem que sí que volem que faci unes preguntes per adaptar el fitxer de configuració smb.conf, encara que després el revisarem.

Ens preguntarà les següents opcions:

Després d'això ja tenim els dos processos de Samba funcionant: smbd i nmbd (fan referència als dimonis de SMB i Netbios, respectivament). Si volem que Debian ens torni a preguntar tot l'anterior podem fer un dpkg-reconfigure samba



Amb Samba podem fer bàsicament quatre operacions:



Hem de tenir molt clar què volem que faci el servidor, i actuar en conseqüència. Si posem configuracions per defecte o canviem coses sense saber què son, no funcionarà exactament com volem, i arreglar-ho pot costar molt.

En el nostre cas, les decisions que hem pres són:



Ja avisem que és molt probable que surti un problema (molt comú) si utilitzem tant màquines Windows NT/2000 com Windows 9x a la vegada, degut a la seva forma d'enviar les contrasenyes i als requisits de cada implementació. Per entendre aquestes complicacions s'han de veure unes quantes diferències entre el SMB de Win98, WinNT i Samba:

Bé, doncs anem per feina: el primer de tot serà crear un usuari al servidor que sigui l'únic que pugui tenir accés als recursos compartits. És l'usuari que utilitzaran tots els ordinadors que hi accedeixin, i, tal com hem dit abans, cal que aquest usuari estigui creat a tots els Windows i tingui la mateixa contrasenya. Podem fer una excepció amb els Windows NT ja que, com hem dit abans, permeten escriure un nom i contrasenya en accedir-hi, independentment del nom de l'usuari connectat. Nota: no cal que anem ordinador per ordinador creant aquest usuari, ja que es crearà automàticament quan algú posi el seu nom i contrasenya a la pantalla d'inici de sessió.

Al nostre cas aquest usuari l'anomenarem bruguers i li donarem una contrasenya pública i fàcil de memoritzar (però no d'endevinar!). La contrasenya és opcional, però el no posar-ne representa un forat de seguretat molt gran (sobretot quan estem parlant de sistemes Microsoft),

Afegim l'usuari al servidor amb adduser bruguers (no és necessari escriure cap dada més), i l'afegim a la llista d'usuaris de Samba -que es troba a /etc/samba/smbpasswd- amb el comand smbpasswd -a bruguers, i posant la mateixa contrasenya.



Ara hem d'editar el fitxer de configuració /etc/samba/smb.conf. Al principi trobarem les opcions que vam posar al instal·lar Samba; millor comprovem que hi hagi un workgroup = NOM_DEL_GRUP_DE_TREBALL. A més, la següent opció, server string, ens permet posar la descripció de l'ordinador que es veurà en navegar per la xarxa. Per defecte posa server string = %h server (Samba %v), on %h és el nom de host de l'equip i %v la versió de Samba.

Hi haurà una línia comentada amb el caràcter ; que posa:

; guest account = nobody

És bo saber que si la canviem a guest account = bruguers farem que deixar el nom d'usuari i contrasenya en blanc equivalgui a entrar amb l'usuari bruguers (sense contrasenya). Com que hem decidit que s'havia de posar contrasenya, deixarem la línia comentada; però si veiem que és més fàcil sense, només cal modificar això.



A aquesta secció també hem d'afegir la següent línia per evitar un dels mètodes d'intrusió més utilitzats des de fa molts anys: el dels recursos compartits.

hosts allow = 192.168.0. localhost

I també farem que només permeti l'accés a l'usuari bruguers. Si es creen més s'han de posar aquí també.

valid users = bruguers



Ara, localitzem la secció titulada Share Definitions i, en concret, aquest fragment:

[homes]

comment = Home Directories

browseable = no



# By default, the home directories are exported read-only. Change next

# parameter to 'yes' if you want to be able to write to them.

writable = no



# File creation mask is set to 0700 for security reasons. If you want to

# create files with group=rw permissions, set next parameter to 0775.

create mask = 0700



# Directory creation mask is set to 0700 for security reasons. If you want to

# create dirs. with group=rw permissions, set next parameter to 0775.

directory mask = 0700



Segons els nostres interessos, el canviarem a (omitim els comentaris):



[homes]

comment = Home Directories

browseable = yes

writable = yes

create mask = 0777

directory mask = 0777



Tot el fragment fa que es comparteixin les carpetes personals dels usuaris ([homes]). En el nostre cas, només n'hi ha un, d'usuari, que s'anomena bruguers. Aquest té permís per a escriure al seu directori (writable=yes) i tot el que crei podrà ser llegit, modificat o executat per qualsevol usuari del sistema (per això posem els permisos a 777, o, el que és el mateix, u=rwx g=rwx o=rwx). El browseable=yes fa que el recurs es pugui veure en navegar pels recursos compartits del servidor.



El següent paràgraf, que comença amb [printers], el comentarem sencer amb un caràcter # a cada línia, perquè no tenim impressores per compartir connectades al servidor.



Reiniciem el servei amb /etc/init.d/samba restart i provem d'accedir-hi des d'un ordinador Windows explorant la xarxa (a 'Entorno de red' o 'Mis sitios de red'). Veurem un ordinador anomenat 'Bruguers', i a dins, la carpeta compartida, on podem entrar i desar-hi coses. També veurem la icona per gestionar les impressores.





Probablement no funcioni a la primera degut a les diferències entre cada Windows. Els problemes que hi ha entre Samba (Linux) i Windows són els mateixos que els que Windows 98 i Windows NT s'ocasionen mútuament Bàsicament, es resumeixen en: “es pot accedir de NT a 98 però de 98 a NT no”. A continuació en presentem els més típics, junt amb algunes possibles solucions:



Probablement estigui desactivada la opció d'utilitzar contrasenyes encriptades. Cal afegir encrypt passwords = yes al fitxer de configuració. No hauríem de tenir cap més problema amb Windows NT/2000, ja que és el sistema operatiu que millor ha desenvolupat el protocol SMB.

La causa és que en entrar a Windows, quan demanava nom d'usuari i contrasenya, hem escollit 'Cancelar', i per tant no hem iniciat sessió dins la xarxa Microsoft. Cal entrar com a un usuari amb nom (i contrasenya opcional). Només entrant ja s'ha creat l'usuari, però els podem gestionar des de 'Mi PC' -> 'Panel de control' -> 'Usuarios'.


El famós quadre IPC$

No hem d'escriure cap contrasenya especial; aquesta és la manera que Windows té per dir-nos que estem intentant entrar com a un usuari no permès al servidor. La solució és crear a la màquina Windows un usuari amb el mateix nom i contrasenya que el que es permet al servidor, o fer a la inversa: afegir al servidor l'usuari que es connectarà des de Windows.

Una altra solució és activar l'usuari invitat, anomenat 'guest' o 'Invitado' i amb contrasenya en blanc; però hem d'evitar fer això a tota costa, ja que posaria en perill les unitats i carpetes compartides.

Sens dubte és més fàcil crear l'usuari a Windows 98: només cal escriure bruguers en comptes de qualsevol cosa al quadre d'inici de sessió, i posar la contrasenya correcta per crear aquest nou usuari.





Per tant, ho deixem de forma que només els usuaris autentificats puguin accedir als recursos compartits del servidor; si algú no posa nom d'usuari en iniciar sessió o se n'inventa un altre és que no té permís per entrar-hi.





Altres utilitats que ens aniran bé són testparm per a comprovar la configuració i smbstatus per a veure qui hi ha connectat.





Ens queda explicar com accedir a la xarxa de Windows des de Linux. No és difícil, però hi ha moltes opcions de tot tipus. Per exemple, n'hi ha de gràfiques, com komba i xfsamba, i també ho podem fer des de la consola. Algunes comandes són:



Però, com hem dit, programes com komba o alguns navegadors d'arxius amb suport SMB fan aquesta tasca molt més fàcil. Això sí, requereixen utilitzar el mode gràfic, però no és necessari que s'executin al servidor amb Debian; com que estem treballant en xarxa, aquesta es podrà explorar des de qualsevol ordinador.





      1. Servidor web per a l'Intranet



El servidor web és un dimoni que escolta al port d'HTTP (el 80 TCP) i respon les peticions de documents HTML (o d'altres formats). Al mercat n'hi ha molts, i que en concret funcionin sota Linux també (Jigsaw, GoAhead, Roxen, Stronghold, Zeus, Abyss, Apache, ...). Fins i tot podem programar-ne un de senzill amb Netcat, fent que escolti al port 80 i retorni cada pàgina demanada. Però a Internet els servidors més utilitzats són clarament dos: Apache i Microsoft IIS (Internet Information Server). Òbviament, IIS només és per Windows, així que per al nostre ordinador utilitzarem Apache per Linux.

És una bona elecció? Podem consultar les estadístiques sobre els servidors més utilitzats mundialment a una important pàgina dedicada només a aquest tema: de http://www.netcraft.com/survey obtenim aquest gràfic:




Marco1



Hem d'afegir que “Microsoft” inclou tots els servidors web d'aquesta marca (no només IIS), i que iPlanet és el conjunt de tots els servidors Netscape i iPlanet. Això deixa bastant clar que Apache és el millor servidor i que no ens hem equivocat en la decisió.



De moment la web la farem accessible només a la xarxa interna; des d'Internet no es podrà accedir perquè el router no té obert el port 80. Més endavant estudiarem com posar dues pàgines diferents, una per a la xarxa interna i altra per a Internet.



Integrar Apache a Debian és tan senzill com fer un apt-get install apache (es suposa que la base de dades d'apt-get ja està actualitzada mitjançant apt-get update) i automàticament es baixaran tots els paquets necessaris. Podem fer una petita comprovació escrivint la IP del servidor en el navegador de qualsevol ordinador de la xarxa. Si ho hem fet bé, apareixerà una pàgina de prova d'Apache.

No és bon hàbit deixar la configuració per defecte, ja que podria no fer tot el que volem, o, pitjor encara, fer més coses del que suposem. Per tant, anem a revisar l'arxiu de configuració del dimoni HTTP a /etc/apache/httpd.conf:

A l'arxiu ja podem veure alguns paràmetres preconfigurats. Per exemple:

L'únic que fa falta canviar és:

No s'han de fer més canvis. Abans, però, de reiniciar el servidor, esborrarem el contingut del directori on hi ha la web (/var/www) i posarem una senzilla creada per nosaltres, amb enllaços i imatges. A la pàgina principal li anomenarem index.htm per veure si també funciona (l'original era index.html). Per exemple, podem fer un index.htm molt senzill així:



<BR><BR>

<CENTER>Has entrat al <B>nou servidor web</B> de l'institut.<BR><BR>

<IMG SRC=”obrers_treballant.jpg” ALT=”En construcció”>

</CENTER>



Aquesta pàgina ja ens serveix per provar si accepta noms llargs de fitxers, si accepta extensions que no siguin HTM/HTML, si es veuen les imatges, si el text arriba com a HTML (i no com a text pla) i si un .HTM funciona bé com a pàgina principal. Seria interessant donar-se compte de que també és 'Case sensitive', o sigui, que index.HTM és diferent de index.htm. Lògicament, la raó és què el sistema d'arxius de Linux ja és així.

Després de col·locar a /var/www el fitxer index.htm i alguna imatge, reiniciarem el servidor fent apachectl restart i tornarem a comprovar en el navegador si surt la pàgina correcta.



I per últim, crearem un usuari anomenat web, perquè després posarem un servidor FTP, i ens anirà molt bé poder administrar els fitxers de la pàgina web des de l'FTP. Cal fer un adduser web com a root, posar una bona contrasenya, i després modificar l' /etc/passwd per canviar el directori d'inici a /var/www , que és on es troben tots els arxius de la web. Podem esborrar el directori HOME creat per defecte, /home/www. També hem de fer seus tots els arxius de la web, ja que si el directori pertany a root cap usuari el podrà modificar. Ho fem amb chown web.web /var/www -R (el R fa que canviï els permisos de forma recursiva: al directori i a tot el que hi hagi dintre).



Aquest Apache en principi serveix webs a qualsevol PC (local o remot), per tant haurem de tancar el port 80 al router si volem que sigui accessible només a la Intranet o obrir-ho si el volem fer públic.



      1. Servidor d'FTP



El FTP serveix per transferir arxius de forma ràpida i senzilla entre ordinadors. Permet compartir -amb nom i contrasenya- tots els arxius o només algunes carpetes a cada usuari, podent establir els permisos que tenen sobre cada element. Per exemple, podem fer que només puguin baixar coses, o només pujar-ne i no canviar res.

Servidors de FTP per a Linux també tenim moltíssims. Alguns molt coneguts són proftpd i wu-ftpd, però com que s'han trobat molts bugs que afecten a característiques extra normalment no utilitzades, molta gent prefereix servidors més senzills que facin només el seu propòsit de compartir arxius.

Per tant, buscarem un servidor amb poques funcions addicionals, senzill, i que ocupi poc (quant més petit sigui, menys errades pot tenir al codi). El que més s'adapta a aquestes condicions és PureFTPd.

Provem a fer apt-get install pureftpd (i amb pure-ftpd), però cap funciona. La raó és que PureFTPd no ve inclòs en aquesta versió de Debian. Ho podem comprovar amb apt-cache search pure: veurem que no hi ha cap paquet on surti “pure”. La forma d'instal·lar el programa és, doncs, anar a la pàgina web (http://www.pureftpd.org) a la secció de Downloads i baixar en format .tar.gz l'última versió. El que hem baixat són les fonts (en anglès, “sources”) del programa, en llenguatge C, per tant, les haurem de compilar per tal de crear l'executable que funcioni a la nostra màquina. Ens farà falta com a mínim el gcc (GNU C Compiler) i una mica de temps (depèn de l'ordinador, però és quasi segur que menys d'una hora).



Com a root, haurem de descomprimir l'arxiu a algun lloc (per exemple /usr/src) amb:

tar zxvf arxiu.tar.gz -C /usr/src

Llavors podem entrar al directori creat i llegir els fitxers README i INSTALL, que normalment són a tots els programes que s'han de compilar. Si veiem que no s'ha de fer res especial -com és el cas- seguirem el procediment habitual per compilar:



          1. Executar ./configure per generar un script de compilació adequat per a la nostra màquina en concret. Si falta algun programa o llibreria, s'aturarà i ho mostrarà de forma clara. Podem desactivar o activar moltes opcions (veure ./configure --help). En el nostre cas, hem comprovat que en compilar sense cap opció especial, el binari resultant no acceptava la opció -n, que serveix per limitar l'espai de cada usuari. Per tant, és bona idea activar directament la opció adequada amb ./configure --with-quotas.

          2. Executar make, la veritable compilació. Aquest procés -completament automatitzat- pot trigar segons, minuts, o hores depenent del programa i de l'ordinador. No ha de fallar; si ho fa, serà més complicat solucionar el problema ja que probablement es trobi dins del codi font d'algun fitxer del projecte (o sigui, que no tenim la culpa nosaltres). Això sí, és probable que apareguin missatges de “warning” (advertències), que podem ignorar a menys que puguin provocar cap problema greu.

          3. Aquest pas és opcional. make check farà unes comprovacions per veure si s'ha compilat bé. Si alguna prova falla, no hem de continuar.

          4. make install copiarà els executables (el resultat de la compilació) als directoris on es troben tots els altres programes de Linux. Fan falta privilegis de root.

Fet això ja hem aconseguit crear el fitxer executable i intregar-ho al sistema; per tant podem esborrar el directori que hem creat a /usr/src (a menys que vulguem fer algun canvi al codi i tornar-ho a compilar).

Ara, cada vegada que encenguem l'ordinador haurem d'executar pure-ftpd (el podem deixar en segon pla) i el servei estarà actiu, amb els usuaris actuals del sistema. Per evitar repetir aquesta acció cada vegada, podem crear un script que arrenqui el servei amb les opcions més apropiades (que hem consultat a l'ajuda, a pure-ftpd --help):



/usr/local/sbin/pure-ftpd -B -A -u 100 -C 5 -n 1000:800

echo “Arrencant el servidor pure-ftpd...”



Descripció de les opcions:



Gravarem aquest script a /etc/init.d/pure-ftpd, el donarem permís d'execució a tothom amb chmod a+x /etc/init.d/pure-ftpd, i crearem enllaços a dins dels nivells d'execució en què ens interessi que corri aquest procés. Recordem els nivells d'execució (“runlevels”):



0 --> Halt (aturar el sistema i apagar-ho)

1 --> Mode monousuari

2 --> Mode multiusuari sense suport per a xarxa

3 --> Mode multiusuari complet

4 --> (Sense ús)

5 --> Mode multiusuari complet amb login gràfic

6 --> Reboot (reiniciar el sistema)



Per tant, els nivells als quals ens interessa que actuï el nostre script són l'1, 2, 3 i 5. Crearem els enllaços simbòlics amb:



ln -s /etc/init.d/pure-ftpd /etc/rc1.d/S80pure-ftpd

ln -s /etc/init.d/pure-ftpd /etc/rc2.d/S80pure-ftpd

ln -s /etc/init.d/pure-ftpd /etc/rc3.d/S80pure-ftpd

ln -s /etc/init.d/pure-ftpd /etc/rc5.d/S80pure-ftpd



El prefix S80 té la seva explicació: S significa que és un script 'Startup', que serveix per iniciar alguna cosa. En cas contrari, aniria amb K ('Kill'). El nombre indica l'ordre en què s'executaran els scripts d'un mateix directori rc. Hem d'assegurar-nos que s'iniciï en un bon moment, quan la xarxa ja està preparada i les operacions importants ja han acabat; per tant, 80 ja és un bon nombre.



Seria correcte afegir al runlevel 0 i 6 un script que matés el servidor, però no fa falta perquè el propi procés d'apagat ja s'encarrega de matar tots els processos.



Ja només queda reiniciar (o fer un init 3) i provar de fer un FTP des de fora. Hem de recordar que al router s'han d'obrir els ports 20 i 21 TCP (el 20 és per la transmissió de dades).

També és el moment de provar d'entrar com a usuari web des de qualsevol client d'FTP (o amb un navegador, amb ftp://web@IP_DEL_SERVIDOR ), posar la contrasenya, i comprovar que podem pujar i baixar arxius al servidor web.



NOTA: hem d'evitar utilitzar comptes d'usuari importants a l'FTP, perquè les dades viatgen sense encriptar, i un usuari que tingués privilegis de root podria interceptar els paquets i veure les contrasenyes. Per evitar-ho podem crear comptes addicionals només per a FTP, o utilitzar el programa sftp que hi ha inclòs a SSH.





      1. Configuració del proxy



En qualsevol xarxa, els usuaris accedeixen a pàgines web prohibides, ja sigui perquè no estan relacionades amb la feina que s'ha de fer amb l'ordinador, o perquè són pornogràfiques o de continguts il·legals.

Una forma de denegar l'accés a certes pàgines és configurar cada navegador web de forma que demani contrasenya quan s'entra a unes direccions web o IPs preestablertes. També podem utilitzar software de filtrat de continguts que analitzin les paraules o fins i tot les imatges.



El problema que presenten aquests mètodes (apart de l'elevat preu) és que requereixen manipular cada un dels ordinadors de la xarxa individualment, quan l'ideal seria haver de crear la 'llista negra' només a un ordinador. És aquí on intervenen els proxy: un proxy és un ordinador que recull totes les peticions web de la xarxa, busca les pàgines corresponents a Internet, i retorna cada pàgina a l'ordinador que l'havia demanat. D'aquesta manera, és només aquest ordinador el que es connecta a Internet, i per tant és fàcil prohibir o admetre IPs.



Pot semblar que el proxy fa més lenta la navegació ja que un sol ordinador ha de fer la feina de molts, però de fet el proxy també està dissenyat per agilitzar-la actuant com a caché. 'Caché' fa referència a una zona de la memòria o del disc, que emmagatzema informació durant un temps i que va buidant-se a mesura que arriben noves dades per omplir-la.

Llavors, un proxy-caché funciona així:

          1. Rep una petició HTTP d'un ordinador.

          2. Consulta en la seva caché buscant la pàgina demanada.

          3. Si no té la pàgina a la seva caché, la baixa d'Internet i queda gravada a la caché. En canvi, si ja tenia la pàgina no és necessari que es torni a connectar a Internet.

          4. Retorna la pàgina de la caché a l'ordinador que l'havia demanada.



Periòdicament fa comprovacions per evitar que la caché s'ompli, esborrant les dades més antigues o menys sol·licitades. A més, enregistra els accessos als fitxers de log, com fan gairebé tots els altres servidors que hem vist.



En conclusió, un proxy-caché ajuda a reduir molt l'ample de banda utilitzat a una xarxa (degut principalment a les consultes web). No és cap problema la velocitat de transmissió; serà l'adequada perquè disposem de targetes de xarxa 10/100 Mbits/s per a enviar dades d'un ordinador a un altre (per la Intranet), mentre que la connexió cap a Internet arriba com a molt a 2 Mbits/s si és una línia ADSL. A més, cal recordar que gairebé tots els navegadors actuals tenen la seva pròpia caché web local, i per tant s'evitaran peticions web a Internet o, en aquest cas, a l'ordinador proxy.



El proxy-caché per Linux més conegut i més utilitzat és Squid. Té suport per a HTTP, FTP, SSL, SNMP, DNS, control d'accés (ACL), jerarquies de proxies (protocol ICP), i moltes opcions més. La seva web és http://www.squid-cache.org

Una de les característiques més interessants del Squid és que pot actuar com a proxy transparent: funciona de manera semblant a l'explicada anteriorment, però el client (l'ordinador que demana pàgines web) no se n'adona que està passant per un proxy ja que aquest últim actua com si realment fos el servidor web d'Internet. L'inconvenient d'aquest mètode és que el proxy ha d'actuar com a servidor web al port 80, i nosaltres ja tenim un servidor Apache a aquest port; per tant el proxy que posarem serà estàndard.



Farem un apt-get install squid per baixar-lo i instal·lar-lo, però hem de modificar la configuració per defecte. S'ha de canviar, per exemple, el port utilitzat (ara és el 3128, però a Europa s'utilitza més el 8080). Abans de modificar el fitxer de configuració (/etc/squid.conf), comprovem que squid no estigui funcionant amb privilegis de root (això seria un problema de seguretat):

bruguers:~# ps axu | grep squid

root 336 0.0 1.1 3824 1124 ? S 12:38 0:00 /usr/sbin/squid -D -sYC

proxy 338 0.9 5.5 8556 5308 ? S 12:38 0:19 (squid) -D -sYC

root 374 0.0 0.7 1748 716 pts/0 S 13:11 0:00 grep squid

bruguers:~#

Podem veure que, encara que el cridi root, el procés està amb el conegut com a “setuid proxy”, o sigui, que s'executa amb privilegis de l'usuari “proxy”. És millor que estigui així que no com hi era en versions anteriors, quan s'executava com a root. Això comportava molt més perill davant de qualsevol bug que es trobés, ja que un usuari que utilitzés un exploit aconseguiria una shell de root. Amb la configuració actual, si un usuari aprofita un bug (per exemple un buffer overflow, els més comuns) podria accedir al sistema com si fos un usuari normal.



Ara anem per la configuració específica del proxy Squid, que es troba a /etc/squid.conf. Haurem de canviar els següents paràmetres:



http_port 3128

http_port 8080

Aquest és el port utilitzat pel proxy (per defecte 3128). Hem afegit el 8080, però tampoc és necessari treure el 3128; Squid pot rebre les peticions per ambdós ports. El deixem per compatibilitat amb altres programes.

A més, si fem un escanejat de ports quan tot funcioni, veurem que utilitza també el 3130 d'UDP.



cache_peer proxy.xtec.es parent 8080 0 no-query no-digest default

Això fa que el nostre proxy tingui un 'pare' i treballi en jerarquia amb ell: tot allò que els usuaris de la xarxa demanin al servidor es buscarà a la seva caché, i, si no es troba, la petició passarà al proxy pare. Si aquest pare tampoc ho troba a la seva caché, ho buscarà a Internet; per tant evitem en tot el possible les peticions innecessàries.

L'institut utilitza el proxy proxy.xtec.es pel port 8080 (l'habitual dels proxy-cachés). Hem desactivat les opcions ICP (protocol utilitzat pels proxys) posant els paràmetres 0 com a port ICP i no-query. El no-digest el posem perquè el fitxer de digests és innecessari quan hi ha un sol pare; i el default fa que el servidor utilitzi per defecte aquest parent per trobar tot el que no tingui a la caché.

Òbviament, si no disposem de proxy pare (o sigui, si volem tenir Internet com a pare), no hem de posar aquesta línia.



# cache_mem 8 MB

Deixem la opció per defecte de 8 Mb. per a la memòria RAM utilitzada com a caché. Es recomana deixar una quarta part de la RAM total de l'ordinador, però com que el nostre servidor en té poca (48 Mb) i a més ha de encarregar-se de moltes més coses, deixarem aquest valor, que de totes maneres és bastant gran com per a gravar els objectes més demanats (entenent objecte com a una imatge, una pàgina, un vídeo, o qualsevol altre element web). S'ha de tenir en compte que apart de la RAM utilitzada com a caché, el procés de Squid necessita més RAM per poder executar-se (com qualsevol altre procés), per tant cal no posar valors molt elevats.



cache_dir ufs /var/spool/squid 150 16 256

És aquí quan diem a Squid que utilitzi el directori /var/spool/squid com a caché. ufs és el sistema d'emmagatzematge de Squid. Als paràmetres li diem que pot utilitzar 150 Mb. i que organitzi els objectes creant 16 directoris, cadascun amb 256 subdirectoris i amb els fitxers dintre.

Hem assignat 150 Mb. perquè el disc dur de l'ordinador pot arribar a ser més lent que Internet si s'ha de buscar un arxiu entre milers d'ells, tenint en compte també que 150 Mb. són suficients per guardar gairebé totes les pàgines que s'utilitzaran sovint a l'institut.

Un detall: hem d'assegurar-nos que el propietari del directori utilitzat com a caché sigui el mateix que executi el procés squid, sinó no hi podrà accedir. És poc probable que no sigui així, ja que s'ha creat durant la instal·lació.



# ftp_passive on

Depenent del router darrere del qual estiguem, haurem de fer que Squid es connecti als FTPs en mode passiu o no. La millor manera de saber-ho és provar la configuració per defecte i si no funciona posar l'altra opció.



Al mateix fitxer hem de definir les llistes de control d'accés (ACL). Encara no prohibeixen res, només serveixen per a definir uns grups d'usuaris. Afegirem les següents:

Definim els ordinadors amb la IP 192.168.0.x (la xarxa local de l'institut). Després farem que només siguin aquests els que tinguin accés al proxy:

acl xarxa src 192.168.0.0/255.255.255.0

Afegirem més llistes de control d'accés per prohibir certes pàgines. Fan falta tres fitxers, que crearem amb qualsevol editor i guardarem a /etc/squid (si no existeix el directori el creem amb mkdir /etc/squid ). El nom de cada arxiu és de lliure elecció:



Definim aquestes tres llistes. Hem posat el -i a cada opció per a què la llista de paraules sigui 'case insensitive', o sigui, que no es fixi en les majúscules i minúscules:



# Dominis prohibits:

acl dom_no dstdom_regex -i “/etc/squid/dom_no.txt”

# Paraules prohibides:

acl url_no url_regex -i “/etc/squid/url_no.txt”

# Paraules autoritzades:

acl url_yes url_regex -i “/etc/squid/url_yes.txt”



Ja hem definit quatre llistes (la de IPs i aquestes tres). Ara hem de dir quins privilegis tenen aquests grups d'usuaris:



http_access deny !xarxa

http_access deny dom_no

http_access allow url_yes

http_access deny url_no

http_access allow all

Per entendre això cal tenir clar el següent: deny = 'denegar', allow = 'permetre', !condició = “no-condició” (NOT lògic).

És molt important que aquestes línies estiguin en un ordre lògic, ja que Squid fa les comprovacions començant pel principi, i quan una de les condicions es compleix, no continua llegint i fa l'acció associada (allow o deny). Tal com les hem posades, els filtres pels que passa una petició que arriba al proxy són:

          1. No és de la xarxa local? Doncs si no és de la xarxa local, denego l'accés; si ho és, continuo comprovant.

          2. Vol entrar a un domini prohibit? Si és així, denego l'accés; sinó, continuo comprovant.

          3. Conté la URL una paraula permesa? (Una paraula que sembla prohibida però que l'administrador ha considerat que pot ser utilitzada). Si la té, no segueixo comprovant i deixo passar la petició directament. Si no la té, continuo comprovant.

          4. Conté la URL una paraula prohibida? Si la té, denego l'accés.

          5. Ja ha passar per tots els filtres: és de la xarxa local, i no conté paraules prohibides ni vol accedir a un domini prohibit. Permeto l'accés al proxy.





Les ACL (llistes de control d'accés) ja estan definides. Continuem amb la configuració restant:



cache_mgr institut@domini.com

Si hi ha cap problema amb la caché del proxy es mostrarà un missatge d'error amb aquesta adreça d'e-mail. Per defecte posa “webmaster”, el podem deixar així si no volem donar la nostra direcció de correu.



Si també volem que Squid actuï com a accelerador httpd (dimoni HTTP), haurem d'afegir aquestes línies. Així aconseguirem que la caché també s'utilitzi en les peticions web que es facin al nostre servidor Apache, i agilitzarà més el seu funcionament.

httpd_accel_host virtual

httpd_accel_port 0

httpd_accel_with_proxy on



Per últim, anirà molt bé canviar l'idioma de Squid a espanyol sobretot perquè els usuaris de la xarxa comprendran millor els missatges d'error que puguin aparèixer. Ho fem amb:

error_directory /usr/lib/squid/errors/Spanish



Ja hem acabat amb el fitxer de configuració. No fa falta reiniciar el procés squid; només cal executar la següent ordre per què llegeixi la nova configuració:

squid -k reconfigure





Ara queda la millor part: provar-ho i comprovar que funciona tot a la primera. Només hem d'anar a un altre ordinador de la xarxa, obrir el navegador (sigui quin sigui) i posar a la configuració de 'Proxy' la IP del servidor i el port 8080. Podem crear un host a cada ordinador per no haver d'escriure la IP; de totes maneres deixarem aquest pas per més endavant perquè quan tinguem servidor de DNS, el nom de host es traduirà directament a la IP del servidor (com si fos una direcció d'Internet).




Comprovant que funciona el proxy i el pare de la xtec

Per provar-ho del tot haurem d'entrar en pàgines web, en FTPs, en llocs que requereixin connexions segures (SSL); entrarem a pàgines lentes per veure si triga menys a tornar a entrar, entrarem a pàgines inexistents per veure els missatges d'error, entrarem des de IPs no permeses, etc. En el nostre cas hem comprovat una millora de la velocitat apreciable en tots els sentits: les pàgines web carreguen abans, els FTPs van més ràpid, els errors que han d'aparèixer apareixen abans, i res no falla.



Ara que ja funciona, haurem de veure com evoluciona el seu estat amb el pas del temps. Els fitxers de log aniran creixent, però no ens hem de preocupar perquè a /etc/cron.daily/ (llistat de les tasques que s'executen cada dia) hi ha un script anomenat logrotate, que està configurat a /etc/logrotate.conf per a rotar els logs, entre d'altres, del Squid (a /etc/logrotate.d/squid).

'Rotar els logs' es refereix a comprimir el fitxer de logs (d'accessos registrats), canviar-li el nom, i tornar-ne a crear un però buit. Per tant, quan veiem fitxers com /var/log/squid/access.log.7.gz, sabrem que es tracta d'un log bastant antic (més antic quan més gran sigui el número), i també sabrem on trobar el log d'aquell mateix moment: al seu lloc, /var/log/squid/access.log (sense comprimir ni canviar de nom). L'operació de la rotació de logs de tots els servidors la controla logrotate.





Per acabar, cal tenir en compte que si volem que els usuaris no puguin accedir a Internet per altre mitjà que no sigui el proxy, es pot crear un filtre al router, o es pot desconfigurar cada ordinador client per a què no funcionin els DNS de proveïdor d'Internet contractat, ja que és el proxy també qui es fa càrrec de resoldre noms de host. Això ho podrem perfeccionar quan fem el servidor de DNS propi.





    1. Serveis secundaris

      1. Suport de PHP a la web



Podrem aprofitar molt més el servidor si utilitzem pàgines web que incloguin scripts en PHP. A més, pot ser una pràctica molt útil per als alumnes que han acabat d'estudiar HTML i volen orientar-se a la programació de webs de comerç electrònic i similars.

El PHP és un llenguatge molt potent que s'executa al servidor quan algú demana una pàgina, i que genera un codi HTML que inclou en la pàgina de retorn. Per veure què ens proporciona aquest llenguatge, farem un exemple que després ens servirà per provar si s'ha instal·lat correctament al servidor.

Suposem que al servidor hi pugem un fitxer anomenat prova.php amb el següent contingut:



<BODY BGCOLOR=YELLOW>

<BR><BR>Això és <B>HTML</B> normal.<BR>

<?

echo "Aquí comença el codi PHP<br>";

for ($size=1; $size<=7; $size++) {

echo "<font size=$size color=#".(2+$size)."90000>";

echo "Tamany $size</font><br>\n";

}

?> <BR> Això torna a ser HTML; el PHP ja s'ha acabat.

</BODY>

Si carreguéssim aquest fitxer al navegador (a la direcció http://IP_DEL_SERVIDOR/prova.php), el codi que rebríem seria:



<body BGCOLOR=YELLOW>

<br><br>Això és <b>HTML</b> normal.<br>

Aquí comença el codi PHP<br><font size=1 color=#390000>Tamany 1</font><br>

<font size=2 color=#490000>Tamany 2</font><br>

<font size=3 color=#590000>Tamany 3</font><br>

<font size=4 color=#690000>Tamany 4</font><br>

<font size=5 color=#790000>Tamany 5</font><br>

<font size=6 color=#890000>Tamany 6</font><br>

<font size=7 color=#990000>Tamany 7</font><br>

<br> Això torna a ser HTML; el PHP ja s'ha acabat.

</body>

S'ha de destacar que res del codi PHP que hi havia escrit el podrà veure mai l'usuari (encara que intenti descarregar el .php), ja que el servidor genera i envia només codi HTML.

Per tant, hem fet un codi que automatitza una operació mitjançant un bucle for; en aquest cas el que fa és mostrar diferents textos de mida cada vegada més grans, i de diferent color. Però les possibilitats són inesgotables: es poden crear dinàmicament pàgines que demana l'usuari, es poden fer servir cookies, contrasenyes, sessions que expiren al cap d'un temps, comptadors, es pot accedir a bases de dades amb el motor MySQL, i moltíssimes coses més. Hi ha moltes pàgines importants fetes en llenguatge PHP, com els 'blog' ('web log', xarxes de pàgines interelacionades mitjançant enllaços), o portals com ara Barrapunto (www.barrapunto.com) i similars. També hi ha eines especials, com PHPNuke, que donen les bases per crear un d'aquests portals sense haver d'aprendre a programar en PHP.

Per al nostre servidor, ens ocuparem d'instal·lar PHP, integrar-ho a Apache, i comprovar que funcioni amb l'exemple anterior (el de les fonts). La instal·lació de MySQL, la seva configuració, i el procés per instal·lar utilitats com PHPNuke no el descriurem aquí, però no és gaire difícil; només cal fer com en els altres programes (utilitzant apt-get) i seguir les indicacions del fitxers INSTALL i/o README.



Un apt-cache search php ens revela que el paquet més apropiat s'anomena php4; per tant fem un apt-get install php4 i es baixarà junt amb les seves dependències. Ens apareixerà un missatge semblant a aquest:



I see you have apache webserver installed and so far you haven't used the apache module version of php4 in your apache. If you want to use it, you should reconfigure the apache webserver and select to load the php module. I can call the apacheconfig script now for you to do it, or you can insert the following line into /etc/apache/httpd.conf manually:

LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

Do you want me to run the apacheconfig script now [y/N] ?



Això vol dir que ha detectat la configuració d'Apache i que se'ns ofereix a integrar-se com a mòdul automàticament. Com que ens fiem, diem que sí (y) i continuem amb la configuració (ens farà reiniciar l'Apache). Quan acabi, provem si funciona: posem a /var/www el fitxer prova.php comentat anteriorment i intentem obrir-ho amb el navegador. No funciona; en comptes de mostrar res creu que ens volem baixar l'arxiu.

Haurem d'anar a la web www.php.net, on es troba tota la informació sobre el llenguatge, i llegir les instruccions d'instal·lació. A la web també hi trobarem notes dels usuaris sobre tots i cada un dels temes de la documentació; per tant és poc probable que no puguem resoldre els problemes que ens surtin.

En aquest cas, veiem a la web que hem d'afegir unes línies a l' /etc/apache/httpd.conf per tal que entengui el format PHP. Anem al fitxer i trobem aquestes línies, comentades:

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

Només cal descomentar-les (traient el # del principi) per afegir el tipus d'arxiu PHP. També busquem la línia que ha afegit el apt-get i li traiem el # si el té. Ha de quedar semblant a:

LoadModule php4_module /usr/lib/apache/1.3/libphp4.so



També hem de dir-li a Apache que la pàgina a carregar per defecte si no es posa res ja no és només index.htm, sinó que també val index.php. Busquem un fragment on posa:

<IfModule mod_dir.c>

DirectoryIndex index.html index.htm index.shtml index.cgi

</IfModule>

I afegim index.php al final, de forma que queda:

<IfModule mod_dir.c>

DirectoryIndex index.html index.htm index.shtml index.cgi index.php

</IfModule>

Així, intentarà carregar primer index.html, si no la troba index.htm, després index.shtml i així successivament. Podem posar-ho en l'ordre que vulguem, encara que no hauria d'haver més d'un fitxer index al directori.


Pàgina PHP de prova



Ara reiniciem Apache (apachectl restart) i tornem a carregar la pàgina PHP en el navegador. Aquesta vegada ha de funcionar, i veurem el codi HTML esmentat abans.



Com a pràctica per als alumnes, es pot aprofitar el PHP per a fer un comptador de visites per a la web, de forma que gravi a un arxiu les dades dels usuaris que entren (IP, referer, navegador, resolució, etc.).

S'ha de remarcar que el PHP és un dels llenguatges millor documentats a Internet; hi trobarem molts scripts ja fets, tutorials, fòrums i grups d'usuaris; només ens cal buscar.





      1. Suport de CGIs a la web



CGI fa referència a Common Gateway Interface, i és un estàndard per a poder executar scripts (petits programes) a les pàgines web. És molt semblant a PHP, amb la diferència de que un CGI pot estar escrit en molts llenguatges de programació, entre ells:



La majoria, però, estan escrits en Perl, i gran part de la resta són scripts per a la shell de Linux. Per què Perl? Hi ha moltes raons que fan a Perl el llenguatge més apropiat:



Veurem un programa CGI més endavant, després d'haver-ne preparat el suport a Apache. No calen instal·lar nous paquets; només hem de comprovar que tinguem instal·lat el Perl amb perl --version i després editarem el fitxer de configuració de l'Apache /etc/apache/httpd.conf:

Veiem que la línia LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so està descomentada. Perfecte. També llegim prop de la línia ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ que els CGIs no van a /var/www/cgi-bin/ , sinó que aquesta direcció està redirigida a /usr/lib/cgi-bin/ , probablement per evitar que al directori web hi hagi programes executables, deixant d'aquesta manera només els elements web. Més endavant trobem les següents línies comentades:

# To use CGI scripts:

#AddHandler cgi-script .cgi .sh .pl

Hem de treure el signe de comentari a la línia de AddHandler per fer que entengui els .cgi com a programes i no com a fitxers de text normals.

Gravem, i reiniciem l'Apache amb apachectl restart



Per a provar si funciona, creem un fitxer amb el següent contingut:

#!/usr/bin/perl

print "Content-type: text/plain","\n\n";

print "Aquest script CGI fet en Perl funciona!", "\n";

$uptime = `/usr/bin/uptime` ;

($load_average) = ($uptime =~ /average: ([^,]*)/);

print "Càrrega de la CPU: ", $load_average, ".", "\n";

print "Actualitza la pàgina i veuràs com canvia.", "\n";

exit (0);

Hem de guardar aquest CGI a /usr/lib/cgi-bin/primer.cgi (no a /var/www/cgi-bin/primer.cgi !, ja que Apache té l'alias que hem comentat abans), i hem de donar-li permís d'execució amb chmod a+x /usr/lib/cgi-bin/* (aquest és un pas molt important; si no ho fem sortiran errors a la web). Quan ja ho hem fet, obrim un navegador i entrem a http://IP_DEL_SERVIDOR/cgi-bin/primer.cgi. I ara sí que ens hem de referir al CGI com si realment estigués al directori /var/www/cgi-bin; l'àlias sabrà on trobar el veritable fitxer.

Si tot funciona bé, veurem el missatge en format text (sense HTML ni altres codis pel mig). Si no funcionés, haurem de comprovar si podem executar el script localment (perl /usr/lib/cgi-bin/primer.cgi), si té permís d'execució, si existeixen els mòduls de Perl necessaris, si ens hem deixat de mirar alguna cosa relacionada amb cgi a la configuració de l'Apache, i si l'hem reiniciat. En tot cas, podem consultar /var/log/apache/error.log per veure els missatges d'error detallats.



Amb els CGI podem fer eines molt potents que interactuïn amb el sistema i que ens permetin configurar-ho remotament des de la mateixa pàgina web. De fet, de programes d'aquest tipus ja n'hi ha; el més usat és Webmin (http://www.webmin.com).

Però també és important saber que moltes tècniques per a accedir a servidors web i treure'n informació privada aprofiten CGIs poc usats o mal programats. Encara que gairebé tots aquests errors afecten a altres sistemes operatius, convé no abusar dels CGI.





      1. Estadístiques d'accés a la web



Per veure com marxa la nostra pàgina -un dels serveis més importants de l'ordinador- no podem estar revisant els logs d'Apache a cada moment, ja que la informació que mostren és molt extensa i detallada, probablement més del que nosaltres volem.

Aprofitarem que hem afegit el suport per a executar programes CGI i posarem un analitzador de fitxers de registre d'accés. L'únic que fan és interpretar el fitxer /var/log/apache/access.log i generar una pàgina HTML amb estadístiques i gràfiques sobre els documents més demanats, la procedència dels visitants i les hores en què entren. Així és molt més fàcil saber si tot funciona com ho hem previst,



D'analitzadors de logs també n'hi ha molts (gratuïts i comercials); es diferencien sobretot en la velocitat a la que treballen amb els logs, que poden ocupar molts gigabytes. El que utilitzarem nosaltres és AWStats, un de gratuït, molt ràpid, configurable i senzill d'utilitzar. Està escrit en Perl, i té suport per a molts idiomes, entre ells l'espanyol i el català; per tant és apte per a que també els visitants puguin veure i entendre les estadístiques..



Un apt-cache search awstats ens revela que Debian incorpora aquest paquet en la seva distribució de Woody, però un apt-cache show awstats ens mostra que aquesta és la versió 4.0. Com que a la seva web http://awstats.sourceforge.net diu que la versió estable actual és -en el moment d'escriure això- la 5.3, val la pena baixar el programa de la web i instal·lar-ho nosaltres. Podem consultar el ChangeLog per veure que hi ha hagut molts canvis importants de la versió 4.0 a la 5.3

Si ho hem instal·lat amb apt-get i hem descobert la nova versió després, podem desinstal·lar el programa tan fàcilment com ho hem instal·lat: apt-get remove awstats



Per tant, hem d'anar a la web http://awstats.sourceforge.net i a la secció de 'Download' baixar el .tar.gz (o .tgz) que hi ha a la secció 'Last Stable'. El descomprimim i seguim les indicacions de la mateixa web (al fitxer que hem baixat també hi són, però potser no són tan actualitzades).

192.168.0.2 - - [04/Jan/2003:19:44:36 +0100] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3b) Gecko/20030103"

#! /bin/sh

/usr/lib/cgi-bin/awstats.pl -config=bruguers -update



Ja està tot preparat; només queda provar-ho entrant a la pàgina http://IP_DEL_SERVIDOR/cgi-bin/awstats.pl, on veurem unes completes estadístiques sobre les visites al nostre servidor. Podem treure informació, si volem, editant el fitxer de configuració anterior /usr/lib/cgi-bin/awstats.bruguers.conf







      1. Connexions per Secure Shell



Volem que els usuaris normals i els administradors es puguin connectar al PC remotament i utilitzar-lo com si hi fossin davant: que puguin obrir una consola, identificar-se amb el nom i contrasenya, i tenir accés a totes les comandes, programes i fitxers que els pertanyen. Si un usuari amb més privilegis es connecta, pot fer-ho absolutament tot: crear nous usuaris, desconnectar-ne d'altres, apagar l'ordinador, posar música, i fins i tot obrir i tancar el CD.



La forma tradicional de fer això és muntant un servidor de Telnet, i després connectant des d'altra màquina amb telnet IP. Aquest sistema només té un inconvenient: tota la informació viatja per la xarxa en format text, o sigui, sense encriptar. Per tant, qualsevol persona que pugui interceptar paquets (calen privilegis de root) podria veure tot el que envia i rep cada un dels usuaris que hi han connectats, fins i tot les contrasenyes.

La solució a aquest perillós sistema consisteix a utilitzar el protocol SSH en comptes de Telnet. SSH (sigles de Secure Shell) és un tipus de connexió idèntica a Telnet, però encriptada amb claus RSA. A més, té molts altres sistemes de seguretat que eviten atacs que es poden fer amb Telnet, com per exemple l'IP spoofing. Fa servir el port 22 de TCP, a diferència del Telnet, que utilitza el 23.

Per al servidor necessitem la versió lliure i multiplataforma del protocol SSH, anomenada OpenSSH. Com que és un programa molt utilitzat en màquines Linux professionals, probablement ja el tenim instal·lat i amb el dimoni funcionant; ho podem comprovar mirant si el procés sshd s'està executant, amb ps axu | grep sshd , o també podem mirar si tenim el port 22 de TCP obert, amb nmap bruguers -p 22

En cas que no el tinguem instal·lat, només cal fer un apt-get install ssh i respondre les preguntes que es fan. Sempre podem tornar a fer aquesta configuració guiada per preguntes amb un dpkg-reconfigure ssh.



Una vegada instal·lat i en funcionament, haurem de comprovar que funcioni: el primer serà fer un ssh des de la mateixa màquina. Com a qualsevol usuari, fem un ssh bruguers i ens apareixerà un missatge dient que no som un usuari autoritzat. Els usuaris autoritzats són aquells que no han d'escriure la seva contrasenya per accedir-hi. Per seguretat, no en crearem cap d'aquests. Diem yes per continuar amb la connexió, i el missatge no tornarà a aparèixer més en aquesta màquina.

Sempre que connectem a altra màquina, intentarà accedir-hi amb el nom de l'usuari que està realitzant la connexió. Si volem especificar l'usuari, hem de posar ssh màquina -l usuari (l=login). De qualsevol manera, ens demanarà una contrasenya. Òbviament, haurem de posar la contrasenya de la compta que té l'usuari en l'ordinador a què es connecta (no en el propi ordinador). Després d'escriure la contrasenya, entrarem al sistema de forma normal. Podem sortir de la shell amb el comand exit.



Si hem provat a connectar de forma local i funciona, és el moment de comprovar si connecta des d'altre ordinador (de la mateixa xarxa o d'Internet). Necessitem qualsevol programa que suporti SSH (no es pot connectar directament al port 22). Són fàcils de trobar: per exemple, tenim el ssh per a Linux, el Putty per a Windows i el NiftyTelnet per a Macintosh. En qualsevol d'ells hem de posar la IP del servidor, deixar el 22 com a port, i connectar. Ens preguntarà nom d'usuari i contrasenya, i entrarem de forma habitual mitjançant una connexió segura que encripta tota la informació que hi circula, fent que no ens haguem de preocupar tant per si algú intercepta la comunicació.

Cada nou host que connecti al servidor farà aparèixer el missatge anterior de “Màquina desconeguda; ara l'he afegida a la llista de màquines conegudes.”

Si no funciona, s'ha de comprovar que el router filtri el port 22 TCP i el redirigeixi cap al servidor.



Finalment, cal dir que no hem d'estar totalment tranquils només per haver instal·lat SSH; hem de vigilar que les màquines que utilitzem per fer la connexió no tinguin cap programa que pugui enregistrar les contrasenyes (com per exemple un keylogger).





      1. Web per a Internet



Ja hem posat anteriorment el programa Apache servint una web als ordinadors de la xarxa interna. A aquesta web no es pot accedir des d'Internet posant la IP de la línia ADSL, perquè tota la xarxa de l'institut està darrere d'un router.



Ara volem que hi hagi dues webs diferents, una amb informació general de l'institut per als visitants d'Internet i una altra només per als alumnes i professors (usuaris de la xarxa interna) on puguin veure informació que no estigui a l'abast del públic general, com per exemple notes, horaris de guàrdia dels professors, dates de les avaluacions, etc.



Hi ha molts mètodes per servir pàgines diferents a xarxes diferents, però absolutament tots requereixen que s'obri el port 80 al router redirigit cap a un port privat del servidor (normalment, també el 80). Algunes de les idees que podem implementar són:



Les solucions més senzilles i efectives són les dels 'Virtual Hosts' i les de la pàgina dinàmica, però la primera possibilitat l'haurem d'eliminar perquè, llegint tota la documentació oficial a http://httpd.apache.org/docs/vhosts, veiem que només funciona en navegadors que ho suportin. Per tant, utilitzant un navegador senzill o fent nosaltres mateixos la petició HTTP, aconseguiríem veure qualsevol de les dues pàgines! La solució que ens dóna Apache és la d'executar dos dimonis httpd, però això requereix el doble de memòria, i és molt més complicat de configurar: dos processos, dos configuracions, dos registres de log, etc. I el doble de problemes. (No obstant, és apte per a les webs de dues empreses que no vulguin estar juntes de cap manera perquè volen diferents configuracions).

Per tant, el millor és deixar Apache tal com està i utilitzar el PHP i CGIs que ja hem configurat per detectar si el visitant ve de la xarxa interna o d'Internet. Aquest mètode presenta altres avantatges:

Aquest mètode, però, també té alguns inconvenients, bàsicament perquè l'autenticació per IP mai dóna molta seguretat; hi ha moltes tècniques per fer creure a un ordinador que som una IP determinada quan en realitat no ho som. L'IP spoofing i l'ARP poison són les més comuns, però evolucionen constantment per crear atacs cada vegada més sofisticats, fins al punt que és possible gairebé convertir-se en l'ordinador desitjat i aprofitar-se dels seus privilegis.



Per evitar problemes, a la zona privada només deixarem accedir a ordinadors de la xarxa interna (amb IP 192.168.0.x) exceptuant 192.168.0.1 (router),192.168.0.0, 192.168.0.255. El router NO pot accedir a la pàgina, encara que sigui de la nostra xarxa. Ho hem de tenir en compte perquè el router és l'element que separa Internet de la xarxa interna, per tant si algú aconsegueix entrar al router (192.168.0.1) podria accedir-hi als llocs on es deixa entrar a les IP que comencen per 192.168.0. Les direccions acabades en 0 i en 255 són especials i no les poden utilitzar els ordinadors com a IP, per tant millor fem que no puguin accedir tampoc per si de cas.





Aquest és l'exemple d'un fitxer.php protegit per IP (només hi poden accedir 192.168.0.x excepte .0 .1 i .255)

Aquesta pàgina requereix una IP autoritzada... <BR>



<?

$ip = GetHostByName($REMOTE_ADDR); // Capturem la IP



echo "<BR> Accedeixes amb la IP $ip <BR>";





$aut=strpos($ip,"192.168.0."); // Si la IP conté el text 192.168.0. és autoritzat



if ($aut === false || $ip=="192.168.0.1" || $ip=="192.168.0.0" || $ip=="192.168.0.255") { // Nota: sí, són TRES signes = al principi

exit("No estàs autoritzat!"); // Tanca la connexió i no continua llegint la resta de la pàgina



}



?>



<!-- Aquí només es pot arribar sent autoritzat (sinó, s'hauria executat l'exit() ) -->

Perfecte, estàs autoritzat.<BR>

<U>Aquests continguts són per a tu.</U><BR>



En comptes de posar això a cada pàgina, podem fer el mateix creant un fitxer aut.php amb:

<?

$ip = GetHostByName($REMOTE_ADDR); // Capturem la IP



echo "<BR> Accedeixes amb la IP $ip <BR>";





$aut=strpos($ip,"192.168.0."); // Si la IP conté el text 192.168.0. és autoritzat



if ($aut === false || $ip=="192.168.0.1" || $ip=="192.168.0.0" || $ip=="192.168.0.255") { // Nota: sí, són TRES signes = al principi

exit("No estàs autoritzat!"); // Tanca la connexió i no continua llegint la resta de la pàgina



}



?>

I després posar només a prova.php:

Aquesta pàgina requereix una IP autoritzada... <BR>



<?

include 'aut.php';

?>



Perfecte, estàs autoritzat.<BR>

<U>Aquests continguts són per a tu.</U><BR>

D'aquesta manera només hem d'incloure una línia més a cada pàgina que requereixi comprovació d'IP.



Aquest sistema ja és bastant segur per als usuaris normals; de totes maneres, no haurem de posar informació privada ja que PHP també pot tenir bugs. Si cal, posarem una contrasenya a algunes pàgines, o utilitzarem les anomenades 'sessions' (http://www.php.net/manual/es/ref.session.php).







      1. Servidor DNS



Per evitar haver d'escriure la IP del servidor cada vegada que hi vulguem accedir, podem escriure el seu nom de host i fer que un DNS (Domain Name Server) el tradueixi a la IP adequada (exemple: tecno.bruguers a 192.168.0.53). Com que els servidors DNS que dóna el nostre ISP (Internet Service Provider) no els podem modificar, muntarem el nostre propi servidor DNS. És un servei que utilitza el port 53 de TCP i el 53 d'UDP.



De servidors DNS n'hi ha de dos tipus:





Utilitzarem la versió de la ISC (Internet Software Consortium, www.isc.org) del protocol DNS, que s'anomena BIND (Berkeley Internet Name Domain). Consta del servidor de noms de domini (named) i d'utilitats relacionades amb DNS.

La versió actual és la 9, que té suport entre altres coses per fer caché dels DNS (un mateix domini el resoldrà molt més ràpid la segona vegada que la primera). De totes maneres, convé instal·lar sempre l'última versió de bind, perquè s'han trobat bugs importants a versions anteriors.



Farem un apt-get install bind9 bind9-doc dnsutils , encara que el paquet dnsutils probablement ja està instal·lat. El bind9-doc és opcional, però com que la configuració és difícil ens anirà bé la documentació (sobretot la que trobem a Internet).

Ara ja tenim el dimoni named funcionant a la perfecció i llist per a resoldre hosts; però el millor és revisar la configuració a /etc/bind/named.conf. Nota: als fitxers de configuració hem de respectar els signes i la tabulació (s'utilitzen sobretot tabuladors i punts).

Començarem afegint les IPs dels servidors DNS que ens ha donat el nostre ISP. S'utilitzaran per resoldre peticions de noms de domini que no siguin de l'Intranet.

forwarders {

193.145.88.16;

193.145.88.18;

};

Després afegirem el nom del domini, que serà bruguers. Coincideix amb el nom de host del servidor, però no passa res, ja que en definirem altres, com www o proxy, per no embolicar-se. Afegim les següents línies:

zone "bruguers" {

type master;

file "/etc/bind/bruguers.hosts";

};

Hem de crear una altra zona per a fer la operació inversa (traduir una IP a un nom de domini). Per això crearem la zona anomenada 0.168.192.in-addr.arpa, que és la IP 192.168.0.* invertida (tots els PCs de la xarxa tenen IP 192.168.0.qualsevolnombre ja que la seva màscara de subxarxa és 255.255.255.0). Per a aquesta zona posem:

zone "0.168.192.in-addr.arpa" {

type master;

file "/etc/bind/192.168.0.rev";

};



Ara cal, és clar, crear /etc/bind/bruguers.hosts i /etc/bind/192.168.0.rev. Començarem pel primer:

bruguers. IN SOA linux. root (

1 ; Serial

8H ; Refresh

2H ; Retry

4W ; Expire

1D ) ; Minimum TTL

bruguers. IN NS linux.

router.bruguers. IN A 192.168.0.1

linux.bruguers. IN A 192.168.0.200

proxy.bruguers. IN CNAME linux

www.bruguers. IN CNAME linux

t01.bruguers. IN A 192.168.0.131

Els paràmetres de la primera secció (comentats a partir del caràcter “;”) són més útils per a DNS públics (els que serveixen per a Internet). Especifiquen temps, que pot anar en segons o en múltiples majors (ex: 2H = dues hores, 1D = un dia, 4W = quatre setmanes). Deixarem aquests valors que hem trobat a configuracions per defecte a pàgines de documentació.

Cada nom de host que vulguem definir ha de seguir la mateixa estructura. Les paraules clau que hi ha al fitxer són:

IN NS: indica que aquest equip és el servidor DNS

IN A: afegeix un nom de host i la seva IP corresponent

IN CNAME: defineix un àlies per a un host ja conegut

L'altre fitxer, /etc/bind/192.168.0.rev, ha de contenir el mateix però preparat d'una altra manera:

0.168.192.in-addr.arpa. IN SOA linux. root (

1 ; Serial

8H ; Refresh

2H ; Retry

4W ; Expire

1D ) ; Minimum TTL

0.168.192.in-addr.arpa. IN NS linux.

1.0.168.192.in-addr.arpa. IN PTR router.bruguers.

200.0.168.192.in-addr.arpa. IN PTR linux.bruguers.

131.0.168.192.in-addr.arpa. IN PTR t01.bruguers.



Els paràmetres són els mateixos, i els hosts definits també. Quan afegim més al primer fitxer també els haurem de posar a aquest segon, naturalment seguint el mateix model (recordem que s'ha d'utilitzar la tecla TAB per separar els camps).



Hem acabat la configuració. El que farem ara és buidar el fitxer /etc/resolv.conf del servidor per treure les IPs de l'ISP contractat, ja que ara ja no fan falta (el nostre servidor DNS es comunica directament amb els root servers). En deixar el fitxer en blanc, Linux intenta resoldre els noms de dominis a la mateixa màquina.

Reiniciem named executant rndc reload, anem a una altra màquina, configurem el DNS amb la IP privada del servidor, reiniciem si cal (depèn del sistema operatiu), i provem a fer un ping a linux.bruguers

PING linux.bruguers (192.168.0.200) from 192.168.0.132 : 56(84) bytes of data.

64 bytes from linux.bruguers (192.168.0.200): icmp_seq=1 ttl=255 time=0.778 ms

64 bytes from linux.bruguers (192.168.0.200): icmp_seq=2 ttl=255 time=0.667 ms

64 bytes from linux.bruguers (192.168.0.200): icmp_seq=3 ttl=255 time=0.574 ms

Funciona! Ha traduït linux.bruguers a la IP corresponent, 192.168.0.200. També hem de comprovar que funcionin els àlies www.bruguers i proxy.bruguers, i que cadascuna de les estacions que hem afegit també sigui accessible (a l'exemple hem definit t01.bruguers). No hem d'oblidar provar també a resoldre pàgines d'Internet (ex. google.com). Si mesurem quant triga la primera vegada i quant les posteriors comprovarem l'eficàcia de la seva memòria caché.

Podem fer proves més detallades amb comandes com dig router.bruguers per veure si troba la IP o dig -x 192.168.0.1 per veure si també funciona a la inversa (hauria de mostrar router.bruguers).



Quan tot funcioni, hem de tornar a editar el fitxer /etc/resolv.conf del servidor per fer que quedi així:

domain bruguers

nameserver 192.168.0.200

nameserver 193.145.88.16

nameserver 193.145.88.18

Això fa que les peticions DNS les resolgui el propi servidor (192.168.0.200), però que si per alguna raó falla (per exemple, si el procés named mor), el DNS funcioni de manera estàndard passant les peticions als DNS del nostre ISP. El domain bruguers fa que si no especifiquem res entengui els noms com a membres del domini anomenat bruguers (per exemple, proxy faria referència a proxy.bruguers, tecno a tecno.bruguers, etc.). Aquesta opció la podem posar a tots els ordinadors del domini (es farà de distintes formes depenent del sistema operatiu).



El servei de DNS ja funciona; però ens queden dues tasques per fer:







      1. Firewall



En un ordinador amb tanta importància dins la xarxa no ens podem oblidar de la seguretat: com que és un servidor té molts ports oberts i ofereix moltes formes de connexió, d'entre elles potser algunes són indesitjades.

Per a fer que només s'hi accedeixi utilitzant els serveis que hem configurat, utilitzarem un tallafocs ('firewall' en anglès), que accepta, denega o ignora els paquets que han de passar per l'ordinador. Hi ha una altra eina més complexa i potent que els tallafocs: els IDS (Intrusion Detection System) que detecten i registren patrons estranys en l'ús de la xarxa, com poden ser el tràfic a altes hores de la matinada o l'arribada de paquets TCP amb capçalera errònia.



Degut a la complexitat dels IDS, posarem només un tallafocs ja que fa tot el que necessitem. Ho farem a nivell de nucli (és el kernel qui controla el filtrat de paquets) utilitzant el programa iptables. Una curiositat: com que han sortit bastants versions estables del kernel de Linux amb moltes diferències entre elles, es va anomenar de forma diferent al filtrat de paquets de cadascuna. Així, tenim que el programa és ipfwadm per a kernels 2.0, ipchains per a 2.2 i iptables per a 2.4. Nosaltres utilitzarem només iptables, el del kernel 2.4 (ja s'ha explicat com actualitzar el kernel fàcilment a la secció de 'Configuracions bàsiques').



Com que és una eina del nucli, és probable que ja el tinguem instal·lat (iptables per provar-ho, apt-get install iptables per instal·lar-ho). Ara començarem per veure com funciona aquest tallafocs:



Tenim tres taules, INPUT, FORWARD i OUTPUT, per catalogar els paquets:



Cada taula consta d'una sèrie lògica de regles (ordenades) que decideixen el destí del paquet. El paquet acabarà bàsicament d'una d'aquestes formes:



Per entendre millor la diferència entre REJECT i DROP (anomenat 'DENY' en versions anteriors), ens aniran bé uns conceptes bàsics de TCP/IP.



Sabem que a IPv4, cada paquet té a la capçalera TCP uns flags que determinen la finalitat del paquet. Aquests són: URG, ACK, PSH, RST, SYN, FIN. N'hi ha dos més que completen el byte, CWR i ECE, però no s'utilitzen molt.

Per establir una connexió a una màquina i un port determinats, s'ha de fer el conegut com a 'three way handshake' (salut de les tres vies). Consisteix a enviar-li un paquet amb el bit SYN (SYNCHRONIZE) activat. Ens contestarà amb un paquet amb el bit ACK (ACKNOWLEDGEMENT) activat i farà el mateix que hem fet nosaltres: enviar un paquet amb SYN i esperar un ACK nostre; llavors ja pot començar a enviar i rebre dades. Com que enviar un ACK i després un SYN es pot simplificar en només un paquet amb els bits SYN i ACK activats, el 'three way handshake' queda així:



Nosaltres


Destí

Descripció

SYN

------------->


“-Ei, em reps? Vull connectar amb tu.”


<-------------

SYN/ACK

“-Sí, et rebo. Comencem ja?”

ACK

------------->


“-D'acord, comencem.”



Però això només passa si el port està obert. Si un port està tancat, en enviar el SYN respon amb un RST/ACK i finalitza la connexió. iptables per defecte contesta d'una altra manera, amb un missatge ICMP Port Unreachable, però ho podem especificar amb el paràmetre --reject-with



Per tant, tornem a definir les tres opcions ACCEPT, REJECT i DROP, però d'una manera més tècnica. Si enviem un SYN a l'ordinador destí, la resposta que rebrem dependrà de la regla utilitzada:







La nostra feina si volem crear un firewall és definir aquestes regles per a les tres taules (INPUT, FORWARD i OUTPUT), i per fer-ho el primer és crear un esquema de cada taula. Per exemple, un servidor web podria fer el següent:

Paquets rebuts (INPUT):

          1. De la interfaç lo (loopback, el propi ordinador): acceptar

          2. Ve al port 80 TCP: acceptar

          3. D'altra manera, descartar

Paquets de pas (FORWARD):

          1. Descartar

Paquets enviats (OUTPUT):

          1. De la interfaç loopback: acceptar

          2. Ha d'anar al port 80 TCP de l'ordinador destí: acceptar

          3. D'altra manera, descartar



Això, traduït a comandes d'iptables, s'escriu:

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -j DROP



iptables -A FORWARD -j DROP



iptables -A OUTPUT -o lo -j ACCEPT

iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -j DROP



Per comprendre cada comand hem de saber els paràmetres del programa. Podem veure'ls tots amb man iptables, però en resumim els importants aquí:

iptables -A <taula> -i <interfaç d'entrada> -o <interfaç de sortida>

-s <IP d'origen> -d <IP de destí>

-p <protocol> --sport <port d'origen> --dport <port de destí>

-j <acció>

Els noms de les opcions comentades són les inicials de les següents paraules angleses: i='input' o='output' s='source' d='destination' p='protocol' j='jump' A='add' F='flush' P='policy' m='module'



Podem millorar aquest exemple afegint unes línies que esborrin les configuracions anteriors de cada taula:

iptables -F INPUT

iptables -F FORWARD

iptables -F OUTPUT

Hem vist que a cada taula hi ha una sentència final que es compleix per als paquets que no compleixen cap altra regla; a aquesta regla se l'anomena política d'una taula, i s'ha de destacar utilitzant el comand -P en comptes de -A

L'exemple, per tant, quedaria així:

iptables -F INPUT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -P INPUT DROP



iptables -F FORWARD

iptables -P FORWARD DROP



iptables -F OUTPUT

iptables -A OUTPUT -o lo -j ACCEPT

iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

iptables -P OUTPUT DROP



Encara podem fer una optimització a aquest exemple: sabem que si una connexió és acceptada, ho serà fins al final, i tots els paquets que s'enviïn no s'haurien de contrastar amb cada regla. Com que podem distingir entre una nova connexió (bit SYN activat) i una connexió establerta (posterior al 'three way handshake'), el podem aplicar al tallafocs. Utilitzarem el mòdul state de la següent manera:

iptables -F INPUT

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -m state --state NEW -i lo -j ACCEPT

iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

iptables -P INPUT DROP



iptables -F FORWARD

iptables -P FORWARD DROP



iptables -F OUTPUT

iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -m state --state NEW -o lo -j ACCEPT

iptables -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

iptables -P OUTPUT DROP



I aquest és el firewall final per a l'exemple del servidor web. Només són una sèrie d'ordres que modifiquen paràmetres del kernel, per tant quan es reiniciï i es torni a carregar Linux (el nucli del sistema operatiu) ja no estaran activats. És molt fàcil solucionar això; només hem de gravar totes les comandes a un fitxer, fer-ho executable, posar-ho al directori /etc/init.d/, i crear els enllaços als nivells d'execució que vulguem (a /etc/rc*.d/) per què s'executin cada vegada que s'encengui el servidor.







Això és només un exemple d'un servidor molt simple, però ara necessitem fer el tallafocs apropiat per a la nostra màquina. Com que el que hem de fer és tancar ports, primer hem de saber quins tenim oberts mitjançant un escanejat de ports. Hi ha molts programes que ho fan, però usarem nmap, que és el més utilitzat pels hackers de Linux.

Anirem a altra màquina (les connexions les hem de fer des de fora), instal·lem nmap (preferiblement sota el sistema Linux), i executem el següent comand com a root:

nmap -sS IP_DEL_SERVIDOR -p 1-65535

Això fa un escanejat de ports de tipus SYN (el tipus per defecte quan ho fa root), i prova tots els ports TCP. 65535 són molts ports; però com que això ho hem de fer només una vegada, val la pena esperar una mica més.

Hem rebut la següent sortida:



Starting nmap V. 3.00 ( www.insecure.org/nmap/ )

Interesting ports on bruguers (192.168.0.200):

(The 65520 ports scanned but not shown below are in state: closed)

Port State Service

9/tcp open discard

13/tcp open daytime

21/tcp open ftp

22/tcp open ssh

25/tcp open smtp

37/tcp open time

53/tcp open domain

80/tcp open http

111/tcp open sunrpc

113/tcp open auth

139/tcp open netbios-ssn

515/tcp open printer

1024/tcp open kdm

3128/tcp open squid-http

8080/tcp open http-proxy



Nmap run completed -- 1 IP address (1 host up) scanned in 70 seconds



Ara farem l'escanejat de ports UDP (normalment oblidats, però que poden comportar molts problemes fàcils d'explotar). Com que és moltíssim més lent (per provar tots els ports pot trigar bastants hores) farem només els ports per defecte: fem un nmap -sU IP_DEL_SERVIDOR; i ara anem al servidor i des d'ell mateix, sí que podem fer un nmap -sU IP_DEL_SERVIDOR -p 1-65535. Com que ara no intervé la xarxa, anirà molt més ràpid i trigarà aproximadament un minut. La sortida que ens mostra el segon comand (que, per cert, inclou tot el que ha sortit en fer el primer) és:



Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )

Interesting ports on bruguers (192.168.0.200):

(The 65526 ports scanned but not shown below are in state: closed)

Port State Service

9/udp open discard

53/udp open domain

111/udp open sunrpc

137/udp open netbios-ns

138/udp open netbios-dgm

1024/udp open unknown

1025/udp open blackjack

1026/udp open unknown

3130/udp open squid-ipc





Nmap run completed -- 1 IP address (1 host up) scanned in 67 seconds





El que farem és modificar l'exemple del tallafocs per al servidor web però permitint l'accés només als ports que sabem què són: com que el nmap mostra al costat el nom i a Internet és molt fàcil trobar algú que també ho hagi preguntat, no tindrem molts problemes per saber a quin hem de deixar entrar i a quin no. De ports per enviar informació cap a l'exterior, en deixarem tots ja que no volem posar cap restricció. El forwarding no l'habilitem.

Per estalviar línies, afegirem el mòdul multiport i especificarem els ports de destí amb --dports en comptes de --dport (perquè ara en posarem més d'un). L'script resultant, amb algun comentari i amb la llista de ports permesos, és:

echo Carregant regles d'iptables...

iptables -F INPUT

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -m state --state NEW -i lo -j ACCEPT

iptables -A INPUT -m state --state NEW -i eth0 -p tcp -m multiport --dports 21,22,53,80,139,515,3128,8080 -j ACCEPT

iptables -A INPUT -m state --state NEW -i eth0 -p udp -m multiport --dports 53,137,138,3130 -j ACCEPT

iptables -P INPUT DROP



iptables -F FORWARD

iptables -P FORWARD DROP



iptables -F OUTPUT

iptables -P OUTPUT ACCEPT



Això ho hem de gravar a /etc/init.d/, però veiem que ja hi ha un script anomenat iptables, que és molt més complicat i que permet carregar i guardar configuracions, reiniciar i aturar el servei, i moltes coses més. Com que el nostre script és molt més senzill i fàcil d'entendre i de modificar, canviarem de nom l'iptables actual (a iptables_ANTIC, per exemple) i posarem el nostre script amb el nom d'iptables. Molt important: no hem d'oblidar fer-ho executable amb chmod a+x iptables.

Hem de crear els enllaços als directoris /etc/rc*.d, en concret ho farem per als nivells 2, 3 i 5, que són els que poden necessitar tallafocs (els modes multiusuari). Farem que es carregui més o menys en darrer lloc (posició 92 de les 100 possibles), encara que tampoc importa molt l'ordre. Executem:

ln -s /etc/init.d/iptables /etc/rc2.d/S92iptables

ln -s /etc/init.d/iptables /etc/rc3.d/S92iptables

ln -s /etc/init.d/iptables /etc/rc5.d/S92iptables



I en reiniciar o canviar de runlevel (init NÚMERO_DE_RUNLEVEL) ja estarà funcionant. Ho podem comprovar tornant a fer un nmap de la mateixa manera. Veurem que només es veuen els ports que hem escrit a la llista, i que a més és bastant més lent. La lentitud és deguda a que no contesta “Aquest port està tancat” sinó que calla degut al DROP que li hem posat per defecte. La lentitud és una bona arma per cansar a qui ens faci escanejats de ports sovint, mentre que a nosaltres no ens afecta. Tot i així, podem fer que contesti “Port tancat” canviant el DROP per un REJECT.







Ara comentarem un problema pràctic que pot haver sorgit: com hem dit al principi, iptables és només per a kernels 2.4, però la Debian estable té un kernel 2.2 per defecte; per tant hem d'actualitzar el kernel. Això no sempre és possible, com per exemple en el nostre cas, perquè el driver de la targeta de xarxa del kernel 2.4.18 no la reconeixia (ja que utilitzava diferents mòduls: el rtl8139 al 2.2 i el 8139too al 2.4)

En aquests casos podem fer vàries coses:





  1. CONCLUSIONS

    1. Avaluació general



Hem aconseguit un ordinador molt més potent que qualsevol altre de la xarxa, inclús quan només funciona a 100 Mhz. i té 48 Mb. de RAM. Per tant, hem aprofitat molt bé els recursos, sobretot gràcies a Linux. Si haguéssim instal·lat altre sistema operatiu (com Windows) no s'hauria pogut fer quasi res d'això a aquest ordinador.



Finalment, l'ordinador disposa de tots els serveis que havíem proposat al principi, alguns millor implementats que altres, però que funcionen bé.

Hem fet sempre l'opció correcta en no deixar les configuracions per defecte i revisar-les, encara que per fer-ho ben fet caldria llegir-se tota la documentació necessària fins a arribar a entendre cada fitxer de configuració del sistema. Alguns són molt complicats i ni encara fent-ho aconseguirem els resultats que volem a la primera.



En resum, l'ordinador ha quedat bé, presentable, ja que tot el que fa ho fa bé: proxy, DNS, SSH; PHP, CGI, FTP i servidor web (amb pàgina d'estadístiques) funcionen perfectament; tenim alguns dubtes en quant a Samba pel problema comentat de la necessitat de crear el mateix usuari a cada màquina Windows, però com que això també passa entre Windows NT i Windows 98, podem pensar que també funciona bé.

El firewall està comprovat en altres ordinadors, però en aquest en concret no va funcionar pel problema amb la targeta de xarxa i es va haver de tancar cada port a mà. El resultat és gairebé el mateix, però no queda tan professional.



Aquests petits problemes amb el hardware i amb els altres sistemes operatius els podem resoldre llegint tota la documentació inclosa i buscant-ne més per Internet. Després de provar coses durant un temps, aconseguirem deixar el servidor 'perfecte'. Funcionarà gairebé igual que ara, però ja sabrem si és normal que ho faci o no.





També s'ha de destacar que ho hem fet tot amb software lliure (podem executar vrms per assegurar-nos) i que no ens hem gastat res de diners, encara que tot és totalment legal. Si ho haguéssim fet amb altres sistemes operatius propietaris hauríem d'haver pagat quantitats enormes de dòlars o euros i els resultats no serien millors que els que hem aconseguit amb Linux (ben al contrari, encara tindríem més problemes que no podríem resoldre per nosaltres mateixos).





    1. Altres utilitats



Podem treure molt profit a un ordinador amb Linux instal·lat, per molt vell que sigui. Com que estarà molt temps encès sense parar, és ideal per fer feines com:



També podem decidir-nos per instal·lar el mode gràfic i utilitzar programes professionals com blender (disseny 3D), gimp (retoc fotogràfic), mozilla (navegador web), openoffice (suite d'aplicacions), mplayer (visualitzador de vídeos), etc., tot funcionant en un ordinador senzill però aconseguint resultats decents.





  1. ANNEXOS

    1. Comandes importants



Aquestes són algunes de les ordres necessàries per a utilitzar Linux. Podem veure l'ajuda completa amb l'ordre man seguida del nom del programa.





Altres programes útils (que potser haurem d'instal·lar nosaltres) són:







És molt important saber combinar aquests programes amb 'pipes' (traduït per 'canonades') i redireccionadors. Exemples (del shell bash):



apt-cache search php | less # Pipe que envia la sortida del primer comand al less per poder veure el llistat de paquets per pàgines



ps axu | grep ssh # Pipe que mostra els processos actius que contenen la paraula ssh



nmap pc > ports_oberts # Grava el llistat de ports oberts del host pc en un fitxer



nc -l -p 6000 <fitxer # Escolta al port 6000 TCP i respon amb el contingut del fitxer quan algú es connecta (útil per transmetre fitxers entre ordinadors sense FTP)



cp ~/* carpeta & calendar # Copia els arxius del nostre directori personal (representat per $HOME o per ~ ) a la carpeta especificada i, deixant en segon pla aquest procés, ens mostra les efemèrides del dia (sense haver d'esperar a que acabi de copiar tots els arxius)



mv b.bak b; cp b b2 # Fa una acció i després l'altra



apt-get update && apt-get upgrade # Baixa la nova llista de paquets i, si no hi ha hagut cap problema, actualitza els nous paquets





    1. Seguretat



El nostre ordinador ja és molt segur; és poc probable que algun alumne el pugui espatllar 'per error' o 'sense voler'. Si volem ser més paranoics (mai és mala idea) podem fer moltíssimes coses per millorar la seguretat del servidor i de totes les dades que hi ha a dins (tant pensant en intrusos com en accidents). Per exemple:





    1. Manteniment



El servidor probablement continuarà funcionant a la perfecció durant molt de temps, fins i tot sense haver d'apagar-ho, però amb el temps s'anirà quedant antiquat. Algunes de les coses que hem de fer, ordenades per importància, són:







    1. Glossari de termes



Com que per fer servir Linux s'han de tenir molts coneixements teòrics i pràctics, llistarem aquí les paraules que puguin causar confusió. No hi surten noms de marques comercials ni de programes; només dels més importants.





    1. Llicència FDL de la GNU



Aquest treball està escrit sota la Free Documentation License de la GNU. És semblant a la GPL, que fa que els programes de codi obert ho hagin de continuar sent sempre, però aplicat a documents. Per tant, qualsevol pot aprofitar tot el meu treball per a millorar-ho, però sempre haurà de fer que aquest continuï sent públic, i, és clar, no atribuir-s'ho a un mateix (ha de conservar el nom de l'autor, jo, Daniel Clemente Laboreo).

La llicència FDL, necessària en el treball però que no incloc per raons d'espai, és disponible (en català) a http://www.softcatala.org/llicencies/fdl-ca.html

La llicència, en anglès, és http://www.gnu.org/licenses/fdl.html



El treball original es pot descarregar lliurement de la meva pàgina, a la direcció http://www.danielclemente.com/servidor







  1. BIBLIOGRAFIA



Serveis de xarxa amb GNU/Linux, Jordi Bort i Marc Guri. 2002. http://xtec.cat/~mcguri/d70/

Securing Debian Manual, Javier Fernández-Sanguino Peña. 2002. http://www.debian.org/doc/manuals/securing-debian-howto

http://www.debian.org



The very verbose Debian 3.0 Installation Walkthrough, Clinton De Young. 2002. http://www.osnews.com/story.php?news_id=2016

http://www.distrowatch.com



http://www.apache.org



http://www.pure-ftpd.org



http://www.squid-cache.org



Adding PHP to Apache on Linux, Ken Coar. 1999. http://www.linuxplanet.com/linuxplanet/tutorials/1374/1/

http://www.php.net



CGI Programming on the World Wide Web, Shishir Gundavaram. 1996. O'Reilly. 1ª edició; disponible online a http://www.oreilly.com/openbook/cgi/



DNS HOWTO, Nicolai Langfeldt, Jamie Norrish i altres. V 9.0, 2001 http://www.linux.org/docs/ldp/howto/DNS-HOWTO.html

Using Samba, Robert Eckstein, David Collier-Brown, Peter Kelly. 1999. O'Reilly. Disponible online a http://us2.samba.org/samba/oreilly/using_samba

Un firewall en 10' pero sabiendo lo que se hace, Guillermo Pereyra Irujo. Gener 2003.





1Segons les estadístiques de la web http://www.distrowatch.com/top.php a l'agost de 2002