Kann ich den Datentransfer zeitlich pro IP-Adresse begrenzen?

Kann ich den Datentransfer zeitlich pro IP-Adresse begrenzen?

Ich hoste auf meiner Website einige relativ große Dateien und mir ist aufgefallen, dass es für jemanden trivial wäre, ein Skript zu erstellen, das diese Dateien immer wieder herunterlädt, meinen Datentransfer durchzieht und mir Geld kostet. Ihre typische Heimverbindung wäre schnell genug, um mir Probleme zu bereiten, wenn sie rund um die Uhr heruntergeladen würde, ganz zu schweigen von einer superschnellen Glasfaserverbindung oder einem richtigen Remote-Server.

Ich frage mich also, ob es für Apache oder sogar Ubuntu etwas gibt, das systemweit Beschränkungen pro IP-Adresse auferlegt? Zum Beispiel 10 GB Übertragung pro 24 Stunden. Wenn das Limit erreicht ist, erhält der Client eine einfache Seite mit der Meldung „Verboten – Kontingent erreicht“ oder die Verbindung wird ihm direkt verweigert. Ich habe mich umgesehen und nichts anderes als verschiedene Drosselungslösungen gefunden, die vielleicht helfen, das Problem aber nicht lösen würden.

Antwort1

Das iptables-Quotenmodul ist hier dokumentiert: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.

Ich glaube allerdings nicht, dass Ihnen das weiterhilft, da Sie bei dieser Methode wahrscheinlich individuelle Kontingentregeln für jede mögliche Quell-IP-Adresse erstellen müssten, die auf Ihren Server gelangen könnte (was so gut wie unmöglich ist). Sie müssten außerdem eine Art BASH-Skriptautomatisierung integrieren, um diese Kontingente alle 24 Stunden (oder in einem beliebigen anderen Zeitraum) zurückzusetzen, wie hier erwähnt:IPtables-Verkehrskontingent – ​​rauf und runter

Vor vielen Jahren habe ich mit einem Apache-Modul experimentiert, das dies auf Anwendungsebene pro IP-Adresse tun konnte. Dies könnte ein besserer Ansatz sein (ich bin nicht sicher, welche modernen Module für Apache/Nginx verfügbar sind, die dies tun würden – weitere Forschung erforderlich).

Die einzige andere Alternative, die meines Wissens besser funktionieren würde (meiner Meinung nach), ist die Verwendung des Hashlimit-Moduls von iptables in Verbindung mit tc (Traffic Shaping/Policing):http://ipset.netfilter.org/iptables-extensions.man.html#lbAY- Mit diesem Ansatz wird der Datenverkehr nur verlangsamt, aber nie blockiert. Der Grund, warum dies praktikabler sein könnte, ist, dass das Hashlimit-Modul von iptables die On-the-Fly-Verfolgung von Clients handhaben kann, indem es eindeutige IP-Adressen und/oder Quell-/Zielport-„Hash-Schlüssel“ aufzeichnet, wenn diese auf Ihren Server gelangen. Ich habe hier eine Antwort darauf gepostet, wie man dies zu einer anderen verwandten Frage erreichen kann:https://serverfault.com/a/754116/30506- aber kurz gesagt: Sie erstellen eine Traffic-Shaping-Klasse (Bandbreitenbegrenzer, der beispielsweise auf 5 Mbit/s festgelegt ist) und wenn die Paketrate pro Client-Sitzung einen bestimmten Schwellenwert erreicht, leiten Sie deren Pakete in diese Klasse um und beruhigen so deren Verkehr. In Ihrem Fall müsste die Beruhigung jedoch so eingestellt werden, dass sie über Stunden und nicht über Sekunden funktioniert.

Antwort2

Hallo und willkommen bei Server Fault!

Die Bandbreitenbegrenzung kann mithilfe iptablesdes limitModuls erfolgen.

Eine sehr gute Einführung hierzu finden SieHier

Ein kleines Beispiel aus diesem Link zum Einrichten der Bandbreitendrosselung:

$ 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

Ein großes Lob an die Autoren Will Sewell und Jim Fisher des erwähnten Artikels!

verwandte Informationen