sábado, 1 de noviembre de 2008

Instalar y configurar un servidor Web Apache en Ubuntu

Servidor Web Apache

Organización del sitio web
La organización que realizaremos de nuestro servidor Apache, será la clásica en los sistemas Unix: la página web de la intranet se almacenará en la carpeta raíz del servidor web, las páginas de los usuarios se almacenarán en la carpeta home de cada usuario y para albergar las páginas web de los distintos departamentos didácticos del centro, lo más práctico es crear nuevos usuarios con el nombre del departamento.

Espacio web para la Intranet

Por defecto, la carpeta raiz del servidor web es la carpeta /var/www. Todos los documentos que se encuentren dentro de la carpeta raíz del servidor web, serán accesibles vía web. Dentro del raiz de documentos crearemos la página web de nuestra intranet.

Carpeta principal del servidor web (DocumentRoot)

  • Carpeta raíz del servidor web: /var/www
  • Acceso a la web principal: http://ip-del-servidor ó http://nombre-del-servidor

Para acceder vía web a la página almacenada en la carpeta raíz del servidor, desde un navegador debemos acceder directamente con la dirección IP a: http://ip-del-servidor o bien utilizando el nombre del mismo si tenemos el DNS funcionando: http://nombre-del-servidor. Si no tenemos el DNS funcionando, podemos añadir el nombre y la IP en /etc/hosts para resolver localmente.

Espacio web para cada usuario

Cada usuario del sistema dispondrá de un espacio web que se almacena dentro de su carpeta home en una carpeta llamada 'public_html'. Si dicha carpeta no existe, el propio usuario puede crearla y copiar dentro de ella su página web. Los permisos recomendados son 644 para que el 'grupo' y el 'resto' de usuarios tengan acceso de lectura y así se puedan visualizar las páginas.

Para acceder vía web a la página de un usuario, desde un navegador debemos acceder directamente con la dirección IP a: http://ip-del-servidor/~login-usuario/

El caracter '~'comúnmente conocido como gusanillo y que se obtiene con Alt Gr + 4 sirve para indicar a apache que debe servir la página desde el home del usuario (en Linux el 'gusanillo' equivale a la carpeta home). Ejemplo, si hemos creado un usuario javier y éste ha creado la carpeta /home/javier/public_html y ha copiado en ella su página web, desde cualquier PC de la red podremos acceder a dicha carpeta yendo a la dirección http://ip-del-servidor/~javier/. Para que la página aparezca automáticamente, es necesario crear un archivo llamado index.html.

Carpetas web de los usuarios

  • Carpeta web de javier: /home/javier/public_html
  • Acceso a la web de javier: http://ip-del-servidor/~javier/
Para permitir el acceso a las carpetas de usuario deberemos ejecutar las siguiente orden, una vez instalado apache:

// Habilitar directorios de usuario en apache:
# sudo a2enmod userdir

Espacio web para los departamentos

Para proporcionar espacio web a los departamentos, lo más sencillo es crear un usuario para cada departamento. Podemos crear los usuarios: matematicas, lengua, ingles, plastica (sin acentos), etc... Al igual que cada usuario del sistema, dispondrán de un espacio web dentro de su carpeta home en una carpeta llamada 'public_html'. Si dicha carpeta no existe, habrá que crearla y copiar dentro de ella la página web del departamento.

Carpetas web de los departamentos

  • Carpeta web del dpto. de matemáticas: /home/matematicas/public_html
  • Acceso a la web de dpto. de matemáticas: http://ip-del-servidor/~matematicas/

Espacio web seguro

Además crearemos un sitio web virtual seguro en el servidor web Apache para poder tener acceso vía SSL a contenidos que deseamos que sean seguros, es decir, accesibles en el navegador mediante el protocolo "https", será la carpeta /var/www/websegura

Carpeta web segura

  • Carpeta web segura: /var/www/websegura
  • Acceso a la web segura: https://ip-del-servidor/websegura/

Dentro de esta estructura la mayoría de los contenidos serán públicos y cualquier usuario podrá acceder a ellos. Sin embargo, algunas de las carpetas serán privadas y solo se tendrá acceso a ellas identificándose con nombre de usuario y contraseña.

Instalación de Apache2

Disponer de un servidor web en el centro nos permitirá alojar nuestras propias páginas y aplicaciones web de forma que den servicio tanto desde dentro de la intranet como desde Internet. Serán la base que facilitará el acceso a la información por parte de la comunidad educativa.


// Instalación de apache2
# apt-get install apache2

Con lo cual se instalarán los archivos necesarios para que funcione nuestro servidor web. Se instalará apache v2.

Configuración de Apache

Los archivos de configuración de apache2 se encuentran en la carpeta /etc/apache2. El archivo principal de configuración es /etc/apache2/apache2.conf. Antes de realizar cualquier cambio en este archivo, es conveniente realizar una copia de seguridad del mismo ya que si apache encuentra algún error en el archivo de configuración, no arrancará.

