Configuración de httpd.conf

Como norma de seguridad es recomendable ocultar la mayor cantidad de información posible acerca de la versión de nuestro "apachito". La directiva que se encarga de esto es:


 ServerTokens Minimal|ProductOnly|OS|Full

Como siempre lo más importante es ocultar la versión del servidor, de esta forma un posible atacante tendrá que usar una mayor cantidad de ataques para tirar nuestro sistema, teniendo así nosotros más posibilidades de detectar el ataque y tomar medidas.Ejemplos:


 ServerTokens Prod[uctOnly] 
    #Server sends (e.g.): Server: Apache 
 ServerTokens Min[imal] 
    #Server sends (e.g.): Server: Apache/1.3.0 
 ServerTokens OS 
    #Server sends (e.g.): Server: Apache/1.3.0 (Unix) 
 ServerTokens Full 
    #(or not specified - USADO POR DEFECTO!!!!) 
    #Server sends (e.g.): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2 

Así cuando un cliente haga una petición obtendremos una respuesta como la que sigue:

natasab@natrix:/home/natasab$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 15 Feb 2002 12:51:14 GMT Server: Apache Last-Modified: Tue, 30 Oct 2001 16:17:04 GMT ETag: "271a-c0-3bded280" Accept-Ranges: bytes Content-Length: 192 Connection: close Content-Type: text/html NaTriX WEB Store This Page is under construction.

You can visit the DTFzine web just clicking here Connection closed by foreign host. natasab@natrix:/home/natasab$

Otra directiva interesante:


ServerSignature Off

Evita que se muestre un mensaje del estilo:


Apache/1.3.19 Server at www.lalala.com Port 80
cuando hay una petición errónea.

Redirecciones de directorios

En el siguiente ejemplo se muestra como se permite el acceso a /usr/share/phpmyadmin siendo la url: http://localhost/phpmyadmin/


#
# Aliases: Add here as many aliases as you need (with no limit). 
#          Format: Alias fakename realname
#

Alias /phpmyadmin /usr/share/phpmyadmin

<DirectoryMatch /usr/share/phpmyadmin/>
Options +FollowSymLinks
AllowOverride None
# Lineas añadidas por mi - 
# hacen accesible phpMyAdmin sólo desde localhost
order deny,allow
deny from all
allow from 127.0.0.0/255.0.0.0
# lineas comentadas por mi
#order allow,deny
#allow from all
</DirectoryMatch>
En windows:

 Alias /www/ "D:/www/"
 

Apache con módulo PHP4

Otro fichero en el que se puede modificar la firma del servidor web utilizado es en el fichero php.ini (si usas el módulo PHP del Apache). En este fichero encontrarás lo que sigue:


; 
; Misc
; 
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
;-*-*-*-*-*-*-*-*-*-*
;expose_php = On
expose_php = Off

Configuración de mod_rewrite.c

Si activamos este módulo podremos reescribir direcciones para dejarlas en modo amigable para los buscadores como google. Por ejemplo, podremos convertir http://www.merlos.org/viewer.php?code=codigo en http://www.merlos.org/viewer/codigo/ Los beneficios que esto reporta, entre otros es un mejor posicionamiento en los buscadores, que éstos guarden más URL de nuestra página en sus bases de datos, etc..

Cambios en httpd.conf y/o modules.conf

Dependiendo de cómo esté organizada la configuración de tu apache tendrás que cargar el módulo mod_rewrite.c modificando el fichero modules.conf o httpd.conf, para ello tendrás que descomentar las líneas A continuación, al directorio/directorios en los que queramos que se pueda reescribir las direcciones añadimos/cambamos la opción AllowOverride a All.
       AllowOverride All 

Algo muy interesante es activar los logs de este módulo. Añade en el fichero httpd.conf lo que sigue:


<IfModule mod_rewrite.c>
   #camino al fichero de logs, en windows sería, por ejemplo, c:/apache/logs/rewrite.log 
RewriteLog /var/log/apache/rewrite.log 
  # nivel de log
RewriteLogLevel 3
</IfModule>

Para detectar de forma programada si este módulo está cargado usando PHP hay que buscar la cadena mod_rewrite en la salida de la función phpinfo()

Restringir el acceso a un directorio

Para restringir el acceso a un directorio en función del usuario hay que seguir unos pasos muy sencillos. Lo primero es asegurarse de que tenemos cargados los módulos necesarios. Editamos el fichero httpd.conf y vemos si están cargados los módulos:


   LoadModule access_module modules/mod_access.so
   LoadModule alias_module modules/mod_alias.so
   LoadModule auth_module modules/mod_auth.so
   LoadModule autoindex_module modules/mod_autoindex.so

Generamos un fichero llamado .htpasswd en el directorio que queramos compartir, en nuestro caso /var/www/private/. Para ello ejecutamos los comansdos


   cd /var/www/private
   htpasswd -cb .htpasswd usuario contraseña
   htpasswd -b .htpasswd usuario2 contraseña2
  

En este fichero, creamos un alias para nuestro directorio que queramos que esté compartido:


   Alias /private "/var/www/private"

   < Directory "/var/www/private">

    Options +Indexes
    IndexOptions FancyIndexing

    Order allow,deny
    Allow from all

    AuthType Basic
    AuthName "Private Access"
    AuthUserFile "/var/www/private/.htpasswd"
    Require valid-user
    
  < /Directory>

Enlace: http://www.devside.net/web/config/windows/password