url seguras en apache2 con mod_auth_token

Posted on Mon 23 May 2011 in misc • 2 min read

A veces el publicar en nuestra web algo para que la gente se descargue, puede provocar que si el link es publicado en algun sitio, puede generar un exceso de trafico en nuestros servidores por una descarga masiva.

El modulo de apache2 mod_auth_token, nos puede ayudar a generar uris temporales para limitar en el tiempo y en base a la IP de origen la url generada.

Para poder compilar el modulo tenemos que instalar algunos paquetes, si no los tenemos instalados ya

[email protected]:~# apt-get install apache2-prefork-dev autoconf automake libtool

Ahora nos descargamos el modulo y lo instalamos

[email protected]:~# wget http://mod-auth-token.googlecode.com/files/mod_auth_token-1.0.5.tar.gz [email protected]:~# tar xvfz mod_auth_token-1.0.5.tar.gz [email protected]:~# cd mod_auth_token-1.0.5

Como el modulo puede haberse generado por el autor con una version diferente de automake para que nos compile tenemos que ejecutar el script buildconf que hay en el directorio antes de hacer el configure

[email protected]:~/mod_auth_token-1.0.5# ./buildconf [email protected]:~/mod_auth_token-1.0.5# ./configure [email protected]:~/mod_auth_token-1.0.5# make [email protected]:~/mod_auth_token-1.0.5# make install

Si todo ha ido bien, nos dira que ha instalado y activado el modulo. Ahora debemos configurar apache para que use el modulo. Añadimos la siguiente configuración en el virtualhost de nuestro apache2

[email protected]:~# vi /etc/apache2/sites-enabled/000-default

<Location /downloads/> AuthTokenSecret "clavesecreta" AuthTokenPrefix /downloads/ AuthTokenTimeout 60 #AuthTokenLimitByIp off </Location>

Como veis he comentado el parametro AuthTokenLimitByIp ya que al chequear la configuración me da un error. Con esto lo unico que no tendremos son los tokens basados en IP. Tambien tenemos que poner la clave secreata que queramos. Guardamos la configuración, la chequeamos y reiniciamos

[email protected]:~# apache2ctl configtest Syntax OK [email protected]:/var/www# apache2ctl restart

Ahora vamos a hacer un script en php para generar url`s dimanicas. Primero creamos el directorio downloads en el DocumentRoot del apache y copiamos el archivo que queremos proteger en el

[email protected]:~# cd /var/www/ [email protected]:/var/www# mkdir downloads

Y creamos un script php siguiendo la base del ejemplo de la pagina del desarrollador:

download_file.php

Ahora llamamos desde el navegador a este php veremos la url que se genera:

Si esta todo configurado correctamente, nos descargara el archivo que hayamos configurado. Pero si esperamos los 60 segundos que hemos configurado en la sección de apache, veremos que el servidor nos devuelve en código 410 Gone, informándonos que el link ya no esta disponible.

Incluso podemos ver en el log de apache, los intentos de acceso no autorizados porque el token a caducado

[Tue May 24 01:18:01 2011] [warn] [client 127.0.0.1] mod_auth_token: token expired at 1306191109, now is 1306192681

Con esto podemos, evitar que nos descargen archivos desde sitios de descargas y links