Download - Admin is Trac Ion Apache 2

Transcript
Page 1: Admin is Trac Ion Apache 2

Administración Apache 2.0

Noviembre 2005

Joan [email protected]

Jordi [email protected]

http://creativecommons.org/licenses/by-sa/2.0/

Page 2: Admin is Trac Ion Apache 2

Administración Apache 2

2

Instalación de apache

• Para instalar apache y algunos de los modulos que usaremos en Fedora deberemos instalar los siguientes paquetes rpm:

––––– httpd-2.0.52-3.i386.rpm – httpd-manual-2.0.52-3.i386.rpm – httpd-suexec-2.0.52-3.i386.rpm– mod_ssl-2.0.52-3.i386.rpm

Page 3: Admin is Trac Ion Apache 2

Administración Apache 2

3

–Configuración de apache

Page 4: Admin is Trac Ion Apache 2

Administración Apache 2

4

Configurando Apache

• Directivas del core (núcleo) de Apache que se usan para configurar las operaciones básicas del servidor.

– Identificación del Servidor – Ubicación de ficheros – Límite en el uso de recursos– Funcionalidades en un directorio– Hosting Virtual– Alias– Módulos– Autentificación y control de acceso– Consejos de seguridad

• Archivo de configuración: apache2.conf o http.conf

Page 5: Admin is Trac Ion Apache 2

Administración Apache 2

5

Conf.: Identificación del servidor

• ServerName

– Nombre de host y número de puerto que el servidor usa para identificarse.

– Ej: ServerName www.example.com:80

• ServerAdmin

– Dirección de email que el servidor incluye en los mensajes de error que se envían al cliente.

– Ej: ServerAdmin [email protected]

• ServerSignature

– Configura el pie de página en documentos generados por el servidor.

– Ej: ServerSignature Off

Page 6: Admin is Trac Ion Apache 2

Administración Apache 2

6

Conf.: Identificación del servidor

• ServerTokens– Configura la cabecera de respuesta HTTP Server.– Ej:

• ServerTokens Prod[uctOnly]– El servidor envía (por ejemplo): Server: Apache

• ServerTokens Major– El servidor envía (por ejemplo): Server: Apache/2

• ServerTokens Minor– El servidor envía (por ejemplo): Server: Apache/2.0

• ServerTokens Min[imal]– El servidor envía (por ejemplo): Server: Apache/2.0.41

• ServerTokens OS– El servidor envía (por ejemplo): Server: Apache/2.0.41 (Unix)

• ServerTokens Full (or not specified)– El servidor envía (por ejemplo): Server: Apache/2.0.41 (Unix)

PHP/4.2.2 MyMod/1.2

Page 7: Admin is Trac Ion Apache 2

Administración Apache 2

7

Conf.: Identificación del servidor

• UseCanonicalName– Configura la forma en que el servidor determina su propio nombre o

puerto.– Ej: UseCanonicalName On|Off|DNS

• Si se especifica On y los usuarios se conectan usando: http://www/splat (sin barra al final) entonces Apache redicciona a http://www.domain.com/splat/

• Si se especifica el valor Off, Apache redirecciona a http://www/splat/• Si se especifica DNS, Apache hace una busqueda de DNS reversa

en la dirección IP del servidor al que el cliente se conectó para hacer funcionar las URLs autoreferenciadas (para el caso en que se usa hosting virtual masivo basado en IP para soportar clientes antiguos que no envían la cabecera Host)

Page 8: Admin is Trac Ion Apache 2

Administración Apache 2

8

Conf.: Ubicación de ficheros

• CoreDumpDirectory

– Directorio al que Apache intenta cambiarse antes de realizar un volcado de memoria.

• DocumentRoot

– Directorio principal que contiene la estructura de directorios visible desde la web.

• ErrorLog

– Ubicación del fichero en el que se almacenan los mensajes de error.

• LockFile

– Ubicación del fichero de lock de serialización de aceptación de peticiones.

Page 9: Admin is Trac Ion Apache 2

Administración Apache 2

9

Conf.: Ubicación de ficheros

• PidFile

– Fichero en el que el servidor guarda el ID del proceso demonio de escucha (daemon).

• ScoreBoardFile

– Ubicación del fichero que almacena los datos necesarios para coordinar el funcionamiento de los procesos hijos del servidor.

• ServerRoot

– Directorio base de la instalación del servidor

Page 10: Admin is Trac Ion Apache 2

Administración Apache 2

10

Conf.: Límite en el uso de recursos

