Administración Apache 2.

0

Noviembre 2005

Joan Valduvieco joan@laigu.net Jordi Llonch jordi@laigu.net

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

Administración Apache 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

2

Administración Apache 2

–Configuración de apache

3

conf 4 .conf o http.Administración Apache 2 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.

– Ej: ServerName www. – Ej: ServerAdmin www-admin@foo.com • ServerSignature – Configura el pie de página en documentos generados por el servidor.example.: Identificación del servidor • ServerName – Nombre de host y número de puerto que el servidor usa para identificarse.com:80 • ServerAdmin – Dirección de email que el servidor incluye en los mensajes de error que se envían al cliente. – Ej: ServerSignature Off 5 .Administración Apache 2 Conf.example.

41 (Unix) PHP/4.0.2 MyMod/1.0.2 6 .41 (Unix) • ServerTokens Full (or not specified) – El servidor envía (por ejemplo): Server: Apache/2.Administración Apache 2 Conf.2.: 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.41 • ServerTokens OS – El servidor envía (por ejemplo): Server: Apache/2.0 • ServerTokens Min[imal] – El servidor envía (por ejemplo): Server: Apache/2.0.

domain.: Identificación del servidor • UseCanonicalName – Configura la forma en que el servidor determina su propio nombre o puerto. 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) 7 .Administración Apache 2 Conf.com/splat/ • Si se especifica el valor Off. Apache redirecciona a http://www/splat/ • Si se especifica DNS. – 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.

8 . • 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. • DocumentRoot – Directorio principal que contiene la estructura de directorios visible desde la web.: Ubicación de ficheros • CoreDumpDirectory – Directorio al que Apache intenta cambiarse antes de realizar un volcado de memoria.Administración Apache 2 Conf.

: Ubicación de ficheros • PidFile – Fichero en el que el servidor guarda el ID del proceso demonio de escucha (daemon). • ServerRoot – Directorio base de la instalación del servidor 9 . • ScoreBoardFile – Ubicación del fichero que almacena los datos necesarios para coordinar el funcionamiento de los procesos hijos del servidor.Administración Apache 2 Conf.

• LimitRequestFieldsize – Limita el tamaño permitido de las cabeceras de las peticiones HTTP de los clientes (bytes).: Límite en el uso de recursos • LimitRequestBody – Restringe el tamaño total del cuerpo de las peticiones HTTP enviadas desde el cliente (bytes).Administración Apache 2 Conf. • LimitRequestFields – Limita el número de campos de la cabecera de las peticiones HTTP del cliente que serán aceptadas. 10 . • LimitRequestLine – Limita el tamaño la línea de petición HTTP que será aceptada (bytes).

• RLimitNPROC – Limita el número de procesos que pueden crearse por parte de procesos creados por procesos hijos de Apache. • RLimitMEM – Limita el consumo de memoria que pueden hacer procesos creados por procesos hijo de Apache (bytes).Administración Apache 2 Conf. 11 .: 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).

eso no cambia la ruta usada para encontrar equivalencias en las secciones <Directory>. – Funcionalidades: • All: Todas las opciones excepto MultiViews. • Includes: Permite el uso de Server-side includes. – Aunque el servidor siga los enlaces simbólicos. • ExecCGI: Se permite la ejecución de scripts CGI usando mod_cgi.Administración Apache 2 Conf. del módulo mod_include. Este es el valor por defecto.: Funcionalidades en un directorio • Option – Configura las funcionalidades disponibles en un directorio en particular. – Tenga en cuenta también que esta opción es ignorada si está dentro de una sección <Location>. pero #exec cmd y #exec cgi estan desactivados. • IncludesNOEXEC: Permite el uso de Server-side includes. • FollowSymLinks: – El servidor seguirá los enlaces simbólicos en este directorio. 12 .

