Professional Documents
Culture Documents
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
5
Administración Apache 2
6
Administración Apache 2
7
Administración Apache 2
• 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
• ScoreBoardFile
• ServerRoot
9
Administración Apache 2
• 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
• RLimitMEM
• RLimitNPROC
11
Administración Apache 2
12
Administración Apache 2
<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
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.
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:
●
<Directory /ftp/pub/image>
Order allow,deny
Allow from all
</Directory>
19
Administración Apache 2
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:
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]
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
– http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
– http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
28
Administración Apache 2
mod_auth_ldap
29
Administración Apache 2
mod_auth_ldap
mod_auth_ldap
31
Administración Apache 2
mod_auth_ldap
• Directivas relacionadas con la fase de autentificación:
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
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
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
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.
43
Administración Apache 2
mod_vhost
– VirtualScriptAlias alias patron_del_directorio
● Ejemplo:
– UseCanonicalName Off
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
49
Administración Apache 2
–Seguridad
50
Administración Apache 2
Seguridad en apache
Compartimentar.
Preparar la defensa.
Seguridad en apache
Fallar con control
52
Administración Apache 2
53
Administración Apache 2
Compartimentando
● Puede ser útil encerrar a apache en una jail (chroot) con esto
conseguiremos:
54
Administración Apache 2
• Recursos:
– http://httpd.apache.org/docs-2.0/es/howto/auth.html
55
Administración Apache 2
56
Administración Apache 2
Preparar la defensa
● Habilitar unos logs con información útil
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
– </FilesMatch>
Con directorios también es posible realizar esta restricción
– <DirectoryMatch /CVS/>
– Order Allow,Deny
– </DirectoryMatch>
60
Administración Apache 2
– 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
63