Capítulo 12. Configurando el servidor seguro

La configuración por defecto de Red Hat Linux Apache/SSL Server debería bastar para la mayoría de los usuarios. No debería necesitarse cambiar ninguna de las directivas de configuración de Apache. Si se quiere cambiar algunas de las opciones de configuración por defecto, se necesitará saber que son las opciones, y donde encontrarlas. Este capítulo cubre las opciones de configuración disponibles.

Trás instalar Red Hat Linux Apache/SSL Server, la documentación del servidor Web Apache está disponible en http://your_domain/manual/ o se puede ver la documentación de Apache disponible en la Web en http://www.apache.org/docs/. La documentación de Web Apache contiene una lista completa y descripciones de todas las opciones de configuración de Apache. Por conveniencia, hay descripciones breves de cada directiva utilizada por Red Hat Linux Apache/SSL Server en el manual.

Cuando se mira el fichero de configuración del servidor de Web, hay que tener en cuenta que la configuración por defecto incluye configuración para ser seguro o no. El servidor sguro se ejecuta como una máquina virtual, que se configura en el archivo httpd.conf. Para más información sobre máquinas virtuales, véase la sección de nombre Utilizando máquinas virtuales.

NotaNótese
 

No se incluyen extensiones FrontPage, porque la licencia Microsoft (TM) prohibe la inclusión de extensiones en productos de otras compañías.

Directivas de configuración en httpd.conf

El archivo de configuración del servidor Web Apache es /etc/httpd/conf/httpd.conf. El archivo httpd.conf está bien comentado y es bastante auto- explicativo. La configuración por defecto de Red Hat Linux Apache/SSL Server funcionará para la mayoría, así que probablemente no se necesitará cambiar nada en httpd.conf. Sin embargo, puede quererse estar familiarizado con las opciones de configuración más importantes.

Los archivos vacíos srm.conf y access.conf también están en el directorio /etc/httpd/conf. srm.conf y access.conf se utilizaban antes, junto con httpd.conf, como archivos de configuración de Apache.

Si se necesita configurar Red Hat Linux Apache/SSL Server, edítese httpd.conf, y recárguese, o párese y reiníciese Red Hat Linux Apache/SSL Server. Para saber como recargar, para y arrancar el servidor véase la sección de nombre Iniciando y parando Apache en Capítulo 11.

Antes de editar httpd.conf, debería primero copiarse el fichero original a algo como httpd.confold (o lo que sea). Así, si se comete un error al editar, habrá una copia de seguridad para reempezar de cero.

Si se comete un error, y Red Hat Linux Apache/SSL Server no funciona correctamente, el primer sitio para mirar es lo que se acaba de editar en httpd.conf. Hay que estar seguros de no haber metido ningún gazap. Después de puede mirar el log de error de Red Hat Linux Apache/SSL Server (/var/log/httpd/error_log). El log de error puede no ser fácil de interpretar, dependiendo del nivel de experiencia. Si se experimentan problemas, de todas formas, las últimas entradas deberían dar pistas sobre que ha pasado.

Las siguientes secciones dan breves descripciones de las directivas incluídas en httpd.conf, en el orden en que se encontrarán. Las descripciones no son exhaustivas. Si se necesita más información, léase la documentación de Apache en formato HTML en http://your_domain/manual/ a la documentación del grupo Apache en http://www.apache.org/docs/. Para más información sobre las directivas mod_ssl, referirse a la documentación incluída en formato HTML en http://your_domain/manual/mod/mod_ssl/, o véase el Manual de Usuario de mod_ssl en http://www.modssl.org/docs/2.6/.

ServerType

ServerType puede ser inetd o standalone. Por defecto, Red Hat Linux Apache/SSL Server está configurado como ServerType standalone.

ServerType standalone significa que el servidor arranca una vez y el servidor maneja todas las conexiones. ServerType inetd significa que para cada conexión HTTP, se crea una instancia nueva del servidor. Cada instancia del servidor gestiona la conexión y termina al terminar la conexión. Como puede imaginar, utilizar inetd es muy ineficiente. Otro problema es que inetd puede no funcionar correctamente, según el grupo Apache. Y finalmente, ya que Red Hat Linux 7.0 utiliza xinetd, se necesitará configuración adicional para hacer que xinetd arranque el servidor. Por estas razones, será mejor dejar ServerType puesto a standalone.

ServerRoot

ServerRoot es el directorio de más alto nivel que contiene los archivos del servidor. Tanto el servidor seguro como el no-seguro utilizan ServerRoot de /etc/httpd.

LockFile

LockFile configura el path al archivo de bloqueo utilizado por el servidor apache Apache cuando es compilado con USE_FCNTL_SERIALIZED_ACCEPT o USE_FLOCK_SERIALIZED_ACCEPT. LockFile debería dejarse a su valor por defecto.

PidFile

PidFile da nombre al archivo en el que el servidor graba su ID de proceso (pid). Red Hat Linux Apache/SSL Server está configurado para grabar su pid en /var/run/httpd.pid.

ScoreBoardFile

ScoreBoardFile almacena información interna del proceso, utilizada para comunicar el proceso padre con los procesos hijos. Red Hat Linux Apache/SSL Server's ScoreBoardFile está puesto a /var/run/httpd.scoreboard.

ResourceConfig

La directiva ResourceConfig instruye al servidor a que lea el archivo ResourceConfig buscando más directivas de configuración. La directiva ResourceConfig está comentada porque el servidor sólo usa httpd.conf para directivas de configuración.

AccessConfig

