SlideShare una empresa de Scribd logo
1 de 149
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: Mozilla/5.0 (X11; U; Linux i686; en-US;
            rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy)
            Firefox/2.0.0.12 Paros/3.2.13
      –   Accept: text/xml,text/plain;q=0.8,image/png,*/*;q=0.5
      –   Accept-Language: es-es,en-us;q=0.7,en;q=0.3
      –   Accept-Charset: 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 destinos6
Irontec – Curso Apache

                                                      Protocolo HTTP

●   Mensajes de respuesta
●   Ej:
      –   HTTP/1.1 200 OK
      –   Date: Thu, 27 Mar 2008 21:29:14 GMT
      –   Content-Type: text/html; charset=US-ASCII
      –   Server: 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-encoding: gzip, deflate
            ●   De servidor. Ej: Content-encoding: gzip
      –   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 Proxys
●   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ódigo 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ódigo 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 "Ruediger Pluem 
     <rpluem@apache.org>" importada
     gpg: no se encuentran claves absolutamente fiables
     gpg: Cantidad total procesada: 1
     gpg:               importadas: 1


                                                                       21
Irontec – Curso Apache

                                      Instalación – Código 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 "Ruediger Pluem <rpluem@apache.org>"
     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

                                           Instalación – Código fuente

●   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ódigo 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ódigo 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 "Ruediger Pluem <rpluem@apache.org>"




●   ¡Firma digital verificada! Podemos instalar el software
      con seguridad.
                     http://www.gnupg.org/



                                                                              25
Irontec – Curso Apache

                             Instalación – Código 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ódigo 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ódigo 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 o28
Irontec – Curso Apache

                                   Instalación – Código 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ódigo 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ódigo 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ódigo 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ódigo 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ódigo 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ódigo 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ódigo 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 ~ ".jpg$">
         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 "%h %l %u %t "%r" %>s %b"
●   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 "Acceso Restringido"
                          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 "Acceso solo para grupos"
     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

                                              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 :)




                                                             63
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.




                                                                64
Irontec – Curso Apache

                                              VirtualHost

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




                                                             65
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 *




                                                            66
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



                                                             67
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
                                                            68
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




                                                               69
Irontec – Curso Apache

   Certificados




                   70
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




                                                         71
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
                                                     72
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
                                                          73
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 ;-)
                                                                  74
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




                                                                 75
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.

                                                                  76
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)




                                                          77
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.

                                                                 78
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




                                                             79
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
                                                          80
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>
                                                                    81
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

                                                                    82
Irontec – Curso Apache

                                      Certificado cliente

●   Nuestros usuarios pueden autenticarse con un usuario y
    clave o mediante un certificado cliente
●   Estos certificados se crean a partir de una CA
●   Solo podrá entrar si tiene instalado un certificado
    válido:
      –   No caducado
      –   No revocado
●   Vamos a proteger nuestro VirtualHost, de forma que
    solo sea accesible mediante un certificado válido




                                                             83
Irontec – Curso Apache

                                       Certificado cliente

●   Primero generamos la CA de la que colgarán todos los
    certificados cliente
●   Generamos un certificado cliente, para ello creamos un
    fichero de configuración específico que indicara que
    tipo de certificado es:
cat config.txt 
basicConstraints = critical,CA:FALSE
extendedKeyUsage = clientAuth
●   Generamos un certificado cliente:
openssl genrsa ­out miguelangel.key 2048
openssl req ­new ­key private/miguelangel.key ­out 
miguelangel.csr
openssl x509 ­CA CA.crt ­CAkey private/CA.key ­req ­in 
miguelangel.csr ­set_serial 2 ­days 3650 ­extfile 
config.txt ­sha1 ­out miguelangel.crt
                                                              84
Irontec – Curso Apache

                                     Certificado cliente

●   Lo exportamos a un formato aceptable por los
    navegadores, por ejemplo p12:
openssl pkcs12 ­export ­in miguelangel.crt ­inkey 
private/miguelangel.key ­certfile CA.crt ­out 
miguelangel.p12
●   Configuramos Apache:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/test1.crt
SSLCertificateKeyFile /etc/apache2/ssl/test1.key
SSLCACertificateFile /etc/ssl/clientes/CA.crt
SSLVerifyClient require 




                                                             85
Irontec – Curso Apache

                                     Certificado cliente

●   Cuando no queremos seguir dando acceso a un usuario
    debemos revocar su certificado
openssl ca ­revoke miguelangel.crt
●   Una vez revocado, generamos/actualizamos el fichero
    de revocados que leerá apache
openssl ca ­gencrl ­out revovados.crl
●   Configuramos Apache para que lo lea :)
SSLCARevocationFile /etc/apache2/ssl/revocados.crl




                                                                86
Irontec – Curso Apache

Balanceo de carga




                      87
Irontec – Curso Apache

                                               Balanceo de carga

●   Cuando el servidor no es capaz de responder a las
    peticiones es necesario aumentar de alguna manera su
    rendimiento
      –   Más memoria RAM
      –   Más procesador
      –   Discos SSD
      –   RAID con write cache (con bateria)
      –   Proxy Inverso
      –   Comprar más servidores




                                                                     88
Irontec – Curso Apache

                                       Balanceo de carga

●   A veces es más sencillo comprar un servidor extra que
    ampliar el que ya tenemos
●   Podemos tener diferentes servidores y repartir la carga
    entre ellos
●   Esto se conoce como balanceo de carga
●   Existe mucho software distinto para montar un
    balanceo
●   Nosotros vamos a ver:
      –   GLB
      –   Keepalived
      –   DNS
      –   mod_proxy_balancer
                                                               89
Irontec – Curso Apache

                                       Balanceo de carga

●   El servicio de balanceo de carga se monta en un
    servidor externo. Este a su vez debería estar en HA
●   Un buen balanceo de carga debería comprobar el
    estado de los servidores
●   Si un servidor se cae, debería sacarlo de la cola
●   De la misma manera, si vuelve a estar Online se
    volvería a añadir a la cola




                                                               90
Irontec – Curso Apache

                   Balanceo de carga




GLB (Galera Load Balancer)




                                         91
Irontec – Curso Apache

                                            Balanceo de carga

●   Galera Load Balance
          http://www.codership.com/en/downloads/glb
●   Fácil de implantar y utilizar, sigue la filosofía KISS ;)
       –   Multithread
       –   Conexiones distribuidas proporcionalmente
       –   De momento en Beta
●   Para usarlo, hay que compilarlo:
       –   wget
       –   tar -xzf
       –   ./configure
       –   make && make install


                                                                    92
Irontec – Curso Apache

                                                   Balanceo de carga

punisher@shyris:~$ glbd ­­help
Usage:
  glbd [OPTIONS] LISTEN_ADDRESS [DESTINATION_LIST]
OPTIONS:
  ­­help                  this help message.
  ­­daemon                run as a daemon.
  ­­fifo <fifo name>      name of the FIFO file for control.
  ­­control [HOST:]PORT   listen for control requests on this address.
  ­­threads N             number of working threads (connection pools).
  ­­source_tracking       turn on source tracking: route connections from 
one
                          source to the same destination.
  ­­verbose               turn on verbose reporting.
  ­­version               print program version.
LISTEN_ADDRESS:
  [IP:]PORT               where to listen for incoming TCP connections.
DESTINATION_LIST:
  [H1[:P1[:W1]]] [H2[:P2[:W2]]]...  ­ a space­separated list of destinations
                          in the form address:port:weight.


                                                                             93
Irontec – Curso Apache

                                       Balanceo de carga

●   Haciendo uso de los pesos es posible enviar más
    peticiones al servidor más potente
●   Si los pesos son iguales, se distribuirán las conexiones
●   Si deseamos conexiones persistentes (mismo origen
    mismo servidor destino) debemos habilitar el
    source_tracking
●   Bueno como solución de implantación rápida y sencilla




                                                               94
Irontec – Curso Apache

                                         Balanceo de carga

punisher@shyris:~$ glbd ­­verbose 10.10.0.123:8081 
10.10.0.211:80:1 10.10.0.204:80
Incoming address:     10.10.0.123:8080 , control FIFO: 
/tmp/glbd.fifo
Control  address:  none
Number of threads: 1, source tracking: OFF, verbose: ON, 
daemon: NO
Destinations: 2
   0:     10.10.0.211:80   , w: 1.000
   1:     10.10.0.204:1    , w: 1.000
Router:
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
        Address       :   weight   usage   conns
    10.10.0.211:80    :    1.000   0.000     0
    10.10.0.204:1     :    1.000   0.000     0
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
Destinations: 2, total connections: 0

                                                                    95
Irontec – Curso Apache

                                                      Balanceo de carga

   INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 1)
   INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45370 
   INFO:glb_listener.c:79: to     10.10.0.204:80   


   INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)
   INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45371 
   INFO:glb_listener.c:79: to     10.10.0.211:80   


   INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)
   INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45372 
   INFO:glb_listener.c:79: to     10.10.0.204:80   


   INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)
   INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45373 
   INFO:glb_listener.c:79: to     10.10.0.211:80   




                                                                                96
Irontec – Curso Apache

      Balanceo de carga




LVS




                            97
Irontec – Curso Apache

                                      Balanceo de carga



●   LVS es el estándar de facto para crear balanceadores de
    carga en Linux
●   Actúa como si fuese un router de capa 4
●   El “director” recibe las conexiones y las reenvía al
    destino
●   Se pueden añadir y eliminar servidores reales en
    tiempo real sin tener que reiniciar el servicio




                                                              98
Irontec – Curso Apache

                                      Balanceo de carga

                apt­get install ipvsadm
●   La configuración es en consola, mediante el comando
    ipvsadm
●   Es posible guardar las reglas en un fichero de
    configuración para que se carguen al arranque
●   LVS puede actuar como master o backup, de forma
    que podemos tener HA en el balanceador
●   Cuando un master se cae, los estados de las conexiones
    pasan al Backup




                                                             99
Irontec – Curso Apache

                                          Balanceo de carga

●   Creamos un servidor virtual:
    debian1:~# ipvsadm ­A ­t 10.10.0.10:80 ­p 600
●   Añadimos un servidor real:
    debian1:~# ipvsadm ­a ­t 10.10.0.10:80 ­r 10.10.0.144 ­m
●   Añadimos otro servidor rea:
    debian1:~# ipvsadm ­a ­t 10.10.0.10:80 ­r 10.10.0.144 ­m

Listamos los componentes de nuestro balanceador de
carga:
debian1:~# ipvsadm ­l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  ­> RemoteAddress:Port           Forward Weight ActiveConn 
InActConn
TCP  10.10.0.10:www wlc persistent 600
  ­> 10.10.0.145:www              Masq    1      0          0   
      
  ­> 10.10.0.144:www              Masq    1      0          0   
                                                              100
Irontec – Curso Apache

                                      Balanceo de carga

●   Si un servidor real se cae somos nosotros los que
    tenemos que sacar el servidor manualmente
●   Existe software que hace uso de LVS para el balanceo y
    nos ofrece además herramientas para la auto detección
    de las caídas
●   Si un servidor se cae, debería sacarlo de las colas sin
    necesidad de intervención manual
●   Debería comprobar tanto la conexión correcta al
    puerto como el contenido descargado de la web (con
    un hash)



                                                              101
Irontec – Curso Apache

             Balanceo de carga




Keepalived




                                   102
Irontec – Curso Apache

                                              Balanceo de carga

●   Keepalived nos proporciona todo (y bastantes cosas
    más) usando por debajo LVS
                 http://www.keepalived.org/
      –   Balanceo de carga
      –   Balanceo de LVS
      –   Gestión de del pool de servidores
      –   Control del contenido
      –   HA en el director (con VRRP)
      –   Notificaciones por mail




                                                                    103
Irontec – Curso Apache

      Balanceo de carga




DNS




                            104
Irontec – Curso Apache

                                          Balanceo de carga

●   Otra forma típica de balanceo es mediante DNS
●   Se deben configurar diferentes registros A para un
    único dominio
●   El servidor DNS nos dará un registro u otro en Round
    Robin
    http://es.wikipedia.org/wiki/Planificaci%C3%B3n_Round-robin
●   Se usa activamente en servidores de correo electrónico




                                                                   105
Irontec – Curso Apache

                                             Balanceo de carga

●   Ventajas
      –   Facil de implementar
      –   No necesita de un servidor extra
      –   Rápido (consulta DNS)
●   Desventajas
      –   No controla la caída de un servidor
      –   Las caches de los DNS pueden hacer que no sea tan
            Round Robin
      –   No puedes establecer pesos




                                                                   106
Irontec – Curso Apache

              Balanceo de carga




mod_proxy_balancer




                                    107
Irontec – Curso Apache

                                             Balanceo de carga

●   Es un módulo dependiente de mod_proxy que nos
    permite configurar un balanceo de carga nativo en
    Apache
●   Permite 3 tipos de algoritmos para el balanceo:
      –   Dependiente de las peticiones (se reparten las peticiones
           equitativamente)
      –   Dependiente del tráfico (se reparte en función de los bytes
           que ha transmitido cada servidor)
      –   Dependiente de la carga (se envían las conexiones al que
           menos peticiones tenga en ese momento)




                                                                      108
Irontec – Curso Apache

                                       Balanceo de carga

●   Primero debemos añadir unos módulos:
      –   a2enmod proxy
      –   a2enmod proxy_balancer
      –   a2enmod proxy_http
●   Y luego configuramos Apache:
<Proxy balancer://supercluster>
BalancerMember http://10.10.0.210:80
BalancerMember http://10.10.0.214:80
Order deny,allow
Allow from all

</Proxy>
ProxyPass /test balancer://supercluster


                                                             109
Irontec – Curso Apache

                    Balanceo de carga

●   Estadísticas:




                                          110
Irontec – Curso Apache

                          Balanceo de carga

<Location /balancer­manager>
SetHandler balancer­manager

Order deny,allow
Allow from all

</Location>




                                                  111
Irontec – Curso Apache

                   Módulos




MÓDULOS




                             112
Irontec – Curso Apache

                                               Mod_Cache

●   Mod_Cache nos permite cachear tanto el contenido
    local como el accedido a través de proxy en el servidor
●   El cacheo se puede hacer a disco duro o memoria
      –   mod_disk_cache
      –   mod_mem_cache
●   Para activarlo:
    a2enmod cache
    a2enmod disk_cache
    a2enmod mem_cache




                                                              113
Irontec – Curso Apache

                                           Mod_Cache

CacheRoot /tmp/cache
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 4
CacheMaxFileSize 64000
CacheDefaultExpire 86400

Habilitamos la cache en /tmp/cache, como máximo 5
subdirectorios con nombres de no más de 4 letras. El
tamaño máximo de fichero 64000 y expirará a los
86400 segundos


                                                          114
Irontec – Curso Apache

                                              Mod_Cache

●   CacheIgnoreCacheControl
    Ingora las cabeceras no-cache o no-store, guardándo
    los datos en caché
●   CacheIgnoreHeaders
    Podemos especificar una serie de cabeceras a ignorar.
    Por ejemplo para prevenir que las cookies se guarden
    en cache (Set-Cookie)
●   CacheIgnoreNoLastMod
    Si no dispone de “Last Modified” lo cachea igualmente.
    Por defecto no se cachearian



                                                             115
Irontec – Curso Apache

                                             Mod_Cache

●   CacheSize
    Tamaño global de la cache, importante poner un valor
    normal que no nos deje sin espacio en el disco duro
●   CacheMinFileSize
    Tamaño mínimo que debe tener un fichero para poder
    se cacheado
●   CacheIgnoreURLSessionIdentifiers
    No cacheamos las páginas que incluyan un
    identificador de sesión




                                                            116
Irontec – Curso Apache

                                              Mod_Cache

                  Manuales de Apache


  http://httpd.apache.org/docs/2.2/mod/mod_cache.html
http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html
http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html




                                                             117
Irontec – Curso Apache

                                             Mod_Deflate

●   Mod_deflate permite comprimir los datos en el lado del
    servidor y enviarselos al cliente
●   Sirve para ahorrar ancho de banda, a costa de consumo
    de CPU
                    SetOutputFilter DEFLATE
●   Algunos navegadores no gestionan la compresión de
    todos los elementos de una web, solamente TXT y
    HTML
           AddOutputFilterByType DEFLATE text/html
●   Si sabemos de algun navegador con problemas, lo
    podemos ignorar
         BrowserMatch ^Mozilla/4 gzip-only-text/html
                                                             118
Irontec – Curso Apache

                                            Mod_Rewrite

●   Mod_Rewrite nos permite reescribir URLs en base a
    unas reglas, basadas generalmente en expresiones
    regulares
●   Muy usadas para posicionamiento web
    http://example.com/wiki/index.php?title=Page_title
    http://example.com/wiki/Page_title
●   Más info y ejemplos en la wikipedia:
    http://en.wikipedia.org/wiki/Rewrite_engine




                                                             119
Irontec – Curso Apache

                                                   Mod_Rewrite

●   Para activarlo:
       –   a2enmod rewrite
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
 ● Lo habilitamos:


       –   RewriteEngine On
●   Y le indicamos donde realizar la reescritura (opcional)
       –   RewriteBase /vida
●   Finalmente reescribimos
       –   RewriteRule ^index.html$ home.hmtl




                                                                    120
Irontec – Curso Apache

                                              Mod_Rewrite

●   Podemos poner unas condiciones para la ejecución de
    las reglas con RewriteCond:
      –   RewriteCond %{HTTP_USER_AGENT} firefox [NC]
      –   RewriteRule ^/$ firefox.html
●   Si se cumple la condición “HTTP_USER_AGENT
    incluye la palabra firefox” se reenvía la petición a
    firefox.html
●   Con [NC] lo hacemos Case Insensitive
●   Con [OR] podemos concatenar condiciones
●   Vamos a hacer que todas las peticiones que no
    sean https muestren un mensaje de error


                                                               121
Irontec – Curso Apache

                           Mod_Rewrite




RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule . nossl.html




                                            122
Irontec – Curso Apache

                                                       Mod_Rewrite

●   RewriteRule también dispone de flags:
      –   [F] prohibe el acceso (403)
      –   [G] marca la URL como no existente (401)
      –   [L] aplica la regla y termina, no sigue aplicando las restantes
      –   [N] vuelve a empezar la reescritura desde el principio
      –   [NC] no importa mayúsculas/minúsculas
      –   [R] marca redirect (302)
      –   [S=num] ignora el siguiente número (num) de reglas
●   Denegadme el acceso a mi IP, solamente si
    uso Firefox



                                                                        123
Irontec – Curso Apache

                                    Mod_Rewrite




RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} firefox [NC]
RewriteCond %{REMOTE_ADDR} ^10.10.0.123
RewriteRule (.*) $1 [F]




                                                     124
Irontec – Curso Apache

                                                 Mod_Rewrite

●   En RewriteCond y RewriteRule podemos meter una
    expresión regular entre paréntesis, que luego se
    sustituirán
      –   RewriteCond (.*) → %1
      –   RewriteRule (.*) → $1
●   Enviar el subdominio como parámetro de búsqueda a
    google
●   Por ejemplo:
      –   http://dominio.com/google/vida
      –   http://www.google.es/search?q=vida




                                                                  125
Irontec – Curso Apache

                                    Mod_Rewrite




RewriteEngine On
RewriteCond %{REQUEST_URI} ^/google/(.*)
RewriteRule . http://www.google.es/search?q=%1




                                                     126
Irontec – Curso Apache

                                           Mod_Rewrite

●   Un poco de SEO
●   http://voz-ip.com
●   La URL incluye el nombre del producto, simplemente
    para posicionamiento
●   Todo lo que hay antes del guión no importa a nivel
    interno, solamente el identificativo final
●   Crear una regla de Rewrite de forma que:
      –   dskndnpsn3-hola.html
      –   324234n-vida.html
●   Sin importar lo que tengamos antes del guión,
    nos muestre el documento indicado.

                                                            127
Irontec – Curso Apache

                    Mod_Rewrite




RewriteRule .*­(.*) $1




                                     128
Irontec – Curso Apache

                                             Mod_Rewrite

●   A veces únicamente deseamos que la página de login
    esté cifrada y no así el resto de la web
      –   Ahorro de recursos
      –   Navegación más rápida
      –   …
●   Mediante Mod_Rewrite podemos hacer que una
    página en particular tenga que ser mostrada en https
    mientras que las demás no
●   ¿Como lo haríamos?




                                                              129
Irontec – Curso Apache

                                           Mod_Rewrite



<Directory /var/www/inicio>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)login.html
RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]
RewriteCond %{REQUEST_URI} !^(.*)login.html
RewriteCond %{HTTPS} ^on$ [NC]
RewriteRule . http://%{HTTP_HOST}%{REQUEST_URI}  [L]
</Directory>




                                                            130
Irontec – Curso Apache

                Mod_Security




Mod Security




                                  131
Irontec – Curso Apache

                                                  Mod_Security

●   Mod_Security es un módulo de seguridad que hace de
    barrera entre la red y el servidor Apache
●   Tiene un funcionamiento basado en reglas, parecido a
    un antivirus o IDS
            http://www.modsecurity.org/index.html
●   Detecta DDOS, XSS, troyanos, violaciones de
    protocolo, etc.
●   En Debian Lenny no tenemos paquetes
      http://etc.inittab.org/~agi/debian/libapache-mod-security2
●   Descargamos:
      – libapache-mod-security_2.5.9-1_i386.deb
      – mod-security-common_2.5.9-1_all.deb
                                                                   132
Irontec – Curso Apache

                                                          Mod_Security

●   Una vez instalado el paquete ya tenemos el módulo
    instalado y habilitado, solo hay que reiniciar
●   Ahora toca instalar las reglas:
http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.1.tar.gz
●   Movemos los .conf a /etc/apache2/modsecurity2
●   Añadimos al final de apache2:
       –   include /etc/apache2/modsecurity2/
●   Creamos en siguiente enlace simbólico:
       –   ln ­s /var/log/apache2 /etc/apache2/logs




                                                                              133
Irontec – Curso Apache

                                                               Mod_Security

●   Podemos crear nuestras propias reglas de prueba
●   Por ejemplo, vamos a filtrar a los que navegan con
    Chrome :)
    SecRule REQUEST_HEADERS:User­Agent "Chrome" "log,drop"
●   Hará una búsqueda en las cabeceras, usando una
    expresión regular
●   Si concuerda, dropea la conexión y lo logea
●   Se pueden descargar más reglas de:
    http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
●   Cuidado, ya que algunas pueden no ser compatibles




                                                                                      134
Irontec – Curso Apache

                                              Mod_Security

●   Vamos a probar cuanto de seguro es :)
●   Nikto2 es una herramienta de testo de la seguridad de
    un servidor web
●   Comprueba configuraciones y hace más de 7000 teses
●   Si Mod_Security está habilitado, el log error.log debería
    crecer muchisimo ;)
             ./nikto.pl ­h 10.10.0.147 




                                                                135
Irontec – Curso Apache

                                                        Mod_Proxy

●   Mod_Proxy puede funcionar en dos modos, reenvío y
    proxy inverso
      –   El modo de reenvío (forward proxy) es el típico. El servidor
             está entre el cliente y el servidor destino. Vamos, ¡el
             proxy de toda la vida!
      –   En el modo inverso actúa como un servidor web. El cliente
             accede al servidor y este reenvía la petición a otro para
             finalmente devolverle el contenido como si
             originalmente fuese suyo
                          a2enmod proxy




                                                                      136
Irontec – Curso Apache

                                                  Mod_Proxy

●   Para habilitar Apache como Proxy creamos un
    VirtualHost en el puerto 8080
●   Ponemos las siguientes directivas:

<VirtualHost *:8080>
   ProxyRequests On
   ProxyVia On
<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>
</VirtualHost>

●   Tenemos que configurar nuestro navegador para que use el
    Proxy

                                                                137
Irontec – Curso Apache

                                           Mod_Proxy

●   Otro VirtualHost

<VirtualHost *:81>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /ma/b/ http://miguelangelnieto.net/
ProxyPassReverse /ma/b/ http://miguelangelnieto.net/
</VirtualHost>

●   Cuidado con las barras!



                                                         138
Irontec – Curso Apache

                                  Optimización del servidor

●   La optimización de Apache, al igual que cualquier otro
    servicio, depende de:
      –   Tarjeta de red rápida
      –   Discos rápidos
      –   Mucha RAM
      –   Mucha CPU
●   Contra más, mejor
●   Como ya hemos dicho, cuando un servidor no da para
    más y no se puede ampliar, la solución es montar otro y
    repartir carga



                                                               139
Irontec – Curso Apache

                                 Optimización del servidor

●   La regla principal en linux es:
       –   NO SWAP
●   Si el sistema se queda sin RAM y necesita más recursos
    usará la SWAP, lo cual degradará el rendimiento hasta
    hacerlo inusable
●   Para no llegar a ese extremo hay que poner un valor
    normal en MaxClients
●   MaxClients=RAM/AVG(apache)




                                                              140
Irontec – Curso Apache

                               Optimización del servidor

●   Muchas consultas DNS pueden ralentizar las respuestas
●   A poder ser en Deny y Allow se debe poner direcciones
    IP
●   HostnameLookups está por defecto Off. Si se requiere
    para un directorio en especial se puede habilitar, pero
    no se recomienda hacerlo globalmente




                                                              141
Irontec – Curso Apache

                                Optimización del servidor

●   Los ficheros .htaccess se leen en cada acceso
●   Si tienes muchos repartidos por múltiples directorios el
    rendimiento de acceso a disco se puede degradar con
    muchas lecturas no secuenciales
●   AllowOverride None
●   El contenido del .htaccess lo podemos mover al
    VirtualHost y hacer un reload
●   De esa forma se lee una vez y se ejecuta infinito




                                                               142
Irontec – Curso Apache

                              Optimización del servidor

●   Si tenemos enlaces simbólicos y la directiva
    SymLinksIfOwnerMatch habilitada, el sistema tendrá
    que hacer dos llamadas al sistema cada vez que quiera
    acceder a el
●   Si quiere seguridad, no tienes más remedio que tenerlo
    activado
●   Si quieres rendimiento, tendrás que evitar dicho
    chequeo
●   Puedes programar una tarea que cada 5 minutos
    compruebe los enlaces y sus propietarios
●   Será más rápido que hacerlo por cada conexión


                                                              143
Irontec – Curso Apache

                                   Optimización del servidor

●   Las páginas web deberían estar en la misma máquina
    donde corre Apache
●   Tener los datos montados por NFS o Samba solo añade
    OverHead y latencia a las peticiones
●   Dependiendo del sistema puede funcionar mejor (o no)
    con:
      –   EnableSendfile Off (envío de ficheros)
      –   EnableMMap Off (lectura del contenido de ficheros)




                                                                    144
Irontec – Curso Apache

                               Optimización del servidor

●   Ningún software es perfecto :)
●   Para evitar memory leaks se recomienda reiniciar los
    distintos threads
●   Se puede matar un thread cuando haya cumplido su
    objetivo en la vida, responder a un número de
    peticiones
●   0 significa infinito
●   Depende del hardware y del tipo de web que
    tengamos, será mejor un valor u otro, no hay regla fija
    Setting MaxRequestsPerChild to a non­
    zero value limits the amount of memory 
    that process can consume by 
    (accidental) memory leakage.
                                                              145
Irontec – Curso Apache

                               Optimización del servidor

●   Con KeepAlive, los threads se quedan esperando más
    peticiones de la conexión abierta
●   Por defecto espera 15 segundos
●   Debes elegir entre ahorro de ancho de banda y
    recursos del sistema
                       KeepAliveTimeout
●   Una conexión se queda abierta para bajar el contenido
    de la web, por lo tanto esperas superiores a 5 segundos
    suelen carecer de sentido




                                                              146
Irontec – Curso Apache

                                  Optimización del servidor

●   Apache soporta varios modos de concurrencia
    diferentes dependiendo del sistema operativo
●   Se llaman MPM (multi-process Modules)
●   En unix tenemos:
      –   Worker: múltiples procesos con múltiples threads cada
            uno. Cada thread gestiona una conexión. Consume
            menos memoria y es recomendable para webs con alto
            tráfico
      –   Prefork: múltiples procesos con un único thread. Cada
            thread gestiona una conexión. Usa más memoria, tiene
            prácticamente el mismo rendimiento, pero es
            recomendable usarlo para trabajar con módulos No-
            Thread-Safe (PHP5 de Debian requiere este modo)

                                                                   147
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




                                                                 148
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.

                                                             149

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

DNS
DNSDNS
DNS
 
DHCP, DNS, whois
DHCP, DNS, whoisDHCP, DNS, whois
DHCP, DNS, whois
 
Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04
 
Mis comandos favoritos en linux parte 3
Mis comandos favoritos en linux parte 3Mis comandos favoritos en linux parte 3
Mis comandos favoritos en linux parte 3
 
Instalacion dns
Instalacion dnsInstalacion dns
Instalacion dns
 
Dns(jorgemoya)
Dns(jorgemoya)Dns(jorgemoya)
Dns(jorgemoya)
 
Herramientas bind
Herramientas bindHerramientas bind
Herramientas bind
 
Linux ud11 - configuracion de red en linux
Linux   ud11 - configuracion de red en linuxLinux   ud11 - configuracion de red en linux
Linux ud11 - configuracion de red en linux
 
17 berkeley internet name domain
17  berkeley internet name  domain17  berkeley internet name  domain
17 berkeley internet name domain
 
Dns debian
Dns debianDns debian
Dns debian
 
Administración DNS automatizado
Administración DNS automatizadoAdministración DNS automatizado
Administración DNS automatizado
 
Servidores linux
Servidores linuxServidores linux
Servidores linux
 
Seguridad
SeguridadSeguridad
Seguridad
 
Servidor DNS en Linux
Servidor DNS en LinuxServidor DNS en Linux
Servidor DNS en Linux
 
Instalar programas en linux
Instalar programas en linuxInstalar programas en linux
Instalar programas en linux
 
Configurar dns
Configurar dnsConfigurar dns
Configurar dns
 
Instalar servidores en debian
Instalar servidores en debianInstalar servidores en debian
Instalar servidores en debian
 
25 protocolo ligero de acceso a directorios ldap
25  protocolo ligero de acceso a directorios ldap25  protocolo ligero de acceso a directorios ldap
25 protocolo ligero de acceso a directorios ldap
 
Puertos
PuertosPuertos
Puertos
 

Destacado

Zookeeper: Wait-free Coordination for Internet-scale Systems
Zookeeper: Wait-free Coordination for Internet-scale SystemsZookeeper: Wait-free Coordination for Internet-scale Systems
Zookeeper: Wait-free Coordination for Internet-scale SystemsLeandro Lera Romero
 
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
 
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioaUrko Zurutuza
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API ExamplesApache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API ExamplesBinu George
 
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosHadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosRaul Ochoa
 
Por qué los CIO deben modernizar su centro de contacto ahora
Por qué los CIO deben modernizar su centro de contacto ahoraPor qué los CIO deben modernizar su centro de contacto ahora
Por qué los CIO deben modernizar su centro de contacto ahoraCamilo Garcia
 
Zaderah finalbookshape-130529123632-phpapp01
Zaderah finalbookshape-130529123632-phpapp01Zaderah finalbookshape-130529123632-phpapp01
Zaderah finalbookshape-130529123632-phpapp01Muhammad Nabeel Musharraf
 
Bendice Tu Cuerpo
Bendice Tu CuerpoBendice Tu Cuerpo
Bendice Tu CuerpoJaco Ba
 
De Redes Sociales a Redes Profesionales
De Redes Sociales a Redes ProfesionalesDe Redes Sociales a Redes Profesionales
De Redes Sociales a Redes ProfesionalesMundo Contact
 
Quintana 08 03_2013_rapallo
Quintana 08 03_2013_rapalloQuintana 08 03_2013_rapallo
Quintana 08 03_2013_rapalloPatrizia Ercole
 
The Social Value Chain Ytzik Aranov Feb 2010 V2
The Social Value Chain   Ytzik Aranov   Feb 2010 V2The Social Value Chain   Ytzik Aranov   Feb 2010 V2
The Social Value Chain Ytzik Aranov Feb 2010 V2Ytzik Aranov
 
Guia construccion dama
Guia construccion damaGuia construccion dama
Guia construccion damakoolafh
 

Destacado (20)

Zookeeper: Wait-free Coordination for Internet-scale Systems
Zookeeper: Wait-free Coordination for Internet-scale SystemsZookeeper: Wait-free Coordination for Internet-scale Systems
Zookeeper: Wait-free Coordination for Internet-scale Systems
 
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
 
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioa
 
Monitorización
MonitorizaciónMonitorización
Monitorización
 
Conferencia 2: El esquema
Conferencia 2: El esquemaConferencia 2: El esquema
Conferencia 2: El esquema
 
Mysql Administracion
Mysql AdministracionMysql Administracion
Mysql Administracion
 
Replicación Mysql
Replicación MysqlReplicación Mysql
Replicación Mysql
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API ExamplesApache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
Apache Zookeeper Explained: Tutorial, Use Cases and Zookeeper Java API Examples
 
Hadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datosHadoop: MapReduce para procesar grandes cantidades de datos
Hadoop: MapReduce para procesar grandes cantidades de datos
 
Por qué los CIO deben modernizar su centro de contacto ahora
Por qué los CIO deben modernizar su centro de contacto ahoraPor qué los CIO deben modernizar su centro de contacto ahora
Por qué los CIO deben modernizar su centro de contacto ahora
 
Catalogo CandyMoon SexShop
Catalogo CandyMoon SexShopCatalogo CandyMoon SexShop
Catalogo CandyMoon SexShop
 
Zaderah finalbookshape-130529123632-phpapp01
Zaderah finalbookshape-130529123632-phpapp01Zaderah finalbookshape-130529123632-phpapp01
Zaderah finalbookshape-130529123632-phpapp01
 
EVENT MARKETING SALES PR
EVENT MARKETING SALES PREVENT MARKETING SALES PR
EVENT MARKETING SALES PR
 
Bendice Tu Cuerpo
Bendice Tu CuerpoBendice Tu Cuerpo
Bendice Tu Cuerpo
 
De Redes Sociales a Redes Profesionales
De Redes Sociales a Redes ProfesionalesDe Redes Sociales a Redes Profesionales
De Redes Sociales a Redes Profesionales
 
Quintana 08 03_2013_rapallo
Quintana 08 03_2013_rapalloQuintana 08 03_2013_rapallo
Quintana 08 03_2013_rapallo
 
The Social Value Chain Ytzik Aranov Feb 2010 V2
The Social Value Chain   Ytzik Aranov   Feb 2010 V2The Social Value Chain   Ytzik Aranov   Feb 2010 V2
The Social Value Chain Ytzik Aranov Feb 2010 V2
 
Guia construccion dama
Guia construccion damaGuia construccion dama
Guia construccion dama
 
la navidad
la navidadla navidad
la navidad
 

Similar a Apache avanzado

Similar a Apache avanzado (20)

Apache
ApacheApache
Apache
 
Apache
ApacheApache
Apache
 
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
 
Fundamentos de la web
Fundamentos de la webFundamentos de la web
Fundamentos de la web
 
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
 
Transferencia de archivos FTP
Transferencia de archivos FTPTransferencia de archivos FTP
Transferencia de archivos FTP
 
Servidor Web Apache para Linux
Servidor Web Apache para LinuxServidor Web Apache para Linux
Servidor Web Apache para Linux
 
Servicios de comunicaciones (i)
Servicios de comunicaciones (i)Servicios de comunicaciones (i)
Servicios de comunicaciones (i)
 
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
 
Introducció a les Aplicació Web
Introducció a les Aplicació WebIntroducció a les Aplicació Web
Introducció a les Aplicació Web
 
Servidor web apache
Servidor web apacheServidor web apache
Servidor web apache
 
3.10 wireshark y ntop
3.10 wireshark y ntop3.10 wireshark y ntop
3.10 wireshark y ntop
 
Fundamentos de Internet
Fundamentos de InternetFundamentos de Internet
Fundamentos de Internet
 
capa de aplicacion-sisco-netwokrs.pptx
capa de aplicacion-sisco-netwokrs.pptxcapa de aplicacion-sisco-netwokrs.pptx
capa de aplicacion-sisco-netwokrs.pptx
 
Tipos de servidores
Tipos de servidoresTipos de servidores
Tipos de servidores
 
2. Revision de Tecnologias Web.pdf
2. Revision de Tecnologias Web.pdf2. Revision de Tecnologias Web.pdf
2. Revision de Tecnologias Web.pdf
 
Curso de php
Curso de phpCurso de php
Curso de php
 
Protocolos de servidor
Protocolos de servidorProtocolos de servidor
Protocolos de servidor
 
ROA - Resource Oriented Architecture
ROA - Resource Oriented ArchitectureROA - Resource Oriented Architecture
ROA - Resource Oriented Architecture
 

Más de Miguel Angel Nieto

Más de Miguel Angel Nieto (6)

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
 
Tomcat y Jboss
Tomcat y JbossTomcat y Jboss
Tomcat y Jboss
 
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
 

Apache avanzado

  • 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: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy) Firefox/2.0.0.12 Paros/3.2.13 – Accept: text/xml,text/plain;q=0.8,image/png,*/*;q=0.5 – Accept-Language: es-es,en-us;q=0.7,en;q=0.3 – Accept-Charset: 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 destinos6
  • 7. Irontec – Curso Apache Protocolo HTTP ● Mensajes de respuesta ● Ej: – HTTP/1.1 200 OK – Date: Thu, 27 Mar 2008 21:29:14 GMT – Content-Type: text/html; charset=US-ASCII – Server: 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-encoding: gzip, deflate ● De servidor. Ej: Content-encoding: gzip – 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 Proxys ● 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ódigo 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ódigo 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 "Ruediger Pluem  <rpluem@apache.org>" importada gpg: no se encuentran claves absolutamente fiables gpg: Cantidad total procesada: 1 gpg:               importadas: 1 21
  • 22. Irontec – Curso Apache Instalación – Código 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 "Ruediger Pluem <rpluem@apache.org>" 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 Instalación – Código fuente ● 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ódigo 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ódigo 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 "Ruediger Pluem <rpluem@apache.org>" ● ¡Firma digital verificada! Podemos instalar el software con seguridad. http://www.gnupg.org/ 25
  • 26. Irontec – Curso Apache Instalación – Código 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ódigo 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ódigo 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 o28
  • 29. Irontec – Curso Apache Instalación – Código 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ódigo 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ódigo 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ódigo 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ódigo 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ódigo 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ódigo 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ódigo 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 ~ ".jpg$"> 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 "%h %l %u %t "%r" %>s %b" ● 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 "Acceso Restringido" 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 "Acceso solo para grupos" 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 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 :) 63
  • 64. 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. 64
  • 65. Irontec – Curso Apache VirtualHost ● Para configurar un VirtualHost por nombre son necesarias estas directivas: – <VirtualHost> – NameVirtualHost – ServerName – ServerAlias – DocumentRoot 65
  • 66. 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 * 66
  • 67. 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 67
  • 68. 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 68
  • 69. 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 69
  • 70. Irontec – Curso Apache Certificados 70
  • 71. 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 71
  • 72. 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 72
  • 73. 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 73
  • 74. 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 ;-) 74
  • 75. 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 75
  • 76. 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. 76
  • 77. 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) 77
  • 78. 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. 78
  • 79. 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 79
  • 80. 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 80
  • 81. 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> 81
  • 82. 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 82
  • 83. Irontec – Curso Apache Certificado cliente ● Nuestros usuarios pueden autenticarse con un usuario y clave o mediante un certificado cliente ● Estos certificados se crean a partir de una CA ● Solo podrá entrar si tiene instalado un certificado válido: – No caducado – No revocado ● Vamos a proteger nuestro VirtualHost, de forma que solo sea accesible mediante un certificado válido 83
  • 84. Irontec – Curso Apache Certificado cliente ● Primero generamos la CA de la que colgarán todos los certificados cliente ● Generamos un certificado cliente, para ello creamos un fichero de configuración específico que indicara que tipo de certificado es: cat config.txt  basicConstraints = critical,CA:FALSE extendedKeyUsage = clientAuth ● Generamos un certificado cliente: openssl genrsa ­out miguelangel.key 2048 openssl req ­new ­key private/miguelangel.key ­out  miguelangel.csr openssl x509 ­CA CA.crt ­CAkey private/CA.key ­req ­in  miguelangel.csr ­set_serial 2 ­days 3650 ­extfile  config.txt ­sha1 ­out miguelangel.crt 84
  • 85. Irontec – Curso Apache Certificado cliente ● Lo exportamos a un formato aceptable por los navegadores, por ejemplo p12: openssl pkcs12 ­export ­in miguelangel.crt ­inkey  private/miguelangel.key ­certfile CA.crt ­out  miguelangel.p12 ● Configuramos Apache: SSLEngine on SSLCertificateFile /etc/apache2/ssl/test1.crt SSLCertificateKeyFile /etc/apache2/ssl/test1.key SSLCACertificateFile /etc/ssl/clientes/CA.crt SSLVerifyClient require  85
  • 86. Irontec – Curso Apache Certificado cliente ● Cuando no queremos seguir dando acceso a un usuario debemos revocar su certificado openssl ca ­revoke miguelangel.crt ● Una vez revocado, generamos/actualizamos el fichero de revocados que leerá apache openssl ca ­gencrl ­out revovados.crl ● Configuramos Apache para que lo lea :) SSLCARevocationFile /etc/apache2/ssl/revocados.crl 86
  • 87. Irontec – Curso Apache Balanceo de carga 87
  • 88. Irontec – Curso Apache Balanceo de carga ● Cuando el servidor no es capaz de responder a las peticiones es necesario aumentar de alguna manera su rendimiento – Más memoria RAM – Más procesador – Discos SSD – RAID con write cache (con bateria) – Proxy Inverso – Comprar más servidores 88
  • 89. Irontec – Curso Apache Balanceo de carga ● A veces es más sencillo comprar un servidor extra que ampliar el que ya tenemos ● Podemos tener diferentes servidores y repartir la carga entre ellos ● Esto se conoce como balanceo de carga ● Existe mucho software distinto para montar un balanceo ● Nosotros vamos a ver: – GLB – Keepalived – DNS – mod_proxy_balancer 89
  • 90. Irontec – Curso Apache Balanceo de carga ● El servicio de balanceo de carga se monta en un servidor externo. Este a su vez debería estar en HA ● Un buen balanceo de carga debería comprobar el estado de los servidores ● Si un servidor se cae, debería sacarlo de la cola ● De la misma manera, si vuelve a estar Online se volvería a añadir a la cola 90
  • 91. Irontec – Curso Apache Balanceo de carga GLB (Galera Load Balancer) 91
  • 92. Irontec – Curso Apache Balanceo de carga ● Galera Load Balance http://www.codership.com/en/downloads/glb ● Fácil de implantar y utilizar, sigue la filosofía KISS ;) – Multithread – Conexiones distribuidas proporcionalmente – De momento en Beta ● Para usarlo, hay que compilarlo: – wget – tar -xzf – ./configure – make && make install 92
  • 93. Irontec – Curso Apache Balanceo de carga punisher@shyris:~$ glbd ­­help Usage:   glbd [OPTIONS] LISTEN_ADDRESS [DESTINATION_LIST] OPTIONS:   ­­help                  this help message.   ­­daemon                run as a daemon.   ­­fifo <fifo name>      name of the FIFO file for control.   ­­control [HOST:]PORT   listen for control requests on this address.   ­­threads N             number of working threads (connection pools).   ­­source_tracking       turn on source tracking: route connections from  one                           source to the same destination.   ­­verbose               turn on verbose reporting.   ­­version               print program version. LISTEN_ADDRESS:   [IP:]PORT               where to listen for incoming TCP connections. DESTINATION_LIST:   [H1[:P1[:W1]]] [H2[:P2[:W2]]]...  ­ a space­separated list of destinations                           in the form address:port:weight. 93
  • 94. Irontec – Curso Apache Balanceo de carga ● Haciendo uso de los pesos es posible enviar más peticiones al servidor más potente ● Si los pesos son iguales, se distribuirán las conexiones ● Si deseamos conexiones persistentes (mismo origen mismo servidor destino) debemos habilitar el source_tracking ● Bueno como solución de implantación rápida y sencilla 94
  • 95. Irontec – Curso Apache Balanceo de carga punisher@shyris:~$ glbd ­­verbose 10.10.0.123:8081  10.10.0.211:80:1 10.10.0.204:80 Incoming address:     10.10.0.123:8080 , control FIFO:  /tmp/glbd.fifo Control  address:  none Number of threads: 1, source tracking: OFF, verbose: ON,  daemon: NO Destinations: 2    0:     10.10.0.211:80   , w: 1.000    1:     10.10.0.204:1    , w: 1.000 Router: ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­         Address       :   weight   usage   conns     10.10.0.211:80    :    1.000   0.000     0     10.10.0.204:1     :    1.000   0.000     0 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Destinations: 2, total connections: 0 95
  • 96. Irontec – Curso Apache Balanceo de carga    INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 1)    INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45370     INFO:glb_listener.c:79: to     10.10.0.204:80       INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)    INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45371     INFO:glb_listener.c:79: to     10.10.0.211:80       INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)    INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45372     INFO:glb_listener.c:79: to     10.10.0.204:80       INFO:glb_pool.c:323: Pool 0: added connection, (total pool connections: 2)    INFO:glb_listener.c:77: Accepted connection from     10.10.0.123:45373     INFO:glb_listener.c:79: to     10.10.0.211:80    96
  • 97. Irontec – Curso Apache Balanceo de carga LVS 97
  • 98. Irontec – Curso Apache Balanceo de carga ● LVS es el estándar de facto para crear balanceadores de carga en Linux ● Actúa como si fuese un router de capa 4 ● El “director” recibe las conexiones y las reenvía al destino ● Se pueden añadir y eliminar servidores reales en tiempo real sin tener que reiniciar el servicio 98
  • 99. Irontec – Curso Apache Balanceo de carga apt­get install ipvsadm ● La configuración es en consola, mediante el comando ipvsadm ● Es posible guardar las reglas en un fichero de configuración para que se carguen al arranque ● LVS puede actuar como master o backup, de forma que podemos tener HA en el balanceador ● Cuando un master se cae, los estados de las conexiones pasan al Backup 99
  • 100. Irontec – Curso Apache Balanceo de carga ● Creamos un servidor virtual: debian1:~# ipvsadm ­A ­t 10.10.0.10:80 ­p 600 ● Añadimos un servidor real: debian1:~# ipvsadm ­a ­t 10.10.0.10:80 ­r 10.10.0.144 ­m ● Añadimos otro servidor rea: debian1:~# ipvsadm ­a ­t 10.10.0.10:80 ­r 10.10.0.144 ­m Listamos los componentes de nuestro balanceador de carga: debian1:~# ipvsadm ­l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags   ­> RemoteAddress:Port           Forward Weight ActiveConn  InActConn TCP  10.10.0.10:www wlc persistent 600   ­> 10.10.0.145:www              Masq    1      0          0             ­> 10.10.0.144:www              Masq    1      0          0           100
  • 101. Irontec – Curso Apache Balanceo de carga ● Si un servidor real se cae somos nosotros los que tenemos que sacar el servidor manualmente ● Existe software que hace uso de LVS para el balanceo y nos ofrece además herramientas para la auto detección de las caídas ● Si un servidor se cae, debería sacarlo de las colas sin necesidad de intervención manual ● Debería comprobar tanto la conexión correcta al puerto como el contenido descargado de la web (con un hash) 101
  • 102. Irontec – Curso Apache Balanceo de carga Keepalived 102
  • 103. Irontec – Curso Apache Balanceo de carga ● Keepalived nos proporciona todo (y bastantes cosas más) usando por debajo LVS http://www.keepalived.org/ – Balanceo de carga – Balanceo de LVS – Gestión de del pool de servidores – Control del contenido – HA en el director (con VRRP) – Notificaciones por mail 103
  • 104. Irontec – Curso Apache Balanceo de carga DNS 104
  • 105. Irontec – Curso Apache Balanceo de carga ● Otra forma típica de balanceo es mediante DNS ● Se deben configurar diferentes registros A para un único dominio ● El servidor DNS nos dará un registro u otro en Round Robin http://es.wikipedia.org/wiki/Planificaci%C3%B3n_Round-robin ● Se usa activamente en servidores de correo electrónico 105
  • 106. Irontec – Curso Apache Balanceo de carga ● Ventajas – Facil de implementar – No necesita de un servidor extra – Rápido (consulta DNS) ● Desventajas – No controla la caída de un servidor – Las caches de los DNS pueden hacer que no sea tan Round Robin – No puedes establecer pesos 106
  • 107. Irontec – Curso Apache Balanceo de carga mod_proxy_balancer 107
  • 108. Irontec – Curso Apache Balanceo de carga ● Es un módulo dependiente de mod_proxy que nos permite configurar un balanceo de carga nativo en Apache ● Permite 3 tipos de algoritmos para el balanceo: – Dependiente de las peticiones (se reparten las peticiones equitativamente) – Dependiente del tráfico (se reparte en función de los bytes que ha transmitido cada servidor) – Dependiente de la carga (se envían las conexiones al que menos peticiones tenga en ese momento) 108
  • 109. Irontec – Curso Apache Balanceo de carga ● Primero debemos añadir unos módulos: – a2enmod proxy – a2enmod proxy_balancer – a2enmod proxy_http ● Y luego configuramos Apache: <Proxy balancer://supercluster> BalancerMember http://10.10.0.210:80 BalancerMember http://10.10.0.214:80 Order deny,allow Allow from all </Proxy> ProxyPass /test balancer://supercluster 109
  • 110. Irontec – Curso Apache Balanceo de carga ● Estadísticas: 110
  • 111. Irontec – Curso Apache Balanceo de carga <Location /balancer­manager> SetHandler balancer­manager Order deny,allow Allow from all </Location> 111
  • 112. Irontec – Curso Apache Módulos MÓDULOS 112
  • 113. Irontec – Curso Apache Mod_Cache ● Mod_Cache nos permite cachear tanto el contenido local como el accedido a través de proxy en el servidor ● El cacheo se puede hacer a disco duro o memoria – mod_disk_cache – mod_mem_cache ● Para activarlo: a2enmod cache a2enmod disk_cache a2enmod mem_cache 113
  • 114. Irontec – Curso Apache Mod_Cache CacheRoot /tmp/cache CacheEnable disk / CacheDirLevels 5 CacheDirLength 4 CacheMaxFileSize 64000 CacheDefaultExpire 86400 Habilitamos la cache en /tmp/cache, como máximo 5 subdirectorios con nombres de no más de 4 letras. El tamaño máximo de fichero 64000 y expirará a los 86400 segundos 114
  • 115. Irontec – Curso Apache Mod_Cache ● CacheIgnoreCacheControl Ingora las cabeceras no-cache o no-store, guardándo los datos en caché ● CacheIgnoreHeaders Podemos especificar una serie de cabeceras a ignorar. Por ejemplo para prevenir que las cookies se guarden en cache (Set-Cookie) ● CacheIgnoreNoLastMod Si no dispone de “Last Modified” lo cachea igualmente. Por defecto no se cachearian 115
  • 116. Irontec – Curso Apache Mod_Cache ● CacheSize Tamaño global de la cache, importante poner un valor normal que no nos deje sin espacio en el disco duro ● CacheMinFileSize Tamaño mínimo que debe tener un fichero para poder se cacheado ● CacheIgnoreURLSessionIdentifiers No cacheamos las páginas que incluyan un identificador de sesión 116
  • 117. Irontec – Curso Apache Mod_Cache Manuales de Apache http://httpd.apache.org/docs/2.2/mod/mod_cache.html http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html 117
  • 118. Irontec – Curso Apache Mod_Deflate ● Mod_deflate permite comprimir los datos en el lado del servidor y enviarselos al cliente ● Sirve para ahorrar ancho de banda, a costa de consumo de CPU SetOutputFilter DEFLATE ● Algunos navegadores no gestionan la compresión de todos los elementos de una web, solamente TXT y HTML AddOutputFilterByType DEFLATE text/html ● Si sabemos de algun navegador con problemas, lo podemos ignorar BrowserMatch ^Mozilla/4 gzip-only-text/html 118
  • 119. Irontec – Curso Apache Mod_Rewrite ● Mod_Rewrite nos permite reescribir URLs en base a unas reglas, basadas generalmente en expresiones regulares ● Muy usadas para posicionamiento web http://example.com/wiki/index.php?title=Page_title http://example.com/wiki/Page_title ● Más info y ejemplos en la wikipedia: http://en.wikipedia.org/wiki/Rewrite_engine 119
  • 120. Irontec – Curso Apache Mod_Rewrite ● Para activarlo: – a2enmod rewrite http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html ● Lo habilitamos: – RewriteEngine On ● Y le indicamos donde realizar la reescritura (opcional) – RewriteBase /vida ● Finalmente reescribimos – RewriteRule ^index.html$ home.hmtl 120
  • 121. Irontec – Curso Apache Mod_Rewrite ● Podemos poner unas condiciones para la ejecución de las reglas con RewriteCond: – RewriteCond %{HTTP_USER_AGENT} firefox [NC] – RewriteRule ^/$ firefox.html ● Si se cumple la condición “HTTP_USER_AGENT incluye la palabra firefox” se reenvía la petición a firefox.html ● Con [NC] lo hacemos Case Insensitive ● Con [OR] podemos concatenar condiciones ● Vamos a hacer que todas las peticiones que no sean https muestren un mensaje de error 121
  • 122. Irontec – Curso Apache Mod_Rewrite RewriteCond %{HTTPS} !^on$ [NC] RewriteRule . nossl.html 122
  • 123. Irontec – Curso Apache Mod_Rewrite ● RewriteRule también dispone de flags: – [F] prohibe el acceso (403) – [G] marca la URL como no existente (401) – [L] aplica la regla y termina, no sigue aplicando las restantes – [N] vuelve a empezar la reescritura desde el principio – [NC] no importa mayúsculas/minúsculas – [R] marca redirect (302) – [S=num] ignora el siguiente número (num) de reglas ● Denegadme el acceso a mi IP, solamente si uso Firefox 123
  • 124. Irontec – Curso Apache Mod_Rewrite RewriteEngine On RewriteCond %{HTTP_USER_AGENT} firefox [NC] RewriteCond %{REMOTE_ADDR} ^10.10.0.123 RewriteRule (.*) $1 [F] 124
  • 125. Irontec – Curso Apache Mod_Rewrite ● En RewriteCond y RewriteRule podemos meter una expresión regular entre paréntesis, que luego se sustituirán – RewriteCond (.*) → %1 – RewriteRule (.*) → $1 ● Enviar el subdominio como parámetro de búsqueda a google ● Por ejemplo: – http://dominio.com/google/vida – http://www.google.es/search?q=vida 125
  • 126. Irontec – Curso Apache Mod_Rewrite RewriteEngine On RewriteCond %{REQUEST_URI} ^/google/(.*) RewriteRule . http://www.google.es/search?q=%1 126
  • 127. Irontec – Curso Apache Mod_Rewrite ● Un poco de SEO ● http://voz-ip.com ● La URL incluye el nombre del producto, simplemente para posicionamiento ● Todo lo que hay antes del guión no importa a nivel interno, solamente el identificativo final ● Crear una regla de Rewrite de forma que: – dskndnpsn3-hola.html – 324234n-vida.html ● Sin importar lo que tengamos antes del guión, nos muestre el documento indicado. 127
  • 128. Irontec – Curso Apache Mod_Rewrite RewriteRule .*­(.*) $1 128
  • 129. Irontec – Curso Apache Mod_Rewrite ● A veces únicamente deseamos que la página de login esté cifrada y no así el resto de la web – Ahorro de recursos – Navegación más rápida – … ● Mediante Mod_Rewrite podemos hacer que una página en particular tenga que ser mostrada en https mientras que las demás no ● ¿Como lo haríamos? 129
  • 130. Irontec – Curso Apache Mod_Rewrite <Directory /var/www/inicio> RewriteEngine On RewriteCond %{REQUEST_URI} ^(.*)login.html RewriteCond %{HTTPS} !^on$ [NC] RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L] RewriteCond %{REQUEST_URI} !^(.*)login.html RewriteCond %{HTTPS} ^on$ [NC] RewriteRule . http://%{HTTP_HOST}%{REQUEST_URI}  [L] </Directory> 130
  • 131. Irontec – Curso Apache Mod_Security Mod Security 131
  • 132. Irontec – Curso Apache Mod_Security ● Mod_Security es un módulo de seguridad que hace de barrera entre la red y el servidor Apache ● Tiene un funcionamiento basado en reglas, parecido a un antivirus o IDS http://www.modsecurity.org/index.html ● Detecta DDOS, XSS, troyanos, violaciones de protocolo, etc. ● En Debian Lenny no tenemos paquetes http://etc.inittab.org/~agi/debian/libapache-mod-security2 ● Descargamos: – libapache-mod-security_2.5.9-1_i386.deb – mod-security-common_2.5.9-1_all.deb 132
  • 133. Irontec – Curso Apache Mod_Security ● Una vez instalado el paquete ya tenemos el módulo instalado y habilitado, solo hay que reiniciar ● Ahora toca instalar las reglas: http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.1.tar.gz ● Movemos los .conf a /etc/apache2/modsecurity2 ● Añadimos al final de apache2: – include /etc/apache2/modsecurity2/ ● Creamos en siguiente enlace simbólico: – ln ­s /var/log/apache2 /etc/apache2/logs 133
  • 134. Irontec – Curso Apache Mod_Security ● Podemos crear nuestras propias reglas de prueba ● Por ejemplo, vamos a filtrar a los que navegan con Chrome :) SecRule REQUEST_HEADERS:User­Agent "Chrome" "log,drop" ● Hará una búsqueda en las cabeceras, usando una expresión regular ● Si concuerda, dropea la conexión y lo logea ● Se pueden descargar más reglas de: http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project ● Cuidado, ya que algunas pueden no ser compatibles 134
  • 135. Irontec – Curso Apache Mod_Security ● Vamos a probar cuanto de seguro es :) ● Nikto2 es una herramienta de testo de la seguridad de un servidor web ● Comprueba configuraciones y hace más de 7000 teses ● Si Mod_Security está habilitado, el log error.log debería crecer muchisimo ;) ./nikto.pl ­h 10.10.0.147  135
  • 136. Irontec – Curso Apache Mod_Proxy ● Mod_Proxy puede funcionar en dos modos, reenvío y proxy inverso – El modo de reenvío (forward proxy) es el típico. El servidor está entre el cliente y el servidor destino. Vamos, ¡el proxy de toda la vida! – En el modo inverso actúa como un servidor web. El cliente accede al servidor y este reenvía la petición a otro para finalmente devolverle el contenido como si originalmente fuese suyo a2enmod proxy 136
  • 137. Irontec – Curso Apache Mod_Proxy ● Para habilitar Apache como Proxy creamos un VirtualHost en el puerto 8080 ● Ponemos las siguientes directivas: <VirtualHost *:8080>    ProxyRequests On    ProxyVia On <Proxy *>    Order deny,allow    Allow from all </Proxy> </VirtualHost> ● Tenemos que configurar nuestro navegador para que use el Proxy 137
  • 138. Irontec – Curso Apache Mod_Proxy ● Otro VirtualHost <VirtualHost *:81> <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /ma/b/ http://miguelangelnieto.net/ ProxyPassReverse /ma/b/ http://miguelangelnieto.net/ </VirtualHost> ● Cuidado con las barras! 138
  • 139. Irontec – Curso Apache Optimización del servidor ● La optimización de Apache, al igual que cualquier otro servicio, depende de: – Tarjeta de red rápida – Discos rápidos – Mucha RAM – Mucha CPU ● Contra más, mejor ● Como ya hemos dicho, cuando un servidor no da para más y no se puede ampliar, la solución es montar otro y repartir carga 139
  • 140. Irontec – Curso Apache Optimización del servidor ● La regla principal en linux es: – NO SWAP ● Si el sistema se queda sin RAM y necesita más recursos usará la SWAP, lo cual degradará el rendimiento hasta hacerlo inusable ● Para no llegar a ese extremo hay que poner un valor normal en MaxClients ● MaxClients=RAM/AVG(apache) 140
  • 141. Irontec – Curso Apache Optimización del servidor ● Muchas consultas DNS pueden ralentizar las respuestas ● A poder ser en Deny y Allow se debe poner direcciones IP ● HostnameLookups está por defecto Off. Si se requiere para un directorio en especial se puede habilitar, pero no se recomienda hacerlo globalmente 141
  • 142. Irontec – Curso Apache Optimización del servidor ● Los ficheros .htaccess se leen en cada acceso ● Si tienes muchos repartidos por múltiples directorios el rendimiento de acceso a disco se puede degradar con muchas lecturas no secuenciales ● AllowOverride None ● El contenido del .htaccess lo podemos mover al VirtualHost y hacer un reload ● De esa forma se lee una vez y se ejecuta infinito 142
  • 143. Irontec – Curso Apache Optimización del servidor ● Si tenemos enlaces simbólicos y la directiva SymLinksIfOwnerMatch habilitada, el sistema tendrá que hacer dos llamadas al sistema cada vez que quiera acceder a el ● Si quiere seguridad, no tienes más remedio que tenerlo activado ● Si quieres rendimiento, tendrás que evitar dicho chequeo ● Puedes programar una tarea que cada 5 minutos compruebe los enlaces y sus propietarios ● Será más rápido que hacerlo por cada conexión 143
  • 144. Irontec – Curso Apache Optimización del servidor ● Las páginas web deberían estar en la misma máquina donde corre Apache ● Tener los datos montados por NFS o Samba solo añade OverHead y latencia a las peticiones ● Dependiendo del sistema puede funcionar mejor (o no) con: – EnableSendfile Off (envío de ficheros) – EnableMMap Off (lectura del contenido de ficheros) 144
  • 145. Irontec – Curso Apache Optimización del servidor ● Ningún software es perfecto :) ● Para evitar memory leaks se recomienda reiniciar los distintos threads ● Se puede matar un thread cuando haya cumplido su objetivo en la vida, responder a un número de peticiones ● 0 significa infinito ● Depende del hardware y del tipo de web que tengamos, será mejor un valor u otro, no hay regla fija Setting MaxRequestsPerChild to a non­ zero value limits the amount of memory  that process can consume by  (accidental) memory leakage. 145
  • 146. Irontec – Curso Apache Optimización del servidor ● Con KeepAlive, los threads se quedan esperando más peticiones de la conexión abierta ● Por defecto espera 15 segundos ● Debes elegir entre ahorro de ancho de banda y recursos del sistema KeepAliveTimeout ● Una conexión se queda abierta para bajar el contenido de la web, por lo tanto esperas superiores a 5 segundos suelen carecer de sentido 146
  • 147. Irontec – Curso Apache Optimización del servidor ● Apache soporta varios modos de concurrencia diferentes dependiendo del sistema operativo ● Se llaman MPM (multi-process Modules) ● En unix tenemos: – Worker: múltiples procesos con múltiples threads cada uno. Cada thread gestiona una conexión. Consume menos memoria y es recomendable para webs con alto tráfico – Prefork: múltiples procesos con un único thread. Cada thread gestiona una conexión. Usa más memoria, tiene prácticamente el mismo rendimiento, pero es recomendable usarlo para trabajar con módulos No- Thread-Safe (PHP5 de Debian requiere este modo) 147
  • 148. 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 148
  • 149. 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. 149