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: https://www.alcancelibre.org

Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.

Introducción.

El enlace remoto o hotlinking es una práctica mediante la cual un sitio web muestra imágenes u otros recursos multimedia alojados en un servidor de terceros, enlazándolos directamente desde su código HTML. Aunque técnicamente simple, esta acción consume ancho de banda y recursos del servidor original sin su consentimiento, generando costos operativos adicionales y tráfico inútil. Es considerado una práctica cuestionable y poco ética en la administración de sitios web.

Este documento proporciona métodos para configurar Apache y proteger directorios de imágenes, permitiendo su acceso únicamente cuando el referente —la página que solicita el recurso— sea el propio servidor o dominios autorizados explícitamente. De este modo, se preservan los recursos del servidor y se respetan los derechos del propietario del contenido.

Una anécdota histórica: Hace años, cuando Alcance Libre utilizaba Geeklog, decenas de manuales fueron copiados íntegramente en plataformas como Taringa, que además realizaban hotlinking de las imágenes. Este drenaje masivo de ancho de banda llevó a implementar una contramedida creativa: en lugar de mostrar un error 403 genérico, se servía una imagen… muy explícita de una muy famosa actriz de contenido para adultos. Esta medida, aunque cuestionable, resultó efectiva para motivar a los administradores de esos sitios a cumplir con la licencia, hospedar las imágenes localmente o eliminar las publicaciones. Sirve como recordatorio humorístico —aunque contundente— de la importancia de proteger los recursos del servidor.

Procedimientos.

Este manual asume que se han estudiado y comprendido los procedimientos descritos en el manual «Configuración básica de Apache». A continuación, se presentan dos métodos para implementar la protección: mediante un archivo de configuración de Apache o utilizando un archivo .htaccess.

Preparación: crear una imagen de error personalizada.

Genere una imagen pequeña pero contundente que se mostrará cuando se deniegue el acceso. Puede utilizar ImageMagick para crearla y copiarla en el directorio raíz del anfitrión virtual.

convert -size 420x110 xc:white -gravity Center -pointsize 24 -fill \
    red -draw "text 0,0 'Error 403: Prohibido hacer hotlink'" \
    /var/www/dominio/public_html/hotlink-403.png

Método 1: Configuración directiva en Apache.

Este método configura la protección directamente en un archivo de configuración de Apache, lo que es más eficiente y recomendado para servidores con múltiples sitios.

Primero, cree el directorio que almacenará las imágenes protegidas y copie algunos archivos de ejemplo:

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

Luego, cree el archivo de configuración /etc/httpd/conf.d/imagenes.conf:

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

Añada el siguiente contenido, que define una lista blanca de referentes permitidos:

# 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 "^https://m50.alcancelibre.org.mx" local_referal=1
SetEnvIfNoCase Referer "^https://(www.)?midominio.org" local_referal=1
# Se permite utilizar las imágenes a otro servidor amigo
SetEnvIfNoCase Referer "^https://(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
    ErrorDocument 403 /hotlink-403.png
</Directory>

Explicación de la configuración:

Guarde los cambios, salga del editor y recargue la configuración de Apache:

systemctl reload httpd

O bien, en sistemas con SysVinit como ALDOS:

service httpd reload

Para probar la configuración, cree documentos HTML tanto en el servidor local como en uno remoto que enlacen a imágenes en /var/www/imagenes. Sólo las solicitudes desde los referentes autorizados deberían cargar las imágenes; las demás mostrarán la imagen de error 403.

Método 2: Configuración mediante archivo .htaccess.

Este método delega la configuración a un archivo .htaccess dentro del directorio de imágenes, ofreciendo más flexibilidad para usuarios sin acceso a la configuración global de Apache.

Primero, modifique el archivo de configuración global para permitir anulaciones (overrides) en el directorio de imágenes. Edite o cree /etc/httpd/conf.d/imagenes.conf:

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

Añada el siguiente contenido:

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

Guarde, salga y recargue Apache como se mostró anteriormente.

Luego, cree el archivo .htaccess dentro del directorio de imágenes:

vi /var/www/imagenes/.htaccess

Añada el mismo conjunto de reglas, ahora dentro del archivo .htaccess:

# 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 "^https://m50.alcancelibre.org.mx" local_referal=1
SetEnvIfNoCase Referer "^https://(www.)?midominio.org" local_referal=1
# Se permite utilizar las imágenes a otro servidor amigo
SetEnvIfNoCase Referer "^https://(www.)?sitio-amigo.com" local_referal=1
ErrorDocument 403 /hotlink-403.png

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

Nota sobre AllowOverride all: Esta directiva debe usarse con precaución en entornos de producción, ya que permite a los archivos .htaccess anular muchas configuraciones del servidor. En entornos compartidos, puede ser la única opción viable.

Tras crear el archivo .htaccess, las reglas surtirán efecto inmediatamente. Realice las mismas pruebas descritas en el método anterior para verificar que el enlace remoto no autorizado sea bloqueado.

Consideraciones finales y pruebas.

Esta configuración proporciona un control granular sobre quién puede utilizar las imágenes de su servidor, defendiendo eficazmente su ancho de banda y promoviendo un uso ético del contenido web.