Está en la página 1de 149

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 ms usada), 1.2 Protocolo stateless

Irontec Curso Apache

Protocolo HTTP

Elementos:

Cliente=user agent: web browser, spider, wget, curl,... Servidor Intermediarios: Proxy, gateway, tnel

Irontec Curso Apache

Protocolo HTTP

Mensaje de peticin:

Lnea de mtodo de peticin Lneas de cabecera de peticin (de tipo XXX:YYY) <CR><LF> (Lnea en blanco) Cuerpo (opcional) Lnea de cdigo de estado Lneas de cabecera de respuesta (de tipo XXX:YYY) <CR><LF> (Lnea en blanco) Cuerpo (opcional)

Mensaje de respuesta:

Todas las lneas acaban en <CR><LF>

Irontec Curso Apache

Protocolo HTTP

Mensajes de peticin 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 lneas de cabecera:

Keep-Alive, Proxy-Connection, Referer, Cookie, Contentlength,... Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers

Irontec Curso Apache

Protocolo HTTP

GET: solicita una peticin dentro de la URL. POST: enva datos en el cuerpo de la peticin PUT: upload HEAD: solicita una respuesta idntica a GET pero slo devuelve las cabeceras (no el cuerpo). DELETE: borrado TRACE: devuelve la peticin, para comprobar si algn equipo intermedio modifica la original OPTIONS: devuelve los mtodos soportados por el servidor CONNECT: empleado para tneles tcp/ip, tpicamente para hacer conexiones https a travs 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 lneas de cabecera:


ETag, Expires, Pragma, Vary, X-* Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers

Irontec Curso Apache

Protocolo HTTP

Codigos de estado Son los cdigos devueltos por el servidor. Se agrupan en:

1xx Informacin 2xx xito 3xx Redireccin 4xx Error de cliente 5xx Error de servidor

Irontec Curso Apache

Protocolo HTTP

Negociacin 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 Forma de describir el tipo de documento a transmitir. Sintaxis: major type/minor type. Ej: text/html, image/gif Basados en extensin o en anlisis (file ...)

Tipos MIME (Multipurpose Internet Mail Extensions):


Irontec Curso Apache

Protocolo HTTP

Conexiones persistentes (HTTP keep-alive) (v1.1): hacer varias conexiones http con una sla conexin tcp.

Ventajas:

Menor carga de sistema operativo Menos congestin en la red (menos conexiones tcp) y menor latencia en solicitudes posteriores. Posibilidad de http pipelining

Segn rfc2616 un cliente no debera establecer ms de 2 conexiones persistentes al mismo tiempo con un servidor, para evitar la congestin.

10

Irontec Curso Apache

Protocolo HTTP

HTTP pipelining (v1.1): peticiones asncronas: enviar ms de una peticin 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 informacin sobre los clientes Tcnicas 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 pginas de forma dinmica Los bookmarks no valen (URLs poco estticas)

Campos ocultos en formularios. Inviable a nivel general: no todo est en formularios


12

Irontec Curso Apache

Protocolo HTTP

Se suelen encapsular a ms alto nivel:


APIs de php, java servlets,... Aplicacin Identificador de sesin a incluir en el trfico http Variables de sesin: pueden guardarse en ficheros de disco o ej. en base de datos Timeout

Cada sesin incluye:


Implicaciones de seguridad: secuestro de sesin, ej. con URL rewriting

13

Irontec Curso Apache

Protocolo HTTP

Alternativas de almacenamiento de informacin de sesiones:

En el lado del servidor. Inconvenientes:

Acceso a la informacin si hay varios servidores ejs. cluster, balance de carga. Soluciones:

Replicacin entre servidores Comparticin: sockets, memoria, disco, BD

(Limitacin en el n de clientes)

En el lado del cliente: se usan cookies y criptografa. Inconvenientes:

Limitacin de tamao de cookie Informacin del usuario no accesible fuera de la sesin

14

Irontec Curso Apache

Introduccin

Desarrollado inicialmente por Rob McCool (NCSA) Es desde 1996 el servidor web HTTP ms utilizado en Internet. Es multiplataforma (Unix, Microsoft, Novell) La versin 2 de apache se ha reescrito completamente. Es extremadamente estable. Modularizado para evitar mantener un cdigo extremadamente complejo y monoltico. Es software libre aunque no GPL. http://www.apache.org
15

Irontec Curso Apache

Introduccin

Roadmap: Evolucin de las versiones 1.2.X 1.3.X 2.0.X 2.2.X Trunk o versin en desarrollo

