Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apacheavanzado 100415111624 Phpapp01
Apacheavanzado 100415111624 Phpapp01
Protocolo HTTP
Hypertext Transfer Protocol Desde 1994 RFC 2616 Sobre TCP. Puertos por defecto:
Protocolo HTTP
Elementos:
Cliente=user agent: web browser, spider, wget, curl,... Servidor Intermediarios: Proxy, gateway, tnel
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:
Protocolo HTTP
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,*
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
Protocolo HTTP
HTTP/1.1 200 OK Date: Thu, 27 Mar 2008 21:29:14 GMT Content-Type: text/html; charset=US-ASCII Server: AmazonS3
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
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 ...)
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
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
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)
Protocolo HTTP
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
13
Protocolo HTTP
Acceso a la informacin si hay varios servidores ejs. cluster, balance de carga. Soluciones:
(Limitacin en el n de clientes)
14
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
Introduccin
Roadmap: Evolucin de las versiones 1.2.X 1.3.X 2.0.X 2.2.X Trunk o versin en desarrollo
16
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
Introduccin
18
Instalacin
Cdigo fuente Paquete binario para la distribucin Debian GNU/Linux Ventajas y desventajas de cada uno?
19
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
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
22
23
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
25
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
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
--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
Los mdulos estticos son mdulos incluidos en tiempo de compilacin: Para conocer que mdulos hay incluidos en el binario compilado podemos hacerlo con:
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
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
Ya tenemos Apache compilado y con posibilidad de aadir mdulos dinmicamente. Vamos a compilar PHP5 como DSO :)
32
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
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
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
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
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
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
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
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
Configuracin
Las distintas directivas solo pueden aplicarse en algunos contextos, por lo que antes de aplicarlo es necesario saber donde. Contextos de aplicacin
42
Configuracin
La directiva <directory> nos permite establecer una configuracin especfica a un directorio del sistema de ficheros.
Ahora cada vez que accedamos a http://ip/info nos aplicar la configuracin indicada en la directiva Directory anterior.
43
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
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
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
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
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
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
Configuracin
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
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
Configuracin
52
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
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
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
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
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
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
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
Autenticacin de usuarios
60
Autenticacin de usuarios
61
Autenticacin de usuarios
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
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
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
VirtualHost
65
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
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
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
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
Certificados
70
Certificados
Introduccin a la Criptografa Criptografa simtrica o de Clave Privada Criptografa de Clave Pblica Resmenes o Hashes Firmas Digitales Certificados
71
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:
Certificados
Sujeto:
Expendedor
Certificados
Autoridades de Certificacin Son las entidades encargadas de expedir y gestionar los certificados Hay 3 tipos de Autoridades de Certificacin
No Oficiales
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
Certificados
Sin cifrar
# openssl genrsa -out apache.key 1024
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
Certificados
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
Certificados
# openssl req -new -x509 -nodes -sha1 -days 365 -key mica.key -out dominio.crt
79
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:
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
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
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
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:
Certificado cliente
Configuramos Apache:
85
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
Balanceo de carga
87
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
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:
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
Balanceo de carga
91
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
92
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
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
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
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
Balanceo de carga
LVS
97
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
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
Balanceo de carga
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
Balanceo de carga
Keepalived
102
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
Balanceo de carga
DNS
104
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
105
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
Balanceo de carga
mod_proxy_balancer
107
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
Balanceo de carga
109
Balanceo de carga
Estadsticas:
110
Balanceo de carga
111
Mdulos
MDULOS
112
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
113
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
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
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
117
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
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
Mod_Rewrite
Para activarlo:
a2enmod rewrite
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html Lo habilitamos:
Finalmente reescribimos
120
Mod_Rewrite
Podemos poner unas condiciones para la ejecucin de las reglas con RewriteCond:
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
Mod_Rewrite
RewriteCond%{HTTPS}!^on$[NC] RewriteRule.nossl.html
122
Mod_Rewrite
[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
123
Mod_Rewrite
124
Mod_Rewrite
En RewriteCond y RewriteRule podemos meter una expresin regular entre parntesis, que luego se sustituirn
http://dominio.com/google/vida http://www.google.es/search?q=vida
125
Mod_Rewrite
126
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
Mod_Rewrite
RewriteRule.*(.*)$1
128
Mod_Rewrite
A veces nicamente deseamos que la pgina de login est cifrada y no as el resto de la web
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
Mod_Rewrite
130
Mod_Security
Mod Security
131
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
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
133
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
134
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
Mod_Proxy
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
Mod_Proxy
Para habilitar Apache como Proxy creamos un VirtualHost en el puerto 8080 Ponemos las siguientes directivas:
Mod_Proxy
Otro VirtualHost
138
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
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
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
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
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
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
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
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
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
AB
Apache provee una herramienta para el testeo de rendimiento, Apache Benchmark (ab). Nos permite simular miles de accesos Las opciones ms importantes son:
148
AB
Comparad los datos haciendo solicitudes normales y con keep alive. Poned valores exagerados y comprobad como se consumen los recursos del sistema.
149