AccessConfig instruye al servidor a leer el archivo nombrado en AccessConfig para buscar más directivas de configuración, trás haber leído el archivo nombrado en ResourceConfig. AccessConfig está comentado porque el servidor sólo usa httpd.conf para directivas de configuración.

Timeout

Timeout define, en segundos, el tiempo que el servidor esperará para recibir y enviar peticiones durante la comunicación. Especificamente, Timeout define cuando esperará el el servidor a recibir peticiones GET, cuanto esperará a recibir paquetes TCP en una petición POST o PUT y cuanto esperará entre ACKs respondiendo a paquetes TCP. Timeout está puesto a 300 segundos, apropiado para la la mayoría de las situaciones.

KeepAlive

KeepAlive configura si el servidor permitirá conexiones persistentes (i.e., más de una petición por conexión). KeepAlive puede usarse para impedir que un cliente consuma muchos recursos del servidor. Por defecto, KeepAlive está puesto a on, lo que significa que se permiten conexiones persistentes. Puede ponerse a off, para desactivarlas. Véase la sección de nombre MaxKeepAliveRequests para aprender sobre un método alternativo de limitar conexiones.

MaxKeepAliveRequests

Esta directiva establece el máximo número de peticiones permitidas por cada conexión persistente. El Grupo Apache recomienda un valor alto, lo que mejorará el rendimiento. MaxKeepAliveRequests está puesto a 100 por defecto, que debería bastar en la mayoría de los casos.

KeepAliveTimeout

KeepAliveTimeout establece el número de segundos que el servidor esperará la siguiente petición, tras haber dado servicio a una petición, antes de cerrar la conexión. Una vez recibida la petición, aplica la directiva Timeout en su lugar.

MinSpareServers and MaxSpareServers

El servidor Web Apache se adapta dinámicamente a la carga percibida manteniendo un número apropiado de servidores libres basado en el tráfico. El servidor comprueba el número de servidores que esperan peticiones y elimina algunos si hay más que MaxSpareServers o crea algunos si el número de servidores es menos que MinSpareServers.

El valor por defecto de MinSpareServers es 5; el valor por defecto de MaxSpareServers es 20. Estos valores por defecto serán suficientes en la mayoría de los casos. No debería incrementarse MinSpareServers a un número elevado, ya que creará una gran carga incluso cuando el tráfico sea bajo.

StartServers

StartServers establece cuantos procesos serán creados al arrancar. Ya que el servidor Web crea y elimina dinámicamente servidores según el tráfico, no se necesitará cambiar este parámetro. El servidor está configurado para arrancar ocho procesos al arrancar.

MaxClients

MaxClients establece un límite al total de procesos servidores (es decir, clientes conectados simultaneamente) que se ejecutan a la vez. Se querrá mantener MaxClients a un valor alto (el valor por defecto es 150), porque no se permitirán nuevas conexiones una vez que se alcance el número máximo de clientes simultaneamente conectados. No se puede poner MaxClients a más de 256 sin recompilar Apache. La principal razón de tener el parámetro MaxClients es evitar que un servidor errático vuelva inestable el sistema operativo.

MaxRequestsPerChild

MaxRequestsPerChild establece el número máximo de peticiones que cada proceso hijo procesa antes de morir. La principal razón para tener MaxRequestsPerChild es evitar que procesos de larga vida pierdan memoria. El valor por defecto de MaxRequestsPerChild para el servidor es 100.

Listen

El comando Listen establece los puertos en los que Red Hat Linux Apache/SSL Server aceptará peticiones entrantes. Red Hat Linux Apache/SSL Server está configurado para escuchar en el puerto 80 para comunicaciones no seguras y (en máquinas virtuales que define el servidor seguro) en el puerto 443 para comunicaciones seguras.

Para puertos por debajo de 1024, httpd deberá ser ejecutado como root. Para el puerto 1024 y superiores, httpd puede ser ejecutado como un usuario cualquiera.

Listen también puede ser usado para especificar direcciones IP específicas en las cuales aceptará conexiones el servidor.

BindAddress

BindAddress es un modo de especificar en que direcciones IP el servidor escuchará. Debería usarse la directiva Listen en su lugar si se necesita esta funcionalidad. BindAddress no es usado por el servidor; por defecto está comentado httpd.conf.

LoadModule

LoadModule es usado para cargar módulos Dynamic Shared Object(DSO). Para más información sobre Red Hat Linux Apache/SSL Server's y los DSOs incluyendo exactamente como usar la directiva LoadModule, véase la sección de nombre Añadir Modulos a Tu Servidor. Nótese que el orden de los módulos es importante, así que mejor no tocarlo.

IfDefine

Las etiquetas <IfDefine> y </IfDefine> rodean a directivas de configuración que son aplicadas si el "test" declarado en la etiqueta <IfDefine> resulta verdadero; las directivas son ignoradas si el test es falso.

El test en la etiqueta <IfDefine> es un nombre-parámetro (p.ej., HAVE_PERL). Si el parámetro está definido (p.ej., dado como argumento al comando de arranque del servidor), entonces el test es verdadero. En este caso, cuando Red Hat Linux Apache/SSL Server es arrancado, el test es verdaderoy las directivas contenidas en las etiquetas IfDefine son aplicadas.

Por defecto, las etiquetas <IfDefine HAVE_SSL> rodean las etiquetas de máquina virtual del servidor seguro. Las etiquetas <IfDefine HAVE_SSL> también rodean a las directivas LoadModule y AddModule para ssl_module.

ClearModuleList

ClearModuleList se encuentra justo antes de la larga lista de directivas AddModule. ClearModuleList borra la lista interna de módulos del servidor. La lista de directivas AddModule recrea la lista, justo después de ClearModuleList.

