Configuración de Nginx 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 Nginx 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 de Nginx». A continuación, se presenta el método para implementar la protección mediante la directiva valid_referers de Nginx.

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'" \
    /usr/share/nginx/html/hotlink-403.png

Configuración de Nginx para bloquear el enlace remoto.

Nginx utiliza la directiva valid_referers para definir una lista de referentes permitidos. Cuando una solicitud provenga de un anfitrión distinto de estos referentes, se puede denegar el acceso y mostrar una imagen de error personalizada.

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/nginx/default.d/imagenes.conf:

vi /etc/nginx/default.d/imagenes.conf

Añada el siguiente contenido, que define una lista de referentes permitidos y configura la respuesta para solicitudes sin autorización:

location ~* /imagenes/\.(jpg|jpeg|png|gif|webp)$ {
    # Directorio donde se encuentran las imágenes protegidas
    root /var/www;

    # Lista de referentes válidos:
    # - 'none': permite solicitudes sin encabezado Referer (acceso directo)
    # - 'blocked': permite solicitudes con Referer bloqueado o vacío
    # - 'server_names': permite el propio nombre del servidor (definido en server_name)
    # - Dominios específicos permitidos (usar ~. para coincidencia con expresiones regulares)
    valid_referers none blocked server_names
                   ~\.localhost
                   ~\.127\.0\.0\.1
                   ~\.192\.168\.70\.50
                   ~\.m50\.alcancelibre\.org\.mx
                   ~\.midominio\.org
                   ~\.sitio-amigo\.org;

    # Si el referente no es válido, denegar el acceso
    if ($invalid_referer) {
        return 403;
    }
}

# Configurar una página de error personalizada para el código 403
error_page 403 /hotlink-403.png;
location = /hotlink-403.png {
    root /usr/share/nginx/html;
    internal;
}

Explicación de la configuración:

Guarde los cambios, salga del editor y pruebe la sintaxis de la configuración de Nginx:

nginx -t

Si la prueba es exitosa, recargue la configuración de Nginx:

systemctl reload nginx

O bien, en sistemas con SysVinit como ALDOS:

service nginx reload

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 con el potente y eficiente servidor Nginx.