SlideShare una empresa de Scribd logo
1 de 91
Descargar para leer sin conexión
Apache




Miguel Ángel Nieto <miguelangel@irontec.com>
 Irontec – Internet y Sistemas sobre GNU/Linux
Irontec – Curso Apache

                                         Protocolo HTTP

●   Hypertext Transfer Protocol
●   Desde 1994
●   RFC 2616
●   Sobre TCP.
●   Puertos por defecto:
      –   No seguro: tcp 80
      –   Seguro (ssl/tls): 443
●   Versiones: 0.9, 1.0, 1.1 (la más usada), 1.2
●   Protocolo stateless




                                                             2
Irontec – Curso Apache

                                                Protocolo HTTP

●   Elementos:
      –   Cliente=user agent: web browser, spider, wget, curl,...
      –   Servidor
      –   Intermediarios: Proxy, gateway, túnel




                                                                    3
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Irontec – Curso Apache

          Introducción




                         18
Irontec – Curso Apache

                                               Instalación

●   Código fuente
●   Paquete binario para la distribución Debian
     GNU/Linux

         ¿Ventajas y desventajas de cada uno?




                                                            19
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Irontec – Curso Apache

                                               VirtualHost

●   Para configurar un VirtualHost por nombre son
    necesarias estas directivas:
      –   <VirtualHost>
      –   NameVirtualHost
      –   ServerName
      –   ServerAlias
      –   DocumentRoot




                                                            77
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
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
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
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
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
Irontec – Curso Apache

                                                VirtualHost

●   Descargar el sistema de blogs wordpress.org
●   Instalarlo en nuestro servidor Apache, siendo
    accesible desde miblog.com :)




                                                             83
Irontec – Curso Apache

                                                     Awstats

●   Otra forma de ver los logs :)




                                                             84
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
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
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
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
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
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
Irontec – Curso Apache

                                           Autores

●   Miguel Angel Nieto
●   Iker Sagasti
●   Daniel Gutierrez




                                                  91

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

A4 instalación de koha
A4   instalación de kohaA4   instalación de koha
A4 instalación de koha
 
2.13 ftp
2.13 ftp2.13 ftp
2.13 ftp
 
Guía instalación koha por paquetes en ubuntu 16.04 lts actualizada
Guía instalación koha por paquetes en ubuntu 16.04 lts actualizadaGuía instalación koha por paquetes en ubuntu 16.04 lts actualizada
Guía instalación koha por paquetes en ubuntu 16.04 lts actualizada
 
Interchange CMS - e-commerce
Interchange CMS - e-commerceInterchange CMS - e-commerce
Interchange CMS - e-commerce
 
Squid proxy transparente en ubuntu
Squid proxy transparente en ubuntuSquid proxy transparente en ubuntu
Squid proxy transparente en ubuntu
 
Indicacion de fecha de examen
Indicacion de fecha de examenIndicacion de fecha de examen
Indicacion de fecha de examen
 
Backtrack 5 manual traducido
Backtrack 5 manual traducidoBacktrack 5 manual traducido
Backtrack 5 manual traducido
 
Servicio FTP en Ubuntu
Servicio FTP en UbuntuServicio FTP en Ubuntu
Servicio FTP en Ubuntu
 
Configuración de servidores en CentOs 6.3
Configuración de servidores en CentOs 6.3Configuración de servidores en CentOs 6.3
Configuración de servidores en CentOs 6.3
 
Apache
Apache Apache
Apache
 
Apache: instalación y configuración en Ubuntu Server y Windows Server
Apache: instalación y configuración en Ubuntu Server y Windows ServerApache: instalación y configuración en Ubuntu Server y Windows Server
Apache: instalación y configuración en Ubuntu Server y Windows Server
 
Wireshark
WiresharkWireshark
Wireshark
 
Mis comandos favoritos en linux parte 2
Mis comandos favoritos en linux parte 2Mis comandos favoritos en linux parte 2
Mis comandos favoritos en linux parte 2
 
Trabajo sobre FTP Seguro
Trabajo sobre FTP SeguroTrabajo sobre FTP Seguro
Trabajo sobre FTP Seguro
 
Puertos de linux
Puertos de linuxPuertos de linux
Puertos de linux
 
wireshark
wiresharkwireshark
wireshark
 
Introducció a les Aplicació Web
Introducció a les Aplicació WebIntroducció a les Aplicació Web
Introducció a les Aplicació Web
 
Apache.http ftp-smtp
Apache.http ftp-smtpApache.http ftp-smtp
Apache.http ftp-smtp
 
1212
12121212
1212
 

Similar a HTTP Apache

Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVIrontec
 
Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011
Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011
Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011Desarrollos NEA
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLJoaquín Salvachúa
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0wcuestas
 
Http 1.1 clase 4 - curso front-end 2014 - open webinars
Http 1.1   clase 4 - curso front-end 2014 - open webinarsHttp 1.1   clase 4 - curso front-end 2014 - open webinars
Http 1.1 clase 4 - curso front-end 2014 - open webinarsOpenWebinars.net
 
Kaazing Gateway + Apache Active MQ + Javascript + Stomp
Kaazing Gateway + Apache Active MQ + Javascript + StompKaazing Gateway + Apache Active MQ + Javascript + Stomp
Kaazing Gateway + Apache Active MQ + Javascript + StompIrontec
 
Semana 1 tecnologias web
Semana 1   tecnologias webSemana 1   tecnologias web
Semana 1 tecnologias webINFOVIC
 
Protocolos de servidor
Protocolos de servidorProtocolos de servidor
Protocolos de servidorAngel Cisneros
 
