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.
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.
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.
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
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:
SetEnvIfNoCase Referer: Define condiciones que establecen una variable de entorno (local_referal=1) si el campo Referer (la página de origen) de la solicitud HTTP coincide con los patrones especificados. Las líneas cubren:
midominio.org).sitio-amigo.org).Order Deny,Allow: Especifica el orden de evaluación de las reglas (primero denegar, luego permitir).Deny from all: Deniega el acceso por defecto a todos.Allow from env=local_referal: Permite el acceso sólo si se estableció la variable local_referal (es decir, si la solicitud vino de un referente autorizado).ErrorDocument 403: Especifica la imagen personalizada a mostrar cuando se deniega el acceso (Error 403).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.
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.
SetEnvIfNoCase Referer en los ejemplos deben adaptarse a los dominios y direcciones IP reales de su servidor y sus aliados.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.