AddModule

AddModule es la directiva usada para crear una lista completa de módulos disponibles. Se usa la directiva AddModule para añadir módulos como DSO. Para más información sobre como usar AddModule para soporte DSO, véase la sección de nombre Añadir Modulos a Tu Servidor.

ExtendedStatus

La directiva ExtendedStatus controla si Apache genera información de estado básica (off) o detallada (on), cuando el gestor server-status es llamado. Server-status es llamdo utilizando la etiqueta Location; más información sobre como llamar a server-status se incluye en la sección de nombre Location.

Port

Normalmente, Port define el puerto en el que escucha el servidor. Red Hat Linux Apache/SSL Server, sin embargo, escucha en más de un puerto por defecto, ya que la directiva Listen también se usa. Cuando la directiva Listen está en uso, el servidor escucha en todos esos puertos. Véase la descripción de Listen para más información sobre Listen.

El comando Port también se usa para especificar el número de puerto usado para crear el nombre canónico para el servidor. Véase la sección de nombre UseCanonicalName para más información sobre el nombre canónico del servidor.

User

La directiva User establece el userid usado por el servidor para responder a peticiones. El valor de User determina el acceso al servidor. Cualquier archivos no accesibles a este usuario será también inaccesible al visitante de la web. El defecto para User es apache.

User debería sólo tener privilegios tales que sólo pueda acceder a ficheros que se supone que son visibles para el mundo exterior. User también es dueño del cualquier proceso CGI arrancaco por el servidor. User no debería ser permitido ejecutar cualquier código que no esté pensado para responder peticiones HTTP.

NotaPlease Note
 

A menos que se sepa exactamente que se hace, no se ponga User a root. Usar root para User creará grandes agujeros de seguridad en Red Hat Linux Apache/SSL Server.

El proceso httpd padre se ejecuta como root durante operaciones normales, pero pasa al usuario apache inmediatamente. El servidor debe arrancar como root porque necesita un puerto por debajo de 1024 (El puerto por defecto para comunicaciones seguras es 443; el puerto por defecto para comunicaciones no seguras es el puerto 80). Los puertos por debajo de 1024 está reservados para el sistema, así que sólo pueden ser usados por root. Una vez que el servidor tiene el puerto, pasa el proceso a User antes de aceptar peticiones.

Group

Group es similar a User. Group establece el grupo bajo el que el servidor responde a peticiones. El valor por defecto Group también es apache.

ServerAdmin

ServerAdmin debería ser la dirección de correo del administardor del Red Hat Linux Apache/SSL Server. Esta dirección de correo aparecerá en mensajes de error generador por el servidor para páginas de web, así que los usuarios pueden comunicar errores enviando correo al administrador. ServerAdmin está puesto por defecto a root@localhost.

Típicamente, una buena forma de configurar ServerAdmin es ponerlo a webmaster@your_domain.com. Crear un alias de webmaster a la persona responsable del servidor en /etc/aliases. Finalmente, ejecútese /usr/bin/newaliases para añadir el nuevo alias.

ServerName

Puede usarse ServerName para establecer el nombre de máquina del servidor diferente al nombre real de máquina. Por ejemplo, puede quererse usar www.your_domain.com siendo el nombre real del servidor foo.your_domain.com. Nótese que ServerName debe ser un nombre "Domain Name Service" (DNS) válido que se tenga derecho a usar (no basta con inventar algo).

Si se especifica ServerName, hay que asegurarse de incluir la pareja nombre-dirección IP en el fichero /etc/hosts.

DocumentRoot

DocumentRootes el directorio que contiene la mayoría de los archivos HTML que se entregarán en respuesta a peticiones. Por defecto, DocumentRoot para servidor seguro y no seguro es /var/www/html. Por ejemplo, el servidor puede recibir una petición para el siguiente documento:

http://your_domain/foo.html

El servidor buscará el archivo en el siguiente directorio por defecto:

/var/www/html/foo.html
	

Si se quiere cambiar DocumentRoot para que no sea compartido por los servidores seguro y no seguro, véase la sección de nombre Utilizando máquinas virtuales.

Directory

Las etiquetas <Directory /path/to/directory> y </Directory> se usan para agrupar directivas de configuración que sólo aplican a ese directorio y sus subdirectorios. Cualquier directiva aplicable a un directorio puede usarse en las etiquetas <Directory>. Las etiquetas <File> pueden aplicarse de la misma forma a un archivo específico.

Por defecto, parámetros muy restrictivos se aplican a directorio raiz, utilizando Options (véase la sección de nombre Options) y AllowOverride (véase la sección de nombre AllowOverride). Con esta configuración, cualquier directorio del sistema que necesite valores más permisivos ha de ser configurado explicitamente.

Utilizar las etiquetas Location, DocumentRoot (referido a "/") está definido para tener parámetros menos rígidos, para que las peticiones HTTP puedan ser servidos desde él.

El directorio cgi-bin está configurado para permitir la ejecución de scripts CGI, con la opción ExecCGI Si se necesita ejecutar un script CGI en cualquier otro directorio, habrá que configurar ExecCGI para ese directorio. Por ejemplo, si cgi-bin es /var/www/cgi-bin, pero se quiere ejecutar scripts CGI desde /home/my_cgi_directory, añádase una directiva ExecCGI a un juego de directivas Directory como las siguientes al archivo httpd.conf:

<Directory /home/my_cgi_directory>
    Options +ExecCGI
</Directory>

