domingo, 29 de agosto de 2010

Servidor web Apache en Ubuntu

Servidor Web Apache

1.- Organización del sitio

Para la realización de la práctica voy a partir del siguiente esquema:

  • La página web de la organización mczones.es se alojará en el directorio /var/www/mczones (que crearemos previamente sudo mkdir /var/www/mczones), se accederá a su página web tecleando http://www.mczones.es en el navegador. Dentro de ella habrá una carpeta “privada” a la que sólo podrán acceder los miembros del dominio mczones.es previa autenticación contra LDAP.

  • Dado que los servidores web normalmente alojan a mas de un dominio, este servidor también alojará la página web del dominio gestionderedes.es cuyo contenido se alojará en el directorio /var/www/gestionderedes. Se accederá a la página web tecleando http://www.gestionderedes.es en el navegador.

  • Cada usuario podrá tener un espacio web dentro de la estructura de la organización mczones.es, para ello cada usuario deberá crear una carpeta llamada “public_html” en la raíz de su directorio home. En dicha carpeta podrá volcar el contenido accesible vía web. Para acceder a dichas carpetas la forma será: http://www.mczones.es/~login_del_usuario. Por ejemplo para el usuario de login c1, sería: http://www.mczones.es/~c1 ( el símbolo que precede a “c1” se obtiene tecleando ALT GR + 4).

  • Cada departamento, a su vez, tendrá su propia zona web que será accesible de dos modos dependiendo del modo de creación de las carpetas:



    • http://www.mczones.es/contabilidad: para que sea accesible de este modo crearemos una subcarpeta /var/www/mczones/contabilidad (y otra para desarrollo) en la que daremos permisos de lectura/escritura a todos los usuarios del grupo contabilidad.

    • Http://www.mczones.es/~contabilidad: para emplear este método crearé un usuario llamado contabilidad empleando el mismo sistema que para los usuarios.

  • Creación de otro dominio web http://websegura.mczones.es que consta de una carpeta web segura para acceder a ella mediante el uso de certificados que garanticen la procedencia del contenido y permitan la encriptación de los datos, dentro de esta carpeta (websegura) habrá datos sólo accesibles a los miembros del dominio previa autenticación con usuario y contraseña. Dicha carpeta estará accesible mediante: https://websegura.mczones.es. La parte de la encriptación será tratada en el anexo que ajunto.



2.- Instalación de Apache

La instalación del servidor apache es muy sencilla, como siempre, se puede realizar desde Synaptic, aptitude, gedebi o simplemente:
sudo apt-get install apache2
Una vez instalado (la versión 2), y para habilitar el uso de directorios en las carpetas home de los usuarios ejecutamos en un terminal:
sudo a2enmod userdir
Podemos comprobar que funciona simplemente abriendo el navegador firefox y tecleando http://localhost (aparecerá una página que pone “It works!”) o bien ps aux | grep apache

3.- Configuración de Apache

La configuración de apache se realiza principalmente mediante la edición del fichero /etc/apache2/apache2.conf aunque veremos que hay más ficheros implicados.

3.1 Opciones de configuración.

Algunas de las posibles directivas de configuración agrupadas por características son:
Direcciones y puertos:

    • Listen: permite asignar Apache a direcciones IP específicas y/o puertos en lugar de los predeterminados, p.e. Listen 192.168.2.3:80 o Listen 3000

    • BindAddress: para especificar sólo la dirección Ip, esta opción se puede incluir en la sección VirtualHost para ligar un servidor a una IP determinada. “BindAddress 192.168.2.3
