Apache: Trucos y ejemplos de configuración
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/htmlYou 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 80cuando 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