y no hay DirectoryIndex (por ejemplo. index. • SymLinksIfOwnerMatch: El servidor seguirá los enlaces simbólicos en los que el fichero o directorio final pertenezca al mismo usuario que el enlace. entonces mod_autoindex devolverá una lista con los contenidos del directorio.Administración Apache 2 Conf. • MultiViews: Se permiten "MultiViews" de contenido negociado "MultiViews" usando mod_negotiation.html) en ese directorio.: Funcionalidades en un directorio • Option – Funcionalidades: • Indexes: Si se produce una petición a una URL que se corresponde con un directorio. <Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options Includes </Directory> 13 .

• 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. 14 . • 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).company1.company2.Administración Apache 2 Hosting Virtual • El término Hosting Virtual se refiere a servir más de un sitio web (tales como www.com) en una sola máquina.com y www.

tld DocumentRoot /www/otherdomain ErrorLog /var/log/apache/otherdomain.otherdomain.domain.tld-error.domain.tld NameVirtualHost *:80 <VirtualHost *:80> ServerName www.tld y se quiere añadir el host virtual www.tld-access.log combined </VirtualHost> 15 .otherdomain.domain.tld. lo único que tiene que hacer es añadir lo siguiente al fichero httpd.log CustomLog /var/log/apache/domain.log combined </VirtualHost> <VirtualHost *:80> ServerName www. que apunta a la misma dirección IP.tld DocumentRoot /www/domain ErrorLog /var/log/apache/domain.conf: ServerName www. Entonces.Administración Apache 2 Hosting Virtual • Por ejemplo. si se está sirviendo el dominio www.log CustomLog /var/log/apache/otherdomain.tld ServerAlias domain.tld-access.domain.tld-error.tld *.

– mod_alias: Provee un sistema de mapeo de diferentes partes del sistema de archivos del servidor. • Se cargan por medio de la directiva LoadModule • Principales módulos: – core: Funcionalidades básicas del servidor HTTP Apache que están siempre presentes. 16 .Administración Apache 2 Módulos • Són extensiones que añaden funcionalidades a Apache. – 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_dav: Funcionalidad Distributed Authoring and Versioning (WebDAV). – 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.

apache. – mod_vhost_alias: Provee una configuración dinámica para un hosting virtual masivo. – mod_ssl: Criptografía fuerte usando Secure Sockets Layer (SSL) y protocolos Transport Layer Security (TLS).org/docs-2.Administración Apache 2 Módulos • Principales módulos: – mod_rewrite: Provee unas reglas para reescribir URLs al vuelo. – mod_userdir: Directorios de usuario (http://www.0/es/mod/ 17 . • Recursos: – http://httpd.dominio.org/~usuario1) – mod_usertrack: Log de la actividad de los usuarios.

Administración Apache 2 –Principales módulos 18 .

Nos permite servir páginas que no estén bajo DocumentRoot. Está pensado para manipulaciones simples de las URLs. Redirigir cgi-bin para ejecutar scripts ●ScriptAlias /cgi-bin/ /web/cgi-bin/ Ejemplo: Alias /image /ftp/pub/image <Directory /ftp/pub/image> Order allow. Para manipulaciones más complicadas usar mod_rewrite.Administración Apache 2 mod_alias ● ● ● ● ● ● ● Las directivas de mod_alias permiten la manipulación y el control de las URL cuando las peticiones llegan al servidor.deny Allow from all </Directory> 19 .

bar.*) /usr/local/apache/icons$1 ● ● Redirigiendo a URL externas ● Redirect /service http://foo2.html ● 20 .Administración Apache 2 mod_alias – Uso avanzado • ● Redirigiendo usando RegExp AliasMatch ^/icons(.apache.0/mod/mod_alias.org/docs/2.com/service ● Más información en: ● http://httpd.

.Brian Moore • bem@news. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Sendmail. mod_rewrite is voodoo. OJO las navajas cortan! o no. Damned cool voodoo. '' • -.Brian Behlendorf • Apache Group • • `` Despite the tons of examples and docs.cmc.net ● 21 . but still voodoo.Administración Apache 2 mod_rewrite De éste módulo se dice que es la navaja suiza de la manipulación de URLs.'' • -.. • Algunas citas para ambientar: • • ``The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail.