Registro y ruta:

    • ServerRoot: ubicación del fichero de configuración principal.

    • DocumentRoot: ubicación de los documentos HTML o contenidos web

    • CustomLog: ubicación del archivo de registro de acceso también válido para virtual hosts

    • ErrorLog: ubicación del archivo de registro de errores

    • HostnameLookups:si debe buscar los nombres de los equipos, además de la IP para almacenarlo en los logs, por defecto (Off)

    • LogLevel: indicamos la cantidad/nivel de información que debe guardar en sus registros, por defecto warn pero podrían ser: debug, info, notice, warn, error, crit, alert y emerg, teniendo en cuenta que el nivel irá de mayor a menor cantidad de información.

    • Include: se emplean para cargar los ficheros de configuración.

    • DirectoryIndex: nombre del fichero que se cargará, separados por un espacio y por orden de preferencia.

    • Alias: suelen ser abreviaturas de camnios absolutos, por ejemplo: “Alias /cuentas/ “/var/www/mczones/contabilidad/registro/cuentas/””. En la versión actual se suelen configurar en el fichero /etc/apache2/mods-available/alias.conf

    • LoadModule y AddModule nos permite cargar módulos adicionales, por ejemplo: “LoadModule mime_module modules/mod_mime.so”

    • AccessFileName: nombre del fichero de control de acceso

    • CacheRoot, CacheSize, CacheMaxExpire,... para activar (on) o desactivar (off) el registro de las consultas dinámicas realizadas en el sitio, para servirlas con mayor rapidez: “CacheRoot “/var/cache/httpd””
Rendimiento:

    • Timeout: segundos máximos de espera entre las peticiones de recepción y envío

    • KeepAlive: para activar las conexiones persistentes. Al activarla (on) permitiremos mútiples peticiones sobre la misma conexión.

    • MaxKeepAliveRequests: número de solicitudes persistentes que queremos permitir en el servidor.

    • KeepAliveTimeout:tiempo de espera para una nueva petición desde la sesión conectada.

    • Min/MaxSpareServers: para crear una reserva de servidores libres que Apache pueda usar cuando esté ocupado, sin embargo, cada uno requerirá más meemoria del servidor.

    • StartServers: número de servidores que deben iniciarse al ejecutarse por primera vez.

    • MaxClients: para limitar el número de sesiones de cliente para un servidor.

  1. Identificación y configuración de cada servidor

    • ServerAdmin: e-mail de administración del sitio par notificación de errores,...

    • ServerName: establece el nombre del host y el puerto que identifica el servidor.

    • ServerAlias: nombre alternativo al dado al host.

  1. Cadenas de identificación del servidor / Seguridad

    • ServerSignature: con la opción activada, el servidor añade una línea a páginas generadas por el servidor, que incluye toda la información de su versión.

    • ServerTokens: si el valor de esta opción es Prod, evitaremos que apache muestre el número de versión.

3.2 Inicio y parada del servidor y logs.

Si queremos parar, iniciar o reiniciar el servidor deberemos pasar como opción al demonio como siempre stop, start o restart. Por ejemplo:
/etc/init.d/apache2 restart
Si lo que deseamos es asegurarnos de que arranque al iniciar el equipo debemos crear los enlaces:
update-rc.d apache2 defaults
En cuanto a los ficheros de logs, los podemos encontrar -por defecto aunque podemos modificarlo- para accesos y errores en los ficheros /var/log/apache2/access.log y /var/log/apache2/error.log respectivamente.

4.- VirtualHost: albergar múltiples sitios webs en un único servidor.

Para albergar múltiples sitios web en un mismo equipo Apache nos permite hacerlo empleando dos tipos de anfitriones virtuales: basados en nombre o basados en IP. Con los primeros podremos emplear una única IP para todos los equipos mientras que para los segundos deberemos tener una IP asociada a cada dominio.
Independientemente del sistema que vayamos a utilizar debemos añadir una línea ya sea en el servidor de DNS o en el fichero /etc/hosts (p.e. “192.168.2.3 www.gestionderedes.es”) para asociar el host con la ip del servidor.

4.1 Anfitriones virtuales basados en el nombre

