CONFIGURACIÓN

DE UN SERVIDOR

GNU/LINUX





























Nombre: Daniel Clemente Laboreo

Tutor: Joan Canudas

Curso: 2º BACH. C

Centro: IES Bruguers (Gavà)

Fecha: Enero 2003

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





Índice

1 INTRODUCCIÓN 1

1.1 Contexto 1

1.2 Justificación 2

1.3 Objetivos 3

2 CONFIGURACIÓN DEL SERVIDOR 4

2.1 Preparación 4

2.1.1 Estado inicial de los ordenadores 4

2.1.2 Métode a seguir 5

2.1.3 Elección del ordenador 6

2.2 Instalación de Linux 7

2.2.1 Elección de la distribución 7

2.2.2 Proceso de instalación 12

2.2.3 Configuraciones básicas 15

2.3 Servicios básicos 18

2.3.1 Integración con la red de Windows 18

2.3.2 Servidor web para la Intranet 25

2.3.3 Servidor de FTP 28

2.3.4 Configuración del proxy 32

2.4 Servicios secundarios 39

2.4.1 Soporte de PHP en la web 39

2.4.2 Soporte de CGIs en la web 42

2.4.3 Estadísticas de acceso a la web 44

2.4.4 Conexiones por Secure Shell 46

2.4.5 Web para Internet 48

2.4.6 Servidor DNS 52

2.4.7 Firewall 56

3 CONCLUSIONES 64

3.1 Evaluación general 64

3.2 Otras utilidades 66

4 ANEXOS 67

4.1 Comandos importantes 67

4.2 Seguridad 70

4.3 Mantenimiento 72

4.4 Glosario de términos 73

4.5 Licencia FDL de la GNU 77

5 BIBLIOGRAFÍA 78



  1. INTRODUCCIÓN

    1. Contexto



Soy un alumno del instituto IES Bruguers, de Gavà (Barcelona), usuario habitual de Linux, programador y webmaster. Mi Trabajo de Investigación consistirá en el reciclaje de un ordenador viejo de una de las aulas de informática para convertirlo en un ordenador central del instituto que ofrezca diferentes servicios a alumnos y profesores; y sólo utilizando Linux y otro software libre de código abierto.

El ordenador pondrá al alcance de los alumnos y visitantes una página web con contenidos dinámicos, diferentes formas de compartir archivos entre los departamentos, servicio de proxy para acelerar la navegación, y otras características avanzadas como los dominios DNS, las conexiones SSH al ordenador, el filtrado de paquetes, el PHP y los CGIs.

Todo esto se hará sin tener que comprar programas profesionales, ya que todo el software usado es gratuito y legal. Además, hará el instituto mucho más profesional al utilizar un sistema operativo del nivel de Linux.



El trabajo está orientado a lectores que ya tengan una cierta experiencia en cualquier distribución de Linux utilizando la consola de comandos, o, al menos, que tengan interés por aprender (esto es lo más importante). No se explicarán las órdenes básicas ya que hay muchos tutoriales más apropiados en Internet.

También supondremos que el lector entiende algo de inglés (el inglés relacionado con la informática), porque así los conceptos quedarán más claros.





    1. Justificación



He escogido este tema por muchos motivos::

En primer lugar, me gusta mucho Linux -el único sistema operativo que uso- y pienso que todos deberían saber que existe y que hay alternativas a Windows; claro está que cada uno usa el sistema operativo que quiere, pero mucha gente no quiere saber nada sólo porque piensan que “eso es sólo para expertos”. Este trabajo no servirá para demostrar que sea muy fácil de usar, porque precisamente usaremos una de las distribuciones más complicadas: Debian. Mandrake o Knoppix son más adecuadas para los principiantes, pero no para la finalidad de este trabajo.

También he hecho el servidor porque he visto que hacía falta un ordenador central en una red cada vez más grande; hacía falta un lugar común que sirviese para compartir archivos entre los diferentes departamentos, y para simplificar las tareas de mantenimiento (instalación de un nuevo programa en cada máquina, actualización del antivirus, etc). Además, algunas instalaciones lo requerían (por ejemplo, para alcanzar la velocidad máxima de la línea ADSL había que montar un proxy).

Además, creo que poner un sistema operativo como Linux, para el que existen miles de aplicaciones profesionales desde hace tiempo, elevará el nivel de las instalaciones informáticas del centro, ya que abrirá las puertas a muchísimas posibilidades para los alumnos y profesores: se podrán hacer prácticas de programación en cualquier lenguaje, comprobar los conocimientos sobre redes y telecomunicaciones, instalar filtros e instrumentos de protección como en los ordenadores de las grandes empresas, monitorizar el estado de toda la red, y cualquier otra cosa que podamos imaginar. El ordenador será del mismo nivel que los que se pueden encontrar en las universidades de informática.

El trabajo también servirá para contribuir a la documentación de Linux en catalán (su idioma original), pero esta vez con un caso práctico hecho por apartados, y con las opiniones, problemas, ideas y errores que han aparecido durante su realización.

Finalmente, este trabajo también lo he hecho con intención de ayudar a los futuros informáticos que están aprendiendo y que quieren conocer cosas nuevas. Lo hago porque a mí me hubiera gustado enterarme antes de la existencia de Linux.







    1. Objetivos



