Configuración de Apache para impedir enlace remoto de imágenes.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Suele ocurrir que los administradores de algunos sitios encuentran fácil utilizar imágenes y otros tipos de contenido, vinculando desde sus documentos hacia los objetos en el servidor. Ésto representa un consumo ancho de banda adicional para el servidor, que sólo genera tráfico inútil y por lo tanto es considerado una práctica poco ética. En el siguiente ejemplo se desea proteger un directorio para que sólo se permita utilizar su contenido si es referido desde el mismo servidor.

Procedimientos.

Genere el directivo /var/www/imagenes ejecutando lo siguiente:

mkdir /var/www/imagenes

Copie o transfiera archivos de imágenes dentro de este directorio.

cp /usr/share/pixmaps/*.png /var/www/imagenes

Genere el archivo /etc/httpd/conf.d/imagenes.conf ejecutando lo siguiente:

vi /etc/httpd/conf.d/imagenes.conf

Añada el siguiente contenido:

# Se permite acceder directamente a la imagen o bien si se omite
# en el navegador la información del referente.
SetEnvIfNoCase Referer "^$" local_referal=1
# Se permite al propio servidor
SetEnvIfNoCase Referer "^http://127.0.0.1" local_referal=1
SetEnvIfNoCase Referer "^http://localhost" local_referal=1
SetEnvIfNoCase Referer "^http://localhost.localdomain" local_referal=1
SetEnvIfNoCase Referer "^http://192.168.70.50" local_referal=1
SetEnvIfNoCase Referer "^http://m50.alcancelibre.org.mx" local_referal=1
SetEnvIfNoCase Referer "^http://(www.)?midominio.org" local_referal=1
# Se permite utilizar las imágenes a otro servidor
SetEnvIfNoCase Referer "^http://(www.)?sitio-amigo.org" local_referal=1

Alias /imagenes /var/www/imagenes
<Directory  "/var/www/imagenes">
	Order Deny,Allow
	Deny from all
	Allow from env=local_referal
</Directory>

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

Pruebe la configuración creando un documento HTML en el anfitrión local y en un anfitrión remoto, el cual enlace hacia imágenes hospedadas en el directorio /var/www/imagenes del servidor recién configurado, y compare resultados.

En lugar de lo anterior, puede utilizarse también un archivo .htaccess. Edite el archivo /etc/httpd/conf.d/imagenes.conf ejecutando lo siguiente:

vi /etc/httpd/conf.d/imagenes.conf

Reemplace el contenido existente por lo siguiente:

Alias /imagenes /var/www/imagenes
<Directory  "/var/www/imagenes">
	AllowOverride all
</Directory>

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

Genere el archivo /var/www/imagenes/.htaccess:

vi /var/www/imagenes/.htaccess

Añada el siguiente contenido:

# Se permite acceder directamente a la imagen o bien si se omite
# en el navegador la información del referente.
SetEnvIfNoCase Referer "^$" local_referal=1
# Se permite al propio servidor
SetEnvIfNoCase Referer "^http://127.0.0.1" local_referal=1
SetEnvIfNoCase Referer "^http://localhost" local_referal=1
SetEnvIfNoCase Referer "^http://localhost.localdomain" local_referal=1
SetEnvIfNoCase Referer "^http://192.168.70.50" local_referal=1
SetEnvIfNoCase Referer "^http://m50.alcancelibre.org.mx" local_referal=1
SetEnvIfNoCase Referer "^http://(www.)?midominio.org" local_referal=1
# Se permite utilizar las imágenes a otro servidor
SetEnvIfNoCase Referer "^http://(www.)?sitio-amigo.com" local_referal=1

Order Deny,Allow
Deny from all
Allow from env=local_referal

Pruebe la configuración creando un documento HTML en el anfitrión local y en un anfitrión remoto —el cual haga enlaces hacia imágenes hospedadas en el directorio /var/www/imagenes del servidor recién configurado— y compare resultados.