NOTA: Bloquear totalmente las descargas no lo vas a lograr con esta entrada, cuando pienses en bloquearlas acuerdate de los grandes, Netflix, YouTube, etc, ellos no han podido. Eso si, cuando termines de aplicar esto, las descargas serán tan limitadas y complicadas que los usuarios no desearán ni intentarlo.
En la siguiente entrada vamos a ver como podemos aplicar unas medidas para limitar las descargas que realizan los usuarios de nuestro servidor Emby. El primer ejemplo es original de la Comunidad de Emby el cual nos permite limitar las descargas normales de los usuarios, es decir la que hacen al dar en Descargar en cada película.
Pero el problema viene cuando utilizan gestores de descargas como Internet Download Manager, y para eso les traigo un segundo ejemplo, creado por mi, donde voy a mostrarles como llevar la descarga desde estos gestores al límite quitándole prácticamente las ganas de descargar a los usuarios.
Para realizar el procedimiento, asumo que tienes instalado y funcionando un servidor con Emby, es irrelevante el sistema operativo, de echo con este servidor no vamos a hacer ninguna configuración, simplemente probar las reglas que vamos a crear.
Entonces vamos a trabajar con un segundo servidor, puede ser una VM, un CT o una PC virtual, el sistema operativo también es irrelevante mientras podamos instalar Bind9 como servidor DNS y Nginx el cual usaremos como proxy inverso.
En este caso usaremos Ubuntu server 20.04 (Se asume además que ya está instalado y funcionando)
En esta entrada no trataremos el servidor DNS Bind9, ya tenemos una entrada en el Blog sobre esto, pero es necesario tener un servidor DNS configurado en nuestra red y que apunte de www.networld.cu a la dirección IP de este propio servidor.
Comenzamos entonces a instalar Nginx y hacer su configuración.
//VITAL Y NECESARIO ACTUALIZAR NUESTRO SISTEMA
# sudo apt update
# sudo apt upgrade
//INSTALAR Y CONFIGURAR NUESTRO SERVIDOR DNS BIND, VER BLOG O VIDEO
//INSTALAR SERVIDOR WEB NGINX
# sudo apt install nginx
# sudo systemctl status nginx
//Comprobar www.networld.cu (Welcome to Nginx)
//Crear archivo vhost para el emby (emby.conf)
# cd /etc/nginx/conf.d
# sudo nano emby.conf
//Agregamos lo siguiente:
# Add this outside of you server block
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name www.networld.cu;
location / {
# Proxy headers
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.10.20.3:8096;
#Next three lines allow websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection \"upgrade\";
}
}
//Configuración básica de proxy inverso para Emby.
//Cambiar server_name por su dominio.
//Cambiar proxy_pass por la dirección IP y puerto de su servidor Emby.
//Reiniciar Ngnix y comprobar que accedemos al Emby. (www.networld.cu)
# sudo systemctl restart nginx
//Hasta el momento ya tenemos Nginx como proxy inverso sin ninguna restricción.
//Vamos a comenzar a hacer ajustes en las descargas.
//Controlar las descargas normales de Emby (Las de su botón Descargar)
# cd /etc/nginx/conf.d
# sudo nano emby.conf
//Agregar justo debajo de: server_name www.networld.cu; lo siguiente:
location ~ /Items/(.*)/Download$ {
proxy_pass http://10.10.20.3:8096;
proxy_hide_header X-Powered-By;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
#Next three lines allow websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection \"upgrade\";
limit_rate 8192k; # Speed limit (here is on kb/s)
limit_conn addr 1; # Number of simultaneous downloads per IP
limit_conn_status 460; # custom error page
proxy_buffering on;
}
# Error page
error_page 460 http://web.networld.cu/error-de-descarga/;
//Volvemos a ajustar los valores de proxy_pass http://10.10.20.3:8096; con la IP y puerto de nuestro Emby.
//La línea limit_rate 8192k; indica la velocidad a la cual van a poder descargar expresada en kb/s.
//La línea limit_conn addr 1; indica la cantidad de hilos o descargas simultaneas permitidas.
//La línea error_page 460 la modificamos con una Web donde le notifiquemos al usuario sobre error en su descarga.
//Reiniciamos Nginx
# sudo systemctl restart nginx
//Ahora los usuarios pueden realizar una sola descarga a la vez a una velocidad de 8Mb/s.
//Pero si los usuarios utilizan un gestor de descarga, todo lo anterior no vale de nada, veamos que podemos hacer.
//Vamos a aplicar el mismo control pero a gestores de descarga como IDM.
//Editamos nuevamente nuestro archivo de vhost.
# cd /etc/nginx/conf.d
# sudo nano emby.conf
//Agregamos justo debajo de error_page 460 http://xxxx
location ~ /videos/(.*)$ {
proxy_pass http://10.10.20.3:8096;
proxy_hide_header X-Powered-By;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
#Next three lines allow websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection \"upgrade\";
limit_rate 4096k; # Speed limit (here is on kb/s)
limit_conn addr 1; # Number of simultaneous downloads per IP
limit_conn_status 460; # custom error page
proxy_buffering on;
}
//Esta vez volvemos a editar nuevamente los mismos parámetros:
proxy_pass http://10.10.20.3:8096;
limit_rate 4096k;
limit_conn addr 1;
//Con esta configuración debemos jugar y ajustarla a como mejor nos funcione. En esta ultima regla el problema radica en que no debemos bajar mucho la velocidad porque puede afectar la reproducción normal en el Emby, si dejamos limit_conn addr en 1, estamos diciendo que desde la IP del cliente solo puede haber un hilo de conexión hacia el Emby, entonces si esta reproduciendo algo, no puede descargar o es casi imposible, de poder descargar el IDM estaría trabajando con un solo hilo de descarga y por experiencia comienza a dar problemas y descargar pedazos de la película, siendo prácticamente inviable la descarga del usuario.
//Reiniciamos Nginx para cargar los cambios.
# sudo systemctl restart nginx