apache
TRANSCRIPT
Apache
Miguel Ángel Nieto <[email protected]>Irontec – Internet y Sistemas sobre GNU/Linux
Irontec – Curso Apache
2
Protocolo HTTP
● Hypertext Transfer Protocol● Desde 1994● RFC 2616● Sobre TCP.● Puertos por defecto:
– No seguro: tcp 80– Seguro (ssl/tls): 443
● Versiones: 0.9, 1.0, 1.1 (la más usada), 1.2● Protocolo stateless
Irontec – Curso Apache
3
Protocolo HTTP
● Elementos:– Cliente=user agent: web browser, spider, wget, curl,...– Servidor– Intermediarios: Proxy, gateway, túnel
Irontec – Curso Apache
4
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>
Irontec – Curso Apache
5
Protocolo HTTP
● Mensajes de petición● Ej:
– GET / HTTP/ 1. 1– Host :– User - Agent : Mozi l l a/ 5. 0 ( X11; U; Li nux i 686; en- US;
r v: 1. 8. 1. 12) Gecko/ 20080207 Ubunt u/ 7. 10 ( gut sy) Fi r ef ox/ 2. 0. 0. 12 Par os/ 3. 2. 13
– Accept : t ext / xml , t ext / pl ai n; q=0. 8, i mage/ png, */ *; q=0. 5– Accept - Language: es- es, en- us; q=0. 7, en; q=0. 3– Accept - Char set : UTF- 8, *
● Otras líneas de cabecera:– Keep-Alive, Proxy-Connection, Referer, Cookie,
Content-length,...– Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers
Irontec – Curso Apache
6
Protocolo HTTP
● GET: solicita una petición dentro de la URL.● POST: envía datos en el cuerpo de la petición● PUT: upload● HEAD: solicita una respuesta idéntica a GET pero
sólo devuelve las cabeceras (no el cuerpo).● DELETE: borrado● TRACE: devuelve la petición, para comprobar si
algún equipo intermedio modifica la original● OPTIONS: devuelve los métodos soportados por el
servidor● CONNECT: empleado para túneles tcp/ip,
típicamente para hacer conexiones https a través de un proxy http. Riesgo si en el proxy no se limitan los posibles destinos host:port
Irontec – Curso Apache
7
Protocolo HTTP
● Mensajes de respuesta● Ej:
– HTTP/ 1. 1 200 OK– Dat e: Thu, 27 Mar 2008 21: 29: 14 GMT– Cont ent - Type: t ext / ht ml ; char set =US- ASCI I– Ser ver : AmazonS3
● Otras líneas de cabecera:– ETag, Expires, Pragma, Vary, X-*– Ref: http://en.wikipedia.org/wiki/List_of_HTTP_headers
Irontec – Curso Apache
8
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
Irontec – Curso Apache
9
Protocolo HTTP
● Negociación de contenidos: mecanismo para devolver distintos recursos o documentos a partir de una URI solicitada. Ejs: Tipo imagen (gif, png), Idioma, text/html o text/*
– Cabeceras:● De cliente. Ej. Accept - encodi ng: gzi p, def l at e
● De servidor. Ej: Cont ent - encodi ng: gzi p
– Tipos MIME (Multipurpose Internet Mail Extensions):● Forma de describir el tipo de documento a transmitir.● Sintaxis: major type/minor type. Ej: text/html, image/gif● Basados en extensión o en análisis (file ...)
Irontec – Curso Apache
10
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.
Irontec – Curso Apache
11
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.
Irontec – Curso Apache
12
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
Irontec – Curso Apache
13
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
Irontec – Curso Apache
14
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
Irontec – Curso Apache
15
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
Irontec – Curso Apache
16
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
Irontec – Curso Apache
17
Introducción
● Velocidad mayor en el caching● Filtros Inteligentes● Configurarión modular● Balanceo de Carga para Proxies● Soporte para apagado transparente● Soporte para archivos mayores de 2GB● Nuevas opciones para autenticación y autorización
http://httpd.apache.org/docs/2.2/new_features_2_2.html
Irontec – Curso Apache
18
Introducción
Irontec – Curso Apache
19
Instalación
● Código fuente● Paquete binario para la distribución Debian
GNU/Linux
¿Ventajas y desventajas de cada uno?
Irontec – Curso Apache
20
Instalación – Códido fuente
● Descargamos las últimas fuentes del mirror oficial más próximo (http://apache/rediris.es/httpd)
● Se pueden buscar más mirrors y comprobar sus estados en http://www.apache.org/mirrors/
http://apache.rediris.es/httpd/httpd-2.2.11.tar.gz
http://apache.rediris.es/httpd/httpd-2.2.11.tar.gz.asc
Irontec – Curso Apache
21
Instalación – Códido fuente
● Verificamos la integridad del código fuente:● Averiguamos la clave con la que fue firmada
$ gpg –-verify httpd-2.2.11.tar.gz.ascgpg: Firmado el sáb 06 dic 2008 16:18:37 CET usando clave DSA ID 311A3DE5gpg: 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 311A3DE5gpg: anillo `/root/.gnupg/secring.gpg' creadogpg: solicitando clave 311A3DE5 de hkp servidor pgpkeys.mit.edugpg: /root/.gnupg/trustdb.gpg: se ha creado base de datos de confianzagpg: clave 311A3DE5: clave pública "Ruediger Pluem <[email protected]>" importadagpg: no se encuentran claves absolutamente fiablesgpg: Cantidad total procesada: 1gpg: importadas: 1
Irontec – Curso Apache
22
Instalación – Códido fuente
● Verificamos la integridad del código fuente:● Verificamos la firma digital
$ gpg --verify httpd-2.2.11.tar.gz.ascgpg: Firmado el sáb 06 dic 2008 16:18:37 CET usando clave DSA ID 311A3DE5gpg: Firma correcta de "Ruediger Pluem <[email protected]>"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!
Irontec – Curso Apache
23
● Confiamos en la clave (¿seguro?)$ gpg --edit-key 10FDE075pub 1024D/311A3DE5 creado: 2005-10-02 caduca: nunca uso: SCA confianza: desconocido validez: desconocidosub 2048g/A21CD598 creado: 2005-10-02 caduca: nunca uso: E [desconocida] (1). Ruediger Pluem <[email protected]>Orden> trustpub 1024D/311A3DE5 creado: 2005-10-02 caduca: nunca uso: SCA confianza: desconocido validez: desconocidosub 2048g/A21CD598 creado: 2005-10-02 caduca: nunca uso: E [desconocida] (1). Ruediger Pluem <[email protected]>
Por favor, decida su nivel de confianza en que este usuarioverifique correctamente las claves de otros usuarios (mirandopasaportes, 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
Irontec – Curso Apache
24
Instalación – Códido fuente
● Continuamos...¿Su decisión? 5¿De verdad quiere asignar absoluta confianza a esta clave? (s/N) s
pub 1024D/311A3DE5 creado: 2005-10-02 caduca: nunca uso: SCA confianza: absoluta validez: desconocidosub 2048g/A21CD598 creado: 2005-10-02 caduca: nunca uso: E [desconocida] (1). Ruediger Pluem <[email protected]>Por favor, advierta que la validez de clave mostrada no es necesariamentecorrecta a menos de que reinicie el programa.
Irontec – Curso Apache
25
Instalación – Códido fuente
● Verificamos de nuevo la firma digital$ gpg --verify httpd-2.2.11.tar.gz.ascgpg: Firmado el sáb 06 dic 2008 16:18:37 CET usando clave DSA ID 311A3DE5gpg: comprobando base de datos de confianzagpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,modelo de confianza PGPgpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1ugpg: Firma correcta de "Ruediger Pluem <[email protected]>"
● ¡Firma digital verificada! Podemos instalar el software con seguridad.
http://www.gnupg.org/
Irontec – Curso Apache
26
Instalación – Códido fuente
● Instalamos todo lo necesario para la compilación con un solo comando:apt-get install build-essential
● Descomprimimos el código fuente:tar -xzf httpd-2.2.11.tar.gz
Irontec – Curso Apache
27
Instalación – Códido fuente
● La instalación de apache se hace en 3 pasos:● Seleccionar los módulos a incluir en el servidor● Crear una configuración para el sistema operativo
$ ./configure
● Compilar el ejecutable$ make# make install
● Ponemos en marcha el servidor:/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
Intentaremos arrancarlo como usuario NO ROOT. ¿Podemos?
Irontec – Curso Apache
28
Instalación – Códido fuente
● El script configure nos permite varias opciones.● -- prefix=/directorio/destino
Es el directorio en el que Apache va a ser instalado. Apache tiene que ser configurado para el directorio que se especifique para que funcione correctamente.
● --enable-moduleUtilizado para compilar un módulo estático.
● --disable-modulePara no compilar un módulo
● --enable-module=sharedPara compilar el modulo como dinámico (DSO)
IMPORTANTE: no avisa si el modulo indicado existe o no. Por lo que habrá que tener cuidado.
Irontec – Curso Apache
29
Instalación – Códido fuente
● Los módulos estáticos son módulos incluidos en tiempo de compilación:
● Para conocer que módulos hay incluidos en el binario compilado podemos hacerlo con:– Instalado desde las fuentes:
/usr/local/apache2/bin/httpd -lCompiled-in modules: http_core.c mod_env.c[...]
– Instalado en Debian desde apt:/usr/sbin/apache2 -lCompiled-in modules: core.c mod_so.c
Irontec – Curso Apache
30
Instalación – Códido fuente
● Módulos dinámicos son los cargados externamente:● Apache permite cargar módulos independientes al
archivo binario httpd.● Es posible gracias al módulo mod_so, que debe
compilarse estáticamente en el núcleo de Apache y a la herramienta apxs (APache eXtenSion).
● Apache necesita ser compilado previamente para poder utilizar la herramienta apxs.
● Para usa este mecanismo el sistema también debe soportar DSO.¿Cómo compilamos Apache con soporte DSO?
Irontec – Curso Apache
31
Instalación – Códido fuente
● Módulos cargados externamente vs incluídos:● Si compilamos estáticamente los módulos, cada
cambio en ellos hay que recompilar apache!● Ventajas DSO
– El servidor es mucho más flexible– Permite tener diferentes instancias de servidor con una
única instalación de Apache– Más sencillo el prototipado y desarrollo de módulos
● Desventajas DSO– El servidor es un 20% más lento en el arranque– El servidor en un 5% más lento en funcionamiento
Irontec – Curso Apache
32
Instalación – Códido fuente
● Ya tenemos Apache compilado y con posibilidad de añadir módulos dinámicamente. Vamos a compilar PHP5 como DSO :)
Irontec – Curso Apache
33
Instalación – Códido fuente
● PHP es un lenguaje de programación interpretado, diseñado originalmente para la creación de páginas web dinámicas. Es usado principalmente en interpretación del lado del servidor (server-side scripting).
● Es un lenguaje multiplataforma.● Capacidad de conexión con la mayoría de los
manejadores de base de datos.● ES LIBRE.
http://es.wikipedia.org/wiki/.php
Irontec – Curso Apache
34
Instalación – Códido fuente
● Descargamos el código fuente de PHP:
wget http://es2.php.net/get/php-5.2.9.tar.gz/from/es.php.net/mirror
● Comprobamos que la suma de integridad es correcta con md5sum:
$md5sum php-5.2.9.tar.gz 98b647561dc664adefe296106056cf11 php-5.2.9.tar.gz
● Configuramos la compilación como módulo de Apache, con soporte Mysql y GD.
./configure –-with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql \ --with-gd
Irontec – Curso Apache
35
Instalación – Códido fuente
● Cargamos el módulo en ApacheLoadModule 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
Irontec – Curso Apache
36
Instalación – Códido fuente
● Para probar el funcionamiento de PHP tenemos que crear una página en... ¡PHP! :D
● En el directorio raíz de Apache creamos un fichero llamado info.php con el siguiente contenido:<? phpinfo() ?>
● Accedemos a la página desde nuestro navegador.
Irontec – Curso Apache
37
Instalación – Paquetes binarios
● Podemos instalar Apache2, PHP, etc. desde apt-getapt-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.
Irontec – Curso Apache
38
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 SSLa2enmod ssl
● Deshabilitar módulo SSLa2dismod 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
Irontec – Curso Apache
39
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
Irontec – Curso Apache
40
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
Irontec – Curso Apache
41
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.
Irontec – Curso Apache
42
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
Irontec – Curso Apache
43
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 NoneDirectoryIndex prueba.php</Directory>
● Ahora cada vez que accedamos a http://ip/info nos aplicará la configuración indicada en la directiva Directory anterior.
Irontec – Curso Apache
44
Configuración
● La directiva Allow/Deny nos permiten definir a quien damos acceso a nuestra web:Order Deny,AllowDeny from allAllow 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
Irontec – Curso Apache
45
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>
Irontec – Curso Apache
46
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>
Irontec – Curso Apache
47
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 :)
Irontec – Curso Apache
48
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 permanente302 Redirección temporal303 El contenido a sido reemplazado410 El contenido ya no existe
Irontec – Curso Apache
49
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.
Irontec – Curso Apache
50
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 LogFormathttp://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.
Irontec – Curso Apache
51
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.
Irontec – Curso Apache
52
Configuración
● El límite de Linux es de 1024 descriptores de fichero.
● Límites:– Kernel: depende del SO. En Linux – Hardware– Software
# ulimit -n1024
Irontec – Curso Apache
53
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
Irontec – Curso Apache
54
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,denyAllow from all</Directory>
Irontec – Curso Apache
55
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
Irontec – Curso Apache
56
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
Irontec – Curso Apache
57
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
Irontec – Curso Apache
58
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 sistemaListen 192.170.2.1:80Listen 192.170.2.5:8000
Irontec – Curso Apache
59
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 miguelNew password:Re-type new password:Adding password for user miguel
miguel:YXP3FBeNjIHDs
# htpasswd -c /etc/apache2/passwd/.passwd ikerNew password:Re-type new password:Adding password for user iker
miguel:YXP3FBeNjIHDsiker:g1Zy7z22KMSko
Irontec – Curso Apache
60
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 BasicAuthName "Acceso Restringido"AuthUserFile /etc/apache2/passwd/.passwdRequire user miguel
– A través del archivo .htaccess● Igual que el modo anterior● Es necesario habilitar las directivas de autenticación
AllowOverride AuthConfig
Irontec – Curso Apache
61
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 BasicAuthName "Acceso solo para grupos"AuthUserFile /etc/apache2/passwd/.passwdAuthGroupFile /etc/apache2/passwd/.groupRequire group Grupo1
Irontec – Curso Apache
62
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.
Irontec – Curso Apache
63
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
Irontec – Curso Apache
64
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
Irontec – Curso Apache
65
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
Irontec – Curso Apache
66
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 ;-)
Irontec – Curso Apache
67
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
Irontec – Curso Apache
68
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.
Irontec – Curso Apache
69
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)
Irontec – Curso Apache
70
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.
Irontec – Curso Apache
71
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
Irontec – Curso Apache
72
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-sslmake && make install
– Como DSO:a2enmod ssl
Irontec – Curso Apache
73
Certificados
● Instalar Certificados en Apache● Configurar un host virtual para alojar el
dominio con certificado auto-firmado
<VirtualHost IP:443>
Listen 443DocumentRoot /var/www
SSLEngine onSSLCertificateFile /usr/local/apache2/ssl/mica.crtSSLCertificateKeyFile /usr/local/apache2/ssl/mica.key
</VirtualHost>
Irontec – Curso Apache
74
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
Irontec – Curso Apache
75
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 :)
Irontec – Curso Apache
76
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 mihostSite mihost disabled.
Irontec – Curso Apache
77
VirtualHost
● Para configurar un VirtualHost por nombre son necesarias estas directivas:
– <VirtualHost>– NameVirtualHost– ServerName– ServerAlias– DocumentRoot
Irontec – Curso Apache
78
VirtualHost
● NameVirtualHost indica a Apache que vamos a utilizar VirtualHosts basados en nombre.
● Se debe especificar al principio del fichero.NameVirtualHost 192.168.1.103:80
● Se puede especificar cualquier IP que tengamos en el sistema así como cualquier puerto.
● La IP se puede sustituir por un *, pero nos dará Warning al arrancar (aunque funciona perfectamente)[Fri Feb 27 19:39:46 2009] [warn] NameVirtualHost *:80 has no VirtualHosts
Irontec – Curso Apache
79
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:
Irontec – Curso Apache
80
VirtualHost
● Dentro de <VirtualHost> es donde llevaremos a cabo todas las configuraciones necesarias. Como mínimo se recomienda:ServerName mihost.comServerAlias www.mihost.comDocumentRoot /var/www/info
● Con ServerName indicamos el nombre del VirtualHost. Por lo tanto, cuando entremos con Firefox en mihost.com estaremos accediendo realmente al VirtualHost
● ServerAlias nos permite añadir distintos Alias al dominio.
● DocumenRoot nos ayudará a especificar donde se encuentra fisicamente la Web a servir.
Irontec – Curso Apache
81
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
Irontec – Curso Apache
82
VirtualHost
● Montad otro virtualhost que se llame mihostseguro.com
● Debe ser https y escuchar en el puerto 443● El DocumentRoot debe ser /var/www/seguro/● El index.html tiene que tener como contenido
vuestro nombre.
Irontec – Curso Apache
83
VirtualHost
● Descargar el sistema de blogs wordpress.org● Instalarlo en nuestro servidor Apache, siendo
accesible desde miblog.com :)
Irontec – Curso Apache
84
Awstats
● Otra forma de ver los logs :)
Irontec – Curso Apache
85
Awstats
● Awstats es un script en perl que lee nuestros logs y nos genera gráficas de accesos.
● Entre la información que se muetra está:– Visitas por día, mes, semana...– Ips de origen– URL de origen desde la que nos visitan– Navegador utilizado– País de procedencia del visitante– Documentos más vistos– Palabras usadas en los motores de busqueda– Sistema operativo– ....
Irontec – Curso Apache
86
Awstats
● La instalación se puede hacer desde apt.apt-get install awstats
● El fichero de configuración se encuentra en /etc/awstats/awstats.conf
● El CGI se encuentra en/usr/lib/cgi-bin/awstats.pl
● Las estadisticas se actualizan cada 10 minutos mediante una tarea programada.
Irontec – Curso Apache
87
Awstats
● Es posible configurar estadísticas para distintos dominios.
● Soporta muchos tipos de logs y es configurable. El soporte para los logs de Apache funciona por defecto.
● Si hemos modificado los logs de Apache para tener unos personalizados, será necesario configurar Awstats para que conozca el formato de los logs.
Irontec – Curso Apache
88
Awstats
● Tenemos que instalar awstats y configurarlo para ver los logs de acceso a nuestro blog.
● Para tener algo que ver, necesitamos generar visitas...
● Awstats será accesible desde http://miblog.com/awstats
Irontec – Curso Apache
89
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
Irontec – Curso Apache
90
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.
Irontec – Curso Apache
91
Autores
● Miguel Angel Nieto● Iker Sagasti● Daniel Gutierrez