Este sistema nos permite albergar varios dominios en una sola dirección IP aunque tiene un par de inconvenientes, el primero es que sólo se puede emplear SSL con una dirección IP y el segundo es que con navegadores antiguos que no incluyan la especifiación HTTP 1.1 no funcionará, ya que el servidor debe examinar el encabezado para saber qué página debe servir.
Vamos a suponer que queremos albergar dos sitios web: mczones.es y gestionderedes.es. Para ello y para simplificar el ejemplo haremos que compartan los ficheros de logs, cgi,.. y que tan sólo el lugar de las páginas que servirán será distinto (en otro caso crearíamos un directorio para cada uno y configuraríamos después dichos parámetros). Para ello creamos los directorios, uno para cada sitio:
sudo mkdir /var/www/gestionderedes
sudo mkdir /var/www/mczones
A continuación habilitarmos los hosts virtuales en la configuración. El modo más sencillo es asegurarnos de que en el fichero llamado /etc/apache2/ports.conf está descomentada la línea:
NameVirtualHost *:80 #Habilitamos Hosts virtuales
Una vez hecho esto podemos crear ficheros de configuración individuales para cada host virtual. En concreto en el fichero apache2.conf hay dos includes que apuntan a estos ficheros de configuración:image

  • /etc/apache2/sites-available : contiene los sitios disponibles pero no necesariamente habilitados

  • /etc/apache2/sites-enabled: contiene los ficheros de sitio habilitados
Los ficheros de configuración de sites-enabled se cargan al iniciarse el servidor mientras que los otros se ignoran. La manera de configurarlos es crear el fichero con la configuración en /etc/apache2/sites-available y después crear un enlace simbólico en el directorio sites-enabled. Hay dos comandos disponibles a2ensite y a2dissite para crearlos de modo automático.Un ejemplo de configuración para los ficheros sería:
#  Fichero mczones (/etc/apache2/sites-available/mczones)
<VirtualHost *:80>
ServerAdmin webmaster@mczones.es
ServerName  www.mczones.es
ServerAlias mczones.es
DirectoryIndex index.html
DocumentRoot /var/www/mczones/
<directory />
Options FollowSymLinks
AllowOverride None
</directory>
<directory /var/www/mczones>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
...
</VirtualHost>


# Fichero gestionderedes (/etc/apache2/sites-available/gestionderedes)
<VirtualHost *:80>
ServerAdmin webmaster@gestionderedes.es
ServerName  www.gestionderedes.es
ServerAlias  gestionderedes.es
DirectoryIndex index.html
DocumentRoot /var/www/gestionderedes/
<directory />
Options FollowSymLinks
AllowOverride None
</directory>
<directory /var/www/gestionderedes>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
...
</VirtualHost>


Para habilitarlos y crear los enlaces simbólicos, simplemente ejecutaríamos:


a2ensite mczones # equivalente a ln -s /etc/apache2/sites-availables/mczones /etc/apache2/sites-enabled


a2ensite gestionderedes


a2dissite default # deshabilitamos el dominio por defecto


con lo que crearíamos los enlaces simbólicos en sites-enabled, una vez hecho debemos reiniciar el servidor web: /etc/init.d/apache2 reload.

Si os sale una advertencia al hacerlo, del tipo:
"apache1: Could not reliably determine the server´s fully qualified domain name, using 127.0.1.1 for ServerName"
lo podéis solucionar añadiendo al fichero /etc/apache2/httpd.conf la línea
ServerName localhost

Si no encontráis el fichero en ese directorio lo creamos:
touch /etc/apache2/httpd.conf

e incluis en él: ServerName localhost

A continuación al fichero apache2.conf y añadimos la línea:
Include httpd.conf


4.2 Anfitriones virtuales basados en IP



En caso de disponer de varias Ips para cada uno de los sitios será la mejor elección. Un ejemplo mínimo de configuración de la cabecera del fichero sería:


Listen www.otrositio.es:80


….


<VirtualHost www.otrositio.es>


…..


5. Carpetas seguras con autentificación LDAP



Lo primero que debemos hacer es cargar el módulo de autenticación mod_authz_ldap. Podemos hacerlo simplemente tecleando:


$ sudo a2enmod authnz_ldap # para deshabilitar usaríamos a2dismod


También podríamos hacerlo cargándolo directamente, por ejemplo añadiendo al fichero apache2.conf, httpd.conf o mejor a /etc/apache2/mods-available/ldap.load la siguiente línea:


LoadModule authnz_ldap_module /usr/lib/apache2/modules/mod_authnz_ldap.so


Creo las carpetas en las que voy a emplear la autenticación:


sudo mkdir /var/www/mczones/privada


sudo mkdir /var/www/websegura