• LimitRequestBody

– Restringe el tamaño total del cuerpo de las peticiones HTTP enviadas desde el cliente (bytes).

• LimitRequestFields

– Limita el número de campos de la cabecera de las peticiones HTTP del cliente que serán aceptadas.

• LimitRequestFieldsize

– Limita el tamaño permitido de las cabeceras de las peticiones HTTP de los clientes (bytes).

• LimitRequestLine

– Limita el tamaño la línea de petición HTTP que será aceptada (bytes).

Page 11: Admin is Trac Ion Apache 2

Administración Apache 2

11

Conf.: Límite en el uso de recursos

• RLimitCPU

– Limita el consumo de tiempo de CPU que pueden hacer proceses creados por procesos hijos de Apache (segundos).

• RLimitMEM

– Limita el consumo de memoria que pueden hacer procesos creados por procesos hijo de Apache (bytes).

• RLimitNPROC

– Limita el número de procesos que pueden crearse por parte de procesos creados por procesos hijos de Apache.

Page 12: Admin is Trac Ion Apache 2

Administración Apache 2

12

Conf.: Funcionalidades en un directorio

• Option– Configura las funcionalidades disponibles en un directorio en

particular.– Funcionalidades:

• All: Todas las opciones excepto MultiViews. Este es el valor por defecto.

• ExecCGI: Se permite la ejecución de scripts CGI usando mod_cgi.• FollowSymLinks:

– El servidor seguirá los enlaces simbólicos en este directorio.– Aunque el servidor siga los enlaces simbólicos, eso no

cambia la ruta usada para encontrar equivalencias en las secciones <Directory>.

– Tenga en cuenta también que esta opción es ignorada si está dentro de una sección <Location>.

• Includes: Permite el uso de Server-side includes, del módulo mod_include.

• IncludesNOEXEC: Permite el uso de Server-side includes, pero #exec cmd y #exec cgi estan desactivados.

Page 13: Admin is Trac Ion Apache 2

Administración Apache 2

13

Conf.: Funcionalidades en un directorio

• Option– Funcionalidades:

• Indexes: Si se produce una petición a una URL que se corresponde con un directorio, y no hay DirectoryIndex (por ejemplo, index.html) en ese directorio, entonces mod_autoindex devolverá una lista con los contenidos del directorio.

• MultiViews: Se permiten "MultiViews" de contenido negociado "MultiViews" usando mod_negotiation.

• SymLinksIfOwnerMatch: El servidor seguirá los enlaces simbólicos en los que el fichero o directorio final pertenezca al mismo usuario que el enlace.

<Directory /web/docs> Options Indexes FollowSymLinks</Directory>

<Directory /web/docs/spec> Options Includes</Directory>

Page 14: Admin is Trac Ion Apache 2

Administración Apache 2

14

Hosting Virtual

• El término Hosting Virtual se refiere a servir más de un sitio web (tales como www.company1.com y www.company2.com) en una sola máquina.

• Los sitios web virtuales pueden estar:

– “basados en direcciones IP”: cada sitio web tiene una dirección IP diferente

– “basados en nombres diferentes”: con una sola dirección IP están funcionando sitios web con diferentes nombres (de dominio).

• El hecho de que estén funcionando en la misma máquina física pasa completamente desapercibido para el usuario que visita esos sitios web.

Page 15: Admin is Trac Ion Apache 2

Administración Apache 2

15

Hosting Virtual

• Por ejemplo, si se está sirviendo el dominio www.domain.tld y se quiere añadir el host virtual www.otherdomain.tld, que apunta a la misma dirección IP. Entonces, lo único que tiene que hacer es añadir lo siguiente al fichero httpd.conf:

ServerName www.domain.tldNameVirtualHost *:80

<VirtualHost *:80> ServerName www.domain.tld ServerAlias domain.tld *.domain.tld DocumentRoot /www/domain ErrorLog /var/log/apache/domain.tld-error.log CustomLog /var/log/apache/domain.tld-access.log combined</VirtualHost>

<VirtualHost *:80> ServerName www.otherdomain.tld DocumentRoot /www/otherdomain ErrorLog /var/log/apache/otherdomain.tld-error.log CustomLog /var/log/apache/otherdomain.tld-access.log combined</VirtualHost>

Page 16: Admin is Trac Ion Apache 2

Administración Apache 2

16

Módulos

• Són extensiones que añaden funcionalidades a Apache.• Se cargan por medio de la directiva LoadModule• Principales módulos:

– core: Funcionalidades básicas del servidor HTTP Apache que están siempre presentes.

– mod_access: Provee de un control de acceso basado en el hostname del cliente, IP o otra característica de la petición del cliente.

– mod_alias: Provee un sistema de mapeo de diferentes partes del sistema de archivos del servidor.

– mod_auth: Autentificación usando archivos de texto (usuario y password)

– mod_auth_ldap: Permite que un directorio LDAP sea usado para almacenar la base de datos para la HTTP Basic authentication.

– mod_dav: Funcionalidad Distributed Authoring and Versioning (WebDAV).

Page 17: Admin is Trac Ion Apache 2

Administración Apache 2

17

Módulos

• Principales módulos:

– mod_rewrite: Provee unas reglas para reescribir URLs al vuelo.

– mod_ssl: Criptografía fuerte usando Secure Sockets Layer (SSL) y protocolos Transport Layer Security (TLS).

– mod_userdir: Directorios de usuario (http://www.dominio.org/~usuario1)

– mod_usertrack: Log de la actividad de los usuarios.

– mod_vhost_alias: Provee una configuración dinámica para un hosting virtual masivo.

• Recursos:– http://httpd.apache.org/docs-2.0/es/mod/

Page 18: Admin is Trac Ion Apache 2

Administración Apache 2

18

–Principales módulos

Page 19: Admin is Trac Ion Apache 2

Administración Apache 2

19

mod_alias

● Las directivas de mod_alias permiten la manipulación y el control de las URL cuando las peticiones llegan al servidor.

● Nos permite servir páginas que no estén bajo DocumentRoot.● Está pensado para manipulaciones simples de las URLs. Para

manipulaciones más complicadas usar mod_rewrite.● Redirigir cgi-bin para ejecutar scripts

●ScriptAlias /cgi-bin/ /web/cgi-bin/● Ejemplo:●

●Alias /image /ftp/pub/image

<Directory /ftp/pub/image>Order allow,denyAllow from all</Directory>

Page 20: Admin is Trac Ion Apache 2

Administración Apache 2

20

mod_alias – Uso avanzado

● Redirigiendo usando RegExp

●AliasMatch ^/icons(.*) /usr/local/apache/icons$1

● Redirigiendo a URL externas

●Redirect /service http://foo2.bar.com/service

● Más información en:

● http://httpd.apache.org/docs/2.0/mod/mod_alias.html

Page 21: Admin is Trac Ion Apache 2

Administración Apache 2

21

mod_rewrite

● De éste módulo se dice que es la navaja suiza de la manipulación de URLs. OJO las navajas cortan! o no...

• Algunas citas para ambientar:

•• ``The great thing about mod_rewrite is it gives you all the

configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Sendmail.''

• -- Brian Behlendorf• Apache Group

•• `` Despite the tons of examples and docs, mod_rewrite is voodoo.

Damned cool voodoo, but still voodoo. ''• -- Brian Moore• [email protected]

Page 22: Admin is Trac Ion Apache 2

Administración Apache 2

22

mod_rewrite

• mod_rewrite aplica una expresión de reescritura a la URL suministrada por el cliente HTTP y obtiene la URL reescrita que es la que finalmente se usa para servir los ficheros.

• Es parecido a mod_alias pero mucho más potente.

● Se puede usar desde la configuración global de apache (httpd.conf) o desde .htaccess

● Es un módulo extremadamente flexible y con mucha funcionalidad.

● Cargaremos el módulo con:

– LoadModule rewrite_module modules/mod_rewrite.so

● Inicializaremos el motor con:

– RewriteEngine On

Page 23: Admin is Trac Ion Apache 2

Administración Apache 2

23

mod_rewrite

• Directivas interesantes:

– RewriteLog ruta : Permite especificar una ruta dónde se guardará un registro de las reescrituras.

– RewriteLogLevel level : De 0 a 9 indica el nivel de registro que se usará. Más de dos hace a apache bastante más lento.

– RewriteBase dir : A nivel de directorio especifica el directorio base a partir del que efectuar las reescrituras.

– RewriteCond Condicion: Permite especificar reescrituras sujetas al cumplimiento de una condición.

– RewriteRule regla : Permite especificar una regla de reescritura.

Page 24: Admin is Trac Ion Apache 2

Administración Apache 2

24

mod_rewrite

• Variables para las condiciones:• API_VERSION PATH_INFO

SERVER_PROTOCOL

• AUTH_TYPE QUERY_STRING SERVER_SOFTWARE

• DOCUMENT_ROOT REMOTE_ADDR THE_REQUEST

• ENV:any_environment_variable REMOTE_HOST TIME

• HTTP_ACCEPT REMOTE_USER TIME_DAY

• HTTP_COOKIE REMOTE_IDENT TIME_HOUR

• HTTP_FORWARDED REQUEST_FILENAME TIME_MIN

• HTTP_HOST REQUEST_METHOD TIME_MON

• HTTP_PROXY_CONNECTION REQUEST_URI TIME_SEC

• HTTP_REFERER SCRIPT_FILENAME TIME_WDAY

• HTTP_USER_AGENT SERVER_ADMIN TIME_YEAR

• HTTP:any_HTTP_header SERVER_NAME

• IS_SUBREQ SERVER_PORT

Page 25: Admin is Trac Ion Apache 2

Administración Apache 2

25

mod_rewrite

• RewriteRule Pattern Substitution [flags]

• Esta directiva es la que nos permite especificar qué reescrituras queremos hacer.

• La reescritura se hace siempre que Pattern coincida con la URL proporcionada.

• Se puede usar tantas veces como queramos y mod_rewrite las procesa de forma encadenada aplicando la salida de la primera a la entrada de la siguiente.

• El orden en que las dispongamos en el fichero de configuración importa.

Page 26: Admin is Trac Ion Apache 2

Administración Apache 2

26

mod_rewrite

• <VirtualHost sales.butterthlies.com>– ServerAdmin [email protected]– DocumentRoot /usr/www/site.rewrite/htdocs/salesmen– Options ExecCGI indexes– ServerName sales.butterthlies.com– ErrorLog /usr/www/site.rewrite/logs/salesmen/error_log– TransferLog /usr/www/site.rewrite/logs/salesmen/access_log– RewriteEngine on– RewriteLog logs/rewrite– RewriteLogLevel 9– RewriteRule ^/info/([^/]+)/([^/]+)$ /cgi-bin/cardinfo?$2+

$1 [PT]– ScriptAlias /cgi-bin /usr/www/cgi-bin

• </VirtualHost>

• Con éste ejemplo al escribir una URL del tipo http://www.servidor.com/info/1/2 mod_rewrite la reescribiria a http://www.servidor.com/cgi-bin/cardinfo?2+1 ejecutando el cgi.

• El flag [PT] se usa para permitir el proceso de la URL por otros módulos.

Page 27: Admin is Trac Ion Apache 2

Administración Apache 2

27

mod_rewrite

• Ejemplo de reescritura condicional:– RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*– RewriteRule ^/$ /homepage.max.html [L]

–– RewriteCond %{HTTP_USER_AGENT} ^Lynx.*– RewriteRule ^/$ /homepage.min.html [L]

–– RewriteRule ^/$ /homepage.std.html [L]

• Si usamos mozilla obtenemos la página máxima con frames, imagenes, flash, javascript etc... (homepage.max.html)

• Si usamos Lynx, un navegador de consola, se nos servirá la página simple.(homepage.min.html)

• Por defecto se nos servirá la página estándard. (homepage.std.html)• [L] Es una flag que indica que cuando haya se haya hecho una

reescritura se pare el proceso de la URL.

Page 28: Admin is Trac Ion Apache 2

Administración Apache 2

28

mod_rewrite

• Enlaces

● Recetas de reescrituras de URL típicas.

– http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

● Página principal del módulo.

– http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

Page 29: Admin is Trac Ion Apache 2

Administración Apache 2

29

mod_auth_ldap

• Este módulo nos permite autentificar usuarios contra LDAP.

• Funciona con OpenLDAP SDK (1.x y 2.x), Novell LDAP SDK y iPlanet (Netscape) SDK.

• Se pueden usar filtros LDAP.

• Soporta LDAP sobre SSL.

Page 30: Admin is Trac Ion Apache 2

Administración Apache 2

30

mod_auth_ldap

• La autentificación de un usuario se lleva a cabo en dos fases:

•– Fase de autentificación. En esta fase se busca en

el directorio LDAP un nombre de usuario como el que el cliente web proporciona a apache. Si se encuentra un solo resultado el módulo intenta autentificarse en el servidor LDAP usando el DN de la entrada encontrada y el password proporcionado por el cliente. Si alguno de estos procesos falla no se permite el acceso.

–– Fase de autorización: En esta fase se determina

si el usuario tiene permiso para acceder al recurso que se solicita.

Page 31: Admin is Trac Ion Apache 2

Administración Apache 2

31

mod_auth_ldap

• Fase de autentificación en detalle

•• Genera un filtro de búsqueda combinando los atributos y filtros

proporcionados en la directiva AuthLDAPURL con el nombre de usuario proporcionado por el cliente HTTP.

• Busca en el directorio usando el filtro generado. Si la búsqueda no devuelve exactamente una entrada el acceso es denegado.

• Obtiene el nombre distinguido (DN) de la entrada resultante de la búsqueda y se intenta enlazar con el LDAP usando el DN y el password proporcionado por el cliente HTTP. Si no se puede enlazar el acceso es denegado.

Page 32: Admin is Trac Ion Apache 2

Administración Apache 2

32

mod_auth_ldap

• Directivas relacionadas con la fase de autentificación:

– AuthLDAPURL Especifica el servidor LDAP, el DN base, el atributo sobre el que realizar la búsqueda y el filtro de búsqueda.

– AuthLDAPBindDN DN alternativo para realizar el enlace durante la fase de búsqueda.

– AuthLDAPBindPassword Password alternativo para realizar el enlace durante la fase de búsqueda.

Page 33: Admin is Trac Ion Apache 2

Administración Apache 2

33

mod_auth_ldap• Fase de autorización en detalle••Durante la fase de autorización, mod_auth_ldap intenta determinar si el usuario esta autorizado para acceder al recurso. Muchos de estas comprobaciones requieren comparaciones en el servidor LDAP. Por este motivo a esta fase también se la denomina fase de comparación.• Se aceptan las siguientes directivas require para determinar si el usuario esta

autorizado.• Se permite el acceso si existe una directiva:• require valid-user

• require user y el nombre de usuario de la directiva coincide con el proporcionado por el cliente HTTP.

• require dn y el DN de la directiva y el del directorio coinciden.

• require group y el DN obtenido del directorio o el nombre de usuario proporcionado por el cliente HTTP existe en el grupo del LDAP.

• require ldap-attribute y el atributo del LDAP y el valor proporcionado en la directiva coinciden.

Page 34: Admin is Trac Ion Apache 2

Administración Apache 2

34

mod_auth_ldap

• La directiva AuthLDAPURL es la que especifica dónde realizar la búsqueda y con qué parámetros.

• La sintaxis es la siguiente:– AuthLDAPUrl ldap://host:port/basedn?attribute?scope?filter

– scope• BASE

– (no soportado, utiliza SUB)• ONE

– Indica búsqueda sobre todas las entradas debajo del DN base. Pero no incluye el DN base.

• SUB– Indica búsqueda de todas las entradas a todos los niveles y

incluye el DN base.– (valor por defecto)

Page 35: Admin is Trac Ion Apache 2

Administración Apache 2

35

mod_auth_ldap

• Ejemplos• AuthLDAPURL ldap1.airius.com

ldap2.airius.com/ou=People,o=Airius

• require valid-user

• Permite el acceso a todo el mundo que este dado de alta en el repositorio LDAP.

• AuthLDAPURL ldap://ldap.airius.com/ou=People,o=Airius?cn

• require valid-user

• En este ejemplo se permite el acceso a todo el mundo pero la busqueda se realiza sobre el campo 'cn'

• AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid

• require group cn=Administrators, o=Airius

• Se permite el acceso a todos los miembros del grupo administradores

• AuthLDAPURL ldap://ldap.airius.com/o=Airius?cn?sub?(posixid=*)

• require group cn=Administrators, o=Airius

• Cuando el cliente intenta la conexión usando un username como Babs Jenson, el resultado será (&(posixid=*)(cn=Babs Jenson)).

Page 36: Admin is Trac Ion Apache 2

Administración Apache 2

36

mod_auth_ldap

• Ejemplo dentro del fichero de configuración:– <Directory “/var/www/html/private” >

• AuthType Basic• AuthName "Allow Members of Groups"• • AuthLDAPUrl ldap://ldap.wlu.edu/o=wlu?uid?sub• require group cn=testGroup1,ou=Groups,ou=Academic,o=wlu• require group cn=testGroup2,ou=Groups,ou=Student,o=wlu

– </Directory>

Page 37: Admin is Trac Ion Apache 2

Administración Apache 2

37

mod_userdir

● Este módulo permite acceder a los directorios de usuario usando URLs como la que sigue:

– http://example.com/~user/● Cargaremos el módulo con:

– LoadModule userdir_module modules/mod_userdir.so

• Este módulo se configura con la directiva:– UserDir parametro

• parámetro puede valer:● disabled : Se deshabilita el acceso a todos los directorios

de usuario.● disabled usuarios: El acceso a los directorios personales

de estos usuarios está deshabilitado.● enabled usuarios: Se permite el acceso a los directorios

personales de los usuarios de la lista separada por espacios.

Page 38: Admin is Trac Ion Apache 2

Administración Apache 2

38

mod_userdir

• Ejemplos:– Si en el navegador ponemos:

• http://www.foo.com/~bob/one/two.html

•Directiva UserDir usada Ruta donde se busca

UserDir public_html ~bob/public_html/one/two.html

UserDir /usr/web /usr/web/bob/one/two.html

UserDir /home/*/www /home/bob/www/one/two.html

UserDir http://www.foo.com/users http://www.foo.com/users/bob/one/two.html

UserDir http://www.foo.com/*/usr http://www.foo.com/bob/usr/one/two.html

UserDir http://www.foo.com/~*/ http://www.foo.com/~bob/one/two.html

Page 39: Admin is Trac Ion Apache 2

Administración Apache 2

39

mod_userdir

• Con la siguiente directiva sólo permitimos el acceso a los directorios personales de los usuarios listados:

– UserDir disabled

– UserDir enabled user1 user2 user3

• El ejemplo contrario sería:

– UserDir enabled

– UserDir disabled user4 user5 user6

Page 40: Admin is Trac Ion Apache 2

Administración Apache 2

40

mod_dav

• Permite usar las extensiones WebDAV del protocolo HTTP 1.1.• Más información sobre dichas extensiones se puede encontrar en

www.webdav.org• Ejemplo:

– para permitir el acceso a ese directorio a través de las extensiones webDAV.

– <Directory /var/www/dav>• Options Indexes FollowSymLinks MultiViews• AllowOverride None• Order allow,deny• allow from al• Dav On

– </Directory>

Page 41: Admin is Trac Ion Apache 2

Administración Apache 2

41

mod_vhost

• Este módulo permite crear hosts virtuales dinámicamente.

• En función de la petición HTTP apache es capaz de determinar que ficheros debe servir.

• Debemos crear la entrada en el DNS para que apunte al servidor.

• Por ejemplo podríamos hacer que:

– http://www.servidor.com/documentos/index.html

• Sirviese:

– /var/www/www.servidor.com/documentos/index.html

• Con este módulo basta con crear un directorio para tener un nuevo servidor virtual.

Page 42: Admin is Trac Ion Apache 2

Administración Apache 2

42

mod_vhost

• VirtualDocumentRoot patron_del_directorio

● Con esta directiva configuramos el patrón dónde se subtituirán las variables para determinar el directorio que se usará para servir los ficheros.

● Ejemplo:

• UseCanonicalName Off

• VirtualDocumentRoot /www/%0/htdocs

● Subtituirá %0 por el nombre de host proporcionado en la cabecera HTTP.

● UseCanonicalName indica a apache que no use para la respuesta HTTP el nombre del servidor sino que use el nombre indicado en la petición HTTP.

Page 43: Admin is Trac Ion Apache 2

Administración Apache 2

43

mod_vhost

● Podemos acceder a partes del nombre del host proporcionado en la petición HTTP.

● %0 Indica que se use todo el nombre de host.

● %1 Indica que se use la primera parte. (www si el nombre fuera www.servidor.com)

● %2 se usa la segunda parte. (servidor)

● %3 se usa la tercera parte. (com)

● %-1 Usa la última parte. (com)

● %1.2 Usa los dos primeros carácteres de la primera parte (ww)

Page 44: Admin is Trac Ion Apache 2

Administración Apache 2

44

mod_vhost

– VirtualScriptAlias alias patron_del_directorio

● Permite definir un alias con permisos de ejecución de scripts.

● patron_de_directorio funciona igual que VirtualDocumentRoot

● Ejemplo:

– UseCanonicalName Off

– VirtualScriptAlias /cgi-bin/ /www/%0/cgi-bin

Page 45: Admin is Trac Ion Apache 2

Administración Apache 2

45

mod_suexec• Este módulo permite que un script CGI se ejecute como un determinado

usuario y grupo.

– SuexecUserGroup nobody nogroup

Page 46: Admin is Trac Ion Apache 2

Administración Apache 2

46

mod_ssl• Este módulo permite establecer conexiones SSL entre apache y los

clientes.• Necesitaremos los certificados que certificarán nuestra identidad ante

los clientes.• Para activar el módulo basta con incluir la siguiente directiva en el

fichero de configuración:– SSLEngine On

• Deberemos proveer la ruta donde se encuentran los certificados:– # Path to the server certificate – SSLCertificateFile /usr/local/apache/conf/ssl/server.crt – # Path to the server private key – SSLCertificateKeyFile

/usr/local/apache/conf/ssl/server.key

• Puede ser interesante tener opciones para clientes HTTP defectuosos:– # Make SSL work with Internet Explorer – SetEnvIf User-Agent ".*MSIE.*" \ – nokeepalive ssl-unclean-shutdown \ – downgrade-1.0 force-response-1.0

Page 47: Admin is Trac Ion Apache 2

Administración Apache 2

47

Enlaces de interés

• http://httpd.apache.org/docs/2.0/

Page 48: Admin is Trac Ion Apache 2

Administración Apache 2

48

–Pruebas de rendimiento

Page 49: Admin is Trac Ion Apache 2

Administración Apache 2

49

ab

• ab es una utilidad que nos permite efectuar pruebas de carga contra un servidor apache.

• Podemos probar el rendimiento general del sistema dirigiendo a ab a una pàgina que implique consultas a la base de datos, ejecución de codigo PHP, etc...

• Mientras ejecutamos el test con ab podemos monitorizar el estado del servidor con las utilidades que ya se han mostrado.

• Un ejemplo sería:

– ab -n 100 -c 5 http://servidor/aplicacion/index.php

• n : indica el número de peticiones a realizar

• c : indica la concurrencia durante el test

Page 50: Admin is Trac Ion Apache 2

Administración Apache 2

50

–Seguridad

Page 51: Admin is Trac Ion Apache 2

Administración Apache 2

51

Seguridad en apache

Compartimentar.

– Dividir la información lo máximo posible.

Usar el mínimo privilegio necesario para la tarea.

– Usar usuario limitados en privilegios destinados sólo a una tarea que sólo tienen privilegios en los compartimentos necesarios.

Preparar la defensa.

– Usar firewalls, IDS, auditoría real-time,etc..

Nunca revelar todos los detalles del sistema.

– No debemos revelar la estructura real del sistema. Tener presente que éste punto no garantiza nada pero si tenemos un sistema seguro ayuda. El secreto nunca debe ser nuestra única medida de seguridad.

Page 52: Admin is Trac Ion Apache 2

Administración Apache 2

52

Seguridad en apache

Fallar con control

– Los sistemas fallan, los programas tienen bugs, etc..

– Siempre tenemos que pensar en que pasaría si se produce un fallo inesperado y prepararnos para cuando suceda.

Asegurar el punto más débil

– Todo el sistema es tan seguro como el punto más débil

– Se puede compensar con la compartimentización, privilegios mínimos, etc..

Page 53: Admin is Trac Ion Apache 2

Administración Apache 2

53

Manos a la obra: Compartimentando

• Debemos asegurarnos que apache sólo puede acceder al árbol web.• Denegamos el acceso a todo el sistema de ficheros y luego

habilitamos las zonas oportunas.• <Directory />• Order Deny,Allow

• Deny from all

• AllowOverride None

• </Directory>

• Habilitamos /var/www/html:– <Directory "/var/www/html">– Options Indexes FollowSymLinks– AllowOverride None– Order allow,deny– Allow from all– </Directory>

Page 54: Admin is Trac Ion Apache 2

Administración Apache 2

54

Compartimentando

● Puede ser útil encerrar a apache en una jail (chroot) con esto conseguiremos:

● Eliminar el acceso a todas las herramientas del SO.

● Detectar fácilmente la aparición de nuevos ficheros dejados por el rootkit

● Evitar el contacto con programas SUID

● Poder reemplazar la jail de forma muy rápida

● Éste mecanismo se explica con detalle en:

● http://www.linux.com/article.pl?sid=04/05/24/1450203

Page 55: Admin is Trac Ion Apache 2

Administración Apache 2

55

Autentificación y control de acceso

• La autentificación es el proceso por el cual se verifica que un usuario es quien dice que es.

• La autorización es el proceso por el que se permite a alguien entrar dónde desea o bien se le da acceso a información que requiere.

• Disponemos básicamente de 3 técnicas:

– Utilizar mod_auth o algún otro módulo más avanzado.

– Utilizar algún lenguaje script en el lado del servidor (PHP, Perl...).

– Utilizar algún lenguaje script en conjunto con mod_auth.

• Recursos:

– http://httpd.apache.org/docs-2.0/es/howto/auth.html

Page 56: Admin is Trac Ion Apache 2

Administración Apache 2

56

Consejos finales de seguridad

• Tener presente que Apache se inicia con el usuario root y luego commuta al usuario definido en la configuración. Este usuario debe poder acceder a los documentos a servir.

• Controlar los directorios donde el servidor Apache tiene permiso de escritura. Sólo habilitar los estrictamente necesarios (archivos temporales).

• Poner los directorios donde Apache tiene permiso de escritura en una partición en la que no exista el permiso de ejecución (se minimiza el ataque en el que se sube un rootkit al servidor).

• Tener presente el usuario con el que se subirán archivos. Puede ser que Apache no pueda “ver” estos archivos si los permisos no son correctos.

Page 57: Admin is Trac Ion Apache 2

Administración Apache 2

57

Preparar la defensa

● Habilitar unos logs con información útil

● LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

● CustomLog logs/access_log common

● Nos permitiran ver qué pasa en el sistema y tener mecanismos de detección de intrusiones.

Page 58: Admin is Trac Ion Apache 2

Administración Apache 2

58

Preparar la defensa

● Ajustar los límites de apache a la máquina donde se ejecuta (evitaremos DoS)

● Los parámetros a tener en cuenta:● StartServers 2

● MaxClients 150● MinSpareThreads 25● MaxSpareThreads 75● ThreadsPerChild 25● MaxRequestsPerChild 0● Timeout 120● KeepAlive On● MaxKeepAliveRequests 100● KeepAliveTimeout 15● Es importante recalcar que estos parámetros se deben ajustar a la

capacidad de cada máquina.

Page 59: Admin is Trac Ion Apache 2

Administración Apache 2

59

Ocultando datos del sistema

• Ocultar el correo del administrador

• ServerSignature Off

Ocultar el tipo de servidor, versión, módulos, etc..

• ServerTokens ProductOnly

Puede ser útil configurar mensajes de error customizados

– ErrorDocument 500 /cgi-bin/crash-recover

– ErrorDocument 500 "Sorry, our script crashed. Oh dear"

– ErrorDocument 500 http://xxx/

– ErrorDocument 404 /Lame_excuses/not_found.html

– ErrorDocument 401 /Subscription/how_to_subscribe.html

Podemos usar páginas estáticas o bien scripts.

– http://httpd.apache.org/docs/2.0/custom-error.html

Page 60: Admin is Trac Ion Apache 2

Administración Apache 2

60

Prevenir posibles fugas

Podemos impedir que ciertos tipos de archivos no esten nunca disponibles

– <FilesMatch "(^\.ht|~$|\.bak$|\.BAK$)">

– Order Allow,Deny

– Deny from all

– </FilesMatch>

Con directorios también es posible realizar esta restricción

– <DirectoryMatch /CVS/>

– Order Allow,Deny

– Deny from all

– </DirectoryMatch>

Page 61: Admin is Trac Ion Apache 2

Administración Apache 2

61

Usar el mínimo privilegio necesario

Es importante que el servidor apache se ejecute con un usuario con los permisos mínimos para acceder a los ficheros y directorios a publicar.

Usar suExec para los scripts a fin de cambiar de usuario durante la ejecución.

– http://httpd.apache.org/docs/2.0/suexec.html

Page 62: Admin is Trac Ion Apache 2

Administración Apache 2

62

Autentificación

● En apache podemos crear zonas para las que sea necesario autentificarse para acceder

● Por ejemplo:● Crearemos una zona protegida en /var/www/html/secret añadiendo las

siguientes líneas al fichero de configuración de apache:● <Directory /var/www/html/secret>● AuthType Basic● AuthName "Restricted Files"● AuthUserFile /etc/http/passwd/passwords-secret● Require user jmartinez● </Directory>

● Crearemos al usuario jmartinez en el fichero de passwords para la zona:● htpasswd -c /etc/http/passwd/passwords-secret

jmartinez● Más ejemplos en:

– http://httpd.apache.org/docs/2.0/howto/auth.html

Page 63: Admin is Trac Ion Apache 2

Administración Apache 2

63

Enlaces

• Consejos de seguridad de apache2

http://httpd.apache.org/docs/2.0/misc/security_tips.html

• Más consejos de seguridad

http://www.securityfocus.com/infocus/1786

• Módulo que añade una capa de seguridad a apache. No es un buen diseño pero puede ser útil en algunos casos

http://www.modsecurity.org/download/index.html