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
root@lnxport:~# apt-get install apache2-prefork-dev autoconf automake libtool
Ahora nos descargamos el modulo y lo instalamos
root@lnxport:~# wget http://mod-auth-token.googlecode.com/files/mod_auth_token-1.0.5.tar.gz root@lnxport:~# tar xvfz mod_auth_token-1.0.5.tar.gz root@lnxport:~# 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
root@lnxport:~/mod_auth_token-1.0.5# ./buildconf root@lnxport:~/mod_auth_token-1.0.5# ./configure root@lnxport:~/mod_auth_token-1.0.5# make root@lnxport:~/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
root@lnxport:~# 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
root@lnxport:~# apache2ctl configtest Syntax OK root@lnxport:/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
root@lnxport:~# cd /var/www/ root@lnxport:/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