Se pueden configurar infinidad de parámetros. Aquí, para poner en marcha el servidor, editaremos el archivo apache2.conf y añadiremos únicamente el siguiente parámetro:


// Añadir en apache2.conf
ServerName www.iesacarballeira.com

Para que los PCs de la red local sepan que www.iescarballeira.com es nuestro servidor web, debemos crear una entrada 'www' hacia su dirección IP en el servidor DNS, o bien editar el archivo /etc/hosts agregando la línea: '192.168.1.239 www.ieslapaloma.com' (si la IP del servidor fuera 192.168.1.239). Si no, no quedará más remedio que acceder utilizando la dirección IP del servidor.

Arranque y parada del servidor web apache

El servidor web apache2, al igual que todos los servicios en Debian, dispone de un script de arranque y parada en la carpeta /etc/init.d.

     // Arrancar o reiniciar el servidor apache2
# /etc/init.d/apache2 restart

// Parar el servidor apache
root@cnice-desktop:/# /etc/init.d/apache2 stop

Arranque automático del servidor Web Apache al iniciar el sistema.


si estamos situados en la carpeta /etc/init.d

update-rc.d apache2 defaults

Acceso a carpetas seguras

Introducción

Una página web segura o un sitio web seguro es un sitio web que utiliza el protocolo https en lugar de utilizar el protocolo http.

El protocolo https es idéntico al protocolo http con la excepción de que la transferencia de información entre el cliente (navegador web) y el servidor (servidor web) viaja a través de Internet cifrada utilizando robustos algoritmos de cifrado de datos proporcionados por el paquete OpenSSL.

Los algoritmos de cifrado utilizados reunen las características necesarias para garantizar que la información que sale desde el servidor hacia el cliente, esté cifrada y solamente pueda ser descifrada por el cliente y que la información que sale desde el cliente hacia el servidor, esté cifrada y solamente pueda ser descifrada por el servidor. Si durante la transferencia de la información un 'hacker' hiciera copia de los paquetes de datos e intentara descifrarlos, los algoritmos garantizarían que no podría hacerlo por fuerza bruta (probando todas las claves posibles) en un plazo mínimo de varios años.

Durante la transmisión, se utilizan algotirmos de cifrado simétricos, pero para intercambiar las claves de cifrado, hay una sesión inicial de cifrado asimétrico.

Módulo ssl para apache2

Al instalar apache2 se instala también el módulo ssl para apache2, por lo que no es necesario instalar ningún paquete adicional. Tan solo debemos generar un certificado para el servidor y activar el módulo ssl.

Generar el certificado

// Generar certificado autofirmado
# apache2-ssl-certificate

Si aparece un mensaje avisándonos de que ha sido imposible encontrar el comando, es debido a un fallo en el instalador de apache que podemos solventar, o bien actualizando apache a una versión más actual que resuelva el fallo(este fallo lo da en instalaciones de 32bits y no en las de 64 debido a que está incluido en el apache2-common de amd64) o bien creándolo a mano con las siguientes instrucciones:
# mkdir /etc/apache2/ssl

# /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

y respondiendo a las sencillas preguntas que nos van apareciendo. (en nuestro caso el servidor se llama websegura.iesacarballeira.com y la organización IES A Carballeira)

Tan solo tendremos que responder a algunas preguntas sencillas sobre nuestra ubicación geográfica y el nombre de nuestra organización

Después de la ejecución de comando apache2-ssl-certificate, se habrá generado el archivo /etc/apache2/ssl/apache.pem que contiene la claves que permitirán al servidor utilizar cifrado asimétrico. El siguiente paso será configurar un servidor virtual para que utilice dicho certificado.

Crear servidor virtual seguro en apache2

Primero crearemos una carpeta de nombre 'websegura' dentro de '/var/www'. Dicha carpeta será el raíz de documentos (DocumentRoot) de nuestro servidor virtual seguro, de modo que todo lo que coloquemos en dicha carpeta deba ser accedido vía 'https'. Eso lo indicaremos más adelante mediante el parámetro SSLRequireSSL. El protocolo https utiliza el puerto 443, por lo tanto, tendremos habilitar dicho puerto para que apache lo utilice:

 // Habilitar puerto 443. Añadir en /etc/apache2/ports.conf
Listen 443

Después debemos crear el servidor virtual en apache. Dicho servidor virtual dispondrá de una url de acceso diferente a la de nuestra web principal (websegura.ieslapaloma.com en nuestro ejemplo) y será accesible mediante https, por tanto tendremos que habilitar SSL e indicar la ruta del archivo que contiene el certificado. Todo ello lo haremos editando el archivo /etc/apache2/sites-available/default:

// Servidor virtual seguro.

// Añadir al principio en /etc/apache2/sites-available/default
NameVirtualHost websegura.iesacarballeira.com:443

// Añadir al final en /etc/apache2/sites-available/default
<VirtualHost websegura.iesacarballeira.com:443>

ServerName websegura.iesacarballeira.com

