2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioaUrko Zurutuza
Aurkezpen hau Beasaingo Andramendi Ikastolako haurren gurasoei zuzendutakoa da, haiekin Internet-en dauden arriskuak ikusi eta ulertu ahal izateko: pribatutasuna, ziberbullying-a, grooming-a, sexting-a
2017-01-26 Internet Arriskuak: Andramendi Ikastola, Gurasoen saioaUrko Zurutuza
Aurkezpen hau Beasaingo Andramendi Ikastolako haurren gurasoei zuzendutakoa da, haiekin Internet-en dauden arriskuak ikusi eta ulertu ahal izateko: pribatutasuna, ziberbullying-a, grooming-a, sexting-a
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
En el pasado Meetup, presentamos Couchbase de manera general, pero ha llegado el momento de ir ahondando en los detalles del producto para conocer todas sus capacidades. Esto nos permitirá estar en mejor disposición para adoptarlo en nuestros proyectos.
En esta ocasión, se hablará de la capa de operaciones y despliegue de Couchbase aunque no con un enfoque tradicional en máquinas físicas, sino siguiendo las buenas prácticas del mercado. Explicaremos y haremos el despliegue en Google Cloud con escalabilidad horizontal elástica y automática.
Para llevar a cabo esto haremos uso, entre otras, de las siguientes tecnologías: Google Cloud, Kubernetes, Python y, por supuesto, Couchbase.
Pondremos a prueba nuestra infraestructura con una pequeña aplicación, si queréis ver los resultados, no os lo podéis perder!
Por qué los CIO deben modernizar su centro de contacto ahoraCamilo Garcia
La llegada de nuevas tecnologías ha traído consigo el crecimiento de las expectativas de los consumidores.
La cruel realidad es que toda empresa debe actualizar su plataforma si pretende avanzar y ser competitivo en el medio.
HERO[IN]MARKETING - ПРОФЕССИОНАЛЬНЫЙ МАРКЕТИНГ МЕРПОРИЯТИЙ. УПАКОВКА ПРОДУКТА, ГРАМОТНАЯ РЕКЛАМНАЯ КАМПАНИЯ, ПРИВЛЕЧЕНИЕ ПАРТНЕРОВ И СПОНСОРОВ, ПРОДАЖА УЧАСТИЯ И PR СОБЫТИЯ
De Redes Sociales a Redes ProfesionalesMundo Contact
Conferencia impartida durante el Congreso CRM + Social Media + Centros de Contato México 2011 organizado por Mundo Contact a cargo de Alfonso Becerra, Consulting Systems Engineer de Cisco
The Social Value Chain Ytzik Aranov Feb 2010 V2Ytzik Aranov
The real impact of Social Media and Social Communities lies hidden inside a corporation's Value Chain and in their operational efficiencies. To implement an effective Social Media & Community strategy, Social2B's Social Value Chain Methodology delivers improved Sales, Marketing, Operational, Customer Loyalty and Financial results - throughout the entire Value/Supply Chain.
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
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
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: 20051002 caduca: nunca uso: SCA
confianza: desconocido validez: desconocido
sub 2048g/A21CD598 creado: 20051002 caduca: nunca uso: E
[desconocida] (1). Ruediger Pluem <rpluem@apache.org>
Orden> trust
pub 1024D/311A3DE5 creado: 20051002 caduca: nunca uso: SCA
confianza: desconocido validez: desconocido
sub 2048g/A21CD598 creado: 20051002 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: 20051002 caduca: nunca uso: SCA
confianza: absoluta validez: desconocido
sub 2048g/A21CD598 creado: 20051002 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
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
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
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 spaceseparated 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
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
aptget 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
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
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
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
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
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
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
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
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
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:UserAgent "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