● Se puede usar desde la configuración global de apache (httpd. Cargaremos el módulo con: – LoadModule rewrite_module modules/mod_rewrite.Administración Apache 2 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.so ● ● ● Inicializaremos el motor con: – RewriteEngine On 22 .conf) o desde .htaccess Es un módulo extremadamente flexible y con mucha funcionalidad. • Es parecido a mod_alias pero mucho más potente.

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. – RewriteLogLevel level : De 0 a 9 indica el nivel de registro que se usará.Administración Apache 2 mod_rewrite • Directivas interesantes: – RewriteLog ruta : Permite especificar una ruta dónde se guardará un registro de las reescrituras. – RewriteRule regla : Permite especificar una regla de reescritura. – RewriteCond Condicion: Permite especificar reescrituras sujetas al cumplimiento de una condición. 23 .

Administración Apache 2 mod_rewrite • Variables para las condiciones: • API_VERSION SERVER_PROTOCOL • AUTH_TYPE SERVER_SOFTWARE • DOCUMENT_ROOT • ENV:any_environment_variable • HTTP_ACCEPT • HTTP_COOKIE • HTTP_FORWARDED • HTTP_HOST • HTTP_PROXY_CONNECTION • HTTP_REFERER • HTTP_USER_AGENT • HTTP:any_HTTP_header • IS_SUBREQ • PATH_INFO QUERY_STRING REMOTE_ADDR THE_REQUEST REMOTE_HOST TIME REMOTE_USER TIME_DAY REMOTE_IDENT TIME_HOUR REQUEST_FILENAME TIME_MIN REQUEST_METHOD TIME_MON REQUEST_URI TIME_SEC SCRIPT_FILENAME TIME_WDAY SERVER_ADMIN TIME_YEAR SERVER_NAME SERVER_PORT 24 .

• 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. • La reescritura se hace siempre que Pattern coincida con la URL proporcionada. 25 . • El orden en que las dispongamos en el fichero de configuración importa.Administración Apache 2 mod_rewrite • RewriteRule Pattern Substitution [flags] • Esta directiva es la que nos permite especificar qué reescrituras queremos hacer.

rewrite/logs/salesmen/access_log – RewriteEngine on – RewriteLog logs/rewrite – RewriteLogLevel 9 /cgi-bin/cardinfo?$2+ – RewriteRule ^/info/([^/]+)/([^/]+)$ $1 [PT] – ScriptAlias /cgi-bin /usr/www/cgi-bin </VirtualHost> • • Con éste ejemplo al escribir una URL del tipo http://www.com/cgi-bin/cardinfo?2+1 ejecutando el cgi.com/info/1/2 mod_rewrite la reescribiria a http://www.com – DocumentRoot /usr/www/site.rewrite/htdocs/salesmen – Options ExecCGI indexes – ServerName sales.servidor.com – ErrorLog /usr/www/site.com> – ServerAdmin sales_mgr@butterthlies.Administración Apache 2 mod_rewrite • <VirtualHost sales. • El flag [PT] se usa para permitir el proceso de la URL por otros módulos.rewrite/logs/salesmen/error_log – TransferLog /usr/www/site.servidor. 26 .butterthlies.butterthlies.

(homepage. javascript etc.html) • Si usamos Lynx.max.max.min.html [L] [L] [L] • Si usamos mozilla obtenemos la página máxima con frames.Administración Apache 2 mod_rewrite • Ejemplo de reescritura condicional: – – – – – – – RewriteCond RewriteRule RewriteCond RewriteRule RewriteRule %{HTTP_USER_AGENT} ^/$ %{HTTP_USER_AGENT} ^/$ ^/$ ^Mozilla. un navegador de consola. (homepage.min.html) • [L] Es una flag que indica que cuando haya se haya hecho una reescritura se pare el proceso de la URL.* /homepage. flash.* /homepage.html ^Lynx.. (homepage.html) • Por defecto se nos servirá la página estándard. se nos servirá la página simple.html /homepage..std. imagenes.std. 27 .

