
Estoy alojando algunos archivos relativamente grandes en mi sitio web y se me ocurrió que sería trivial para alguien crear un script que los siga descargando una y otra vez, masticando mi transferencia de datos y costándome dinero. Su conexión doméstica típica sería lo suficientemente rápida como para causarme problemas si la dejara descargando las 24 horas del día, los 7 días de la semana, sin importar una conexión de fibra súper rápida o un servidor remoto adecuado.
Entonces, me pregunto si hay algo disponible para Apache o incluso para todo el sistema Ubuntu que imponga restricciones por dirección IP. Por ejemplo, transferencia de 10 GB cada 24 horas. Cuando se alcanza el límite, al cliente se le proporcionará una página ligera "prohibido - cuota alcanzada" o se le negará directamente la conexión. Miré a mi alrededor y no encontré nada más que varias soluciones de aceleración, que pueden ayudar pero no resolverían el problema.
Respuesta1
Aquí está documentado el módulo de cuota de iptables:http://ipset.netfilter.org/iptables-extensions.man.html#lbBT
quota
Implements network quotas by decrementing a byte counter with each
packet. The condition matches until the byte counter reaches zero.
Behavior is reversed with negation (i.e. the condition does not match
until the byte counter reaches zero).
[!] --quota bytes
The quota in bytes.
Sin embargo, no creo que esto le ayude ya que, al utilizar este método, probablemente tendría que crear reglas de cuota individuales para cada posible dirección IP de origen que pueda ingresar a su servidor (lo cual es prácticamente imposible). También necesitaría integrar algún tipo de automatización de script BASH para restablecer estas cuotas cada 24 horas (o cualquier período), como se menciona aquí:Cuota de tráfico de IPtables: arriba y abajo
Hace muchos años, jugué con un módulo de Apache que podía hacer esto a nivel de aplicación por dirección IP. Este podría ser un mejor enfoque (no estoy seguro de qué módulos modernos hay disponibles para Apache/Nginx que harían esto; se requiere más investigación).
La única otra alternativa que sé que funcionaría mejor (en mi opinión) es usar el módulo hashlimit de iptables junto con tc (configuración/vigilancia del tráfico):http://ipset.netfilter.org/iptables-extensions.man.html#lbAY- Con este enfoque, el tráfico sólo se ralentiza pero nunca se bloquea. La razón por la que esto podría ser más factible es porque el módulo hashlimit de iptables puede manejar el seguimiento sobre la marcha de los clientes registrando distintas direcciones IP y/o "claves hash" del puerto de origen/destino a medida que ingresan a su servidor. He publicado una respuesta sobre cómo lograr esto en otra pregunta relacionada, aquí:https://serverfault.com/a/754116/30506- pero en resumen, crea una clase de configuración de tráfico (limitador de ancho de banda fijado en, digamos, 5 Mb/seg) y luego, cuando la velocidad de paquetes de las sesiones por cliente alcanza un umbral particular, comienza a canalizar sus paquetes hacia esta clase, pacificando así su tráfico. . Sin embargo, en su caso, sería necesario ajustar la pacificación para que funcione durante horas en lugar de segundos.
Respuesta2
¡Hola y bienvenido a Server Fault!
La limitación del ancho de banda se puede realizar utilizando iptables
y el limit
módulo.
Se puede encontrar una muy buena introducción a esto.aquí
Un pequeño ejemplo de este enlace para configurar la aceleración del ancho de banda:
$ sudo iptables --flush # start again
$ sudo iptables --new-chain RATE-LIMIT
$ sudo iptables --append INPUT --match conntrack --ctstate NEW --jump RATE-LIMIT
$ sudo iptables --append RATE-LIMIT --match limit --limit 50/sec --limit-burst 20 --jump ACCEPT
$ sudo iptables --append RATE-LIMIT --jump DROP
¡Felicitaciones a los autores Will Sewell y Jim Fisher del artículo mencionado!