|
Este texto es sacado del trabajo de fin de batxillerato (treball de recerca) que hice este año. El objetivo era reutilizar uno de los ordenadores que el instituto no utilizaba (porque se qeudaban "pequeños" para el windows) y montar un servidor de red para dar cuentas de correo y espacios para webs personales al alumnado y al profesorado. Todo eso con el sistema operativo Linux, por supuesto. Este texto es una parte del trabajo, donde explico el procedimiento práctico.
El ordenador en cuestión es un Pentium I a 90MHz con 24 MB de memoria RAM y dos discos duros, uno de 460 MB y el otro de 20 GB adosado posteriormente, ya que resultaba necesario utilizar un disco de mayor tamaño para cumplir con las funcionalidades del proyecto. Mencionar que no fue tarea fácil hacer que la BIOS del ordenador reconociera el disco de 20 GB, dado que en aquellos tiempos (1993-1994) no se imaginaba que pudieran existir discos duros de tal capacidad.
Una vez el trabajo terminado, debería estar todo funcionando correctamente, y que tanto profesores como alumnos dispongan de una cuenta de correo electrónico del tipo llmfabrega@nombre-instituto.org , y un espacio web para colgar su página personal del estilo www.nombre-instituto.org/alumnes/pmanils o www.nombre-instituto.org/professorat/mnicolau en el caso que fuera un profesor. Sin embargo, para los perezosos, se pudiera visitar la página de cualquier usuario utilizando la dirección www.nombre-instituto.org/~nombre-profesor-o-alumno, escribiendo el carácter "~" (Alt+126) seguido del nombre de un profesor o alumno, por ejemplo www.nombre-instituto.org/~brios .
Para los usuarios independientes al centro de estudios, decidí separarlos en el grupo "users", por lo tanto, si desean visitar la página web de cualquier usuario ajeno al instituto, la URL sería con este formato:
www.nombre-instituto.org/users/knoopx
o con el "universal":
www.nombre-instituto.org/~knoopx
Se intentará explicar todo esto lo más sencillo y fluido posible, para que esté al alcance de los usuarios, aunque deben tenerse mínimas nociones sobre informática e Internet para su perfecta comprensión. Algunos de los temas que se explicarán no se desarrollarán en su plenitud ni se profundizará mucho, sino lo suficiente. Lo explicaré con mis palabras y de la manera que yo lo he entendido. Puede no ser la mejor forma, pero así creo que resultará más fácil su comprensión . Como se verá más adelante, las configuraciones serán mínimas y básicas para no enturbiar ni hacer complejo este documento, que trata justamente la combinación de la simpleza con la eficacia .
1. Servidor WEB, DNS y FTP
En este apartado se describirán los pasos que se siguieron para poner en marcha el servidor web apache. apache es el software por excelencia utilizado para dar servicio de web en el mundo Linux (y fuera de él, ya que hay versión para otras plataformas, como FreeBSD, Solaris, Windows, IRIX, ....)
Antes de empezar con la instalación y configuración del servidor apache, necesitábamos un dominio para la web. Los dominios son los nombres (google.com, xtec.es, sorgonet.com...) a partir de los cuales se nos redirige a la IP del servidor web deseado. Decidimos registrar dominio.org (ficticio por supuesto). Para ello fuimos a www.godaddy.com (página web donde se pueden registrar dominios). En una fase del proceso de registro se nos pedía introducir dos servidores DNS. Un servidor DNS es el encargado de traducir los nombres de dominio a IPs y viceversa. Necesitábamos pues un servidor que tradujera dominio.org a nuestra IP 80.80.80.80 (también falsa) donde teníamos pensado montar el servidor web. Este fue el primer problema que encontramos. No teníamos ningún servidor DNS que hiciese eso, por lo que había dos alternativas:
1. Pedir a un conocido que tuviera montado un servidor DNS y que nos lo configurara para que dominio.org se redirigiera a 80.80.80.80 (nuestra IP).
1. Pedir a un conocido que tuviera montado un servidor DNS y que nos lo configurara para que dominio.org se redirigiera a 80.80.80.80 (nuestra IP).
o
2. Montar nuestro propio servidor DNS.
La primera opción es la más sencilla, solo falta tener un amigo que tenga un servidor DNS y pedirle que configurara su servidor DNS para que resolviera el dominio dominio.org a nuestra IP. Pero tiene una gran desventaja, no seríamos nosotros quienes controlaríamos el servidor DNS, por lo que no tendríamos control sobre dicho servidor y por lo tanto, creciendo nuestra desconfianza, ¿quién nos asegura que un día, a nuestro amigo, no se le pase por la cabeza configurar su servidor DNS para que redireccione dominio.org a cualquier otra IP, por ejemplo la de una web de contenidos pornográficos? Sería verdaderamente divertido...
Por esta razón, por tener nosotros el control del servidor DNS, decidí montar nuestro propio servidor DNS. Y aquí muestro los pasos que seguí para hacerlo.
1.1. Servidor DNS
Bind es el servidor DNS mas popular en entornos Linux. Necesitábamos tenerlo instalado, y así lo hicimos:
dns# apt-get install bind
apt-get es un gran programa que, al indicarle que instale otro programa (install bind) él solo se baja de internet dicho programa y todo lo que haga falta para que funcione, lo instala y lo deja apunto para que solo tengamos que configurar lo que necesitamos.
Ahora que tenemos bind instalado (en mi caso la versión 8.3.3-REL-NOESW), falta configurarlo adecuadamente.
Normalmente, para configurar un programa en linux, basta editando los archivos apropiados del programa. Los archivos de configuración del bind se encuentran en /etc/bind/. El primer fichero que editaremos será el named.conf, que es el fichero principal de bind. Una recomendación es hacer una copia de seguridad del archivo original antes de editarlo. Utilizaremos el editor llamado vi o vim puesto que es uno de los editores más comunes en entornos Unix/Linux:
Teclearemos lo siguiente:
# cp /etc/bind/named.conf /etc/bind/named.conf.old
# vi /etc/bind/named.conf
Nos fijamos que en la segunda página se repite bastante una parte de código parecida a esto:
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
Bien, nos dirigiremos al final del archivo y añadiremos lo siguiente:
zone "dominio.org" {
type master;
file "/etc/bind/db.dominio.org";
}; |
Esas líneas definen una nueva zona, dominio.org, sobre la que se ejerce el control, y el fichero (file) de configuración de esta zona se encontrará en /etc/bind/db.dominio.org. Guardaremos los cambios y saldremos (:wq).
Ahora falta crear el fichero db.dominio.org, y como que el formato del archivo es parecido al ya existente /etc/bind/db.local, haremos una copia de éste con el nombre db.dominio.org sobre el cual modificaremos a nuestro parecer:
# cp /etc/bind/db.local /etc/bind/db.dominio.org
# vi /etc/bind/db.dominio.org
El archivo db.dominio.org tiene que quedar parecido a este:
-Inicio del archivo (esto no debe incluirse)-
;
; BIND data file for dominio.org
;
$TTL 604800
dominio.org. IN SOA dns.dominio.org. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
|
IN |
NS |
dns.dominio.org. |
|
IN |
A |
80.80.80.80 |
|
IN |
MX |
10 mail.dominio.org. |
| dns |
IN |
A |
80.80.80.80 |
mail |
IN |
A |
80.80.80.80 |
| www |
IN |
CNAME |
dns |
| ftp |
IN |
CNAME |
dns |
-Fin (esto tampoco debe incluirse)-
Para entender esto:
Lo que sigue después de ";" es ignorado como código, se interpretan como comentario. En las siguientes líneas se entiende que dominio.org se encuentra en la máquina dns.dominio.org (host local de la máquina donde está el servidor DNS), y el encargado de este dominio es root.localhost. (no olvidar poner los puntos en dominio.org. dns.dominio.org. y root.localhost.). El Serial, Refresh y todo esto lo dejamos como está, son tiempos de expiración y otros. Luego se le indica que el servidor DNS (NS) se encuentra en dns.dominio.org. (otra vez lo del punto final) y utiliza como servidor de email (MX)con prioridad máxima (10) (se puede poner la prioridad que se quiera, y la máxima, caso de especificar varios registros MX, es aquella con un número menor) la máquina mail.dominio.org., cuya dirección IP en Internet es 80.80.80.80, y por consiguiente, que el alias dns también está en 80.80.80.80. En este caso, que no hemos puesto punto al final de dns, automáticamente bind lo interpreta de manera
que le añade dominio.org al final, quedando de la manera dns.dominio.org. Lo mismo ocurre con www, ftp y mail pero la etiqueta CNAME matiza que se tratan de tres alias de dns, por lo que si sigues la cadena, tenemos que valen la misma IP que dns, que es lo que nos interesa: tener el servidor web, ftp, dns y mail en la misma máquina. De esta manera, www.dominio.org, ftp.dominio.org, mail.dominio.org y dns.dominio.org se refieren a la misma IP de nuestro ordenador.
Después de esta confusa explicación, debemos poner en marcha named (bind):
# /etc/init.d/bind restart
Lo de restart es porque al haber hecho antes apt-get install bind él solo se ejecuta después de instalarse, con la configuración por defecto que lleva.
Ahora podemos comprobar si todo ha ido bien con el comando siguiente:
# dig @localhost dominio.org
Tendría que salir algo parecido a esto:
; <<>> DiG 9.2.1 <<>> @localhost dominio.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63073
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;dominio.org. IN A
;; ANSWER SECTION:
dominio.org. 604800 IN A 80.80.80.80
;; AUTHORITY SECTION:
dominio.org. 604800 IN NS dns.dominio.org.
;; ADDITIONAL SECTION:
dns.dominio.org. 604800 IN A 80.80.80.80
dig se encarga de mirar la configuración de dominio.org utilizando como servidor DNS el que nosotros le indiquemos después de la @. Ya que nos interesa que utilice el servidor DNS que hemos montado nosotros para probar si funciona correctamente, que se encuentra en nuestra máquina local, le escribiremos después de la @ localhost.
Podríamos decir que ya tenemos nuestro propio servidor DNS.
Pero no estamos aún, el ordenador que hace de servidor está detrás de un router, en una red interna, y deberemos abrir el puerto 53 del router (puerto que utiliza el bind para las peticiones DNS) y redirigirlo al puerto 53 del servidor DNS de la intranet.
Desde el servidor Linux haremos un telnet a la IP del router:
# telnet 192.168.0.1
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
login:
Introduciremos el login y la contraseña adecuada y una vez dentro del router teclearemos lo siguiente:
3Com-DSL>add nat tcp vc internet public_port 53 private_port 53 private_address 192.168.0.5
3Com-DSL>add nat udp vc internet public_port 53 private_port 53 private_address 192.168.0.5
Esto hace lo dicho anteriormente: abre el puerto 53 del router (public_port 53) y envía las peticiones que le llegan, a la máquina 192.168.0.5 que se encuentra dentro de la red (private_address 192.168.0.5) , al puerto 53 de esa máquina (private_port 53). Con lo de tcp y udp indicamos que se valide por esos dos protocolos (esta operación que hace el router se denomina NAT, Network Address Translation / Traducción de dirección de red).
Le decimos al router que guarde los cambios y reinicie para que los cambios tengan efecto:
3Com-DSL>save all
3Com-DSL>reboot
Esperamos un par de minutos más, y todo está listo para que, cuando en el registro de dominio.org se nos pregunte por un servidor DNS, poner el que hemos montado: dns.dominio.org como primario y cualquier otro servidor DNS como secundario.
No lo expliqué antes, pero nos piden dos servidores, uno primario y otro secundario, por si el primario dejara de funcionar alguna vez, podamos seguir visitando la web gracias al DNS secundario. En este caso, pusimos como secundario un DNS de Terra, que podría haber sido cualquier otro. Si nuestro servidor DNS se apagara por alguna razón, se cogería el secundario, pero como el de Terra no tiene ninguna información acerca de dominio.org, no podría mostrarnos la página. De todas maneras, si se apagara el servidor DNS, tampoco podríamos dar servicio de WEB, ya que se trata del mismo ordenador.
Los cambios de configuración en el DNS son lentos, y no será hasta unas horas después (incluso hasta 48 horas) que podremos comprobar los resultados.
Primer problema afrontado y superado, pasemos a la configuración del servidor apache para que funcione definitivamente www.dominio.org .
1.2. Servidor WEB
En primer lugar tendremos que tener instalado dicho programa, que estando en Debian será de lo más fácil (siendo root):
# apt-get install apache
Una vez instalado, pasemos a su configuración, que se basará en la edición de algunos archivos de configuración del apache (repito que es necesario tener privilegios de administrador).
Lo primero de todo será editar /etc/apache/httpd.conf, su archivo principal, en el cual personalizaremos apache para ajustarlo a nuestras necesidades. Recuerdo lo de las copias de seguridad, para poder restaurar el archivo en caso de que fallemos:
# cp /etc/apache/httpd.conf /etc/apache/httpd.conf.old
# vi /etc/apache/httpd.conf
Nos aparecerá una pantalla negro con líneas. Algunas de estas líneas empiezan con el símbolo "#", eso indica que no serán leídas como código, sino como comentarios, y por lo tanto serán ignoradas. Esto resulta útil para apuntar lo que hacemos, aclarar alguna línea de código...
Es hora de modificar el archivo.
Para ello buscaremos la línea siguiente:
ServerType standalone
Esto significa que ServerType coje el valor de standalone. Es la manera en que se ejecutará el servidor. Lo dejaremos así.
A medida que vayas bajando, notarás que hay muchas más definiciones del tipo "Variable valor", de momento no tocaremos nada porque son propias del funcionamiento de apache y no nos interesa cambiar nada, por lo tanto dejaremos los valores por defecto que se nos indica.
Cuando llegamos a ### Section 2: 'Main' server configuration es cuando empezaremos a indicar lo que deseemos.
Vamos bajando y encontraremos las siguientes definiciones:
Port 80
Es el puerto donde apache escuchará. Por defecto el 80, ya que si pusiéramos otro cualquiera, deberíamos especificarlo en la petición de la URL. Si ponemos 7001 por ejemplo, para visitar la página tendríamos que poner en el navegador "http://www.dominio.org:7001". Por lo que lo dejamos en 80.
User www-data
Group www-data
Nombre de usuario y grupo con el cual se ejecutará el servidor. Es necesario, por razones de seguridad, no poner ni root ni cualquier usuario privilegiado. www-data es el que traía por defecto y me pareció el más apropiado.
ServerAdmin webmaster@dns
Se especifica la dirección de email a la que se enviarán los mensajes de error. En nuestro caso pondremos webmaster@dns que es la dirección de email local del administrador de la web.
ServerName dominio.org
Nombre del servidor. Este valor tiene que ser un DNS válido o la IP del servidor web. Dado que compremos dominio.org, será lo que pondremos.
DocumentRoot /home/web
Indica el path (ruta completa) de la carpeta donde guardaremos los archivos de la página principal. En nuestro caso /home/web.
<Directory /var/www/>
Esta etiqueta no debe quedarse así, sino que se tiene que canviar /var/www/ por lo que pusimos en DocumentRoot. Así que quedaría: <Directory /home/web/>
UserDir /home/todos/*/tu_web
Path del directorio que almacenará la página personal de cada usuario. /home/todos/*/tu_web es lo que puse. Así, si alguien escribe en el navegador www.dominio.org/~eberney entrará en la página personal del usuario eberney.
DirectoryIndex index.html index.htm default.htm index.php
Será el fichero o ficheros que tomará el servidor como índice del directorio web. Se suele poner "index.html", aunque se admiten varios más separándolos con espacios (default.html, index.php, index.asp...). No sabía con qué trabajarían los usuarios, así que puse los que se me ocurrieron en ese momento.
Hay muchas más opciones que deberían comentarse, pero no es el caso, nosotros solo queremos lo mínimo para que funcione bien.
Ahora falta poner una página en el DocumentRoot que hayamos escogido.
Crearemos la carpeta indicada, en mi caso:
# mkdir /home/web
Y editaremos cualquier archivo html para probar si funciona:
# vi /home/web/index.html
Escribimos:
<html>
Hola
</html>
Salimos del editor vi (:wq).
Después de haber configurado el apache toca reiniciarlo con el siguiente comando:
# apachectl restart
Solo nos queda comprobar que todo funciona bien.
# lynx localhost
lynx es un navegador en modo texto para visitar páginas web desde la consola.
Tendría que aparecernos en pantalla "Hola" (el contenido de /home/web/index.html).
Pero esto es en ámbito local, por lo que si desde cualquier ordenador conectado a internet que esté fuera de la LAN ponemos en el navegador www.dominio.org no saldrá la página, por varias razones:
-El router no tiene abierto el puerto publico 80 ni redirigido a nuestro servidor apache.
-Falta aplicar el uso de VirtualHosts en el servidor apache.
La primera es lo mismo que hicimos con el servidor DNS, pero cambiando el puerto a 80, que es el de la web.
El segundo problema se puede resolver fácilmente. De nuevo tenemos que editar el archivo /etc/apache/httpd.conf e irnos al final de todo donde hay las etiquetas llamadas VirtualHost.
Tenemos que buscar y sustituir lo siguiente:
NameVirtualHost 192.168.0.5:80
La dirección con el puerto 192.168.0.5:80 es la del servidor apache que tenemos en la ethernet.
Ver segunda parte del tutorial en Servidor Web Parte 2
|