– http://httpd.Administración Apache 2 mod_rewrite • Enlaces ● Recetas de reescrituras de URL típicas.html ● Página principal del módulo.apache.0/mod/mod_rewrite.0/misc/rewriteguide.org/docs/2. – http://httpd.html 28 .org/docs/2.apache.

• Funciona con OpenLDAP SDK (1.x).Administración Apache 2 mod_auth_ldap • Este módulo nos permite autentificar usuarios contra LDAP. • Se pueden usar filtros LDAP. Novell LDAP SDK y iPlanet (Netscape) SDK. 29 . • Soporta LDAP sobre SSL.x y 2.

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. En esta fase se busca en el directorio LDAP un nombre de usuario como el que el cliente web proporciona a apache. – – Fase de autorización: En esta fase se determina si el usuario tiene permiso para acceder al recurso que se solicita. 30 .Administración Apache 2 mod_auth_ldap • La autentificación de un usuario se lleva a cabo en dos fases: • – Fase de autentificación. Si alguno de estos procesos falla no se permite el acceso.

Si no se puede enlazar el acceso es denegado. Si la búsqueda no devuelve exactamente una entrada el acceso es denegado. • Busca en el directorio usando el filtro generado. • 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.Administración Apache 2 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. 31 .

el DN base. – AuthLDAPBindPassword Password alternativo para realizar el enlace durante la fase de búsqueda.Administración Apache 2 mod_auth_ldap • Directivas relacionadas con la fase de autentificación: – AuthLDAPURL Especifica el servidor LDAP. 32 . – AuthLDAPBindDN DN alternativo para realizar el enlace durante la fase de búsqueda. el atributo sobre el que realizar la búsqueda y el filtro de búsqueda.

Muchos de estas comprobaciones requieren comparaciones en el servidor LDAP. 33 . • 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. • Se aceptan las siguientes directivas require para determinar si el usuario esta autorizado. Por este motivo a esta fase también se la denomina fase de comparación.Administración Apache 2 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. • require dn y el DN de la directiva y el del directorio coinciden. • require ldap-attribute y el atributo del LDAP y el valor proporcionado en la directiva 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.

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. • La sintaxis es la siguiente: – AuthLDAPUrl ldap://host:port/basedn?attribute?scope?filter – scope • BASE – (no soportado.Administración Apache 2 mod_auth_ldap • La directiva AuthLDAPURL es la que especifica dónde realizar la búsqueda y con qué parámetros. – (valor por defecto) 34 .

Administración Apache 2 mod_auth_ldap • Ejemplos • AuthLDAPURL ldap1.com ldap2.com/o=Airius?uid • require group cn=Administrators. • AuthLDAPURL ldap://ldap. 35 . o=Airius • Cuando el cliente intenta la conexión usando un username como Babs Jenson. el resultado será (&(posixid=*)(cn=Babs Jenson)).com/o=Airius?cn?sub? (posixid=*) • require group cn=Administrators.com/ou=People. o=Airius • Se permite el acceso a todos los miembros del grupo administradores • AuthLDAPURL ldap://ldap.o=Airius • require valid-user • Permite el acceso a todo el mundo que este dado de alta en el repositorio LDAP.airius.com/ou=People.airius.airius.airius.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.

ou=Groups.Administración Apache 2 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.ou=Academic.edu/o=wlu?uid?sub require group cn=testGroup1.o=wlu require group cn=testGroup2.wlu.o=wlu – </Directory> 36 .ou=Groups.ou=Student.

Administración Apache 2 mod_userdir ● Este módulo permite acceder a los directorios de usuario usando URLs como la que sigue: – http://example. ● enabled usuarios: Se permite el acceso a los directorios personales de los usuarios de la lista separada por espacios. ● disabled usuarios: El acceso a los directorios personales de estos usuarios está deshabilitado. 37 .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.

