Nginx

Cómo bloquear hotlinking con Nginx

Cómo bloquear hotlinking con Nginx
Nginx es un servidor web liviano capaz de manejar una enorme cantidad de solicitudes en un momento dado sin que el servidor esté ocupado. Contiene características sofisticadas como procesamiento asíncrono, soporte para ipv6, cargador de caché, soporte http / 2, enlaces directos de bloques, grupos de subprocesos, SPDY y SSL, y muchos más. Entre ellos, una de las características más importantes para cualquier sitio web en general es el bloqueo de hotlinking. Hotlinking es una práctica maliciosa que a menudo realizan ciertos pequeños webmasters cuando no pueden pagar el costo del ancho de banda y, por lo tanto, terminan tomándolo de otra parte. Esto impide que los webmasters legítimos utilicen el ancho de banda por el que pagaron. Además de eso, el recurso vinculado puede no estar disponible para los usuarios que visitan el sitio web original, cuando el ancho de banda asignado al webmaster original se agota y el propietario del sitio no paga por el ancho de banda excesivamente consumido. En general, para preservar la integridad, se debe detener la disponibilidad del enlace directo del sitio web, y esta guía enseña cómo hacerlo con facilidad.

Preparación

En el segmento de preparación, se toman las instrucciones generales para ambos métodos posteriores. Obviamente, es importante tener una consola para acceder al servidor a través de SSH y un editor de texto adecuado como nano para abrir el archivo de configuración de Nginx. Una vez adquiridos ambos, utilice los siguientes comandos para abrir, guardar y aplicar los cambios. Los siguientes pasos asumen que el usuario ya accedió al servidor a través de SSH.

nano / etc / nginx / sites-available / default

Método 1: Método general

El método general es muy fácil de implementar y comprender, ya que contiene solo un bloque de ubicación. Además, bloquea las solicitudes a ciertos formatos de archivo solo en lugar de bloquear todas las solicitudes de referencias no válidas al servidor.

  1. Copie el siguiente fragmento de código.
  2. Abra el archivo predeterminado de nginx como se ve en la fase de "Preparación".
  3. Pegue el fragmento de código copiado debajo del primer bloque de ubicación que se encuentra en el archivo predeterminado. En nginx, la expresión regular que no distingue entre mayúsculas y minúsculas (~ *) siempre tiene prioridad antes de la barra inclinada (/) y, por lo tanto, el siguiente fragmento de código se ejecuta antes del bloque de ubicación de la barra inclinada.
  4. Guarde y cierre el archivo predeterminado, y luego siga 3, 4 pasos en la fase de "Preparación" para que los cambios surtan efecto.

En el siguiente ejemplo, bloquea las solicitudes a archivos css, gif, ico, jpeg, js, png, woff, woff2, ttf, ttc, otf y eot. Hay 10 declaraciones condicionales en el bloque de ubicación. La primera declaración condicional permite que los recursos se vean directamente a través del navegador web, 2Dakota del Norte y 3rd Los bloques permiten que los recursos se vean a través del sitio original (subdominios desnudos y www), el resto de los bloques excepto la búsqueda?q y el último bloque permiten que los rastreadores de los motores de búsqueda accedan e indexen los recursos, lo cual es muy importante para indexar las imágenes tanto en las imágenes de Google como en las imágenes de Bing. La búsqueda?q permite que el servicio de caché de Google acceda y guarde los recursos junto con la página y, por lo tanto, se puede acceder a la página directamente a través del resultado de búsqueda de Google cuando el sitio está fuera de línea.

ubicación ~ * \.(css | gif | ico | jpeg | jpg | js | png | woff | woff2 | ttf | ttc | otf | eot) $
si ($ http_referer !~ "^ $")
establecer $ regla_0 1 $ regla_0;