A continuación edito/creo los ficheros de configuración de los dominios. Es importante decir que la configuración varía de unas a otras versiones de apache, ésta en concreto es válida para la 2.2.9 (la última testeada disponible). Para configurarlos dentro de /etc/apache2/sites-available modificamos los ficheros websegura y mczones para dejarlos del siguiente modo:


#  mczones.es (/etc/apache2/sites-available/mczones)
<VirtualHost *:80>
ServerAdmin webmaster@mczones.es
ServerName  www.mczones.es
ServerAlias mczones.es
DirectoryIndex index.html
DocumentRoot /var/www/mczones/
<directory />
Options FollowSysmLinks
AllowOverride None
</directory>
<directory /var/www/mczones>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
<Location /privada>
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative On
AuthName “Identificación LDAP mczones.es”
AuthLDAPURL “ldap://127.0.0.1:389/ou=usuarios,dc=mczones,dc=uid?one
AuthLDAPBindDN “cn=admin,dc=mczones,dc=es”
Require valid-user
</Location>     
</VirtualHost>


#  websegura.mczones.es (/etc/apache2/sites-available/websegura)
<VirtualHost *:80>
ServerAdmin webmaster@websegura.mczones.es
ServerName  websegura.mczones.es
ServerAlias websegura.es
DirectoryIndex index.html
DocumentRoot /var/www/websegura/
<directory />
Options FollowSysmLinks
AllowOverride None
</directory>
<directory /var/www/websegura>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
<Location />
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative On
AuthName “Identificación websegura.mczones.es”
AuthLDAPURL “ldap://127.0.0.1:389/ou=usuarios,dc=mczones,dc=uid?one
AuthLDAPBindDN “cn=admin,dc=mczones,dc=es”
Require valid-user
</Location>     
</VirtualHost>


Y creamos los enlaces simbólicos:


sudo a2ensite websegura


Tras eso reiniciamos o recargamos los valores de apache


sudo /etc/init.d/apache2 reload # o restart


6. Configuración con Webmin



Se puede emplear webmin igual que en muchas de las anteriores prácticas para configurar apache:


image image




7.- Comprobación del funcionamiento



A continuación muestro algunas capturas de los ficheros index.html que he creado para cada sitio, así como las peticiones de contraseñas a los usuariosimage


image image image image En la siguiente entrega explico cómo emplear certificados para garantizar y encriptar los datos y webdav para subir y bajar ficheros.


para continuar viendo el resto de manuales Linux siga el enlace:administración de servidores con Linux



En la siguiente entrega explicaré como emplear apache con certificados así como la instalación de webdav



8. Enlaces















6 comentarios:

despe dijo...

vengo a saludarte despues de mucho tiempo hace poco me conecte definitivamente que estes bien
un beso
Patricia

Courier dijo...

Es bueno esta plataforma apache.

LoiS dijo...

Que tal Juán. Soy tu tecno-exalumno ;).
Ya hacía tiempo que este blog no se actualizaba. Menos mal que por fin resucitó! :)

Espero más publicaciones a partir de ahora en adelante.
Salu2

P.D.: Pasate por mi blog cuando quieras:
http://zonasystem.blogspot.com/

Juan dijo...

despe saludos.

lois, si he estado (en realidad estoy) un poco vago a la hora de subir material. La verdad es que tengo bastante material propio de temas de servidores y seguridad en redes pendiente de subir. Supongo que con el comienzo del curso me pondré las pilas y poco a poco iré poniéndome al día, sino cuando lo suba, los materiales ya van a estar desfasados. En cuanto a tu blog, es uno de los que sigo habitualmente, la verdad es que está muy bien, ya veo que le dedicas muchas horas a leer y estar al día, sigue así....y gracias por el comentario

Anónimo dijo...

Hola, sólo una pequeña duda .. esta práctica funcionaría para una intranet ¿ verdad ?, porque si queremos que sea totalmente pública, ¿ no habría que registrar y/o publicar de alguna forma la URL www.mczones.es?

Muchas gracias.

Juan dijo...

si, para publicarlo en internet tendrías que comprar un dominio y redirigirlo a la ip dónde tengas montado el servidor apache