com/bob/usr/one/two.foo.foo.html • Directiva UserDir usada UserDir public_html UserDir /usr/web UserDir /home/*/www Ruta donde se busca ~bob/public_html/one/two.Administración Apache 2 mod_userdir • Ejemplos: – Si en el navegador ponemos: • http://www.html /usr/web/bob/one/two.com/users/bob/one/two.com/~bob/one/two.html UserDir http://www.com/users http://www.com/~bob/one/two.html 38 .html /home/bob/www/one/two.html UserDir http://www.com/*/usr http://www.com/~*/ http://www.html UserDir http://www.foo.foo.foo.foo.foo.

Administración Apache 2 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 39 .

Administración Apache 2 mod_dav • Permite usar las extensiones WebDAV del protocolo HTTP 1.org • Ejemplo: – para permitir el acceso a ese directorio a través de las extensiones webDAV. • Más información sobre dichas extensiones se puede encontrar en www. – <Directory /var/www/dav> • • • • • Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow.webdav.1.deny allow from al Dav On – </Directory> 40 .

• Debemos crear la entrada en el DNS para que apunte al servidor.Administración Apache 2 mod_vhost • Este módulo permite crear hosts virtuales dinámicamente.com/documentos/index. 41 .servidor.servidor. • Por ejemplo podríamos hacer que: – http://www.html • Con este módulo basta con crear un directorio para tener un nuevo servidor virtual.com/documentos/index.html • Sirviese: – /var/www/www. • En función de la petición HTTP apache es capaz de determinar que ficheros debe servir.

Administración Apache 2 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. 42 ● . 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.

%1 Indica que se use la primera parte. ● %0 Indica que se use todo el nombre de host. (servidor) %3 se usa la tercera parte. (com) %1.servidor. (www si el nombre fuera www.2 Usa los dos primeros carácteres de la primera parte (ww) 43 ● ● ● ● ● .Administración Apache 2 mod_vhost ● Podemos acceder a partes del nombre del host proporcionado en la petición HTTP. (com) %-1 Usa la última parte.com) %2 se usa la segunda parte.

patron_de_directorio funciona igual que VirtualDocumentRoot Ejemplo: – UseCanonicalName Off ● ● – VirtualScriptAlias /cgi-bin/ /www/%0/cgi-bin 44 .Administración Apache 2 mod_vhost – VirtualScriptAlias alias patron_del_directorio ● Permite definir un alias con permisos de ejecución de scripts.

Administración Apache 2 mod_suexec • Este módulo permite que un script CGI se ejecute como un determinado usuario y grupo. • – SuexecUserGroup nobody nogroup 45 .

• 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.Administración Apache 2 mod_ssl • Este módulo permite establecer conexiones SSL entre apache y los clientes.key • Puede ser interesante tener opciones para clientes HTTP defectuosos: – # Make SSL work with Internet Explorer – SetEnvIf User-Agent ". • Necesitaremos los certificados que certificarán nuestra identidad ante los clientes.0 – 46 .crt # Path to the server private key SSLCertificateKeyFile /usr/local/apache/conf/ssl/server.*" \ nokeepalive ssl-unclean-shutdown \ – downgrade-1.*MSIE.0 force-response-1.

apache.org/docs/2.Administración Apache 2 Enlaces de interés • • http://httpd.0/ 47 .

Administración Apache 2

–Pruebas de rendimiento

48

Administración Apache 2

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

49

Administración Apache 2

–Seguridad

50

 Nunca revelar todos los detalles del sistema.  Preparar la defensa.etc.Administración Apache 2 Seguridad en apache  Compartimentar. – Usar usuario limitados en privilegios destinados sólo a una tarea que sólo tienen privilegios en los compartimentos necesarios. – No debemos revelar la estructura real del sistema. auditoría real-time. IDS. – Usar firewalls. Tener presente que éste punto no garantiza nada pero si tenemos un sistema seguro ayuda.  Usar el mínimo privilegio necesario para la tarea. 51 . El secreto nunca debe ser nuestra única medida de seguridad. – Dividir la información lo máximo posible..