¿Qué se quiere conseguir con el trabajo? No sólo es montar un ordenador que lo haga todo, sinó que...:





  1. CONFIGURACIÓN DEL SERVIDOR

    1. Preparación

      1. Estado inicial de los ordenadores



La red del instituto Bruguers consta de dos aulas, una en cada piso, más los ordenadores de los diferentes departamentos que hay en ambos pisos. El servidor se montará en una de las dos aulas de informática.

Los ordenadores no son todos iguales; hay diferentes marcas y modelos: algunos tienen mejor hardware que otros o no tienen determinados periféricos (por ejemplo, no todos tienen tarjeta de sonido). Todos utilizan el sistema operativo Windows 98, pero incluso el idioma es el catalán en algunos y el castellano en otros.

Hay un ordenador que no usa Windows 98 sinó Windows NT 4 y que gestiona la red y los diferentes grupos de trabajo en los que se clasifican los ordenadores. Cuando integremos nuestro servidor en esta red, lo tendremos en cuenta y lo pondremos junto a este servidor NT.



Una nota curiosa es que en la red no sólo hay ordenadores sinó que también hay otros periféricos conectados, por ejemplo un JetDirect y una fotocopiadora (con IP y página de configuración).



Todo esto es sólo para ver que, aunque los ordenadores y dispositivos son muy diferentes entre ellos, todos tienen algo en común: forman parte de la misma red. Por tanto, se comportarán de manera idéntica al acceder al servidor.

Esta red es de clase C (255 ordenadores como máximo), y su dirección IP es 192.168.0.0./24 (o sea, que la máscara de subred es 255.255.255.0).



Toda la red está conectada a Internet mediante 2 líneas ADSL de 2 Mbits/s cada una, pero una de ellas está desactivada. La que funciona está controlada por un router Cisco al que no podemos modificar la configuración porque pertenece a la xtec (Xarxa Telemàtica Educativa de Catalunya). Por lo tanto, para hacer un servidor web donde se pueda entrar desde Internet habrá que pedir permiso a esta entidad.







      1. Método a seguir



El trabajo práctico está dividido en tres bloques: instalación, servicios básicos y servicios secundarios.



También pensaremos en el mantenimiento del ordenador una vez acabada toda la instalación, y en cómo actuar cuando empiece a quedarse anticuado o surjan problemas.





      1. Elección del ordenador



No hace falta un ordenador muy potente para que haga de servidor de una red pequeña.

Aunque podamos ver anuncios de servidores con varios GigaBytes de memoria RAM, dos o más procesadores que funcionan a la vez, y mucho más disco duro que un ordenador estándar, también es cierto que muchos particulares y pequeñas empresas compran especialmente un ordenador de segunda mano para hacer un servidor.

¿Cómo se puede explicar esta diferencia tan importante? No es muy difícil: todo depende del uso que le queramos dar al servidor. Las grandes empresas reciben cada día miles de visitas a su página web, y tienen que controlar el uso que hacen su red los cientos de ordenadores que acceder constantemente a los servicios de impresión, proxy, firewall, correo electrónico, etc.

En cambio, nuestro servidor no siempre estará usándose, y cuando tenga que responder a alguna conexión, servir páginas web o ejecutar procesos de los usuarios conectados difícilmente llegará al 100% de uso. Además, Linux -a diferencia de otros sistemas operativos muy usados- aprovecha perfectamente los recursos del ordenadores, pudiendo ejecutarse hasta en 386 con 4 Mb de RAM y menos de 100 Mb de disco duro.




El ordenador asignado

En nuestro centro disponemos de un ordenador de las siguientes características:



Este ordenador tiene todo lo que necesitamos y más para funcionar como servidor de un instituto. No usaremos el CD-ROM ni el ratón (aunque se puede), porque con pantalla, teclado y la red ya lo podemos hacer todo.





    1. Instalación de Linux

      1. Elección de la distribución



Como Linux es software libre que puede ser modificado y adaptado por todos, se han creado muchas versiones distintas del sistema operativo, tantos que ni se pueden contar. Hay distribuciones especializadas en aspectos muy concretos, y también las hay dirigidas al público general.

En principio, para el uso que le daremos, tendrá que cumplir las siguientes condiciones:

Como no tenemos ninguna necesidad extremadamente especial, compararemos sólo las 10 distribuciones más utilizadas. Las versiones analizadas quedan anticuadas en pocos meses, pero la filosofía de los programadores y el tipo de distribución de cada una seguirá siendo el mismo.

































Las 10 distribuciones Linux más usadas1



Distribución























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

Precio (US$)

25

60

-

-

40

40

20

-

124

99

Origen

Francia

USA

-

USA

Alemania

USA

USA

USA

Japón

USA

Soporte

Soporte web 30 días para la instalación

Soporte web 30 días para la instalación

Listas de correo

Listas de correo, foros

Soporte web 60 días para la instalación

En la instalación, y soporte técnico limitado

Soporte por e-mail 60 días

Listas de correo

Para TurboTools; ilimitado para la instalación

Soporte web 60 días para la instalación

CDs

3

7

7

1

3

4

3

1

7

6

Versión 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

Instalación

Gráfica

Gráfica

Texto

Texto

Gráfica

Texto

Gráfica

Texto

Gráfica

Gráfica

Gestor por defecto

KDE

Gnome

-

-

KDE

