Apache

De Taquiones

Enlaces y referencias

  • Ref: Página principal del programa

Módulos

mod_autoindex

  • Ref: mod_autoindex

Este módulo permite exponer una relación de archivos y directorios desde el servidor web. Para activarlo en un directorio o localización se debe emplear la opción Indexex puesto que el módulo ya está incluído en la base del servidor.

Dispone de varias opciones que alteran la información que presenta:

<Directory /docs>
   # Activamos el listado de archivos
   Options +Indexes

   # Ancho variable para el nombre de los archivos
   IndexOptions DescriptionWidth=*
   # Mostrar antes las carpetas 
   IndexOptions FoldersFirst
   # Ordenar sin distinguir mayúsculas de minúsculas
   IndexOptions IgnoreCase

   # Archivo de cabecera en todas las páginas
   HeaderName HEADER.html

   # Descripciones alternativas a documentos concretos
   AddAlt "Documento PDF" *.pdf
</Directory>

Recetario

Forzar conexión segura

Empleando mod_rewrite se puede incluir una estrofa como la siguiente:

# redirect to https when available (thanks omen@descolada.dartmouth.edu)
RewriteEngine on
RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule . <nowiki>https://%{HTTP_HOST}%{REQUEST_URI}</nowiki>  [L]

Proteger con contraseña

Ref: Apuntes personales en taquiones.net

Incluir la siguiente estrofa en el recurso que se quiera proteger:

AuthType        Basic
AuthName        "Password Required"
AuthUserFile    /etc/apache/passwd/users
AuthGroupFile   /etc/apache/passwd/groups
Require Group   admins

crear el archivo de contraseñas de esta forma

<# htpasswd -c /etc/apache/passwd/users victor
New password:
Re-type new password:
Adding password for user victor
#

y el de grupos de esta otra:

# echo "admin: victor" >> /etc/apache/passwd/groups

Definir nombre del servidor

Emplear la directiva ServerName en la configuración principal así como en cada host virtual. En caso contrario Apache intenta una resolución inversa DNS con los resultados que pueden llegar a esperarse. De esta forma también es posible indicar el número de puerto sin ninguna duda.

 ServerName taquiones.net:80

Esto soluciona la advertencia que aparece cuando los certificados digitales (a través del campo CommonName) no coinciden con el nombre del servidor.

[Thu Nov 04 14:47:16 2010] [warn] RSA server certificate CommonName (CN) `taquiones.net' does NOT match server name!?

Incluir archivos en la configuración

Una manera sencilla y normalizada de incluir en copia archivos de configuración es emplear la directiva include:

Include /etc/apache2/sites-conf/esferas.org/[^.#]*.conf

Y de esta forma sólo se cargan los archivos cuyo nombre no comience por un punto, el carácter almohadilla (#) y tengan la extensión .conf.

Red interior y red exterior

  • Ref: Mezclando host virtuales con nombre e IP
  • Ref: Ejemplos de host virtuales en la documentación oficial

Si un servidor Apache está situado entre la red interior (la intranet) y la red exterior (Internet) y debe servir el mismo contenido pero con diferentes configuraciones de seguridad se pueden usar secciones VirtualHost para encauzar el tráfico.

Conviene echarle un vistazo a los ejemplos para ver cuánto pueden dar de sí las diferentes combinaciones; aquí me limito a anotar un caso real.

Tenemos un wiki instalado en un ordenador fronterizo en la dirección http://example.com/wiki y queremos que sirva el mismo contenido para la intranet que para el exterior, pero en éste último caso necesitamos que esté protegido por contraseña y usuario. Es más, no queremos que la identificación se realice en claro, así que también es necesaria una conexión segura con el servidor antes de pedir las credenciales.

Dado que no queremos incluir módulos extras ni escribir programas específicos nos limitamos a establecer un par de reglas cuando se accede al directorio /wiki:

  • Si la conexión es segura siempre se solicita autentificación.
  • Si la conexión no es segura y procede del exterior siempre se redirige a una conexión segura.

Conexión en claro

La estrofa es bastante simple y se emplea mod_rewrite para verificar desde dónde llega la petición.

# Forzamos una conexión segura si la petición procede de
# fuera y quiere acceder al url /wiki
RewriteEngine   On
RewriteCond     %{REMOTE_ADDR}  !^192\.168\.0
RewriteCond     %{REQUEST_URI}  ^/wiki
RewriteRule     . https://%{HTTP_HOST}%{REQUEST_URI}  [L]

# Configuración para mediawiki
Alias /wiki /var/www/w/index.php

...

Conexión cifrada

En este caso la configuración es prácticamente la misma sólo que protegemos con contraseña el acceso al directorio principal del wiki.

Alias /wiki /var/www/w/index.php

<Directory /var/www/w>
        Options +FollowSymLinks
        AllowOverride All
        order allow,deny
        allow from all

        AuthType        Basic
        AuthName        "Acceso al wiki"
        AuthUserFile    /etc/apache2/passwd/passwords
        AuthGroupFile   /etc/apache2/passwd/group
        Require         valid-user
</Directory>

...