El documento describe el protocolo HTTP, incluyendo sus elementos principales como clientes, servidores e intermediarios; los puertos utilizados; versiones; mensajes de petición y respuesta con sus líneas y cabeceras; métodos de petición; códigos de estado; negociación de contenidos; conexiones persistentes; y características como el estado sin estado y técnicas para mantener la historia de sesiones. También cubre temas como instalación de Apache desde código fuente y paquetes binarios.
4. Irontec – Curso Apache
Protocolo HTTP
● Mensaje de petición:
– Línea de método de petición
– Líneas de cabecera de petición (de tipo XXX:YYY)
– <CR><LF> (Línea en blanco)
– Cuerpo (opcional)
● Mensaje de respuesta:
– Línea de código de estado
– Líneas de cabecera de respuesta (de tipo XXX:YYY)
– <CR><LF> (Línea en blanco)
– Cuerpo (opcional)
● Todas las líneas acaban en <CR><LF>
4
5. Irontec – Curso Apache
Protocolo HTTP
● Mensajes de petición
● Ej:
– GET / HTTP/ 1. 1
– Host :
– User - Agent : M ozi l l a/ 5. 0 ( X11; U; Li nux i 686; en- US;
r v: 1. 8. 1. 12) Gecko/ 20080207 Ubunt u/ 7. 10 ( gut sy)
Fi r ef ox/ 2. 0. 0. 12 Par os/ 3. 2. 13
– Accept : t ext / xm , t ext / pl ai n; q= 8, i m
l 0. age/ png, * / * ; q= 5
0.
– Accept - Language: es- es, en- us; q= 7, en; q= 3
0. 0.
– Accept - Char set : UTF- 8, *
● Otras líneas de cabecera:
– Keep-Alive, Proxy-Connection, Referer, Cookie,
Content-length,...
– Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers
5
6. Irontec – Curso Apache
Protocolo HTTP
● GET: solicita una petición dentro de la URL.
● POST: envía datos en el cuerpo de la petición
● PUT: upload
● HEAD: solicita una respuesta idéntica a GET pero
sólo devuelve las cabeceras (no el cuerpo).
● DELETE: borrado
● TRACE: devuelve la petición, para comprobar si
algún equipo intermedio modifica la original
● OPTIONS: devuelve los métodos soportados por el
servidor
● CONNECT: empleado para túneles tcp/ip,
típicamente para hacer conexiones https a través de
un proxy http. Riesgo si en el proxy no se limitan los
posibles destinos host:port 6
7. Irontec – Curso Apache
Protocolo HTTP
● Mensajes de respuesta
● Ej:
– HTTP/ 1. 1 200 OK
– Dat e: Thu, 27 Mar 2008 21: 29: 14 GMT
– Cont ent - Type: t ext / ht m ; char set =
l US- ASCI I
– Ser ver : AmazonS3
● Otras líneas de cabecera:
– ETag, Expires, Pragma, Vary, X-*
– Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers
7
8. Irontec – Curso Apache
Protocolo HTTP
● Codigos de estado
● Son los códigos devueltos por el servidor.
● Se agrupan en:
– 1xx Información
– 2xx Éxito
– 3xx Redirección
– 4xx Error de cliente
– 5xx Error de servidor
8
9. Irontec – Curso Apache
Protocolo HTTP
● Negociación de contenidos: mecanismo para
devolver distintos recursos o documentos a partir de
una URI solicitada. Ejs: Tipo imagen (gif, png),
Idioma, text/html o text/*
– Cabeceras:
● De cliente. Ej. Accept - encodi ng: gzi p, def l at e
● De servidor. Ej: Cont ent - encodi ng: gzi p
– Tipos MIME (Multipurpose Internet Mail Extensions):
● Forma de describir el tipo de documento a transmitir.
● Sintaxis: major type/minor type. Ej: text/html, image/gif
● Basados en extensión o en análisis (file ...)
9
10. Irontec – Curso Apache
Protocolo HTTP
● Conexiones persistentes (“HTTP keep-alive”)
(v1.1): hacer varias conexiones http con una sóla
conexión tcp.
– Ventajas:
● Menor carga de sistema operativo
● Menos congestión en la red (menos conexiones tcp) y
menor latencia en solicitudes posteriores.
● Posibilidad de http pipelining
– Según rfc2616 un cliente no debería establecer más de
2 conexiones persistentes al mismo tiempo con un
servidor, para evitar la congestión.
10
11. Irontec – Curso Apache
Protocolo HTTP
● HTTP pipelining (v1.1): peticiones asíncronas:
enviar más de una petición http sin esperar las
respuestas.
– Ventaja: como se pueden enviar varias peticiones en un
único paquete tcp, es posible reducir la carga de red.
11
12. Irontec – Curso Apache
Protocolo HTTP
● Protocolo stateless: no guarda información sobre los
clientes
● Técnicas para mantener la historia:
– Cookies (rfc 2109). Inconveniente: han de habilitarse en
el browser
– URL rewriting (Ej. http://host/path;sessionid=12axY)
Inconvenientes:
● Todas las URLs han de llevar el id. Por tanto, hay que
generar todas las páginas de forma dinámica
● Los bookmarks no valen
● (URLs poco estéticas)
– Campos ocultos en formularios. Inviable a nivel general:
no todo está en formularios
12
13. Irontec – Curso Apache
Protocolo HTTP
● Se suelen encapsular a más alto nivel:
– APIs de php, java servlets,...
– Aplicación
● Cada sesión incluye:
– Identificador de sesión a incluir en el tráfico http
– Variables de sesión: pueden guardarse en ficheros de
disco o ej. en base de datos
– Timeout
● Implicaciones de seguridad: secuestro de sesión, ej.
con URL rewriting
13
14. Irontec – Curso Apache
Protocolo HTTP
● Alternativas de almacenamiento de información de
sesiones:
– En el lado del servidor. Inconvenientes:
● Acceso a la información si hay varios servidores ejs.
cluster, balance de carga. Soluciones:
– Replicación entre servidores
– Compartición: sockets, memoria, disco, BD
● (Limitación en el nº de clientes)
– En el lado del cliente: se usan cookies y criptografía.
Inconvenientes:
● Limitación de tamaño de cookie
● Información del usuario no accesible fuera de la sesión
14
15. Irontec – Curso Apache
Introducción
● Desarrollado inicialmente por Rob McCool (NCSA)
● Es desde 1996 el servidor web HTTP más utilizado
en Internet.
● Es multiplataforma (Unix, Microsoft, Novell)
● La versión 2 de apache se ha reescrito
completamente.
● Es extremadamente estable.
● Modularizado para evitar mantener un código
extremadamente complejo y monolítico.
● Es software libre aunque no GPL.
http://www.apache.org
15
16. Irontec – Curso Apache
Introducción
● Roadmap: Evolución de las versiones
● 1.2.X
● 1.3.X
● 2.0.X
● 2.2.X
● Trunk o versión en desarrollo
16
17. Irontec – Curso Apache
Introducción
● Velocidad mayor en el caching
● Filtros Inteligentes
● Configurarión modular
● Balanceo de Carga para Proxies
● Soporte para apagado transparente
● Soporte para archivos mayores de 2GB
● Nuevas opciones para autenticación y autorización
http://httpd.apache.org/docs/2.2/new_features_2_2.html
17
19. Irontec – Curso Apache
Instalación
● Código fuente
● Paquete binario para la distribución Debian
GNU/Linux
¿Ventajas y desventajas de cada uno?
19
20. Irontec – Curso Apache
Instalación – Códido fuente
● Descargamos las últimas fuentes del mirror oficial
más próximo (http://apache/rediris.es/httpd)
● Se pueden buscar más mirrors y comprobar sus
estados en http://www.apache.org/mirrors/
http://apache.rediris.es/httpd/httpd-2.2.11.tar.gz
http://apache.rediris.es/httpd/httpd-2.2.11.tar.gz.asc
20
21. Irontec – Curso Apache
Instalación – Códido fuente
● Verificamos la integridad del código fuente:
● Averiguamos la clave con la que fue firmada
$ gpg –-verify httpd-2.2.11.tar.gz.asc
gpg: Firmado el sáb 06 dic 2008 16:18:37 CET usando clave DSA ID 311A3DE5
gpg: Imposible comprobar la firma: Clave pública no encontrada
● Importamos la clave pública con la que fue firmada
$ gpg --keyserver pgpkeys.mit.edu --recv-key 311A3DE5
gpg: anillo `/root/.gnupg/secring.gpg' creado
gpg: solicitando clave 311A3DE5 de hkp servidor pgpkeys.mit.edu
gpg: /root/.gnupg/trustdb.gpg: se ha creado base de datos de confianza
gpg: clave 311A3DE5: clave pública quot;Ruediger Pluem <rpluem@apache.org>quot;
importada
gpg: no se encuentran claves absolutamente fiables
gpg: Cantidad total procesada: 1
gpg: importadas: 1
21
22. Irontec – Curso Apache
Instalación – Códido fuente
●Verificamos la integridad del código fuente:
● Verificamos la firma digital
$ gpg --verify httpd-2.2.11.tar.gz.asc
gpg: Firmado el sáb 06 dic 2008 16:18:37 CET usando clave DSA ID 311A3DE5
gpg: Firma correcta de quot;Ruediger Pluem <rpluem@apache.org>quot;
gpg: ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!
gpg: No hay indicios de que la firma pertenezca al propietario.
Huellas dactilares de la clave primaria: 120A 8667 241A EDD4 A78B 4610 4C04 2818 311A
3DE5
● La firma digital es válida pero la clave no es de
confianza!
22
23. Irontec – Curso Apache
● Confiamos en la clave (¿seguro?)
$ gpg --edit-key 10FDE075
pub 1024D/311A3DE5 creado: 2005-10-02 caduca: nunca uso: SCA
confianza: desconocido validez: desconocido
sub 2048g/A21CD598 creado: 2005-10-02 caduca: nunca uso: E
[desconocida] (1). Ruediger Pluem <rpluem@apache.org>
Orden> trust
pub 1024D/311A3DE5 creado: 2005-10-02 caduca: nunca uso: SCA
confianza: desconocido validez: desconocido
sub 2048g/A21CD598 creado: 2005-10-02 caduca: nunca uso: E
[desconocida] (1). Ruediger Pluem <rpluem@apache.org>
Por favor, decida su nivel de confianza en que este usuario
verifique correctamente las claves de otros usuarios (mirando
pasaportes, comprobando huellas dactilares en diferentes fuentes...)
1 = No lo sé o prefiero no decirlo
2 = NO tengo confianza
3 = Confío un poco
4 = Confío totalmente
5 = confío absolutamente
m = volver al menú principal
23
24. Irontec – Curso Apache
Instalación – Códido fuente
● Continuamos...
¿Su decisión? 5
¿De verdad quiere asignar absoluta confianza a esta clave? (s/N) s
pub 1024D/311A3DE5 creado: 2005-10-02 caduca: nunca uso: SCA
confianza: absoluta validez: desconocido
sub 2048g/A21CD598 creado: 2005-10-02 caduca: nunca uso: E
[desconocida] (1). Ruediger Pluem <rpluem@apache.org>
Por favor, advierta que la validez de clave mostrada no es necesariamente
correcta a menos de que reinicie el programa.
24
25. Irontec – Curso Apache
Instalación – Códido fuente
● Verificamos de nuevo la firma digital
$ gpg --verify httpd-2.2.11.tar.gz.asc
gpg: Firmado el sáb 06 dic 2008 16:18:37 CET usando clave DSA ID 311A3DE5
gpg: comprobando base de datos de confianza
gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,
modelo de confianza PGP
gpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Firma correcta de quot;Ruediger Pluem <rpluem@apache.org>quot;
● ¡Firma digital verificada! Podemos instalar el
software con seguridad.
http://www.gnupg.org/
25
26. Irontec – Curso Apache
Instalación – Códido fuente
● Instalamos todo lo necesario para la compilación
con un solo comando:
apt-get install build-essential
● Descomprimimos el código fuente:
tar -xzf httpd-2.2.11.tar.gz
26
27. Irontec – Curso Apache
Instalación – Códido fuente
● La instalación de apache se hace en 3 pasos:
● Seleccionar los módulos a incluir en el servidor
● Crear una configuración para el sistema operativo
$ ./configure
● Compilar el ejecutable
$ make
# make install
● Ponemos en marcha el servidor:
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
Intentaremos arrancarlo como usuario NO ROOT.
¿Podemos?
27
28. Irontec – Curso Apache
Instalación – Códido fuente
● El script configure nos permite varias opciones.
● -- prefix=/directorio/destino
Es el directorio en el que Apache va a ser instalado. Apache
tiene que ser configurado para el directorio que se
especifique para que funcione correctamente.
● --enable-module
Utilizado para compilar un módulo estático.
● --disable-module
Para no compilar un módulo
● --enable-module=shared
Para compilar el modulo como dinámico (DSO)
IMPORTANTE: no avisa si el modulo indicado existe
o no. Por lo que habrá que tener cuidado.
28
29. Irontec – Curso Apache
Instalación – Códido fuente
● Los módulos estáticos son módulos incluidos en
tiempo de compilación:
● Para conocer que módulos hay incluidos en el
binario compilado podemos hacerlo con:
– Instalado desde las fuentes:
/usr/local/apache2/bin/httpd -l
Compiled-in modules:
http_core.c
mod_env.c
[...]
– Instalado en Debian desde apt:
/usr/sbin/apache2 -l
Compiled-in modules:
core.c
mod_so.c
29
30. Irontec – Curso Apache
Instalación – Códido fuente
● Módulos dinámicos son los cargados externamente:
● Apache permite cargar módulos independientes al
archivo binario httpd.
● Es posible gracias al módulo mod_so, que debe
compilarse estáticamente en el núcleo de Apache
y a la herramienta apxs (APache eXtenSion).
● Apache necesita ser compilado previamente para
poder utilizar la herramienta apxs.
● Para usa este mecanismo el sistema también debe
soportar DSO.
¿Cómo compilamos Apache con soporte DSO?
30
31. Irontec – Curso Apache
Instalación – Códido fuente
● Módulos cargados externamente vs incluídos:
● Si compilamos estáticamente los módulos, cada
cambio en ellos hay que recompilar apache!
● Ventajas DSO
– El servidor es mucho más flexible
– Permite tener diferentes instancias de servidor con una
única instalación de Apache
– Más sencillo el prototipado y desarrollo de módulos
● Desventajas DSO
– El servidor es un 20% más lento en el arranque
– El servidor en un 5% más lento en funcionamiento
31
32. Irontec – Curso Apache
Instalación – Códido fuente
● Ya tenemos Apache compilado y con posibilidad de
añadir módulos dinámicamente. Vamos a compilar
PHP5 como DSO :)
32
33. Irontec – Curso Apache
Instalación – Códido fuente
● PHP es un lenguaje de programación interpretado,
diseñado originalmente para la creación de páginas
web dinámicas. Es usado principalmente en
interpretación del lado del servidor (server-side
scripting).
● Es un lenguaje multiplataforma.
● Capacidad de conexión con la mayoría de los
manejadores de base de datos.
● ES LIBRE.
http://es.wikipedia.org/wiki/.php
33
34. Irontec – Curso Apache
Instalación – Códido fuente
● Descargamos el código fuente de PHP:
wget http://es2.php.net/get/php-5.2.9.tar.gz/from/es.php.net/mirror
● Comprobamos que la suma de integridad es
correcta con md5sum:
$md5sum php-5.2.9.tar.gz 98b647561dc664adefe296106056cf11 php-
5.2.9.tar.gz
● Configuramos la compilación como módulo de
Apache, con soporte Mysql y GD.
./configure –-with-apxs2=/usr/local/apache2/bin/apxs
--with-mysql
--with-gd
34
35. Irontec – Curso Apache
Instalación – Códido fuente
● Cargamos el módulo en Apache
LoadModule php5_module modules/libphp5.so
● Configuramos Apache para que interprete las
páginas .php mediante el módulo de PHP
AddType application/x-httpd-php .php
● Configuramos Apache para que busque páginas
.php índice en caso de no solicitar una.
DirectoryIndex index.html index.php
35
36. Irontec – Curso Apache
Instalación – Códido fuente
● Para probar el funcionamiento de PHP tenemos que
crear una página en... ¡PHP! :D
● En el directorio raíz de Apache creamos un fichero
llamado info.php con el siguiente contenido:
<? phpinfo() ?>
● Accedemos a la página desde nuestro navegador.
36
37. Irontec – Curso Apache
Instalación – Paquetes binarios
● Podemos instalar Apache2, PHP, etc. desde apt-get
apt-get install apache2 php5 php5-mysql php5-gd
● Apache estará automáticamente configurado con
soporte php5.
● En el futuro si deseamos actualizar (por algún
parche de seguridad) podremos hacerlo mediante
apt-get sin tener que recompilar nada.
● Apt-get es más sencillo y simple, pero compilar es
más universal.
37
38. Irontec – Curso Apache
Instalación – Paquetes binarios
● Apache instalado por apt-get viene preparado para
trabajar con módulos DSO. Dispone de sus propios
comandos para habilitar y deshabilitar módulos.
● Habilitar módulo SSL
a2enmod ssl
● Deshabilitar módulo SSL
a2dismod ssl
● Con cada cambio es necesario reiniciar Apache.
● Los modulos disponibles están en:
/etc/apache2/mods-available
● Los módulos habilitados están en:
/etc/apache2/mods-enabled
38
39. Irontec – Curso Apache
Configuración
● Apache dispone de cientos de directivas de
configuración.
● No nos podemos saber todas de memoria, por lo
que tendremos que memorizar una URL :)
http://httpd.apache.org/docs/2.2/mod/directives.html
● El fichero de configuración general se encuentra en:
/etc/apache2/apache2.conf
● Existe un VirtualHost por defecto.
/etc/apache2/sites-available/default
● Los puertos de escucha se configuran en:
/etc/apache2/ports.conf
39
40. Irontec – Curso Apache
Configuración
● .htaccess es un archivo de texto oculto que contiene
una serie de directivas para el servidor Apache.
● Cada vez que visitamos una web, Apache busca en
la carpeta accedida el fichero .htaccess para cargar
las opciones que en el se encuentran.
● Es posible deshabilitar el uso de estas directivas
con:
AllowOverride None
● Y habilitarlas mediante:
AllowOverride All
40
41. Irontec – Curso Apache
Configuración
● En general los archivos .htaccess no se deben usar
nunca, a menos que no se tenga acceso al
archivo de configuración del servidor (Ej: ISP)
● Se debe usar el contenedor <Directory>
● Razones:
– Eficiencia: Apache debe buscar ficheros .htaccess por
todo el arbol de directorios, en busca de herencias
– Seguridad: Se permite a los usuarios hacer cambios
sobre las directivas del servidor. Cambios sobre los
que no se tiene control.
41
42. Irontec – Curso Apache
Configuración
● Las distintas directivas solo pueden aplicarse en
algunos contextos, por lo que antes de aplicarlo es
necesario saber donde.
● Contextos de aplicación
– Servidor
– Host Virtual
– <Directory>,<Location>,<Files>,<Proxy>
– Fichero .htaccess
42
43. Irontec – Curso Apache
Configuración
● La directiva <directory> nos permite establecer una
configuración específica a un directorio del sistema
de ficheros.
<Directory /var/www/info/>
AllowOverride None
DirectoryIndex prueba.php
</Directory>
● Ahora cada vez que accedamos a http://ip/info nos aplicará la
configuración indicada en la directiva Directory anterior.
43
44. Irontec – Curso Apache
Configuración
● La directiva Allow/Deny nos permiten definir a quien
damos acceso a nuestra web:
Order Deny,Allow
Deny from all
Allow from 192.168.1.101
● Estas directivas deben ser aplicadas a nivel
<Directory> o mediante .htaccess
● El modulo encargado de darnos esta funcionalidad
es:
mod_authz_host
44
45. Irontec – Curso Apache
Configuración
● Location es similar a Directory. En este caso
Location hace referencia a una URL, en lugar de
una carpeta del sistema de ficheros.
● Location no debe ser usado para establecer
permisos a nivel del sistema de ficheros, ya que una
misma carpeta puede ser accedida desde diferentes
zonas.
<Location /info>
Deny from All
</Location>
45
46. Irontec – Curso Apache
Configuración
● La directiva Files nos permite establecer permisos a
nivel de ficheros mediante expresiones regulares.
● Usando esta directiva junto con la vista
anteriormente, es posible permitir acceso a ciertos
ficheros a un número limitado de usuarios.
● Ejemplo, no permitir el acceso a nadie a las
imagenes .jpg
<Files ~ quot;.jpg$quot;>
Deny from all
</Files>
46
47. Irontec – Curso Apache
Configuración
● Limit y LimitExcept nos permiten denegar en funcion
de la petición que se haga al servidor.
● Las peticiones validas son:
GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH,
PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK y UNLOCK
● Con Limit indicamos a que peticiones habilitar los
controles. Las peticiones no indicadas no se ven
afectadas.
● Con LimitExcept indicamos que peticiones no se ven
afectadas por los controles.
● LimitExcept != Limit
Denegad la descarga de páginas web a todo el
mundo excepto a mi :)
47
48. Irontec – Curso Apache
Configuración
● Redirect nos permite redirigir una petición a otra
página.
● De esta forma, si movemos un documento a otro
lado, es posible que los antiguos usuarios puedan
seguir accediendo al contenido.
Redirect /google http://google.es
● Si alguien accede a /google/prueba, se le reenviara
a google.es/prueba.
● Se pueden establecer distintos códigos de
redirección:
301 Redirección permanente
302 Redirección temporal
303 El contenido a sido reemplazado
410 El contenido ya no existe
48
49. Irontec – Curso Apache
Configuración
● ErrorLog y CustomLog nos permiten definir donde
y como se guardarán los Logs de error y Acceso.
● Podemos guardar los logs en la carpeta que
queramos, siempre y cuando Apache tenga
permisos para escribir en ella.
● El formato del log es muy configurable, de forma
que podamos guardar solo aquellos datos que nos
interesen.
49
50. Irontec – Curso Apache
Configuración
● CustomLog tiene la siguiente sintaxis:
CustomLog logs/access_log quot;%h %l %u %t quot;%rquot; %>s %bquot;
● En primer lugar se indica la directiva, el fichero de
destino y entrecomillado el formato que tendrá.
● Para definir el formato se está haciendo uso de la
directiva LogFormat
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
● Cread el log de Acceso en /tmp/acceso con el
siguiente formato:
192.168.1.101 - [27/Feb/2009:15:10:04 +0100]
● Los logs de error se definen con ErrorLog.
● Cread el log de Error en /tmp/error con el formato
anterior.
50
51. Irontec – Curso Apache
Configuración
● En caso de disponer de un gran número de
Servidores Virtuales y si estos loggean en diferentes
archivos puede darse el caso que Apache se quede
sin descriptores de fichero.
● Son objetos que usan los programas para leer o
escribir un archivo, socket o dispositivo.
● Apache utiliza:
– 10 a 20 descriptores de fichero para uso interno
– 1 para cada archivo de error (ErrorLog)
– 1 para cada directiva de log distinta (CustomLog)
● El sistema operativo se encarga de limitar el
número de descriptores de fichero que puede
abrir un programa determinado.
51
52. Irontec – Curso Apache
Configuración
●El límite de Linux es de 1024 descriptores de
fichero.
● Límites:
– Kernel: depende del SO. En Linux
– Hardware
– Software
# ulimit -n
1024
52
53. Irontec – Curso Apache
Configuración
● MaxClients nos permite definir el número máximo de
conexiones que pueden ser atentidas
simultáneamente.
● El número a indicar dependerá de las características
de la máquina.
● A más peticiones simultaneas, mas necesidad de
memoria RAM.
MaxClients 100
53
54. Irontec – Curso Apache
Configuración
● Alias es como un enlace simbólico a nivel de
Apache
● Nos permite crear enlaces para acceder a
documentos que no están en la raíz de Apache.
● Si hacemos un alias a un directorio externo de la
raíz, es necesario dar permisos de acceso a la
misma.
Alias /tmp /tmp
<Directory /tmp>
Order allow,deny
Allow from all
</Directory>
54
55. Irontec – Curso Apache
Configuración
● Options nos permite especificar que características
de servidor Apache estan disponibles para el
directorio en cuestión.
<Directory /tmp>
Options Indexes FollowSymLinks
</Directory>
● Con dichas opciones nos mostrará el contenido de
la carpeta en el navegador y seguirá los enlaces.
http://httpd.apache.org/docs/2.2/mod/core.html#options
55
56. Irontec – Curso Apache
Configuración
● Cuando una carpeta tiene la opcion index podremos
navegar por el contenido y hacer click en lso
ficheros.
● Las opciones de index se establecen con
IndexOptions.
● Cambios para el index de tmp
– Los iconos deben ser enlaces
– No se debe mostrar la fecha de última modificación
56
57. Irontec – Curso Apache
Configuración
● Con LimitRequestBody especificamos el tamaño
máximo en bytes que se pueden especificar en una
petición.
● LimitRequestBody nos puede ayudar de varias
maneras:
– Defendiendonos ante posibles denegaciones de
servicio.
– Limitando el tamaño de los fichero que un usuario
puede subir a nuestro servidor.
LimitRequestBody 102400
57
58. Irontec – Curso Apache
Configuración
● Listen nos permite especificar en que puertos va a
escuchar Apache las peticiones.
● Por defecto es 80 y 443 si se tiene https.
● También es posible especificar un puerto por cada
interfaz del sistema
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
58
59. Irontec – Curso Apache
Autenticación de usuarios
● Es posible controlar el acceso al contenido del
servidor mediante usuario / contraseña
● El módulo encargado es mod_auth
● Generación de archivo de usuarios
# htpasswd -c /etc/apache2/passwd/.passwd miguel
New password:
Re-type new password:
Adding password for user miguel
miguel:YXP3FBeNjIHDs
# htpasswd -c /etc/apache2/passwd/.passwd iker
New password:
Re-type new password:
Adding password for user iker
miguel:YXP3FBeNjIHDs
iker:g1Zy7z22KMSko
59
60. Irontec – Curso Apache
Autenticación de usuarios
● Solicitar al servidor que pida una contraseña
– En el archivo de configuración general (httpd.conf)
dentro de una sección <Directory>.
AuthType Basic
AuthName quot;Acceso Restringidoquot;
AuthUserFile /etc/apache2/passwd/.passwd
Require user miguel
– A través del archivo .htaccess
● Igual que el modo anterior
● Es necesario habilitar las directivas de autenticación
AllowOverride AuthConfig
60
61. Irontec – Curso Apache
Autenticación de usuarios
● Generación de archivo de grupos de usuarios
/etc/apache2/.group
Grupo1: miguel iker
● Configuración de Apache para soporte de
validación por grupos de usuarios
AuthType Basic
AuthName quot;Acceso solo para gruposquot;
AuthUserFile /etc/apache2/passwd/.passwd
AuthGroupFile /etc/apache2/passwd/.group
Require group Grupo1
61
62. Irontec – Curso Apache
Autenticación de usuarios
● Valores que puede adoptar la directriz Require:
Require user <nombre_de_usuario>
Require group <nombre_de_grupo>
Require valid-user
● Inconvenientes
– Cada acceso al directorio protegido hace una nueva
comprobación del nombre de usuario y contraseña.
Esto carga de forma considerable el servidor.
– Es útil para número reducido de usuarios.
62
63. Irontec – Curso Apache
Certificados
● Introducción a la Criptografía
● Criptografía simétrica o de Clave Privada
● Criptografía de Clave Pública
● Resúmenes o Hashes
● Firmas Digitales
● Certificados
63
64. Irontec – Curso Apache
Certificados
●Se encargan de asociar una clave pública con
la identidad real de un individuo, servidor u otra
entidad, conocido como sujecto.
● Como Nombre Distinguido se conoce a una
serie de información que distingue a una
entidad:
– Nombre Común
– Compañía
– Departamento
– Ciudad
– Provincia
– País
64
65. Irontec – Curso Apache
Certificados
● Certificados
● Información que contiene un Certificado
– Sujeto:
● Nombre Distinguido
● Clave Pública
– Expendedor
● Nombre Distinguido
● Firma Digital
– Periodo de Validez
– Información Administrativa
● Versión
● Número de Serie
65
66. Irontec – Curso Apache
Certificados
● Autoridades de Certificación
● Son las entidades encargadas de expedir y
gestionar los certificados
● Hay 3 tipos de Autoridades de Certificación
– Oficiales y reconocidas por las herramientas más
comunes
● Verisign, Thawte, Comodo...
– Oficiales y no reconocidas por las herramientas
más comunes
● Izenpe, Ceres, Camerfirma...
– No Oficiales
● Nosotros mismos ;-)
66
67. Irontec – Curso Apache
Certificados
● Consideraciones Previas
● La longitud de las claves privadas para SSL
debe ser 512 o 1024 bits (recomendado),
para compatibilidad con todos los
navegadores.
● Una secuencia SSL se compone de:
– Negociación de cifrado a utilizar durante el
intercambio de datos (criptografía simétrica)
– Establecer e intercambiar una clave de sesión
– Puede autenticar al servidor por parte del cliente
– Puede autenticar al cliente por parte del servidor
67
68. Irontec – Curso Apache
Certificados
● Creación de Certificados
● Generar la clave privada del servidor
– Cifrada con criptografía simétrica por seguridad
# openssl genrsa -des3 -out apache.key 1024
– Sin cifrar
# openssl genrsa -out apache.key 1024
● Securizar la clave para que nadie tenga
acceso
# chmod 400 apache.key
● Generar la Solicitud de Certificado (CSR)
# openssl req -new -key apache.key -out dominio.csr
● Las Solicitudes de Certificado se realizan para
un dominio concreto.
68
69. Irontec – Curso Apache
Certificados
● El siguiente paso consiste en hacer llegar la
Solicitud de Certificado (CSR) a una
Autoridad de Certificación (CA) para generar
el Certificado (CRT)
69
70. Irontec – Curso Apache
Certificados
● Creación de Certificados
● Autoridad de Certificación Oficial
– Se envía, habitualmente, a través de un formulario
web a la empresa certificadora
– Validan si se ha pagado, en caso de ser
necesario.
– Validan nuestras credenciales.
– Generan el Certificado (.crt), con su clave
privada y con la Solicitud de Certificado
remitida por nosotros.
– Remiten el certificado y las instrucciones de
instalación vía mail
– La Solicitud de Certificado ya no es válida.
70
71. Irontec – Curso Apache
Certificados
● Creación de Certificados
● Certificados auto-firmados
– Generar la Clave Privada de nuestra propia CA
# openssl genrsa -out mica.key 1024
– Generar el Certificado auto-firmado
# openssl req -new -x509 -nodes -sha1 -days 365 -key
mica.key -out dominio.crt
71
72. Irontec – Curso Apache
Certificados
● Instalar Certificados en Apache
● Es necesario que Apache disponga del módulo
mod_ssl compilado. mod_ssl ofrece
soporte SSL v2/v3 y TLS v1.
● Cuando EEUU relajó las restricciones en
materia de exportación criptográfica,
mod_ssl entró a formar parte de Apache
(Apache 2).
● Si no lo tiene:
– Compilado estáticamente:
./configure –-enable-ssl
make && make install
– Como DSO:
a2enmod ssl
72
73. Irontec – Curso Apache
Certificados
● Instalar Certificados en Apache
● Configurar un host virtual para alojar el
dominio con certificado auto-firmado
<VirtualHost IP:443>
Listen 443
DocumentRoot /var/www
SSLEngine on
SSLCertificateFile /usr/local/apache2/ssl/mica.crt
SSLCertificateKeyFile /usr/local/apache2/ssl/mica.key
</VirtualHost>
73
74. Irontec – Curso Apache
Certificados
● Conversión de Formatos
● El formato por defecto de OpenSSL es PEM.
● Algunas aplicaciones (IExplorer) requieren el
formato DER
● Algunas aplicaciones (Mozilla) requieren el
formato PKCS#12
● Para transformar de formato PEM a DER:
# openssl x509 -in certificado.pem -out certificado.der -outform DER
● Para transformar de formato PEM a PKCS#12
# openssl pkcs12 -export -clcerts -in certificado.pem -inkey
server.key -out certificado.p12
74
75. Irontec – Curso Apache
VirtualHost
● El uso de VirtualHost nos permite alojar diferentes
páginas con sus dominios en un solo servidor
Apache.
● Los VirtualHost pueden estar basados en IP (que
cada sitio web tenga su ip) o basados en nombre
(con una sola IP sitios web con diferentes nombres).
● Imaginemos un proveedor de Hosting que tiene
1000 clientes en una máquina.
● El fichero que hemos estado modificando todo el
rato, 000-default, es un virtual host :)
75
76. Irontec – Curso Apache
VirtualHost
● Cada VirtualHost se puede configurar por separado,
teniendo sus logs, directivas y restricciones propias.
● Dichos ficheros de configuración se guardan en
/etc/apache2/sites-available
● Los comandos para Inicar o Parar un VirtualHost es:
# a2ensite mihost
Enabling site mihost.
# a2dissite mihost
Site mihost disabled.
76
77. Irontec – Curso Apache
VirtualHost
● Para configurar un VirtualHost por nombre son
necesarias estas directivas:
– <VirtualHost>
– NameVirtualHost
– ServerName
– ServerAlias
– DocumentRoot
77
78. Irontec – Curso Apache
VirtualHost
● NameVirtualHost indica a Apache que vamos a
utilizar VirtualHosts basados en nombre.
● Se debe especificar al principio del fichero.
NameVirtualHost 192.168.1.103:80
● Se puede especificar cualquier IP que tengamos en
el sistema así como cualquier puerto.
● La IP se puede sustituir por un *, pero nos dará
Warning al arrancar (aunque funciona
perfectamente)
[Fri Feb 27 19:39:46 2009] [warn] NameVirtualHost *:80 has no
VirtualHosts
78
79. Irontec – Curso Apache
VirtualHost
● Una vez que hemos indicado que nuestros hosts
serán por nombre hay que configurar los
VirtualHosts.
● <VirtualHost> nos permite indicar en que IP y puerto
está escuchando Apache las peticiones. Por lo
general será:
<VirtualHost 192.168.1.103:80>
● La directiva debe cerrarse con:
</VirtualHost>
● Cuando trabajamos con nombres, es recomendable
especificar la IP para evitar mensajes de Warning:
79
80. Irontec – Curso Apache
VirtualHost
● Dentro de <VirtualHost> es donde llevaremos a
cabo todas las configuraciones necesarias. Como
mínimo se recomienda:
ServerName mihost.com
ServerAlias www.mihost.com
DocumentRoot /var/www/info
● Con ServerName indicamos el nombre del
VirtualHost. Por lo tanto, cuando entremos con
Firefox en mihost.com estaremos accediendo
realmente al VirtualHost
● ServerAlias nos permite añadir distintos Alias al
dominio.
● DocumenRoot nos ayudará a especificar donde se
encuentra fisicamente la Web a servir.
80
81. Irontec – Curso Apache
VirtualHost
● Configurar un VirtualHost para mihost.com tal y
como se ha indicado antes
● Crear un index.php que me muestre la información
de PHP
● Los logs se deben guardar en /var/log/mihost
● Si yo entro a mihost.com me debe dejar acceder sin
problemas. Pero todos los demas, al intentar entrar,
les debe pedir un usuario y contraseña para acceder
81
82. Irontec – Curso Apache
VirtualHost
● Montad otro virtualhost que se llame
mihostseguro.com
● Debe ser https y escuchar en el puerto 443
● El DocumentRoot debe ser /var/www/seguro/
● El index.html tiene que tener como contenido
vuestro nombre.
82
83. Irontec – Curso Apache
VirtualHost
● Descargar el sistema de blogs wordpress.org
● Instalarlo en nuestro servidor Apache, siendo
accesible desde miblog.com :)
83
84. Irontec – Curso Apache
Awstats
● Otra forma de ver los logs :)
84
85. Irontec – Curso Apache
Awstats
● Awstats es un script en perl que lee nuestros logs y
nos genera gráficas de accesos.
● Entre la información que se muetra está:
– Visitas por día, mes, semana...
– Ips de origen
– URL de origen desde la que nos visitan
– Navegador utilizado
– País de procedencia del visitante
– Documentos más vistos
– Palabras usadas en los motores de busqueda
– Sistema operativo
– ....
85
86. Irontec – Curso Apache
Awstats
● La instalación se puede hacer desde apt.
apt-get install awstats
● El fichero de configuración se encuentra en
/etc/awstats/awstats.conf
● El CGI se encuentra en
/usr/lib/cgi-bin/awstats.pl
● Las estadisticas se actualizan cada 10 minutos
mediante una tarea programada.
86
87. Irontec – Curso Apache
Awstats
● Es posible configurar estadísticas para distintos
dominios.
● Soporta muchos tipos de logs y es configurable. El
soporte para los logs de Apache funciona por
defecto.
● Si hemos modificado los logs de Apache para tener
unos personalizados, será necesario configurar
Awstats para que conozca el formato de los logs.
87
88. Irontec – Curso Apache
Awstats
● Tenemos que instalar awstats y configurarlo para
ver los logs de acceso a nuestro blog.
● Para tener algo que ver, necesitamos generar
visitas...
● Awstats será accesible desde
http://miblog.com/awstats
88
89. Irontec – Curso Apache
AB
● Apache provee una herramienta para el testeo de
rendimiento, Apache Benchmark (ab).
● Nos permite simular miles de accesos
● Las opciones más importantes son:
● -n número de conexiones a realizar
● -c número de conexiónes concurrentes
● -k usar keepalive
89
90. Irontec – Curso Apache
AB
ab -n 1000 -c 10 http://mihost.com/awstats
● Realiza 1000 conexiones, 10 concurrentes a la URL
indicada:
Concurrency Level: 10
Time taken for tests: 0.331 seconds
Complete requests: 1000
Failed requests: 0
● Comparad los datos haciendo solicitudes normales y
con keep alive.
● Poned valores exagerados y comprobad como se
consumen los recursos del sistema.
90
91. Irontec – Curso Apache
Autores
● Miguel Angel Nieto
● Iker Sagasti
● Daniel Gutierrez
91