. – Siempre tenemos que pensar en que pasaría si se produce un fallo inesperado y prepararnos para cuando suceda. 52 . privilegios mínimos. etc. etc. los programas tienen bugs.  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.Administración Apache 2 Seguridad en apache  Fallar con control – Los sistemas fallan..

• • • • • <Directory /> Order Deny.Allow Deny from all AllowOverride None </Directory> – <Directory "/var/www/html"> Options Indexes FollowSymLinks – AllowOverride None – Order allow.Administración Apache 2 Manos a la obra: Compartimentando • Debemos asegurarnos que apache sólo puede acceder al árbol web.deny – Allow from all – – </Directory> • Habilitamos /var/www/html: 53 . • Denegamos el acceso a todo el sistema de ficheros y luego habilitamos las zonas oportunas.

linux.com/article.Administración Apache 2 Compartimentando ● Puede ser útil encerrar a apache en una jail (chroot) con esto conseguiremos: ● Eliminar el acceso a todas las herramientas del SO.pl?sid=04/05/24/1450203 54 . 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.

0/es/howto/auth. • Recursos: – http://httpd.apache. Perl. – Utilizar algún lenguaje script en conjunto con mod_auth.).html 55 ... • 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.org/docs-2. – Utilizar algún lenguaje script en el lado del servidor (PHP. • Disponemos básicamente de 3 técnicas: – Utilizar mod_auth o algún otro módulo más avanzado.Administración Apache 2 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.

Sólo habilitar los estrictamente necesarios (archivos temporales). • Controlar los directorios donde el servidor Apache tiene permiso de escritura. • 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). Este usuario debe poder acceder a los documentos a servir. 56 . • 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.Administración Apache 2 Consejos finales de seguridad • Tener presente que Apache se inicia con el usuario root y luego commuta al usuario definido en la configuración.

57 .Administración Apache 2 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.

Administración Apache 2 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 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 Timeout 120 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 ● 2 ● ● ● ● ● ● ● ● ● ● Es importante recalcar que estos parámetros se deben ajustar a la capacidad de cada máquina. 58 .

Oh dear" ErrorDocument 500 http://xxx/ ErrorDocument 404 /Lame_excuses/not_found. versión.html 59 .. – http://httpd.0/custom-error. our script crashed. ServerTokens ProductOnly Puede ser útil configurar mensajes de error customizados – – – – – ErrorDocument 500 /cgi-bin/crash-recover ErrorDocument 500 "Sorry. módulos.apache.Administración Apache 2 Ocultando datos del sistema • Ocultar el correo del administrador •  ServerSignature Off Ocultar el tipo de servidor. etc.org/docs/2.html •   Podemos usar páginas estáticas o bien scripts.html ErrorDocument 401 /Subscription/how_to_subscribe.

ht|~$|\.bak$|\.Deny Deny from all – </FilesMatch>  Con directorios también es posible realizar esta restricción – <DirectoryMatch /CVS/> – – Order Allow.BAK$)"> – – Order Allow.Administración Apache 2 Prevenir posibles fugas  Podemos impedir que ciertos tipos de archivos no esten nunca disponibles – <FilesMatch "(^\.Deny Deny from all – </DirectoryMatch> 60 .

– http://httpd.apache. Usar suExec para los scripts a fin de cambiar de usuario durante la ejecución.org/docs/2.0/suexec.Administración Apache 2 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.html –  61 .

org/docs/2.0/howto/auth.apache.Administración Apache 2 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.html 62 .

apache.html 63 .securityfocus.org/docs/2.0/misc/security_tips. No es un buen diseño pero puede ser útil en algunos casos  http://www.org/download/index.html • Más consejos de seguridad  http://www.com/infocus/1786 • Módulo que añade una capa de seguridad a apache.modsecurity.Administración Apache 2 Enlaces • Consejos de seguridad de apache2  http://httpd.