capa de aplicacion-sisco-netwokrs.pptx
capa de aplicacion-sisco-netwokrs.pptxcapa de aplicacion-sisco-netwokrs.pptx
capa de aplicacion-sisco-netwokrs.pptxCESARANDRESDIAZGONZA
 
ROA - Resource Oriented Architecture
ROA - Resource Oriented ArchitectureROA - Resource Oriented Architecture
ROA - Resource Oriented ArchitectureJavier Lafora Rey
 
Apache ha muerto, Viva Lighttpd
Apache ha muerto, Viva LighttpdApache ha muerto, Viva Lighttpd
Apache ha muerto, Viva Lighttpdruna
 
Hacia La Web Sincrona
Hacia La Web SincronaHacia La Web Sincrona
Hacia La Web SincronaIrontec
 

Similar a HTTP Apache (20)

Apache
ApacheApache
Apache
 
Apache avanzado
Apache avanzadoApache avanzado
Apache avanzado
 
Protocolo http
Protocolo httpProtocolo http
Protocolo http
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPV
 
Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011
Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011
Ajax reverse (Comet) con ASP.NET MVC - JUTI 2011
 
Curso de php
Curso de phpCurso de php
Curso de php
 
Fundamentos de la web
Fundamentos de la webFundamentos de la web
Fundamentos de la web
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTML
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0
 
Protocol HTTP
Protocol HTTPProtocol HTTP
Protocol HTTP
 
Http 1.1 clase 4 - curso front-end 2014 - open webinars
Http 1.1   clase 4 - curso front-end 2014 - open webinarsHttp 1.1   clase 4 - curso front-end 2014 - open webinars
Http 1.1 clase 4 - curso front-end 2014 - open webinars
 
Kaazing Gateway + Apache Active MQ + Javascript + Stomp
Kaazing Gateway + Apache Active MQ + Javascript + StompKaazing Gateway + Apache Active MQ + Javascript + Stomp
Kaazing Gateway + Apache Active MQ + Javascript + Stomp
 
Servicios de comunicaciones (i)
Servicios de comunicaciones (i)Servicios de comunicaciones (i)
Servicios de comunicaciones (i)
 
Semana 1 tecnologias web
Semana 1   tecnologias webSemana 1   tecnologias web
Semana 1 tecnologias web
 
Protocolos de servidor
Protocolos de servidorProtocolos de servidor
Protocolos de servidor
 
capa de aplicacion-sisco-netwokrs.pptx
capa de aplicacion-sisco-netwokrs.pptxcapa de aplicacion-sisco-netwokrs.pptx
capa de aplicacion-sisco-netwokrs.pptx
 
ROA - Resource Oriented Architecture
ROA - Resource Oriented ArchitectureROA - Resource Oriented Architecture
ROA - Resource Oriented Architecture
 
Protocolos redes
Protocolos redesProtocolos redes
Protocolos redes
 
Apache ha muerto, Viva Lighttpd
Apache ha muerto, Viva LighttpdApache ha muerto, Viva Lighttpd
Apache ha muerto, Viva Lighttpd
 
Hacia La Web Sincrona
Hacia La Web SincronaHacia La Web Sincrona
Hacia La Web Sincrona
 

Más de Miguel Angel Nieto (13)

Query planner
Query plannerQuery planner
Query planner
 
MySQL 5.6 GTID in a nutshell
MySQL 5.6 GTID in a nutshellMySQL 5.6 GTID in a nutshell
MySQL 5.6 GTID in a nutshell
 
MySQL - High Availability - Load Balacing - Cluster
MySQL - High Availability - Load Balacing - ClusterMySQL - High Availability - Load Balacing - Cluster
MySQL - High Availability - Load Balacing - Cluster
 
Curso SMTP avanzado
Curso SMTP avanzadoCurso SMTP avanzado
Curso SMTP avanzado
 
Mysql Administracion
Mysql AdministracionMysql Administracion
Mysql Administracion
 
Replicación Mysql
Replicación MysqlReplicación Mysql
Replicación Mysql
 
Tomcat y Jboss
Tomcat y JbossTomcat y Jboss
Tomcat y Jboss
 
Curso SMTP
Curso SMTPCurso SMTP
Curso SMTP
 
Curso básico Linux
Curso básico LinuxCurso básico Linux
Curso básico Linux
 
Curso Squid avanzado
Curso Squid avanzadoCurso Squid avanzado
Curso Squid avanzado
 
Nfs, Nis, DHCP
Nfs, Nis, DHCPNfs, Nis, DHCP
Nfs, Nis, DHCP
 
Monitorización
MonitorizaciónMonitorización
Monitorización
 
Administración Zimbra
Administración ZimbraAdministración Zimbra
Administración Zimbra
 

Último

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Último (10)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

HTTP Apache

  • 1. Apache Miguel Ángel Nieto <miguelangel@irontec.com> Irontec – Internet y Sistemas sobre GNU/Linux
  • 2. Irontec – Curso Apache Protocolo HTTP ● Hypertext Transfer Protocol ● Desde 1994 ● RFC 2616 ● Sobre TCP. ● Puertos por defecto: – No seguro: tcp 80 – Seguro (ssl/tls): 443 ● Versiones: 0.9, 1.0, 1.1 (la más usada), 1.2 ● Protocolo stateless 2
  • 3. Irontec – Curso Apache Protocolo HTTP ● Elementos: – Cliente=user agent: web browser, spider, wget, curl,... – Servidor – Intermediarios: Proxy, gateway, túnel 3
  • 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
  • 18. Irontec – Curso Apache Introducción 18
  • 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