Está en la página 1de 63

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
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.conf o http.conf

4
Administración Apache 2

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 www-admin@foo.example.com
• ServerSignature
– Configura el pie de página en documentos generados por el servidor.
– Ej: ServerSignature Off

5
Administración Apache 2

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

6
Administración Apache 2

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)

7
Administración Apache 2

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.

8
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).

• 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

9
Administración Apache 2

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).

10
Administración Apache 2

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.

11
Administración Apache 2

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.

12
Administración Apache 2

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>

13
Administración Apache 2

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.

14
Administración Apache 2

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.tld
NameVirtualHost *: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>

15
Administración Apache 2

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).

16
Administración Apache 2

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/

17
Administración Apache 2

–Principales módulos

18
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.
● 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,deny
Allow from all
</Directory>

19
Administración Apache 2

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

20
Administración Apache 2

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
• bem@news.cmc.net

21
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.
• 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

22
Administración Apache 2

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.

23
Administración Apache 2

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

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.

25
Administración Apache 2

mod_rewrite
• <VirtualHost sales.butterthlies.com>
– ServerAdmin sales_mgr@butterthlies.com
– 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.

26
Administración Apache 2

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.

27
Administración Apache 2

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

28
Administración Apache 2

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.

29
Administración Apache 2

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. 30
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.
• 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.

31
Administración Apache 2

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.

32
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. 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.

33
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.
• 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)

34
Administración Apache 2

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)).
35
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.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>

36
Administración Apache 2

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.

37
Administración Apache 2

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

38
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.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>

40
Administración Apache 2

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.

41
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.
● 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.

42
Administración Apache 2

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)

43
Administración Apache 2

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

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

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

46
Administración Apache 2

Enlaces de interés


• http://httpd.apache.org/docs/2.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
Administración Apache 2

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

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..

52
Administración Apache 2

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>

53
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.


● 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

54
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.
• 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

55
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. 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.

56
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.

57
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 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.

58
Administración Apache 2

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

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>

60
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.

 Usar suExec para los scripts a fin de cambiar de usuario durante la


ejecución.

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

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

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

63