DocumentRoot /var/www/websegura

SSLEngine On

SSLCertificateFile /etc/apache2/ssl/apache.pem

ErrorLog /var/log/apache2/error.log

CustomLog /var/log/apache2/access.log combined

</VirtualHost>



<Directory "/var/www/websegura">

Options Indexes FollowSymlinks MultiViews

AllowOverride None

Order allow,deny

Allow from all

SSLRequireSSL

</Directory>

Posteriormente debemos habilitar el módulo ssl del servidor apache:

// Habilitar el módulo ssl
# a2enmod ssl

Finalmente reiniciamos el servidor apache:

// Reinicio de apache
# /etc/init.d/apache2 restart

Probando el acceso a la página web segura

Nota: Si no tenemos un DNS funcionando, debemos incluir en /etc/hosts una línea para resolver localmente el nombre de nuestro servidor por su IP, ejemplo: 192.168.1.239 websegura.iesacarballeira.com, ya que en este caso, navegar con la dirección IP no funcionará.

Para acceder a las páginas seguras de nuestro servidor web, tecleamos desde el navegador 'https://websegura.iesacarballeira.com'. Lo primero que se muestra es la alerta de seguridad que nos indica que el certificado no está emitido por una CA en la que confiamos

Si pulsamos sobre el botón 'Ver Certificado' veremos la información tanto del certificado como de la entidad certificadora que lo firma:

Si aceptamos el certificado significa que, a pesar de estar firmado por una entidad certificadora que no es de confianza para el navegador (lo hemos firmado nosotros mismos), lo aceptamos. Tendremos que indicar al navegador si aceptamos el certificado para siempre o solo para ahora. Como tenemos la seguridad de que el certificado es bueno porque acabamos de crearle nosotros mismos, podemos aceptarlo para siempre y así el navegador no volverá a preguntarnos más sobre él ya que hemos indicado manualmente que confiamos en este certificado:

Ahora ya tenemos acceso a la web segura mediante el protocolo https lo que nos garantiza que la información de la página segura, antes de salir del servidor, ha sido cifrada y por tanto la trasferencia de datos desde el servidor a nuestro navegador se ha producido de forma segura. Al llegar a nuestro navegador, se han descifrado los datos. El candado cerrado que aparece abajo a la derecha en el navegador, indica que la trasferencia de datos se ha realizado de forma segura.


Carpetas seguras de usuario

Si en el centro existiera la necesidad de que los profesores dispongan de una carpeta web segura donde poder colocar contenidos accesibles vía SSL, como serán casos excepcionales, una solución sencilla es crear una carpeta dentro de la carpeta '/var/www/websegura' para dicho profesor y para que éste tenga acceso de forma autónoma a subir contenidos a dicha carpeta, se le puede crear un usuario adicional cuyo home sea la carpeta correspondiente, ejemplo, para el profesor Javier podemos crear otro usuario llamado javier-s (javier-seguro) cuyo home sea /var/www/websegura/javier. Podría subir contenidos por ftp utilizando el usuario javier-s. El acceso a los contenidos desde un navegador sería yendo a la dirección https://websegura.ieslapaloma.com/javier

Este proceso habría que hacerlo para todos los profesores o departamentos de nuestro centro que requieran de carpeta segura.


Fuente:
Página del isftic :
Curso Redes de Área Local. Aplicaciones y servicios en Linux. del isftic: http://www.isftic.mepsyd.es/formacion/materiales/85/cd/REDES_LINUX/indice.htm

10 comentarios:

Anónimo dijo...

Excelente, claro y sencillo tutorial, los felicito por su forma de explicar y hacerse entender.

Muchas Gracias

Anónimo dijo...

Excelente tutorial!!!
Me sirvio de mucho, voy iniciando con servidores web en linux.
Saludos desde Mexico.

Anónimo dijo...

Gracias por dedicar tiempo a enseñar a los que no saben.

Anónimo dijo...

gracias por el tutorial es muy util y masticable, sigan adelante con sus aportes en verdad que es un buen apoyo el que estan dando.

Sky Walker dijo...

esta excelentisimo el comentario , super entendible, muchisimas gracias!!

Maynor Song Lara

Anónimo dijo...

hola sabrías por qué un servidor apache2 se hace lento al mostrar páginas .php ???

Juan dijo...

cualquier página o una en concreto?
lo digo por si es un error de programación....

Diseño de Pagina Web dijo...

Muy buenooo!

chaco.isa dijo...

Muy bueno. Claro simple ordenado.
SALUDOS DESDE COSTA RICA.
PARA VIDA

fede dijo...

hola juan,
a ver si me podeis echar una mano:
me han pedido que deniege el acceso a un determinado fichero usando el archivo .htaccess, ¿tengo que añadir algo en mi httpd.conf??

Este es el codigo k utilizo en mi .htacces:

Order allow,deny
Deny from all

sin embargo puedo acceder a ese fichero!!!¿Que estoy haciendo mal?

Gracias, saludos:D