KDE

KDE

KDE

KDE

KDE

Tipo de paquetes

rpm

rpm

deb

src

rpm

tar.gz

rpm

tar.gz

rpm

rpm



Es curioso, pero, de estas diez, sólo las cinco primeras son las realmente conocidas -especialmente Red Hat, Suse y Mandrake- por su facilidad de instalación y uso. Es bueno que usemos una distribución conocida porque así nos costará poco encontrar manuales, ayuda o soporte técnico.

No obstante, vamos a compararlas punto por punto:



Después de haber hecho esta comparación, creo que la distribución más apropiada para el instituto es Debian, porque, además de representar al software libre, es simple y muy estable. Es una de las distribuciones más aptas para hacer de servidor. Aparte de ésta, también se usa mucho FreeBSD, que es un sistema basado en UNIX (como Linux).

No utilizamos Mandrake, Red Hat ni Suse por ser demasiado orientadas a usuarios domésticos y principiantes. Gentoo es demasiado complicada y difícil de configurar, y Slackware, Lycoris, Beehive, Turbolinux y Caldera son poco conocidas (si tuviésemos un problema sería difícil encontrar medios para solucionarlo).

Debian desarrolla a la vez tres ramas de su sistema operativo: la versión estable, la inestable y la 'en pruebas'. Las diferencias entre versiones son:



Cada versión lleva un nombre clave (Potato, Buzz, Rex, Bo, Slink, etc), que, por cierto, son los nombres de los personajes de la película Toy Story. En el momento de escribir esto (septiembre de 2002), la versión estable es la Woody (es la versión 3.0), la 'en pruebas' se llama Sarge (será la versión 3.1) y la inestable se llama Sid.

La que usaremos para el servidor será la versión estable; no podemos arriesgarnos probando una inestable o una 'testing' porque pueden tener bugs y otros problemas con la seguridad. Igualmente, no hemos de olvidar actualizar bastante a menudo el sistema.

Por tanto, nos decidimos por una Debian estable.





      1. Proceso de instalación



Podemos instalar Debian de diversas maneras, de las cuales las más comunes son los CDs con las imágenes y la instalación por Internet. También lo podemos comprar en alguna tienda por un precio muy reducido. Toda la información la encontraremos en http://www.debian.org, (en el pie de página podemos cambiar el idioma a castellano o catalán).

Como no nos hace falta más que los programas básicos, es más que rentable hacer la instalación por Internet, ya que si nos tuviésemos que bajar un CD entero (650 Mb) no lo aprovecharíamos. Además, no nos hará falta usar una grabadora de CDs, sinó sólo unos cuantos disquets vacíos.



El proceso es sencillo:



          1. Bajamos las imágenes de los disquets del mismo FTP de Debian. Las imágenes de tamaño disquet para la versión estable y un procesador x86 las encontraremos en:

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

En este directorio hay muchos ficheros .bin de 1'4 Mb cada uno. Para empezar necesitamos bajar los siguiente; driver-1.bin, driver-2.bin, driver-3.bin, driver-4.bin, rescue.bin y root.bin.

NOTA: Si podemos usar otro ordenador a la vez, no hace falta usar un disco distinto para cada fichero BIN: podemos hacerlo sólo con dos si los vamos turnando de manera que mientras uno se está leyendo el otro se esté grabando, y viceversa.



          1. Grabamos las imágenes en disquetes de 1'4 Mb. Esto lo podemos hacer desde Linux con el comando dd if=nombre-de-la-imagen.bin of=/dev/fd0 o desde Windows con programas como rawrite2 u otros que transfieran el archivo byte por byte hacia el disquete.



          1. Insertamos el disquete correspondiente a rescue.bin y encendemos el ordenador. Cuando aparezca boot: pulsamos Intro. Al cabo de un tiempo nos pedirá el disquete correspondiente a root.bin y continuará la instalación.

          2. Vamos siguiendo la instalación de forma normal, fijándonos especialmente en los siguientes puntos:

          1. Después de reiniciar, continuaremos con la personalización del sistema. Seleccionaremos las opciones recomendadas, asegurándonos de activar la opción de contraseñas shadow.



          1. A la hora de crear usuarios, tendremos que escribir la contraseña de root., el usuario más importante del sistema. Es extremadamente importante escoger una buena contraseña. Además, por seguridad no trabajaremos siempre con el usuario root (es peligroso) sinó que nos crearemos otra cuenta de usuario normal (con nuestro nombre o nick).



          1. Cuando nos pregunte desde dónde instalar los paquetes, le decimos que por ftp y escogemos uno de la lista (por ejemplo, ftp.debian.org). Entonces, Debian utilizará apt para bajar las últimas versiones de cada programa. Tendremos que decidir qué grupos de programas decidimos instalar. Seguiremos estas indicaciones:

Marcando pocos paquetes nos aseguramos de que no quede instalado nada que no nos haga falta. Si no lo hacemos así, al acabar la instalación serían tantos los servicios disponibles que alguna persona se podría aprovechar y entrar al servidor sin permiso.

          1. Cuando todo esté listo, aparecerá la lista de paquetes a bajar y lo que ocupan. Le decimos que continúe y dejamos el ordenador encendido mientras baja cada paquete junto con sus dependencias. Cuando acabe, tendremos que configurar algunos mientras que otros se descomprimirán e instalarán automáticamente. Si pregunta cómo configurar el correo, le diremos que no lo queremos configurar; así evitaremos muchos bugs innecesarios.



          1. Al final acabaremos en la pantalla de login, que aparecerá cada vez que encendamos el ordenador para pedirnos el nombre de usuario y la contraseña.





      1. Configuraciones básicas