Para permitir la ejecución de scripts CGI en /home/my_cgi_directory, habrá que llevar a cabo pasos extra aparte de configurar ExecCGI. También necesitará descomentar la directiva AddHandler para identificar archivos con extensión .cgi como scripts CGI. Véase la sección de nombre AddHandler para instrucciones sobre como configurar AddHandler. Los permisos para scripts CGI, y el path entero a los scripts, debe ponerse a 0755. Finalmente, el dueño del script y del directorio deben ser el mismo.

Location

Las etiquetas <Location> y </Location> permiten crear control de acceso específico por URL.

El primer uso de Location es configurar Options y proporcionar guías extra de configuración para DocumentRoot. Estas directivas de configuración, que se encuentran dentro de las etiquetas <Location "/"> y </Location>, son necesarias para dar acceso a documentos en DocumentRoot.

El siguiente uso de Location es en las etiquetas IfModule mod_perl.c. Estas directivas de configuración están en efeco si el DSO mod_perl.so está cargado. Véase la sección de nombre Añadir Modulos a Tu Servidor para más información sobre como añadir módulos a Apache.

La etiqueta Location nombra el directorio /var/www/perl (un Alias para /perl) como el directorio desde el cual se sirven scripts de Perl. Si se pide un documento con un URL que contenga /perl en el path, el servidor buscará en /var/www/perl/ el script de Perl apropiado.

Muchas otras opciones de <Location> están comentadas en httpd.conf. Si se quiere activar su funcionalidad, se necesitará descomentar la sección apropiada de las directivas.

Justo tras las directivas de Perl discutidas anteriormente, httpd.conf incluye una sección de directivas para activar HTTP PUT (p.ej., publicación de Netscape Gold, que permite poner páginas web en un servidor). Si se quiere permitir HTTP PUT, habrá que descomentar la sección entera:

#LoadModule put_module          modules/mod_put.so
#AddModule mod_put.c
#
#Alias /upload /tmp
#<Location /upload>
#    EnablePut On
#    AuthType Basic
#    AuthName Temporary
#    AuthUserFile /etc/httpd/conf/passwd
#    EnableDelete Off
#    umask 007
#    <Limit PUT>
#       require valid-user
#    </Limit>
#</Location>

Si se quiere que conexiones desde dentro del mismo dominio tengan acceso a ver informes de estado, debe descomentarse la siguiente sección de directivas:

#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#</Location>
		

Hay que poner el sedungo nivel del nombre de dominio en vez de .your_domain.com.

Si se quiere dar informes de configuración del servidor (incluyendo módulos instalado y directivas de configuración) a peticiones desde dentro del dominio, habrá que descomentar las siguiente líneas:

#<Location /server-info>
#    SetHandler server-info
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#</Location>
	

Hay por supuesto que rellenar .your_domain.com.