si ($ http_referer !~ "^ http: // nucuta.com /.PS
establecer $ regla_0 2 $ regla_0;

si ($ http_referer !~ "^ http: // nucuta.com $ ")
establecer $ regla_0 3 $ regla_0;

si ($ http_referer !~ * "google.")
establecer $ regla_0 4 $ regla_0;

si ($ http_referer !~ * "buscar?q = caché ")
establecer $ regla_0 5 $ regla_0;

si ($ http_referer !~ * "msn.")
establecer $ regla_0 6 $ regla_0;

si ($ http_referer !~ * "yahoo.")
establecer $ regla_0 7 $ regla_0;

si ($ http_user_agent !~ * "googlebot")
establecer $ regla_0 8 $ regla_0;

si ($ http_user_agent !~ * "msnbot")
establecer $ regla_0 9 $ regla_0;

si ($ http_user_agent !~ * "sorber")
establecer $ regla_0 10 $ regla_0;

if ($ rule_0 = "10987654321")
return 403;
rotura;

Método 2: Método Valid_Referers

Referencias válidas es el método más conveniente y ampliamente reconocido para bloquear referencias inválidas con facilidad. Contiene solo dos líneas en comparación con el método anterior y es muy flexible. Sin embargo, es un poco difícil de digerir ya que involucra expresiones regulares y un mecanismo diferente para bloquear solicitudes de referentes no válidos.

  1. Copie el siguiente fragmento de código en el medio y al principio del bloque de ubicación principal.
  2. Reemplace la lista de nombres de dominio con los nombres de dominio permitidos, por ejemplo, google, bing o sus propios dominios, etc.
  3. Guarde y cierre el archivo predeterminado y luego siga 3 o 4 pasos en la fase de "Preparación" para que los cambios surtan efecto.

valid_referers ninguno bloqueado server_names

*.linux.com linux.* www.linux.com / about /
~ \.linux \.;
 
if ($ invalid_referer)
return 403;

Tiene principalmente dos bloques de código, valid_referers y la expresión condicional if con variable invalid_referer. De forma predeterminada, este bloque de código se usa en el medio y al principio del bloque de ubicación antes de la ejecución de cualquier otro código, pero también se puede usar en cualquier otro lugar, como entre un bloque de código de ubicación con expresiones regulares para detectar formatos de archivo específicos para que el bloqueo sea relevante para los formatos de archivo antes mencionados, como en el método 1. Como se explicó anteriormente, el método contiene solo dos bloques de código, el primer bloque de código contiene 3 palabras clave, el primero es "ninguno" cuando falta el campo de referencia en la solicitud HTTP, el segundo está "bloqueado" cuando se elimina el campo de referencia. por cualquier intermediario, como un proxy, firewall, etc., la tercera palabra clave es para especificar los nombres de dominio válidos.

Cuando el nombre de dominio comienza con el símbolo "~", se considera una expresión regular y, por lo tanto, se pueden usar patrones muy complejos, pero puede ser difícil de entender si las expresiones regulares no se conocen bien. Si no se cumple ninguna de las condiciones en la declaración valid_referers, la variable invalid_referer se establece en una cadena vacía; de lo contrario, se establece en 1, lo que significa si la próxima solicitud no contiene ningún campo de referencia o si nginx identificó que el campo de referencia se elimina por un firewall o un proxy, o si el campo de referencia se establece en los dominios especificados (lista de nombres de dominio válida), la variable de referencia no válida se establece en una cadena vacía y, por lo tanto, su condición if no se ejecuta. Sin embargo, si la solicitud proviene de un dominio que no está especificado en la expresión valid_referers como un dominio válido, entonces está bloqueado.

CONCLUSIÓN

Asegúrese de considerar este contenido y evitar enlaces directos en sus sitios alojados en Nginx.

Cómo descargar y jugar Sid Meier's Civilization VI en Linux
Introducción al juego Civilization 6 es una versión moderna del concepto clásico introducido en la serie de juegos Age of Empires. La idea era bastant...
Cómo instalar y jugar a Doom en Linux
Introducción a Doom La serie Doom se originó en los años 90 después del lanzamiento del Doom original. Fue un éxito instantáneo y, desde ese momento e...
Vulkan para usuarios de Linux
Con cada nueva generación de tarjetas gráficas, vemos que los desarrolladores de juegos superan los límites de la fidelidad gráfica y se acercan un pa...