Ahora que tenemos el sistema operativo instalado hay que hacer unas configuraciones sencillas, que deben hacerse antes de empezar a poner programas y demonios. Lo primero que hace falta es identificarse como root (con la contraseña que pusimos en la instalación).

Lo que haremos será:











    1. Servicios básicos

      1. Integración con la red de Windows



Como en el instituto los ordenadores están conectados mediante una red y un servidor Windows NT, sería interesante incluir también nuestro servidor Linux para poder compartir carpetas o acceder a las de otros ordenadores. También pondremos al alcance del servidor las impresoras compartidas en la red, aunque habrá que configurarlas en Linux.

Todo esto lo haremos fácilmente y de forma segura con las herramientas que nos ofrece Samba. Samba es una implementación para Linux del protocolo SMB (Server Message Block), creado por IBM en 1985, redefinido después por Microsoft, y presente en otros sistemas operativos. Con Samba podremos acceder (por TCP/IP) a servidores SMB como cliente, o montar un servidor SMB propio.



Como siempre, hacemos un apt-get install samba y decimos que sí queremos que nos haga unas preguntas para adaptar el fichero de configuración smb.conf, aunque después los revisaremos.

Nos preguntará las siguientes opciones:

Después de esto ya tenemos los dos procesos de Samba funcionando: smbd y nmbd (hacen referencia a los demonios de SMB y Netbios respectivamente). Si queremos que Debian nos vuelva a preguntar todo lo anterior podemos hacer un dpkg-reconfigure samba



Con Samba podemos hacer básicamente cuatro operaciones:



Hay que tener muy claro qué queremos que haga el servidor, y actuar en consecuencia. Si ponemos configuraciones por defecto o cambiamos cosas sin saber qué son, no funcionará exactamente como queremos, y arreglarlo puede costar mucho.

En nuestro caso, las decisiones que hemos tomado son:



Ya avisamos que es muy probable que salga un problema (muy común) si usamos tanto máquinas Windows NT/2000 como Windows 9x a la vez, debido a su forma de enviar las contraseñas y a los requisitos de cada implementación. Para entender estas complicaciones hay que ver unas cuantas diferencias entre el SMB de Win98, WinNT y Samba:

Bien, pues podemos empezar: lo primero de todo será crear un usuario en el servidor que sea el único que pueda tener acceso a los recursos compartidos. Es el usuario que usarán todos los ordenadores que accedan, y, tal como hemos dicho antes, es necesario que este usuario esté creado en todos los Windows y tenga la misma contraseña. Podemos hacer una excepción con los Windows NT ya que, como hemos explicado antes, permiten escribir un nombre de usuario y contraseña al acceder, independientemente del nombre del usuario conectado. Nota: no hace falta que vayamos ordenador por ordenador creando este usuario, ya que se creará automáticamente cuando alguien ponga su nombre y contraseña en la pantalla de inicio de sesión

En nuestro caso a este usuario lo llamaremos bruguers y le daremos una contraseña pública y fácil de memorizar (¡pero no de adivinar!). La contraseña es opcional, pero el no poner representa un agujero de seguridad muy importante (sobre todo cuando hablamos de sistemas Microsoft).

Añadimos el usuario al servidor con adduser bruguers (no es necesario escribir ningún dato más), y lo añadimos a la lista de usuarios de Samba -que se encuentra en /etc/samba/smbpasswd- con el comando smbpasswd -a bruguers, y poniendo la misma contraseña.



Ahora hemos de editar el fichero de configuración /etc/samba/smb.conf. Al principio encontraremos las opciones que pusimos al instalar Samba; mejor comprobamos que haya un workgroup = NOMBRE_DEL_GRUPO_DE_TRABAJO. Además, la siguiente opción, server string, nos permite poner la descripción del ordenador que se verá al navegar por la red. Por defecto pone server string = %h server (Samba %v), donde %h es el nombre de host del equipo y %v la versión de Samba.

Habrá una línea comentada con el carácter ; que pone:

; guest account = nobody

Es bueno saber que si la cambiamos a guest account = bruguers haremos que dejar el nombre de usuario y contraseña en blanco equivalga a entrar con el usuario bruguers (sin contraseña). Como hemos decidido que había que poner contraseña, dejaremos la línea comentada, pero si vemos que es más fácil sin, sólo hay que modificar eso.



En esta sección también hay que añadir la siguiente línea para evitar uno de los métodos de intrusión más usados desde hace muchos años: el de los recursos compartidos.

hosts allow = 192.168.0. localhost

Y también haremos que sólo permita el acceso al usuario bruguers. Si se crean más habrá que ponerlos aquí también.

valid users = bruguers



Ahora localizamos la sección titulada Share Definitions y, en concreto, este fragmento:

[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



Según nuestros intereses, lo cambiaremos a (omitimos los comentarios):



[homes]

comment = Home Directories

browseable = yes

writable = yes

create mask = 0777

directory mask = 0777



Todo ese fragmento hace que se compartan las carpetas personales de los usuarios ([homes]). En nuestro caso sólo hay un usuario, que se llama bruguers. Éste tiene permiso para escribir en su directorio (writable=yes) y todo lo que se cree podrá ser leído, modificado o ejecutado por cualquier usuario del sistema (por eso ponemos los permisos a 777, o, lo que es lo mismo, u=rwx g=rwx o=rwx). El browseable=yes hace que el recurso se pueda ver al navegar por los recursos compartidos del servidor.



El siguiente párrafo, que empieza por [printers], lo comentaremos entero con un carácter # en cada línea, porque no tenemos impresoras para compartir conectadas al servidor.



Reiniciamos el servicio con /etc/init.d/samba restart y probamos a acceder desde un ordenador Windows explorando la red (en 'Entorno de red' o 'Mis sitios de red'). Veremos un ordenador llamado 'Bruguers', y dentro, la carpeta compartida, donde podemos entrar y dejar archivos. También veremos el icono para gestionar las impresoras.





Probablemente no funcione a la primera debido a las diferencias entre cada Windows. Los problemas que hay entre Samba (Linux) y Windows son los mismos que los que Windows 98 y Windows NT se ocasionan mutuamente. Básicamente, se resumen en: “se puede acceder desde 98 a NT pero desde 98 a NT no”. A continuación presentamos los más típicos, junto con algunas posibles soluciones:



Probablemente esté desactivada la opción de utilizar contraseñas encriptadas. Hay que añadir encrypt passwords = yes al fichero de configuración. No deberíamos tener ningún problema más con Windows NT/2000, ya que es el sistema operativo que mejor ha desarrollado el protocolo SMB.

La causa es que al entrar en Windows, cuando pedía nombre de usuario y contraseña, hemos escogido 'Cancelar', y por tanto no hemos iniciado sesión dentro de la red Microsoft. Hay que entrar como un usuario con nombre (y contraseña opcional). Sólo entrando ya se habrá creado el usuario, pero los podemos gestionar desde 'Mi PC' -> 'Panel de control' -> 'Usuarios'.


El famoso cuadro IPC$

No hay que poner ninguna contraseña especial; ésta es la forma que tiene Windows de decir que estamos intentando entrar como un usuario no permitido en el servidor. La solución es crear en la máquina Windows un usuario con el mismo nombre y contraseña que el que se permite en el servidor, o hacerlo a la inversa: añadir al servidor el usuario que se conectará desde Windows.

Otra solución es activar el usuario invitado, llamado 'guest' o 'Invitado' y con contraseña en blanco; pero hemos de evitar hacer esto a toda costa ya que pondría en peligro las unidades y carpetas compartidas.

Sin duda es más fácil crear el usuario en Windows 98: sólo hay que escribir bruguers en vez de cualquier otra cosa en el cuadro de inicio de sesión y poner la contraseña correcta para crear este usuario.





Por tanto, lo dejamos de forma que sólo los usuarios autentificados puedan acceder a los recursos compartidos del servidor; si alguien no pone nombre de usuario al iniciar sesión o se inventa otro es que no tiene permiso para entrar.





Otras utilidades que nos irán bien son testparm para comprobar la configuración y smbstatus para ver quién está conectado.





Nos queda explicar cómo acceder a la red de Windows desde Linux. No es difícil, pero hay muchas opciones de todo tipo. Por ejemplo, hay programas gráficos como komba y xfsamba, y también se puede hacer desde consola. Algunos comandos son:



Pero, como hemos dicho, programas como komba o algunos navegadores de archivos con soporte SMB hacen esta tarea mucho más fácil. Eso sí, requieren usar el modo gráfico, pero no es necesario que se ejecuten en el servidor con Debian; como estamos trabajando en red, ésta se podrá explorar desde cualquier ordenador.



      1. Servidor web para la Intranet



El servidor web es un demonio que escucha en el puerto de HTTP (el 80 TCP) y responde las peticiones de documentos HTML (u otros formatos). En el mercado hay muchos, y en concreto que funcionen bajo Linux también (Jigsaw, GoAhead, Roxen, Stronghold, Zeus, Abyss, Apache, ...). Incluso podemos programar uno sencillo con Netcat, haciendo que escuche en el puerto 80 y devuelva cada página pedida. Pero en Internet los servidores más usados son claramente dos: Apache y Microsoft IIS (Internet Information Server). Obviamente, IIS es sólo para Windows, así que para nuestro ordenador usaremos Apache para Linux.

¿Es una buena elección? Podemos consultar las estadísticas sobre los servidores más utilizados mundialmente en una importante página dedicada sólo a este tema: de http://www.netcraft.com/survey obtenemos este gráfico:




Marco1



Hay que añadir que “Microsoft” incluye todos los servidores web de esta marca (no sólo IIS), y que iPlanet es el conjunto de todos los servidores Netscape e iPlanet. Esto deja bastante claro que Apache es el mejor servidor y que no nos hemos equivocado en la decisión.



De momento la web la haremos accesible sólo a la red interna; desde Internet no se podrá acceder porque el router no tiene abierto el puerto 80. Más adelante estudiaremos como poner dos páginas distintas, una para la red interna y otra para Internet.



Integrar Apache en Debian es tan sencillo como hacer un apt-get install apache (se supone que la base de datos de apt-get ya está actualizada mediante apt-get update) y automáticamente se bajarán todos los paquetes necesarios. Podemos hacer una pequeña comprobación escribiendo la IP del servidor en el navegador de cualquier ordenador de la red. Si lo hemos hecho bien, aparecerá una página de prueba de Apache.

No es buena costumbre dejar la configuración por defecto, ya que podría no hacer todo lo que queremos o, peor aún, hacer más cosas de las que suponemos. Por lo tanto, vamos a revisar el archivo de configuración del demonio HTTP en /etc/apache/httpd.conf:

En el archivo ya podemos ver algunos parámetros preconfigurados. Por ejemplo:

Lo único que hace falta cambiar es:

No hay que hacer más cambios, pero antes de reiniciar el servidor borraremos el contenido del directorio donde está la web (/var/www) y pondremos una sencilla creada por nosotros, con enlaces e imágenes. A la página principal la llamaremos index.htm para ver si también funciona (la original era index.html). Por ejemplo, podemos hacer un index.htm muy sencillo así:



<BR><BR>

<CENTER>Has entrado en el <B>nuevo servidor web</B> del instituto.<BR><BR>

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

</CENTER>



Esta página ya nos sirve para probar si acepta nombres largos de fichero, si acepta extensiones que no sean HTM/HTML, si se ven las imágenes, si el texto llega como HTML (y no como texto plano) y si un .HTM funciona bien como página principal. Sería interesante darse cuenta de que también es 'Case sensitive', o sea, que index.HTM es diferente de index.htm. Lógicamente, la razón es que el sistema de archivos de Linux ya es así.

Después de colocar en /var/www el fichero index.htm y alguna imagen, reiniciaremos el servidor haciendo un apachectl restart y volveremos a comprobar en el navegador si sale la página correcta. correcta.



Y por último, crearemos un usuario llamado web, porque después pondremos un servidor FTP, y nos irá muy bien poder administrar los ficheros de la página web desde el FTP. Hay que hacer un adduser web como root, poner una buena contraseña, y después modificar el /etc/passwd para cambiar el directorio de inicio a /var/www , que es donde se encuentran todos los archivos de la web. Podemos borrar el directorio HOME creado por defecto, /home/www. También tenemos que hacer suyos todos los archivos de la web, ya que si el directorio pertenece a root ningún usuario lo podrá modificar. Lo hacemos con chown web.web /var/www -R (el R hace que cambie los permisos de forma recursiva: al directorio y a todo lo que haya dentro).



Este Apache en principio sirve webs a cualquier PC (local o remoto), por tanto habrá que cerrar el puerto 80 del router si queremos que sea accesible sólo a la Intranet o abrirlo si lo queremos hacer público.



      1. Servidor de FTP



El FTP sirve para transferir archivos de forma rápida y sencilla entre ordenadores. Permite compartir -con nombre y contraseña- todos los archivos o sólo algunas carpetas a cada usuario, pudiendo establecer los permisos que tienen sobre cada elemento. Por ejemplo, podemos hacer que sólo puedan bajar cosas, o sólo subir y no cambiar nada.

Servidores de FTP para Linux también tenemos muchísimos. Algunos muy conocidos son proftpd y wu-ftpd, pero como se han encontrado muchos bugs que afectan a características extra normalmente no utilizadas, mucha gente prefiere servidores más sencillos que cumplan únicamente su propósito de compartir archivos.

Por lo tanto, buscaremos un servidor con pocas funciones adicionales, sencillo, y que ocupe poco (cuando más pequeño sea, menos fallos puede tener en el código). El que más se adapta a estas condiciones es PureFTPd.

Probamos a hacer apt-get install pureftpd (y con pure-ftpd), pero ninguno funciona. La razón es que PureFTPd no viene incluido en esta versión de Debian. Lo podemos comprobar con apt-cache search pure: veremos que no hay ningún paquete en el que salga “pure”. La forma de instalar el programa es, entonces, ir a la página web (http://www.pureftpd.org) y a la sección de Downloads y bajar en formato .tar.gz la última versión. Lo que hemos bajado son las fuentes (en inglés, “sources”) del programa, en lenguaje C, por tanto, las tendremos que compilar para crear el ejecutable que funcione en nuestra máquina. Nos hará falta como mínimo el gcc (GNU C Compiler) y un poco de tiempo (depende del ordenador, pero es casi seguro que menos de una hora).



Como root, descomprimiremos el archivo en algún sitio (por ejemplo /usr/src) con:

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

Entonces podemos entrar en el directorio creado y leer los ficheros README e INSTALL, que normalmente están en todos los programas que hay que compilar. Si vemos que no hay que hacer nada especial -como es el caso- seguiremos el procedimiento habitual para compilar:



          1. Ejecutar ./configure para generar un script de compilación adecuado para nuestra máquina en concreto. Si falta algún programa o librería, parará y lo mostrará de forma clara. Podemos desactivar o activar muchas opciones (ver ./configure --help). En nuestro caso, hemos comprobado que al compilar sin ninguna opción especial, el binario resultante no aceptaba la opción -n, que sirve para limitar el espacio de cada usuario. Por lo tanto, es buena idea activar directamente la opción adecuada con ./configure --with-quotas.

          2. Ejecutar make, la verdadera compilación. Este proceso -completamente automatizado- puede tardar segundos, minutos o horas dependiendo del programa y del ordenador. No tiene que fallar; si lo hace será más complicado solucionar el problema ya que probablemente se encuentre dentro del código fuente de algún fichero del proyecto (o sea, que no es culpa nuestra). Eso sí, es probable que aparezcan mensajes de “warning” (advertencias), que podemos ignorar a menos que puedan provocar algún problema grave.

          3. Este paso es opcional. make check hará unas comprobaciones para ver si se ha compilado bien. Si alguna prueba falla no hay que continuar.

          4. make install copiará los ejecutables (el resultado de la compilación) a los directorios donde se encuentran todos los demás programas de Linux. Hacen falta privilegios de root.

Hecho esto ya hemos conseguido crear el fichero ejecutable e integrarlo en el sistema; por tanto podemos borrar el directorio que hemos creado en /usr/src (a menos que queramos hacer algún cambio al código y volverlo a compilar).

Ahora, cada vez que encendamos el ordenador tendremos que ejecutar pure-ftpd (se puede dejar en segundo plano) y el servicio estará activo, con los usuarios actuales del sistema. Para evitar repetir esta acción cada vez, podemos crear un script que arranque el servicio con las opciones más apropiadas (que habremos consultado en la ayuda con pure-ftpd --help):



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

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



Descripción de las opciones:



Grabaremos este script en /etc/init.d/pure-ftpd, le daremos permisos de ejecución a todos con chmod a+x /etc/init.d/pure-ftpd, y crearemos enlaces dentro de los niveles de ejecución en los que nos interese que corra este proceso. Recordamos los niveles de ejecución (“runlevels”):



0 --> Halt (parar el sistema y apagarlo)

1 --> Modo monousuario

2 --> Modo multiusuario sin soporte de red

3 --> Modo multiusuario completo

4 --> (Sin usar)

5 --> Modo multiusuario completo con login gráfico

6 --> Reboot (reiniciar el sistema)



Por lo tanto, los niveles en los que nos interesa que actúe nuestro script son el 1, 2, 3 y 5. Crearemos los enlaces simbólicos con:



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 prefijo S80 tiene su explicación: S significa que es un script 'Startup', que sirve para iniciar algo. En caso contrario llevaría una K ('Kill'). El número indica el orden en el que se ejecutarán los scripts de un mismo directorio rc. Hay que asegurarse de que se inicie en un buen momento, cuando la red ya está preparada y las operaciones importantes ya han acabado; por tanto, 80 ya es un buen número.



Sería correcto añadir en los runlevel 0 y 6 un script que matase al servidor, pero no hace falta porque el propio proceso de apagado ya se encarga de matar todos los procesos.



Ya sólo queda reiniciar (o hacer un init 3) y probar a hacer un FTP desde fuera. Hay que recordar que en el router los puertos 20 y 21 de TCP tienen que estar abiertos (el 20 es para la transmisión de datos).

También es el momento de probar a entrar como usuario web desde cualquier cliente de FTP (o con un navegador, con ftp://web@IP_DEL_SERVIDOR ), poner la contraseña y comprobar que podemos subir y bajar archivos al servidor web.



NOTA: hay que evitar usar cuentas de usuario importantes en el FTP, porque los datos viajan sin encriptar, y un usuario que tuviese privilegios de root podría interceptar los paquetes y ver las contraseñas. Para evitarlo podemos crear cuentas adicionales sólo para el FTP, o usar el programa sftp que viene incluido en el SSH.





      1. Configuración del proxy



En cualquier red los usuarios acceden a páginas web prohibidas, ya sea porque no están relacionadas con el trabajo que hay que hacer con el ordenador, o porque son pornográficas o de contenidos ilegales.

Una forma de denegar el acceso a ciertas páginas es configurar cada navegador web de forma que pida contraseña cuando se entra en unas direcciones web o IPs preestablecidas. También podemos utilizar software de filtrado de contenidos que analice las palabras o incluso las imágenes.



El problema que presentan estos métodos (aparte del elevado precio) es que requieren manipular cada uno de los ordenadores de la red individualmente, cuando lo ideal sería tener que crear la 'lista negra' sólo en un ordenador. Es aquí donde intervienen los proxy: un proxy es un ordenador que recoge todas las peticiones de la red, busca las páginas correspondientes en Internet y devuelve cada página al ordenador que la ha pedido. De esta manera, es sólo este ordenador el que se conecta a Internet, y por lo tanto es fácil prohibir o admitir IPs.



Puede parecer que el proxy hace más lenta la navegación ya que un sólo ordenador tiene que hacer el trabajo de muchos, pero de hecho el proxy también está diseñado para agilizarla actuando como caché. 'Caché' hace referencia a una zona de la memoria o del disco, que almacena información durante un tiempo y que va vaciándose a medida que llegan nuevos datos para llenarla.

Por lo tanto, un proxy-caché funciona así:

          1. Recibe una petición HTTP de un ordenador.

          2. Consulta en su caché buscando la página pedida.

          3. Si no tiene la página en la caché, la baja de Internet y queda grabada en la caché. En cambio, si ya la tenía no es necesario que se vuelva a conectar a Internet.

          4. Devuelve la página de la caché al ordenador que la había pedido.



Periódicamente hace comprobaciones para evitar que la caché se llene, borrando los datos más antiguos o los menos pedidos. Además, registra los accesos en los ficheros de log, como casi todos los demás servidores que hemos visto.



En conclusión, un proxy-caché ayuda a reducir mucho el ancho de banda usado en una red (debido principalmente a las consultas web). No es ningún problema la velocidad de transmisión; será la adecuada porque disponemos de tarjetas de red 10/100 Mbits/s para enviar datos de un ordenador a otro (por la Intranet), mientras que la conexión a Internet llega como mucho a los 2 Mbits/s si es una línea ADSL. Además, hay que recordar que casi todos los navegadores actuales tienen su propia caché web local, y por tanto se evitarán peticiones web a Internet, o en este caso al ordenador proxy.



El proxy-caché para Linux más conocido y usado es Squid. Tiene soporte para HTTP, FTP, SSL, SNMP, DNS, control de acceso (ACL), jerarquías de proxies (protocolo ICP), y muchas opciones más. Su web es http://www.squid-cache.org

Una de las características más interesantes de Squid es que puede actuar como proxy transparente: funciona de manera parecida a la explicada anteriormente, pero el cliente (el ordenador que pide páginas web) no se entera de que está pasando por un proxy ya que éste último actúa como si realmente fuera el servidor web de Internet. El inconveniente de este método es que el proxy tiene que actuar como servidor web en el puerto 80, y nosotros ya tenemos un servidor Apache en este puerto; por lo tanto el proxy que pondremos será estándar.



Haremos un apt-get install squid para bajarlo e instalarlo, pero tenemos que modificar la configuración por defecto. Hay que cambiar, por ejemplo, el puerto usado (ahora es el 3128, pero en Europa se usa más el 8080). Antes de modificar el fichero de configuración (/etc/squid.conf), comprobamos que squid no esté funcionando con privilegios de root (eso sería un problema de seguridad):

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:~#

Podemos ver que, aunque lo llame root, el proceso está con el conocido como “setuid proxy”, o sea, que se ejecuta con los privilegios del usuario “proxy”. Es mejor que esté así porque en versiones anteriores se ejecutaba como root, y eso comportaba mucho más peligro delante de cualquier bug que se encontrase, ya que un usuario que usase un exploit conseguiría una shell de root. Con la configuración actual, si un usuario aprovecha un bug (por ejemplo un buffer overflow, los más comunes) podría acceder al sistema como si fuera un usuario normal.



Ahora vamos a por la configuración del proxy Squid, que se encuentra en /etc/squid.conf. Tendremos que cambiar los siguientes parámetros:



http_port 3128

http_port 8080

Este es el puerto usado por el proxy (por defecto 3128). Hemos añadido el 8080, pero tampoco es necesario quitar el 3128; Squid puede recibir peticiones por ambos puertos. Lo dejamos por compatibilidad por otros programas.

Además, si hacemos escaneos de puertos cuando todo funcione, veremos que también usa el 3130 de UDP.



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

Esto hace que nuestro proxy tenga un 'padre' y trabaje en jerarquía con él: todo lo que los usuarios de la red pidan al servidor se buscará en su caché, y si no se encuentra, la petición pasará al proxy padre. Si este padre tampoco lo encuentra en su caché, lo buscará en Internet, por tanto evitamos todo lo posible las peticiones innecesarias.

El instituto usa el proxy proxy.xtec.es por el puerto 8080 (el habitual de los proxy-cachés). Hemos desactivado las opciones ICP (protocolo usado por los proxys) poniendo los parámetros 0 como puerto ICP y no-query. El no-digest lo ponemos porque el fichero de digests es innecesario cuando hay un sólo padre, y el default hace que el servidor use por defecto este padre para encontrar todo lo que no tenga en la caché.

Obviamente, si no disponemos de proxy padre (o sea, si queremos tener Internet como padre) no hay que poner esta línea.



# cache_mem 8 MB

Dejamos la opción por defecto de 8 Mb. para la memoria RAM usada como caché. Se recomienda dejar una cuarta parte de la RAM total del ordenador, pero como nuestro servidor tiene poca (48 Mb) y además se tiene que encargar de muchas más cosas, dejaremos este valor, que de todas maneras es lo bastante grande como para grabar los objetos más pedidos (entendiendo objeto como una imagen, una página, un vídeo, o cualquier otro elemento web). Hay que tener en cuenta que aparte de la RAM usada como caché, el proceso de Squid necesita más RAM para poder ejecutarse (como cualquier otro proceso), por lo tanto no hay que poner valores muy grandes.



cache_dir ufs /var/spool/squid 150 16 256

Es aquí donde decimos a Squid que use el directorio /var/spool/squid como caché. ufs es el sistema de archivos de Squid. En los parámetros le indicamos que puede usar150 Mb. y que organice los objetos creando 16 directorios, cada uno con 256 subdirectorios y con los ficheros dentro.

Hemos asignado 150 Mb. porque el disco duro del ordenador puede llegar a ser más lento que Internet si hay que buscar un archivo entre miles de ellos, teniendo en cuenta también que 150 Mb. son suficientes para guardar casi todas las páginas que se usarán a menudo en el instituto.

Un detalle: tenemos que asegurarnos de que el propietario del directorio usado como caché sea el mismo que ejecuta el proceso squid, sinó no podrá acceder. Es poco probable que no sea así ya que se ha creado durante la instalación.