La siguiente sección de directivas usa las etiquetas Location para permitir acceso a la documentación en /usr/share/doc (p.ej, con un URL como http://your_domain/doc/whatever.html). Estas directivas sólo perite acceso a peticiones desde la misma máquina.

Otro uso para las etiquetas Location es una sección comentada, pensada para rastrear ataques al servidor intentando explotar un viejo fallo de los días de pre-Apache 1.1. Si se quieren rastrear estas peticiones, descomentar las siguientes líneas:

#<Location /cgi-bin/phf*>
#    Deny from all
#    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#</Location>

Si estas lineas no están comentadas, el servidor redirigirá cualquier petición que termine en /cgi-bin/phf* a un CGI que hace log del Grupo Apache.

Options

La directiva Options contrla características del servidor están disponibles en un directorio en particular. Por ejemplo, bajo los parámetros restrictivos especificados para el directorio raiz, Options sólo permite FollowSymLinks. No hay características permitidas, salvo que el servidor puede seguir enlaces simbólicos en el directorio raiz.

Por defecto, en el directorio DocumentRoot, Options está configurado para incluir Indexes, Includes y FollowSymLinks. Indexes permite al servidor generar un listado de un directorio si no se especifica DirectoryIndex (index.html, etc.). Includes implica que se permiten inclusiones en el servidor. FollowSymLinks permite al servidor seguir enlaces simbólicos en ese directorio.

También se necesitará incluir declaraciona Options para directorios dentro directivas de máquinas virtuales, si se quiere que las máquinas virtuales reconozcan esas Options.

Por ejemplo, la inclusión en el servidor está activada en el directorio /var/www/html, por la línea Options Includes dentro de la sección Location "/". Sin embargo, si se quiere que una máquina virtual reconozca la inclusión desde el servidor estén permitidos desde /var/www/html, habrá que incluir una sección como la siguiente desde dentro de las etiquetas de máqinas virtuales:

<Directory /var/www/html>
Options Includes
</Directory>

AllowOverride

AllowOverride establece cuales sí o cuales no de las directivas Options pueden ser obviadas por un archivo .htaccess. Por defecto, tanto el directorio raiz y DocumentRoot están configurados para no permitir la prevalencia de .htaccess .

Order

Order simplemente controla el orden en que allow y deny son evaluados. El servidor está configurado para evaluar Allow antes que deny para el directorio DocumentRoot.

Allow

Allow especifica que peticionario puede acceder un directorio dado. El peticionario puede ser all, un nombre de dominio, una dirección IP, una dirección IP parcial, un par red/máscara de red, etc. El directorio DocumentRoot está configurado para permitir peticiones de all (cualquiera).

deny

Deny funciona como allow, pero se especifica a quien se niega acceso. DocumentRoot no está configurado para rechazar peticiones de nadie.

UserDir

UserDir es el nombre del subdirectorio dentro del directorio de cada usuario donde estarán los archivos HTML que serán servidos. Por defecto, el subdirectorio es public_html. Por ejemplo, el servidor podría recibir la siguiente petición:

http://your_domain/~username/foo.html
	

El servidor buscaría el fichero:

/home/username/public_html/foo.html
	

En el ejemplo, /home/username es el directorio del usuario (nótese que el path por defecto a los directorios de los usuarios puede variar entre sistemas).

Hay que asegurarse que los permisos de los directorios de usuario son correctos. Los permisos deben estar puestos a 0755. Los bits de lectura (r) y ejecución (x) deben estar activados en el directorio del usuario public_html (0755 valdrá). Los archivos que se servirán desde public_html deben estar con permisos 0644 por lo menos.

DirectoryIndex

DirectoryIndex es la página por defecto entregada por el servidor cuando hay una petición de indice de un directorio especificando una barra (/) al final del nombre del directorio.

Por ejemplo, cuando un usuario pide la página http://your_domain/this_directory/, van a recibir la página DirectoryIndex si existe, o un listado generado por el servidor. El valor por defecto para DirectoryIndex es index.html, index.htm index.shtml e index.cgi. El servidor intentará encontrar cualquiera de estos cuatro, y entregará el primero que encuentre. Si no encuentra ningunao y si Options Indexes esta puesto para el directorio, el servidor generará un listado, en formato HTML, de los subdirectorios y archivos del directorio.

AccessFileName

AccessFileName denomina el archivo que el servidor utilizará para controlar el acceso en cada directorio. Por defecto, el servidor utilizará .htaccess, si existe, para controlar el acceso en cada directorio.

Justo tras AccessFileName, Files aplican control de acceso a cualquier archivo que empiece con .ht. Estas directivas niegan acceso a cualquier archivo .htaccess (u otros archivos que empiecen .ht) por razones de seguridad.

CacheNegotiatedDocs

Por defecto, Red Hat Linux Apache/SSL Server requiere a los proxys que no hagan cache de los documentos que se negocian en base al contenido ( pueden cambiar en el tiempo o según los datos del peticionario). Si se descomenta CacheNegotiatedDocs, se desactiva la función y los proxys podrán hacer cache de los documentos.

UseCanonicalName

UseCanonicalName esta a on por defecto. UseCanonicalName permite al construir URLs que se autoreferencien, utilizando ServerName y Port. Cuando el servidor se refiere a si mismo en respuesta a peticiones de clientes, usa este URL. Si se pone UseCanonicalName a off, el servidor utilizará el valor que vino en petición del cliente para referirse a si mismo.

TypesConfig

TypesConfig denomina el archivo que establece la lista por defecto de mapeado de tipos MIME (extensiones de archivo a tipos de contenido). El archivo por defecto TypesConfig es /etc/mime.types. En vez de editar /etc/mime.types, la forma recomendada de añadir MIME mapeados de tipo es utilizar AddType.

DefaultType

DefaultType establece el contenido por defecto que el servidor utilizará para documentos cuyos tipos MIME no puedan ser determinados. El servidor asume texto para cualquier archivo con un tipo de contenido indeterminado.

IfModule

<IfModule> y </IfModule> envuelven a directivas que son condicionales. Las directivas contenidas dentro de IfModule son procesadas si se cumple una de dos condiciones. Las directivas son procesadas si el módulo contenido en la etiqueta <IfModule> está compilado en el servidor Apache. O, si una "!" (exclamación) se incluye antes del nombre, las directivas son procesadas sólo si el módulo en la etiqueta <IfModule> no está compilado.

El archivo mod_mime_magic.c está incluído en IfModule. El módulo mod_mime_magic puede compararse al comando UNIX file, que examina los primeros bytes de un archivo, y utsa "números mágicos" y otros trucos para decidir el tipo MIME del archivo.

Si el módulo mod_mime_magic está compilado en Apache, estas etiquetas IfModule le dicen al módulo mod_mime_magic module donde esta el archivo de trucos: share/magic en este caso.

El módulo mod_mime_magic module no está compilado por defecto. Si se quier usar, véase la sección de nombre Añadir Modulos a Tu Servidor, para tener instrucciones sobre como añadir módulos al servidor.

HostnameLookups

HostnameLookups puede ponerse a on u off. Si se permite HostnameLookups (poniéndolo a on), el servidor resolverá automáticamente la dirección IP de cada conexión que pida un documento del servidor. Resolver la dirección IP implica que el servidor hará una o más conexiones al DNS para averiguar que nombre de máquina se corresponde con una dirección IP.

Generalmente, debería dejarse HostnameLookups a off, porque las peticiones de DNS añanden carga al servidor y pueden ralentizarlo. Si el servidor tiene carga, los efectos de HostnameLookups pueden ser considerables.

HostnameLookups influye también en Internet en general. Cada conexión individual para buscar un nombre suma y sigue. Es por ello, que por beneficio del servidor, y de Internet en general, debería dejarse HostnameLookups puesto a off.

ErrorLog

ErrorLog nombra el archivo donde los errores del servidor son guardados. Como viene indicado, el archivo de error del servidor es /var/log/httpd/error_log.

El log de errores es un buen sitio para ver si el servidor genera errores y no se sabe muy bien que pasó.

LogLevel

LogLevel establece como de abundantes serán los logs de error. LogLevel puede ponerse a (de menos a mas abundante) a emerg, alert, crit, error, warn, notice, info or debug. El LogLevel de Red Hat Linux Apache/SSL Server está puesto warn (nivel medio).

LogFormat

LogFormat pone el formato para los mensajes en el log de acceso; afortunadamente, el formato hará el log de acceso más legible.

CustomLog

CustomLog identifica el log y el formato de log. La configuración por defecto de CustomLog de Red Hat Linux Apache/SSL Server, define el log en se guardan los accesos al servidor: /var/log/httpd/access_log. Habrá que saber la localización de este archivo si se quiere generar estadísticas de rendimiento del servidor.

CustomLog pone el formato común para el archivo. El formato común de log es de la siguiente forma:

remotehost rfc931 authuser [date] "request" status bytes

remotehost

El nombre de máquina. Si el nombre no está disponible en el DNS, o sí HostnameLookups está a Off, entonces remotehost será la dirección IP de la máquina remota.

rfc931

No utilizado. Se verá un - en el log en su lugar.

authuser

Si se requirió autenticación, este es el usuario con el que el usuario se identificó. Generalmente, no se usa, así que se verá un - en su lugar.

[date]

Fecha y hora de la petición.

"request"

Cadena de texto de la petición según vino del cliente.

status

Código de estado HTTP que se devolvió al cliente.

bytes

Tamaño del documento.

El comando CustomLog puede utilizarse para configurar logs específicos para registrar referencias(el URL que hizo el enlace al servidor) y/o agentes (navegadores utilizados para pedir páginas al servidor). Las líneas relevantes de CustomLog están comentadas, como se muestra, pero deberían descomentarse si se quieren los dos archivos de log:

#CustomLog /var/log/httpd/referer_log referer 
#CustomLog /var/log/httpd/agent_log agent

Alternativamente, se puede poner la directiva CommonLog para que use un log combinado descomentando la siguiente línea:

#CustomLog /var/log/httpd/access_log combined

Un fichero de log combined añadirá los campos agente y referer al final de cada línea. Si desea utilizar un fichero de log combined elimine el comentario que aparece en CustomLog.

ServerSignature

ServerSignature añade una línea que contiene la versión del servidor Apache y el ServerName de la máquina a los documentos generador por el servidor (p.ej, mensajes de error devueltos a clientes). ServerSignature está puesto a on por defecto. Se puede cambiar a off, para no añadir nada, o se puede cambiar a EMail. EMail añadirá una etiqueta HTML mailto:ServerAdmin a la línea de firma.

Alias

Alias permite que haya directorios fuera de DocumentRoot que sean accesibles por el servidor. Cualquier URL que termine en un alias será automáticamente traducido por el path del alias. Por defecto, hay un alias configurado. El directorio icons puede ser accedido por el servidor, pero el directorio no está bajo DocumentRoot. icons , un alias, está en /var/www/icons/, y no en /var/www/html/icons/.

ScriptAlias

ScriptAlias define donde pueden encontrarse los scripts CGI (u otros scripts). Normalmente, no se querrá poner scripts CGI dentro de DocumentRoot. Si los scripts CGI se encontrasen bajo DocumentRoot, podrían ,potencialmente, ser vistos como documentos de texto. Incluso si no preocupa que la gente vea (y use) los scripts CGI, mostrar como funcionan crea oportunidades para gente sin escrúpulos que quiera explotar agujeros de seguridad en el script, y puede crear un agujero de seguridad en el servidor. Por defecto, el directorio cgi-bin es un ScriptAlias de /cgi-bin/, y se encuentra situado /var/www/cgi-bin/.

El directorio /var/www/cgi-bin tiene puesto Options ExecCGI, lo que implica que la ejecución de scripts CGI está permitida en el directorio.

Véase la sección de nombre AddHandler y la sección de nombre Directory para aprender como ejecutar scripts CGI en otros directorios aparte de cgi-bin.

Redirect

Cuando se cambia una página de sitio, Redirect puede usarse para apuntar del viejo URL al nuevo URL. El formato es como sigue:

Redirect /path/foo.html http://new_domain/path/foo.html

Así que si se recibe una petición HTTP para un página que solía estar en http://your_domain/path/foo.html, el servidor devolverá el nuevo URL (http://new_domain/path/foo.html) al cliente, que tratará de coger el documento desde el nuevo URL

IndexOptions

IndexOptions controla la apariencia de los listados generados por el servidor, al añadir iconos y texto descriptivo, etc. Si Options Indexes está puesto (véase la sección de nombre Options), el servidor podrá generar un listado de un directorio al recibir una petición HTTP como la que sigue:

http://your_domain/this_directory/

Primero el servidor busca en el directorio un archivo de los de la lista de DirectoryIndex (p.ej., index.html). Si el servidor no encuentra ninguno de los archivos, genera un listado del directorio en HTML. Se puede modificar la apariencia del listado utilizando ciertas directivas en httpd.conf, incluyendo IndexOptions.

La configuración por defecto activa FancyIndexing. Si se activa FancyIndexing, al hacer click en la cabecera de las columnas del listado, el listado se ordena según esa columna. Otro click en la misma cabecera cambiará el orden de ascendente a descendente y viceversa. FancyIndexing también muestra distintos iconos para distintos archivos, según la extensión. Si se usa la directiva AddDescription y se activa FancyIndexing, se añade una pequeña descripción para el archivo en el listado generado.

IndexOptions tiene otros parámetros que pueden activarse para controlar la apariencia de los listados. Los parámetros incluyen IconHeight e IconWidth, para hacer que el servidor incluya etiquetas HEIGHT y WIDTH para los iconos; IconsAreLinks, hace que los iconos sean parte del enlace HTML junto con el nombre de archivo, y otros.

AddIconByEncoding

Esta directiva denomina que iconos serán mostrados con los archivos según su codificación MIME, en los listados de directorio. Por ejemplo, por defecto, el servidor muestra el icono compressed.gif junto a archivos con codificación MIME x-compress y x-gzip en los listados de directorio.

AddIconByType

Esta directiva denomina que iconos serán mostrados con los archivos según su codificación MIME, en los listados de directorio. Por ejemplo, por defecto, el servidor muestra el icono text.gif junto a archivos con tipo MIME "text" en los listados de directorio.

AddIcon

AddIcon dice al servidor que icono mostrar en listados de directorio para ciertos tipos de archivo según la extensión. Por ejemplo, el servidor muestra el icono binary.gif para archivos con extensiones .bin o .exe.

DefaultIcon

DefaultIcon nombra al icono por defecto en listados de directorio para archivos sin incono específico. unknown.gif es DefaultIcon para esos archivos.

AddDescription

Se puede usar AddDescription para mostrar descripciones específicas para archivos, en listados de directorios (habrá que activar también FancyIndexing como una IndexOptions). Puede aplicarse a archivos individuales, expresiones de nombre o extensiones para controlar a que archivos aplicar esta directiva. Por ejemplo, podría usarse lo siguiente:

AddDescription "A file that ends in .ni" .ni
	

En listados de directorio, todos los archivos con extensión .ni tendrían la descripción Un archivo que termina en .ni tras el nombre. Nótese que necesita activarse FancyIndexing.

ReadmeName

ReadmeName dicta que archivo (si existe dentro del directorio) se adjuntará a los listados de directorios. El servidor intentará primero incluirlo como documento HTML y luego como texto. Por defecto, ReadmeName tiene el valor de README.

HeaderName

HeaderName dicta que archivo (si existe dentro del directorio) se prepondrá al comienzo de los listados de directorios Al igual que con ReadmeName, el servidor intentará incluirlo como documento HTML si es posible, o como texto.

IndexIgnore

IndexIgnore lista extensiones, nombres de archivo parciales, expresiones regulares o nombres completos. El servidor no incluirá cualquier fichero que encaje en estos patrones en los listados de directorios.

AddEncoding

AddEncoding dice que extensiones especifican un tipo particular de codificación. AddEncoding se puede usar para decirle a los navegadores (no a todos) que descompriman ciertos ficheros mientras los descargan.

AddLanguage

AddLanguage asocia extensiones a contenidos específicos de idiomas. Esta directiva es útil para negociación de contenidos, cuando el servidor devuelve uno de entre varios documentos según las preferencias de idiomas del cliente.

LanguagePriority

LanguagePriority permite poner precedencia para servir ficheros en distintos idiomas, que entrará en efecto si el cliente no especifica preferencia de idioma.

AddType

Use la directiva AddTypepara definir parejas de tipos MIME y extensiones. Por ejemplo, si se usa PHP4, el servidor está usando AddType para hacer que se reconozcan archivos con extensiones PHP (.php4, .php3 .phtml .php) como tipos MIME PHP.

La siguiente línea AddType instruye al servidor a reconocer las extensiones .shtml (para inclusión en el servidor):

AddType text/html .shtml

Se necesitará la línea de arriva dentro de las etiquetas de máquina virtual para cualquiera que deba permitir inclusión desde el servidor.

AddHandler

AddHandler mapea extensiona a gestores específicos. Por ejemplo, el gestor cgi-script puede usarse para hacer que la extensión .cgi automáticamente sea manejada como un script CGI script. Esto funciona, incluso para ficheros fuera de ScriptAlias, si se siguen las instrucciones dadas.

Hay una línea AddHandler CGI en httpd.conf:

AddHandler cgi-script .cgi

Habrá que descomentar la línea. Así Apache ejecutará como scripts CGI los archivos que terminen en .cgi, incluso si están fuera de ScriptAlias, que por defecto apunta al directorio /cgi-bin/ en /var/www/cgi-bin/.

También habrá que activar ExecCGI como Options para cualquier directorio que contenga scripts CGI. Véase la sección de nombre Directory para más información sobre configurar ExecCGI para un directorio. Adicionalmente, habrá que asegurarse de los permisos están puestos correctamente para los scripts CGI y los subdirectorios que contengan scripts. Los script sCGI scripts y todo el path que conduce a ellos deben estar a 0755. Finalmente, el dueño del directorio y el del script deben ser el mismo.

Habrá que añadir la misma línea AddHandler a la configuración de VirtualHost, si se usan máquinas virtuales y se quiere que se reconozcan scripts CGI fuera de ScriptAlias.

Además de para scripts CGI, el servidor usa AddHandler para procesar mapas de imagenes en HTML procesados por el servidor.

Action

Action permite especifica una pareja de tipo de contenido MIME y un script CGI, de tal forma que cuando un fichero de ese tipo es pedido, se ejecute un script en particular.

MetaDir

MetaDir especifica el nombre del directorio donde el servidor debería buscar archivos que contengan metainformación (cabeceras extra de HTTP) a incluir al entregar documentos.

MetaSuffix

MetaSuffix especifica el sufijo para los ficheros que contienen meta información (cabeceras extra de HTTP), que estarán en el directorio MetaDir.

ErrorDocument

Por defecto, en caso de error, el servidor saca un (generalmente críptico) mensaje de error para el cliente. En vez de usar el defecto, puede usarse ErrorDocument para devolver un mensaje de error particularizado o redireccionar al cliente a un URL local o remoto. ErrorDocument simplemente asocia un código de respuest HTTP con un mensaje o un URL que se devolverá al cliente.

BrowserMatch

BrowserMatch permite al servidor definir variables de entorno y/o tomar acciones según el campo de cabecera User-Agent, que identifica al cliente. Por defecto, el servidor usa BrowserMatch para denegar la conexión a navegadores con problemas conocidos y para desactivar "keepalives" y vaciados de cabecera de HTTP para navegadores con problemas con esas características.

ProxyRequests

Si se descomenta IfModule alrededor de ProxyRequests et al, el servidor Apache también funcionará como proxy. También habrá que cargar el módulo mod_proxy. Para aprender más sobre como cargar módulos, véase la sección de nombre Añadir Modulos a Tu Servidor.

ProxyVia

ProxyVia controla si se envía HTTP Via: junto con peticiones o respuestas que vayan vía el servidor proxy Apache. Via: header mostrará el nombre de máquina si ProxyVia esta puesto a On, el nombre de máquina y la versión de Apache para Full, cualquier línea Via: serán enviadas sin tocar si está a Off, y las líneas Via: serán eliminadas si está puesto a Block.

Cache Directives

Hay varias directivas de cache en las etiquetas de proxy IfModule mencionadas antes. Si se usa la funcionalidad proxy y se quiere habilitar el cache proxy, habrá que descomentar las directivas según se describe. Los valores por defecto de las directivas de cache deberían bastar par la mayoría de las configuraciones.

CacheRoot pone el nombre del directorio que contiene archivos de cache. El valor por defecto de CacheRoot es /var/cache/httpd.

CacheSize establece cuanto espacio puede usar el cache, en KB. El valor por defecto de CacheSize es 5 KB.

CacheGcInterval pone el número de horas. Tras ese número, se borrarán los archivos de cache si ocupan más de lo permitido por CacheSize. El valor por defecto de CacheGcInterval es cuatro horas.

Los documentos HTML en cache serán guardados (sin una recarga desde el servidor de origen) por un número máximo de horas puesto por CacheMaxExpire. El valor por defecto es 24 horas.

CacheLastModifiedFactor afecta a la fecha de caducidad para documentos que no venían con caducidad desde el servidor de origen. El valor por defecto de CacheLastModifiedFactor es 0.1, lo que significa que la caducidad del documento será un décimo del tiempo total desde que modificó el documento por última vez.

CacheDefaultExpire es la caducidad en horas para documentos recibidos vía protocolos que no soportan caducidad. El valor por defecto es de una hora.

Cualquier documento traído de una máquina y/o un dominio que encaje en uno puesto en NoCache no será puesto en cache. Si se sabe de máquinas o dominios de los que no se quiera hacer cache de sus documentos, descomentar NoCache y póngase dominios y nombres aquí.

NameVirtualHost

Necesitaras usar la directiva NameVirtualHost para la dirección IP (y número de puerto si es necesario) de algun nombre de máquinas virtuales que tu estes estableciendo. La configuración basada en máquinas virtuales es usada para establecer máquinas virtuales para diferentes dominios, pero no tiene (o no quiere usar) diferentes direcciones IP para todos los dominios a los cuales tu Web Server sirve documentos

NotaPlease Note
 

No puedes usar nombres basados en máquinas virtuales con tu servidor seguro. Algunos nombres basados en máquinas virtuales que estableces trabajaran solo con conexiones HTTP no seguras y no con conexiones SSL.

No puedes usar nombres basados en máquinas virtuales con tu servidor seguro porque el SSL handshake (cuando el browser acecta el certificado de autenticación de Web seguro) viene antes de la peticion HTTP con la cual identifica el correcto nombre de máquinas virtuales. In otras palabras, la autenticación viene antes de la identificación de máquinas virtuales. Si quieres usar hosts virtuales con tu servidor seguro necesitarás usar direcciones IP basadas en máquinas virtuales.

Si estas usando nombres basados en máquinas virtuales, comenta la directiva NameVirtualHost y añade la correcta dirección IP para tu servidor despues del NameVirtualHost. Entonces añade más información sobre los diferentes dominios usando el comando VirtualMachine el cual envuelve el ServerName para cada host virtual, mas algunas otras directivas de configuracion las cuales son solo aplicables a la máquina virtual.

VirtualHost

<VirtualHost> y </VirtualHost> envuelven directivas de configuración que están pensadas para aplicar a máquinas virtuales La mayoría de las directivas de configuración pueden usarse en etiquetas de máquina virtual, y sólo aplicarán a esa máquina virtual.

Hay varias etiquetas VirtualHost alrededor de algunos ejemplos de configuración y habrá que rellenar los huecos con información para configurar la máquina virtual. Véase la sección de nombre Utilizando máquinas virtuales, para saber más sobre máquinas virtuales.

SetEnvIf

La directiva de configuración de Apache SetEnvIf se usa para desactivar HTTP keepalive y permitir a SSL cerrar conexiones sin alerta de notificación de cierre desde el cliente. Este parámetro es necesario para clientes que no cierran bien la conexión SSL.

Directivas de configuración SSL

Las directivas SSL en tu fichero de servidores httpd.conf están incluidas para permitir comunicaciones seguras Web usando SSL y TLS.

Para mas información sobre directivas SSl ve a: http://your_domain/manual/mod/mod_ssl/. Tambien puedes ir a: http://www.modssl.org/docs/2.6/ssl_reference.html/, un capitulo en un documento Web sobre mod_ssl por Ralf Engelschall. El mismo documento, el mod_ssl User Manual, comienza en http://www.modssl.org/docs/2.6/ y es una estupenda referencia para mod_ssl (of course) y para criptografia web en general. Este manual da información general sobre tu servidor seguro en Capítulo 11.

NotaNota
 

No modifiques tus directivas SSl a menos que estes completamente seguro de lo que estás haciendo. Para la mayoria de los Red Hat Linux Apache/SSL Server, las directivas SSL estan configuradas e instaladas apropiadamente.