16

Irontec Curso Apache

Introduccin

Velocidad mayor en el caching Filtros Inteligentes Configurarin modular Balanceo de Carga para Proxys Soporte para apagado transparente Soporte para archivos mayores de 2GB Nuevas opciones para autenticacin y autorizacin
http://httpd.apache.org/docs/2.2/new_features_2_2.html

17

Irontec Curso Apache

Introduccin

18

Irontec Curso Apache

Instalacin

Cdigo fuente Paquete binario para la distribucin Debian GNU/Linux Ventajas y desventajas de cada uno?

19

Irontec Curso Apache

Instalacin Cdigo fuente

Descargamos las ltimas fuentes del mirror oficial ms prximo (http://apache/rediris.es/httpd) Se pueden buscar ms 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

Instalacin Cdigo fuente


Verificamos la integridad del cdigo fuente: Averiguamos la clave con la que fue firmada
$ gpg -verify httpd-2.2.11.tar.gz.asc gpg:Firmadoelsb06dic200816:18:37CETusandoclaveDSAID 311A3DE5 gpg:Imposiblecomprobarlafirma:Clavepblicanoencontrada

Importamos la clave pblica con la que fue firmada


$ gpg --keyserver pgpkeys.mit.edu --recv-key 311A3DE5 gpg:anillo`/root/.gnupg/secring.gpg'creado gpg:solicitandoclave311A3DE5dehkpservidorpgpkeys.mit.edu gpg:/root/.gnupg/trustdb.gpg:sehacreadobasededatosde confianza gpg:clave311A3DE5:clavepblica"RuedigerPluem <rpluem@apache.org>"importada gpg:noseencuentranclavesabsolutamentefiables gpg:Cantidadtotalprocesada:1 gpg:importadas:1
21

Irontec Curso Apache

Instalacin Cdigo fuente

Verificamos la integridad del cdigo fuente: Verificamos la firma digital


$ gpg --verify httpd-2.2.11.tar.gz.asc
gpg:Firmadoelsb06dic200816:18:37CETusandoclaveDSAID311A3DE5 gpg:Firmacorrectade"RuedigerPluem<rpluem@apache.org>" gpg:ATENCIN:Estaclavenoestcertificadaporunafirmadeconfianza! gpg:Nohayindiciosdequelafirmapertenezcaalpropietario. Huellasdactilaresdelaclaveprimaria:120A8667241AEDD4A78B4610 4C042818311A3DE5

La firma digital es vlida pero la clave no es de confianza!

22

Irontec Curso Apache

Instalacin Cdigo fuente

Confiamos en la clave (seguro?)


$ gpg --edit-key 10FDE075
pub1024D/311A3DE5creado:20051002caduca:nuncauso:SCA confianza:desconocidovalidez:desconocido sub2048g/A21CD598creado:20051002caduca:nuncauso:E [desconocida](1).RuedigerPluem<rpluem@apache.org> Orden>trust pub1024D/311A3DE5creado:20051002caduca:nuncauso:SCA confianza:desconocidovalidez:desconocido sub2048g/A21CD598creado:20051002caduca:nuncauso:E [desconocida](1).RuedigerPluem<rpluem@apache.org> Porfavor,decidasuniveldeconfianzaenqueesteusuario verifiquecorrectamentelasclavesdeotrosusuarios(mirando pasaportes,comprobandohuellasdactilaresendiferentesfuentes...) 1=Nolosoprefieronodecirlo 2=NOtengoconfianza 3=Confounpoco 4=Confototalmente 5=confoabsolutamente m=volveralmenprincipal

23

Irontec Curso Apache

Instalacin Cdigo fuente

Continuamos...
Sudecisin?5 Deverdadquiereasignarabsolutaconfianzaaestaclave?(s/N)s pub1024D/311A3DE5creado:20051002caduca:nuncauso:SCA confianza:absolutavalidez:desconocido sub2048g/A21CD598creado:20051002caduca:nuncauso:E [desconocida](1).RuedigerPluem<rpluem@apache.org> Porfavor,adviertaquelavalidezdeclavemostradanoesnecesariamente correctaamenosdequereinicieelprograma.

24

Irontec Curso Apache

Instalacin Cdigo fuente

Verificamos de nuevo la firma digital


$ gpg --verify httpd-2.2.11.tar.gz.asc
gpg:Firmadoelsb06dic200816:18:37CETusandoclaveDSAID311A3DE5 gpg:comprobandobasededatosdeconfianza gpg:3dudosa(s)necesarias,1completa(s)necesarias, modelodeconfianzaPGP gpg:nivel:0validez:1firmada:0confianza:0,0q,0n,0m,0f, 1u gpg:Firmacorrectade"RuedigerPluem<rpluem@apache.org>"

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

25

Irontec Curso Apache

Instalacin Cdigo fuente

Instalamos todo lo necesario para la compilacin con un solo comando: apt-get install build-essential Descomprimimos el cdigo fuente: tar -xzf httpd-2.2.11.tar.gz

26

Irontec Curso Apache

Instalacin Cdigo fuente


La instalacin de apache se hace en 3 pasos: Seleccionar los mdulos a incluir en el servidor Crear una configuracin 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

Instalacin Cdigo 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 mdulo esttico. --disable-module Para no compilar un mdulo --enable-module=shared Para compilar el modulo como dinmico (DSO) IMPORTANTE: no avisa si el modulo indicado existe o28

Irontec Curso Apache

Instalacin Cdigo fuente

Los mdulos estticos son mdulos incluidos en tiempo de compilacin: Para conocer que mdulos 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

Instalacin Cdigo fuente


Mdulos dinmicos son los cargados externamente: Apache permite cargar mdulos independientes al archivo binario httpd. Es posible gracias al mdulo mod_so, que debe compilarse estticamente en el ncleo 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 tambin debe soportar DSO. Cmo compilamos Apache con soporte DSO?
30

Irontec Curso Apache

Instalacin Cdigo fuente


Mdulos cargados externamente vs includos: Si compilamos estticamente los mdulos, cada cambio en ellos hay que recompilar apache! Ventajas DSO

El servidor es mucho ms flexible Permite tener diferentes instancias de servidor con una nica instalacin de Apache Ms sencillo el prototipado y desarrollo de mdulos El servidor es un 20% ms lento en el arranque El servidor en un 5% ms lento en funcionamiento

Desventajas DSO

31

Irontec Curso Apache

Instalacin Cdigo fuente

Ya tenemos Apache compilado y con posibilidad de aadir mdulos dinmicamente. Vamos a compilar PHP5 como DSO :)

32

Irontec Curso Apache

Instalacin Cdigo fuente

PHP es un lenguaje de programacin interpretado, diseado originalmente para la creacin de pginas web dinmicas. Es usado principalmente en interpretacin del lado del servidor (server-side scripting). Es un lenguaje multiplataforma. Capacidad de conexin con la mayora de los manejadores de base de datos. ES LIBRE. http://es.wikipedia.org/wiki/.php
33

Irontec Curso Apache

Instalacin Cdigo fuente

Descargamos el cdigo 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 php5.2.9.tar.gz

Configuramos la compilacin como mdulo de Apache, con soporte Mysql y GD.


./configure -with-apxs2=/usr/local/apache2/bin/apxs \ --with-mysql \ --with-gd
34

Irontec Curso Apache

Instalacin Cdigo fuente

Cargamos el mdulo en Apache


LoadModule php5_module modules/libphp5.so

Configuramos Apache para que interprete las pginas .php mediante el mdulo de PHP
AddType application/x-httpd-php .php

Configuramos Apache para que busque pginas .php ndice en caso de no solicitar una.
DirectoryIndex index.html index.php

35

Irontec Curso Apache

Instalacin Cdigo fuente

Para probar el funcionamiento de PHP tenemos que crear una pgina en... PHP! :D En el directorio raz de Apache creamos un fichero llamado info.php con el siguiente contenido: <? phpinfo() ?> Accedemos a la pgina desde nuestro navegador.

36

Irontec Curso Apache

Instalacin Paquetes binarios

Podemos instalar Apache2, PHP, etc. desde apt-get apt-get install apache2 php5 php5-mysql php5-gd Apache estar automticamente configurado con soporte php5. En el futuro si deseamos actualizar (por algn parche de seguridad) podremos hacerlo mediante apt-get sin tener que recompilar nada. Apt-get es ms sencillo y simple, pero compilar es ms universal.
37

Irontec Curso Apache

Instalacin Paquetes binarios

Apache instalado por apt-get viene preparado para trabajar con mdulos DSO. Dispone de sus propios comandos para habilitar y deshabilitar mdulos. Habilitar mdulo SSL a2enmod ssl Deshabilitar mdulo SSL a2dismod ssl Con cada cambio es necesario reiniciar Apache. Los modulos disponibles estn en: /etc/apache2/mods-available Los mdulos habilitados estn en: /etc/apache2/mods-enabled
38

Irontec Curso Apache

Configuracin

Apache dispone de cientos de directivas de configuracin. 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 configuracin 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

Configuracin

.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

Configuracin

En general los archivos .htaccess no se deben usar nunca, a menos que no se tenga acceso al archivo de configuracin 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

Configuracin

Las distintas directivas solo pueden aplicarse en algunos contextos, por lo que antes de aplicarlo es necesario saber donde. Contextos de aplicacin

Servidor Host Virtual <Directory>,<Location>,<Files>,<Proxy> Fichero .htaccess

42

Irontec Curso Apache

Configuracin

La directiva <directory> nos permite establecer una configuracin especfica 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 configuracin indicada en la directiva Directory anterior.

43

Irontec Curso Apache

Configuracin

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

Configuracin

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

Configuracin

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 nmero limitado de usuarios. Ejemplo, no permitir el acceso a nadie a las imagenes .jpg <Files ~ "\.jpg$"> Deny from all </Files>
46

Irontec Curso Apache

Configuracin

Limit y LimitExcept nos permiten denegar en funcion de la peticin 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 pginas web a todo el mundo excepto a mi :)
47

Irontec Curso Apache

Configuracin

Redirect nos permite redirigir una peticin a otra pgina. 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 cdigos de redireccin:
301 Redireccin permanente 302 Redireccin temporal 303 El contenido a sido reemplazado 410 El contenido ya no existe
48

Irontec Curso Apache

Configuracin

ErrorLog y CustomLog nos permiten definir donde y como se guardarn 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

Configuracin

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

Configuracin

En caso de disponer de un gran nmero 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 nmero de descriptores de fichero que puede abrir un programa determinado.
51

Irontec Curso Apache

Configuracin

El lmite de Linux es de 1024 descriptores de fichero. Lmites:


Kernel: depende del SO. En Linux Hardware Software # ulimit -n 1024

52

Irontec Curso Apache

Configuracin

MaxClients nos permite definir el nmero mximo de conexiones que pueden ser atentidas simultneamente. El nmero a indicar depender de las caractersticas de la mquina. A ms peticiones simultaneas, mas necesidad de memoria RAM. MaxClients 100

53

Irontec Curso Apache

Configuracin

Alias es como un enlace simblico a nivel de Apache Nos permite crear enlaces para acceder a documentos que no estn en la raz de Apache. Si hacemos un alias a un directorio externo de la raz, 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

Configuracin

Options nos permite especificar que caractersticas de servidor Apache estan disponibles para el directorio en cuestin.
<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

Configuracin

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 modificacin

56

Irontec Curso Apache

Configuracin

Con LimitRequestBody especificamos el tamao mximo en bytes que se pueden especificar en una peticin. LimitRequestBody nos puede ayudar de varias maneras:

Defendiendonos ante posibles denegaciones de servicio. Limitando el tamao de los fichero que un usuario puede subir a nuestro servidor.

LimitRequestBody 102400

57

Irontec Curso Apache

Configuracin

Listen nos permite especificar en que puertos va a escuchar Apache las peticiones. Por defecto es 80 y 443 si se tiene https. Tambin 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

Autenticacin de usuarios

Es posible controlar el acceso al contenido del servidor mediante usuario / contrasea El mdulo encargado es mod_auth Generacin 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

Autenticacin de usuarios

Solicitar al servidor que pida una contrasea

En el archivo de configuracin general (httpd.conf) dentro de una seccin <Directory>.


AuthType Basic AuthName "Acceso Restringido" AuthUserFile /etc/apache2/passwd/.passwd Require user miguel

A travs del archivo .htaccess


Igual que el modo anterior Es necesario habilitar las directivas de autenticacin


AllowOverride AuthConfig

60

Irontec Curso Apache

Autenticacin de usuarios

Generacin de archivo de grupos de usuarios


/etc/apache2/.group Grupo1: miguel iker

Configuracin de Apache para soporte de validacin 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

Autenticacin 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 comprobacin del nombre de usuario y contrasea. Esto carga de forma considerable el servidor. Es til para nmero reducido de usuarios.

62

Irontec Curso Apache

VirtualHost

El uso de VirtualHost nos permite alojar diferentes pginas 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 mquina. 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 configuracin 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 sern 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 mnimo 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 aadir 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 informacin 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 contrasea para acceder

69

Irontec Curso Apache

Certificados

70

Irontec Curso Apache

Certificados

Introduccin a la Criptografa Criptografa simtrica o de Clave Privada Criptografa de Clave Pblica Resmenes o Hashes Firmas Digitales Certificados

71

Irontec Curso Apache

Certificados

Se encargan de asociar una clave pblica con la identidad real de un individuo, servidor u otra entidad, conocido como sujecto. Como Nombre Distinguido se conoce a una serie de informacin que distingue a una entidad:

Nombre Comn Compaa Departamento Ciudad Provincia Pas


72

Irontec Curso Apache

Certificados

Certificados Informacin que contiene un Certificado

Sujeto:

Nombre Distinguido Clave Pblica Nombre Distinguido Firma Digital

Expendedor

Periodo de Validez Informacin Administrativa

Versin Nmero de Serie


73

Irontec Curso Apache

Certificados

Autoridades de Certificacin Son las entidades encargadas de expedir y gestionar los certificados Hay 3 tipos de Autoridades de Certificacin

Oficiales y reconocidas por las herramientas ms comunes

Verisign, Thawte, Comodo...

Oficiales y no reconocidas por las herramientas ms comunes

Izenpe, Ceres, Camerfirma... Nosotros mismos ;-)


74

No Oficiales

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:

Negociacin de cifrado a utilizar durante el intercambio de datos (criptografa simtrica) Establecer e intercambiar una clave de sesin Puede autenticar al servidor por parte del cliente Puede autenticar al cliente por parte del servidor

75

Irontec Curso Apache

Creacin de Certificados Generar la clave privada del servidor

Certificados

Cifrada con criptografa simtrica 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 Certificacin (CA) para generar el Certificado (CRT)

77

Irontec Curso Apache

Certificados

Creacin de Certificados Autoridad de Certificacin Oficial

Se enva, habitualmente, a travs 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 instalacin va mail La Solicitud de Certificado ya no es vlida.
78

Irontec Curso Apache

Certificados

Creacin 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 mdulo mod_ssl compilado. mod_ssl ofrece soporte SSL v2/v3 y TLS v1. Cuando EEUU relaj las restricciones en materia de exportacin criptogrfica, mod_ssl entr a formar parte de Apache (Apache 2). Si no lo tiene:

Compilado estticamente: Como DSO:


80

./configure -enable-ssl make && make install a2enmod ssl

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

Conversin 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 vlido:

No caducado No revocado

Vamos a proteger nuestro VirtualHost, de forma que solo sea accesible mediante un certificado vlido

83

Irontec Curso Apache

Certificado cliente

Primero generamos la CA de la que colgarn todos los certificados cliente Generamos un certificado cliente, para ello creamos un fichero de configuracin especfico que indicara que tipo de certificado es:

catconfig.txt basicConstraints=critical,CA:FALSE extendedKeyUsage=clientAuth

Generamos un certificado cliente:

opensslgenrsaoutmiguelangel.key2048 opensslreqnewkeyprivate/miguelangel.keyout miguelangel.csr opensslx509CACA.crtCAkeyprivate/CA.keyreqin miguelangel.csrset_serial2days3650extfile config.txtsha1outmiguelangel.crt


84

Irontec Curso Apache

Certificado cliente

Lo exportamos a un formato aceptable por los navegadores, por ejemplo p12:

opensslpkcs12exportinmiguelangel.crtinkey private/miguelangel.keycertfileCA.crtout miguelangel.p12

Configuramos Apache:

SSLEngineon SSLCertificateFile/etc/apache2/ssl/test1.crt SSLCertificateKeyFile/etc/apache2/ssl/test1.key SSLCACertificateFile/etc/ssl/clientes/CA.crt SSLVerifyClientrequire

85

Irontec Curso Apache

Certificado cliente

Cuando no queremos seguir dando acceso a un usuario debemos revocar su certificado Una vez revocado, generamos/actualizamos el fichero de revocados que leer apache Configuramos Apache para que lo lea :)

opensslcarevokemiguelangel.crt

opensslcagencrloutrevovados.crl

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

Ms memoria RAM Ms procesador Discos SSD RAID con write cache (con bateria) Proxy Inverso Comprar ms servidores

88

Irontec Curso Apache

Balanceo de carga

A veces es ms 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 debera estar en HA Un buen balanceo de carga debera comprobar el estado de los servidores Si un servidor se cae, debera sacarlo de la cola De la misma manera, si vuelve a estar Online se volvera a aadir 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 Fcil de implantar y utilizar, sigue la filosofa KISS ;)

Multithread Conexiones distribuidas proporcionalmente De momento en Beta wget tar -xzf ./configure make && make install

Para usarlo, hay que compilarlo:


92

Irontec Curso Apache

Balanceo de carga
punisher@shyris:~$glbdhelp Usage: glbd[OPTIONS]LISTEN_ADDRESS[DESTINATION_LIST] OPTIONS: helpthishelpmessage. daemonrunasadaemon. fifo<fifoname>nameoftheFIFOfileforcontrol. control[HOST:]PORTlistenforcontrolrequestsonthisaddress. threadsNnumberofworkingthreads(connectionpools). source_trackingturnonsourcetracking:routeconnectionsfrom one sourcetothesamedestination. verboseturnonverbosereporting. versionprintprogramversion. LISTEN_ADDRESS: [IP:]PORTwheretolistenforincomingTCPconnections. DESTINATION_LIST: [H1[:P1[:W1]]][H2[:P2[:W2]]]...aspaceseparatedlistofdestinations intheformaddress:port:weight. 93

Irontec Curso Apache

Balanceo de carga

Haciendo uso de los pesos es posible enviar ms peticiones al servidor ms potente Si los pesos son iguales, se distribuirn las conexiones Si deseamos conexiones persistentes (mismo origen mismo servidor destino) debemos habilitar el source_tracking Bueno como solucin de implantacin rpida y sencilla

94

Irontec Curso Apache

Balanceo de carga
punisher@shyris:~$glbdverbose10.10.0.123:8081 10.10.0.211:80:110.10.0.204:80 Incomingaddress:10.10.0.123:8080,controlFIFO: /tmp/glbd.fifo Controladdress:none Numberofthreads:1,sourcetracking: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:weightusageconns 10.10.0.211:80:1.0000.0000 10.10.0.204:1:1.0000.0000 Destinations:2,totalconnections:0
95

Irontec Curso Apache

Balanceo de carga
INFO:glb_pool.c:323:Pool0:addedconnection,(totalpoolconnections:1) INFO:glb_listener.c:77:Acceptedconnectionfrom10.10.0.123:45370 INFO:glb_listener.c:79:to10.10.0.204:80 INFO:glb_pool.c:323:Pool0:addedconnection,(totalpoolconnections:2) INFO:glb_listener.c:77:Acceptedconnectionfrom10.10.0.123:45371 INFO:glb_listener.c:79:to10.10.0.211:80 INFO:glb_pool.c:323:Pool0:addedconnection,(totalpoolconnections:2) INFO:glb_listener.c:77:Acceptedconnectionfrom10.10.0.123:45372 INFO:glb_listener.c:79:to10.10.0.204:80 INFO:glb_pool.c:323:Pool0:addedconnection,(totalpoolconnections:2) INFO:glb_listener.c:77:Acceptedconnectionfrom10.10.0.123:45373 INFO:glb_listener.c:79:to10.10.0.211:80

96

Irontec Curso Apache

Balanceo de carga

LVS

97

Irontec Curso Apache

Balanceo de carga

LVS es el estndar de facto para crear balanceadores de carga en Linux Acta como si fuese un router de capa 4 El director recibe las conexiones y las reenva al destino Se pueden aadir y eliminar servidores reales en tiempo real sin tener que reiniciar el servicio

98

Irontec Curso Apache

Balanceo de carga

aptgetinstallipvsadm La configuracin es en consola, mediante el comando ipvsadm Es posible guardar las reglas en un fichero de configuracin 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:~#ipvsadmAt10.10.0.10:80p600

Aadimos un servidor real:


debian1:~#ipvsadmat10.10.0.10:80r10.10.0.144m

Aadimos otro servidor rea:


debian1:~#ipvsadmat10.10.0.10:80r10.10.0.144m

Listamos los componentes de nuestro balanceador de carga:


debian1:~#ipvsadml IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags >RemoteAddress:PortForwardWeightActiveConn InActConn TCP10.10.0.10:wwwwlcpersistent600 >10.10.0.145:wwwMasq100 >10.10.0.144:wwwMasq100 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 adems herramientas para la auto deteccin de las cadas Si un servidor se cae, debera sacarlo de las colas sin necesidad de intervencin manual Debera comprobar tanto la conexin 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 ms) usando por debajo LVS http://www.keepalived.org/

Balanceo de carga Balanceo de LVS Gestin 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 tpica 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 electrnico

105

Irontec Curso Apache

Balanceo de carga

Ventajas

Facil de implementar No necesita de un servidor extra Rpido (consulta DNS) No controla la cada de un servidor Las caches de los DNS pueden hacer que no sea tan Round Robin No puedes establecer pesos

Desventajas

106

Irontec Curso Apache

Balanceo de carga

mod_proxy_balancer

107

Irontec Curso Apache

Balanceo de carga

Es un mdulo 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 trfico (se reparte en funcin de los bytes que ha transmitido cada servidor) Dependiente de la carga (se envan las conexiones al que menos peticiones tenga en ese momento)

108

Irontec Curso Apache

Balanceo de carga

Primero debemos aadir unos mdulos:


a2enmod proxy a2enmod proxy_balancer a2enmod proxy_http

Y luego configuramos Apache:

<Proxybalancer://supercluster> BalancerMemberhttp://10.10.0.210:80 BalancerMemberhttp://10.10.0.214:80 Orderdeny,allow Allowfromall </Proxy> ProxyPass/testbalancer://supercluster

109

Irontec Curso Apache

Balanceo de carga

Estadsticas:

110

Irontec Curso Apache

Balanceo de carga

<Location/balancermanager> SetHandlerbalancermanager Orderdeny,allow Allowfromall </Location>

111

Irontec Curso Apache

Mdulos

MDULOS

112

Irontec Curso Apache

Mod_Cache

Mod_Cache nos permite cachear tanto el contenido local como el accedido a travs de proxy en el servidor El cacheo se puede hacer a disco duro o memoria

mod_disk_cache mod_mem_cache

Para activarlo: a2enmodcache a2enmoddisk_cache a2enmodmem_cache

113

Irontec Curso Apache

Mod_Cache

CacheRoot/tmp/cache CacheEnabledisk/ CacheDirLevels5 CacheDirLength4 CacheMaxFileSize64000 CacheDefaultExpire86400 Habilitamos la cache en /tmp/cache, como mximo 5 subdirectorios con nombres de no ms de 4 letras. El tamao mximo de fichero 64000 y expirar a los 86400 segundos

114

Irontec Curso Apache

Mod_Cache

CacheIgnoreCacheControl Ingora las cabeceras no-cache o no-store, guardndo 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 Tamao global de la cache, importante poner un valor normal que no nos deje sin espacio en el disco duro CacheMinFileSize Tamao mnimo que debe tener un fichero para poder se cacheado CacheIgnoreURLSessionIdentifiers No cacheamos las pginas que incluyan un identificador de sesin

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 compresin 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 Ms 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 RewriteBase /vida RewriteRule ^index\.html$ home.hmtl

Y le indicamos donde realizar la reescritura (opcional)

Finalmente reescribimos

120

Irontec Curso Apache

Mod_Rewrite

Podemos poner unas condiciones para la ejecucin de las reglas con RewriteCond:

RewriteCond %{HTTP_USER_AGENT} firefox [NC] RewriteRule ^/$ firefox.html

Si se cumple la condicin HTTP_USER_AGENT incluye la palabra firefox se reenva la peticin 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 tambin 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 maysculas/minsculas [R] marca redirect (302) [S=num] ignora el siguiente nmero (num) de reglas

Denegadme el acceso a mi IP, solamente si uso Firefox

123

Irontec Curso Apache

Mod_Rewrite

RewriteEngineOn 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 expresin regular entre parntesis, que luego se sustituirn

RewriteCond (.*) %1 RewriteRule (.*) $1

Enviar el subdominio como parmetro de bsqueda a google Por ejemplo:


http://dominio.com/google/vida http://www.google.es/search?q=vida

125

Irontec Curso Apache

Mod_Rewrite

RewriteEngineOn 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 guin 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 guin, 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 pgina de login est cifrada y no as el resto de la web

Ahorro de recursos Navegacin ms rpida

Mediante Mod_Rewrite podemos hacer que una pgina en particular tenga que ser mostrada en https mientras que las dems no Como lo haramos?

129

Irontec Curso Apache

Mod_Rewrite

<Directory/var/www/inicio> RewriteEngineOn 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 mdulo 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 mdulo instalado y habilitado, solo hay que reiniciar Ahora toca instalar las reglas: Movemos los .conf a /etc/apache2/modsecurity2 Aadimos al final de apache2:

http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.1.tar.gz

include/etc/apache2/modsecurity2/
lns/var/log/apache2/etc/apache2/logs

Creamos en siguiente enlace simblico:

133

Irontec Curso Apache

Mod_Security

Podemos crear nuestras propias reglas de prueba Por ejemplo, vamos a filtrar a los que navegan con Chrome :)
SecRuleREQUEST_HEADERS:UserAgent"Chrome""log,drop"

Har una bsqueda en las cabeceras, usando una expresin regular Si concuerda, dropea la conexin y lo logea Se pueden descargar ms 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 ms de 7000 teses Si Mod_Security est habilitado, el log error.log debera crecer muchisimo ;) ./nikto.plh10.10.0.147

135

Irontec Curso Apache

Mod_Proxy

Mod_Proxy puede funcionar en dos modos, reenvo y proxy inverso

El modo de reenvo (forward proxy) es el tpico. El servidor est entre el cliente y el servidor destino. Vamos, el proxy de toda la vida! En el modo inverso acta como un servidor web. El cliente accede al servidor y este reenva la peticin a otro para finalmente devolverle el contenido como si originalmente fuese suyo

a2enmodproxy

136

Irontec Curso Apache

Mod_Proxy

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

<VirtualHost*:8080> ProxyRequestsOn ProxyViaOn <Proxy*> Orderdeny,allow Allowfromall </Proxy> </VirtualHost>

Tenemos que configurar nuestro navegador para que use el Proxy


137

Irontec Curso Apache

Mod_Proxy

Otro VirtualHost

<VirtualHost*:81> <Proxy*> Orderdeny,allow Allowfromall </Proxy> ProxyPass/ma/b/http://miguelangelnieto.net/ ProxyPassReverse/ma/b/http://miguelangelnieto.net/ </VirtualHost>

Cuidado con las barras!

138

Irontec Curso Apache

Optimizacin del servidor

La optimizacin de Apache, al igual que cualquier otro servicio, depende de:


Tarjeta de red rpida Discos rpidos Mucha RAM Mucha CPU

Contra ms, mejor Como ya hemos dicho, cuando un servidor no da para ms y no se puede ampliar, la solucin es montar otro y repartir carga

139

Irontec Curso Apache

Optimizacin del servidor

La regla principal en linux es:

NO SWAP

Si el sistema se queda sin RAM y necesita ms 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

Optimizacin 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

Optimizacin del servidor


Los ficheros .htaccess se leen en cada acceso Si tienes muchos repartidos por mltiples 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

Optimizacin del servidor

Si tenemos enlaces simblicos 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 ms remedio que tenerlo activado Si quieres rendimiento, tendrs que evitar dicho chequeo Puedes programar una tarea que cada 5 minutos compruebe los enlaces y sus propietarios Ser ms rpido que hacerlo por cada conexin
143

Irontec Curso Apache

Optimizacin del servidor

Las pginas web deberan estar en la misma mquina donde corre Apache Tener los datos montados por NFS o Samba solo aade OverHead y latencia a las peticiones Dependiendo del sistema puede funcionar mejor (o no) con:

EnableSendfile Off (envo de ficheros) EnableMMap Off (lectura del contenido de ficheros)

144

Irontec Curso Apache

Optimizacin del servidor


Ningn 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 nmero 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 SettingMaxRequestsPerChildtoanon zerovaluelimitstheamountofmemory thatprocesscanconsumeby (accidental)memoryleakage.

145

Irontec Curso Apache

Optimizacin del servidor

Con KeepAlive, los threads se quedan esperando ms peticiones de la conexin abierta Por defecto espera 15 segundos Debes elegir entre ahorro de ancho de banda y recursos del sistema KeepAliveTimeout Una conexin 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

Optimizacin del servidor

Apache soporta varios modos de concurrencia diferentes dependiendo del sistema operativo Se llaman MPM (multi-process Modules) En unix tenemos:

Worker: mltiples procesos con mltiples threads cada uno. Cada thread gestiona una conexin. Consume menos memoria y es recomendable para webs con alto trfico Prefork: mltiples procesos con un nico thread. Cada thread gestiona una conexin. Usa ms memoria, tiene prcticamente el mismo rendimiento, pero es recomendable usarlo para trabajar con mdulos NoThread-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 ms importantes son:

-n nmero de conexiones a realizar -c nmero de conexines 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: Complete requests: Failed requests: 0 10 1000 Time taken for tests: 0.331 seconds

Comparad los datos haciendo solicitudes normales y con keep alive. Poned valores exagerados y comprobad como se consumen los recursos del sistema.
149

También podría gustarte